1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-15 02:29:10 +00:00

Compare commits

...

369 Commits

Author SHA1 Message Date
8c6bca29ad (svn r12338) -Release: 0.6.0-beta5 2008-03-04 20:29:12 +00:00
belugas
266dd80f6c (svn r12337) -Change: update some documentation. 2008-03-04 17:07:33 +00:00
9674ff71de (svn r12336) -Fix [FS#1733]: Don't pause/unpause the game when showing load/save windows when the game is paused due to missing GRFs. 2008-03-04 12:15:33 +00:00
3907ac518b (svn r12335) -Codechange: Don't stuff signed values into a unsigned variable when the variable can just be unsigned... 2008-03-04 12:14:34 +00:00
e1cc80b01c (svn r12334) -Codechange: Don't change road owner without DC_EXEC. Didn't affect anything in this case but is bad form. 2008-03-04 12:13:15 +00:00
frosch
6e3ae628fc (svn r12333) -Fix: Switch grfstatus from 'activated' back to 'will-be-active' between reservation- and activation-stage.
This fixes action7/9 conditions 0x06 to 0x0A to return the same in those two stages.
2008-03-04 10:41:16 +00:00
6bb37edfb6 (svn r12332) -Fix (r12331): Invalidate cached data and update image after setting flag. 2008-03-03 21:42:37 +00:00
glx
b64f637c72 (svn r12331) -Feature: [NewGRF] vehicle variable FE bit 8 2008-03-03 20:56:30 +00:00
glx
cf0e6d4cb4 (svn r12330) -Feature: [NewGRF] vehicle variable FE bit 5 and 6 2008-03-03 20:41:47 +00:00
5049fbb081 (svn r12329) -Fix [FS#1819]: Disallow building level crossings over one-way roads as this allowed competitors to remove the one-way state. 2008-03-03 19:15:53 +00:00
belugas
56ed79e448 (svn r12328) -Fix(r3447): Wrong Y pillar specified for girder with arch bridge. Spotted and fixed by a lot of people ;) 2008-03-03 18:20:42 +00:00
smatz
620695587d (svn r12324) -Fix (r6789): vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated 2008-03-02 00:25:54 +00:00
smatz
8dacca9a71 (svn r12323) -Fix [FS#1821](r6789): vehicle sorting by name was broken, it was comparing two the same strings (when caching was not used) 2008-03-01 23:53:58 +00:00
glx
c4e023bd6e (svn r12322) -Fix (r9874): endian issue when saving/loading group owner 2008-02-29 22:55:57 +00:00
glx
9973b7fb64 (svn r12321) -Change: update readme about where openttd looks for files (based on dih work) 2008-02-29 22:01:47 +00:00
f87b1df566 (svn r12320) -Fix [FS#1817]: Wrong transparency options could be saved after toggling all. 2008-02-29 15:20:02 +00:00
3bba6e4abd (svn r12319) -Cleanup: Comment fixes (Roujin) 2008-02-29 13:57:50 +00:00
9ccce57438 (svn r12317) -Fix [FS#1815]: Map string IDs that are embedded from other strings. 2008-02-29 08:48:01 +00:00
6bdc8e5fae (svn r12316) -Codechange: Support loading full range of 0xD0xx NewGRF strings which
includes 0xD000 to 0xD3FF (yes, 0xD0xx makes a lot of sense, really...) 
and handle 0xD400 to 0xD7FF strings which map to 0xD000 to 0xD3FF 
(obviously).
2008-02-29 08:40:49 +00:00
034649e7f5 (svn r12314) -Fix (r4896): Include prop 25 data for all train parts, not just those that carry cargo. 2008-02-28 21:44:13 +00:00
frosch
35fd0dfd4e (svn r12313) -Fix: YAPF and NTP did not apply penalty for uphill tracks on steep slopes. 2008-02-28 17:34:34 +00:00
glx
86a4d377b1 (svn r12304) -Codechange: use IsValidTile() where it should be used 2008-02-28 00:17:49 +00:00
glx
35195bb2bc (svn r12303) -Codechange: move IsValidTile() in a more suitable place and make it static inline 2008-02-28 00:10:08 +00:00
glx
459fd42e1d (svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup 2008-02-27 21:46:57 +00:00
6aea2454c8 (svn r12295) -Codechange: Make plane speed option available to NewGRFs 2008-02-27 21:33:52 +00:00
926f5d548d (svn r12293) -Feature: Ability to change aircraft speed factor, from so
called 'realistic' (matching other vehicles) (1/1) to original TTD 
speed (1/4). Note this option defaults to original TTD speed.
2008-02-27 21:07:12 +00:00
belugas
8f47b642b6 (svn r12290) -Fix[FS#1807]: Do not draw trees nor lamps between tram tracks.(Roujin) 2008-02-27 15:35:24 +00:00
belugas
46a3508f50 (svn r12289) -Fix(r12288)[FS#1808]: Wrong bridge head table associated 2008-02-27 14:55:16 +00:00
belugas
202f1046f6 (svn r12288) -Fix(r12287): forgot to include two sprite renames out of consistency.
And obviously forgot to compile before committing, as the array rename would have been evident.
2008-02-27 04:26:25 +00:00
belugas
7c14dedeb6 (svn r12287) -Codechange: Give meaning to two other bridges sprites arrays.
A bit of re-indenting too
2008-02-27 04:00:25 +00:00
glx
92254bda01 (svn r12282) -Fix (r12123): generate.vbs should not skip files in NO_THREADS section of source.list 2008-02-26 22:32:27 +00:00
belugas
7e74fca7d8 (svn r12272) -Codechange: A bit of code style fixes (tabs instead of spaces), one space too many before macro definition and rename marco MB (MakeBridge) for MBR(MakeBRidge) 2008-02-26 18:24:46 +00:00
glx
68aaeec3a8 (svn r12269) -Fix: [Win32] don't create save dir on install 2008-02-26 15:31:48 +00:00
belugas
0a92b3366c (svn r12263) -Codechange: Give meaning to the concrete bridge sprites arrays.
Add macro MR (PALETTE_TO_STRUCT_RED) for easier viewing.
Still more to come.
2008-02-26 03:35:44 +00:00
belugas
3764aa5134 (svn r12262) -Codechange: Give meaning to the wooden bridge sprites arrays.
Add macro MN for easier viewing.
More to come.
2008-02-26 00:06:21 +00:00
glx
62d9bf8d0f (svn r12261) -Fix [FS#1805]: autoreplace did not update vehicle index for timetable window 2008-02-25 23:12:55 +00:00
glx
4a4be744b6 (svn r12258) -Fix: GetProductionAroundTiles() may fail if only the second production slot exists 2008-02-25 16:30:12 +00:00
KUDr
e41df385d7 (svn r12252) -Fix [FS#1801]: Broken FollowTrack_t related functions (thanks michi_cc).
-Fixed by removing FollowTrack_t structure and all related functions. Their purpose was to allow to call track followers from C code. They were:
  1. never used
  2. obsoleted by switching to C++
2008-02-25 15:09:22 +00:00
frosch
93b3a66678 (svn r12247) -Fix (r9315): Town variables 0x9E to 0xAD (company ratings) returned wrong values. 2008-02-25 13:48:23 +00:00
frosch
c2f3e0e326 (svn r12246) -Fix (r10460): Proper usage of Clamp(). 2008-02-25 13:38:11 +00:00
smatz
27284db36f (svn r12244) -Fix (r12150): typo resulting in no players are given the engine preview offer 2008-02-25 02:09:04 +00:00
glx
f352512c8d (svn r12239) -Fix [FS#1800] (r9729): inverted comments for SetRailType() and GetTrackBits() (michi_cc) 2008-02-24 22:20:31 +00:00
glx
ed1e402960 (svn r12238) -Change [FS#1800]: set svn:executable property for *.vbs (michi_cc) 2008-02-24 22:16:36 +00:00
glx
747f57bcec (svn r12234) -Fix [FS#1798]: Mac OSX bundle display name should be 'OpenTTD' (oVRoM) 2008-02-24 21:47:02 +00:00
bjarni
8290a798fc (svn r12231) -Cleanup (r12230): [autoreplace] moved Vehicle::NeedsAutorenewing() and added comments 2008-02-23 22:23:06 +00:00
bjarni
089969e1ca (svn r12230) -Codechange: [autoreplace] made a function to detect if a vehicle needs autorenewing
This will remove duplicated code and ensure that the check is consistent
2008-02-23 22:01:55 +00:00
miham
e821b3a9b8 (svn r12218) -Update: WebTranslator2 update to 2008-02-23 12:39:10
brazilian_portuguese - 13 fixed, 51 changed by fukumori (64)
bulgarian  - 12 fixed by thetitan (12)
catalan    - 13 fixed by arnaullv (13)
czech      - 13 fixed, 8 changed by Hadez (21)
dutch      - 13 fixed by habell (13)
estonian   - 13 fixed, 3 changed by kristjans (16)
french     - 13 fixed, 20 changed by glx (33)
hungarian  - 13 fixed by miham (13)
italian    - 13 fixed, 8 changed by lorenzodv (21)
japanese   - 13 fixed by ickoonite (13)
korean     - 14 fixed by leejaeuk5 (14)
portuguese - 2 fixed by nars (2)
slovak     - 13 fixed by lengyel (13)
slovenian  - 1 fixed by Necrolyte (1)
spanish    - 13 fixed by eusebio (13)
swedish    - 1 fixed by ChrillDeVille (1)
ukrainian  - 13 fixed, 1 deleted, 124 changed by mad (138)
2008-02-23 11:42:41 +00:00
dda6cab17a (svn r12209) -Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, and show running cost of wagons if they have it. 2008-02-21 19:09:10 +00:00
belugas
c0544563a6 (svn r12208) -Codechange: Alignment of params makes the code easier to read. 2008-02-21 16:05:33 +00:00
577b0cc260 (svn r12207) -Change: rail running costs are engine class, not rail type 2008-02-21 14:30:36 +00:00
belugas
1b73417e5f (svn r12206) -Fix: A comma is not a rare resource. Do not hesitate to use it when needed. 2008-02-20 21:08:27 +00:00
79b6b9cb66 (svn r12205) -Codechange: rename RailVehicleInfo::running_cost_base to running_cost, inline with other vehicle types (It is the factor, not the base) 2008-02-20 20:56:54 +00:00
smatz
db9d5a909f (svn r12204) -Fix (r12192): using UINT16_MAX broke compilation on many targets 2008-02-20 19:42:06 +00:00
frosch
1e74834441 (svn r12203) -Fix (r12199): Make trains pay attention to signals again. 2008-02-20 19:37:46 +00:00
e90cf8509a (svn r12202) -Fix: When loading a savegame fails, don't start creating a new game, just go straight back to the intro screen. 2008-02-20 19:37:02 +00:00
smatz
a47b4631ea (svn r12201) -Fix (r12060): compilation warnings - uninitialized variable when compiling with assert disabled 2008-02-20 19:34:53 +00:00
smatz
767e1cc37e (svn r12200) -Fix: force AI to build rail or road instead of bridges if possible, so it doesn't build bridges everywhere 2008-02-20 17:56:36 +00:00
frosch
b7993793c8 (svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus(). 2008-02-20 17:49:50 +00:00
9e65157548 (svn r12198) -Fix [FS#1789]: "Transparent buildings" now only toggles buildings, so show tick when buildings are transparent. 2008-02-20 17:12:08 +00:00
smatz
a190606f2e (svn r12197) -Fix [FS#1788](r12134): show correct last year profit when the train had negative income
-Codechange: use GetDisplayProfitThisYear() to convert vehicle profit to readable form
2008-02-20 17:06:58 +00:00
smatz
e95a85315c (svn r12195) -Fix [FS#1787](r12100): there can be oil rigs at map borders, do not set water class for them 2008-02-20 16:24:56 +00:00
smatz
73a6525129 (svn r12194) -Codechange: apply coding style on enum TrainSubtype 2008-02-20 15:18:35 +00:00
frosch
f5929d413b (svn r12193) -Codechange: Rename a magic variable, give it a decent type, and remove a 'goto'. 2008-02-20 15:13:42 +00:00
smatz
ca46154068 (svn r12192) -Fix: clamp various town variables to 16bit prior to returning the value 2008-02-20 14:30:53 +00:00
frosch
0e9e94a94b (svn r12191) -Fix: Do not start overtaking if the RV reaches wrong-way one-way-road in the next tiles. 2008-02-20 14:07:45 +00:00
smatz
2b8d1bcb51 (svn r12190) -Fix [FS#1786](r8080): YAPF always shows 0ms PF time in debug for debug level 2 (patch by IguannaB) 2008-02-20 12:31:28 +00:00
smatz
169ac7c91d (svn r12189) -Codechange: mark some functions in train_cmd.cpp inline (called once or very short) 2008-02-20 12:07:22 +00:00
smatz
595d9357c3 (svn r12188) -Codechange [FS#1782]: do not check twice for correct rail owner (patch by Vikthor) 2008-02-20 11:00:17 +00:00
belugas
b4b5c09ff9 (svn r12187) -Add: frosch as dev. Last, but not least 2008-02-19 17:52:30 +00:00
smatz
6e9b952623 (svn r12186) -Fix [FS#1784](r12169): assert when trying to play tile sound at NW border of map (placing buyos, leveling land) 2008-02-19 17:45:30 +00:00
smatz
adf1227290 (svn r12185) -Fix (r12177): wrong operator priority, hopefully harmless (spotted by michi_cc) 2008-02-18 23:37:16 +00:00
smatz
578e833284 (svn r12184) -Fix: take into account possible loan when AI is deciding which bridge to build, so it won't build wooden bridges everytime 2008-02-18 22:50:58 +00:00
smatz
0821df8537 (svn r12183) -Codechange: give a better error message when building road over existing road with vehicle on it, or do not fail at all 2008-02-18 22:12:27 +00:00
belugas
0cdf2b525f (svn r12181) -Change: update some documentation. 2008-02-18 20:59:04 +00:00
a4c14fb442 (svn r12180) -Fix: Test purchase list loading/loaded sprites instead of unconditionally returning a possibly non-existant sprite. 2008-02-18 19:20:37 +00:00
smatz
509b3a3247 (svn r12179) -Codechange: use GetCrossingRailTrack() and GetCrossingRailAxis() to improve code readability 2008-02-18 18:35:36 +00:00
smatz
c7a8080c3a (svn r12178) -Codechange: use the 'side' parameter in TrainController and TrainCheckIfLineEnds to simplify the code 2008-02-18 16:35:38 +00:00
smatz
29125c0e68 (svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges 2008-02-18 16:11:31 +00:00
smatz
a0a225ab02 (svn r12176) -Codechange: one division less when playing sounds (patch by Dominik) 2008-02-18 14:59:30 +00:00
a0fda5b969 (svn r12175) -Fix (r12174): Ensure the patches window is centred properly. 2008-02-18 13:19:57 +00:00
b3f304cde3 (svn r12174) -Codechange: Make the patches window dynamically resize to the largest patch tab, so adding patch options is simply a case of adding to the lists. 2008-02-18 12:36:10 +00:00
06de1215c1 (svn r12173) -Cleanup: Minor codestyle fixes. 2008-02-18 11:47:53 +00:00
db0eb9570c (svn r12172) -Codechange: Allow buttons to resize in NewGRF settings window 2008-02-18 09:16:02 +00:00
smatz
38969fe46d (svn r12171) -Fix [FS#609]: return correct bridge price for AI when DC_QUERY_COST is set (patch by Raimar Falke)
It never happens in current code, but it is better to be ready for it
2008-02-18 01:42:21 +00:00
smatz
d75cccf5d5 (svn r12170) -Fix: do not draw trees along road and street lights under low bridges (spotted by _minime_) 2008-02-17 21:27:44 +00:00
smatz
6bf44158c5 (svn r12169) -Change [FS#1696]: play sounds when there is only small part of tile/vehicle visible too (original idea by Dominik)
It improves the game appearance when playing with very small screen resolution
2008-02-17 20:15:20 +00:00
smatz
505951e9fa (svn r12168) -Fix: behave a bit better when 'R' is pressed during rail station dragging 2008-02-17 18:19:33 +00:00
smatz
8b56e7544e (svn r12167) -Feature(tte): change colour of autorail and autoroad selection when Ctrl is pressed 2008-02-17 17:00:43 +00:00
smatz
291931bf50 (svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC) 2008-02-17 12:21:05 +00:00
glx
16e23a75fe (svn r12165) -Fix [FS#1652, FS#1773]: buffer overflow when drawing scrolling news 2008-02-17 00:47:39 +00:00
7394b9d030 (svn r12164) -Fix (r12137, FS#1775]: Variable scope bug crept in 2008-02-16 23:09:33 +00:00
smatz
13781ec11b (svn r12163) -Fix [FS#1705]: if a train is 'stopping' when entering a depot, do not let it leave again 2008-02-16 22:29:30 +00:00
smatz
ebe03109ad (svn r12162) -Fix [FS#1757]: towns shouldn't build over houses owned by another town 2008-02-16 17:54:29 +00:00
smatz
4b7a812e55 (svn r12161) -Fix: towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts) 2008-02-16 17:10:14 +00:00
smatz
058f39fe18 (svn r12160) -Fix [FS#1744]: remove the arbitrary limit of 64 waypoints per town, so weird things won't happen anymore 2008-02-16 16:40:47 +00:00
belugas
e7173d3ba4 (svn r12159) -Codechange: Enumify some widget magical numbers
-Cleanup: apply a bit of code style.  Mostly re-indenting switch cases
2008-02-16 03:12:57 +00:00
belugas
245fccf22d (svn r12158) -Codechange: merge all the sprite recolouring mapping under a single function
-Fix: Handle the bridge recolouring mapping as the other features.  Although not specified by the specs, it seems to be implicit.
2008-02-16 03:01:05 +00:00
belugas
b8f8d0ca51 (svn r12157) -Codechange: Remove a structure definition and replace it with another one closely matching
-Codechange: Replace two magic numbers with according sprite names
2008-02-16 02:37:31 +00:00
smatz
b4f58ebae4 (svn r12156) -Fix (r11454): Chance16I was now biased towards zero - round to nearest now 2008-02-16 00:46:38 +00:00
glx
044ca2bbf6 (svn r12155) -Fix (r12154): some warnings (always compile before commit) 2008-02-16 00:10:03 +00:00
glx
3e70ee6ed7 (svn r12154) -Codechange: removed a magic number 2008-02-15 23:57:03 +00:00
smatz
a5f99154b7 (svn r12150) -Fix (r12143): compiler warnings - possible use of uninitialised variable 2008-02-15 21:05:46 +00:00
frosch
a40d761d7f (svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID 2008-02-15 18:40:42 +00:00
frosch
fd0f57a794 (svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID 2008-02-15 18:34:26 +00:00
frosch
cedca22c60 (svn r12147) -Codechange: Use macros to build DrawTileSprites-tables in station_land and unmovable_land. 2008-02-15 18:21:04 +00:00
frosch
ef354e074f (svn r12146) -Codechange: Use macros to build DrawTileSeqStruct-tables in station_land and unmovable_land. 2008-02-15 18:00:30 +00:00
belugas
65a13a3022 (svn r12145) -Codechange: includes should be at the top of the source file
-Codechange: undefine a defined macro once work is finished, just in case
2008-02-15 17:38:18 +00:00
ac5433a924 (svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
aircraft slow down more rapidly than slower aircraft. This prevents them 
from reaching the end of the runway at high speed, and also stops slow 
aircraft from slowing down too much at the start of the runway.
2008-02-15 13:28:13 +00:00
d1c741db4c (svn r12143) -Fix (r8038): Engine::preview_player does not contain a Player ID. Rename this to preview_player_rank and change back to a uint8 to avoid confusion. 2008-02-15 11:02:50 +00:00
frosch
4164d2488f (svn r12142) -Fix [FS#1766]: Callback 0x3D always gets a cargobit in var 0x18, independent of grf version. 2008-02-15 10:52:10 +00:00
frosch
43c0f7ea8e (svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them. 2008-02-14 15:59:16 +00:00
belugas
739b118c6b (svn r12140) -Codechange: A bit of code style fixes(Geektoo). 2008-02-14 15:13:36 +00:00
859d768bb7 (svn r12139) -Fix (r12124): The global variable value should be returned, not the variable. 2008-02-14 11:58:36 +00:00
smatz
bb81de3c4c (svn r12138) -Fix: do not allow adding tram to rail-road crossing when there is a vehicle on it 2008-02-14 10:19:16 +00:00
3371d02449 (svn r12137) -Fix [FS#1769]: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown. 2008-02-14 07:25:24 +00:00
belugas
539c635efd (svn r12136) -Fix(r12135): Code style compliance and... code style as such 2008-02-14 03:10:22 +00:00
belugas
81b3652f37 (svn r12135) -Codechange: Road and rail bridge selection windows were identical apart the caption. So remove one window definition and set manually the caption accordingly.
-Codechange: prepare the "type" of bridge parameter only once, at the beginning of the selection process.  Makes less magic around.
2008-02-14 02:57:38 +00:00
smatz
a0ddc43e92 (svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
-Fix [FS#1739]: vehicle profit is now counted with 8bit fract, so it is now shown properly in the vehicle details window
2008-02-13 19:24:40 +00:00
b7cd791988 (svn r12133) -Fix: Vehicle sorting by max speed did not work properly for trains. Instead of trying to work it out again, just use the cached values... 2008-02-13 18:11:19 +00:00
smatz
fd51465c8b (svn r12132) -Cleanup: convert pathfinder selection from if/else to switch/case at many places 2008-02-13 17:54:11 +00:00
smatz
480036254b (svn r12131) -Fix (r3374): with mammoth trains disabled, maximum train length was limited to 9 2008-02-13 16:49:25 +00:00
smatz
0d1e4237cf (svn r12130) -Cleanup (r12129): remove now unused strings from all language files 2008-02-13 14:31:13 +00:00
smatz
507728f46b (svn r12129) -Change [FS#1759]: simplified patch settings for pathfinders (Yorick) 2008-02-13 14:21:36 +00:00
df7327b453 (svn r12128) -Codechange: Replace last use of TrainPlayLeaveStationSound(v) with v->PlayLeaveStationSound(), and remove wrapper function. 2008-02-13 09:34:56 +00:00
belugas
6bb9c474dd (svn r12127) -Codechange: Use a variable instead of calling the same function a few times. Again. Just a different value. 2008-02-13 03:21:19 +00:00
belugas
c95ff294fb (svn r12126) -Codechange: Use a variable instead of calling the same function a few times 2008-02-13 03:02:02 +00:00
63e306006b (svn r12125) -Codechange: Remove redundant signal lookup table, and document why normal electric signals are handled specially. 2008-02-12 20:14:14 +00:00
frosch
c2bad6d22c (svn r12124) -Codechange: Move newgrf-variables that are common to VarAction2 and Action7/9/D to their own function.
-Fix: Add some variables that were missing in one or both cases.
2008-02-12 15:43:10 +00:00
glx
23bae896c9 (svn r12123) -Add: generate.vbs script to allow project files generation for users unable to run generate bash script 2008-02-12 14:20:55 +00:00
4d0c443953 (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use. 2008-02-12 13:23:57 +00:00
9f6fd72c09 (svn r12121) -Fix [FS#1764]: Drop down item indexes are now an int instead of a byte (Yexo) 2008-02-12 12:54:51 +00:00
592e22cc3a (svn r12120) -Cleanup: const-ify parameters when checking for same cargopacket source. 2008-02-12 11:46:29 +00:00
e76f7c9359 (svn r12119) -Codechange: Rename grfspec_feature to match code style, and expose in header for use elsewhere. 2008-02-12 11:08:47 +00:00
belugas
f4334301e8 (svn r12118) -Codechange: Put the two descriptions of bridges in an array instead of two single variables, following the transport type it represents 2008-02-12 03:05:27 +00:00
glx
b0b929ce42 (svn r12117) -Fix (r12115): strgen compilation was broken 2008-02-12 02:39:22 +00:00
glx
42b305661b (svn r12116) -Fix (r12083): little typos in source.list 2008-02-11 21:01:43 +00:00
smatz
f19eca0905 (svn r12115) -Codechange: move malloc/realloc error messages to separate file to spare 4-8kB of binary size 2008-02-11 20:23:38 +00:00
f175e46208 (svn r12114) -Fix (r12111): missed one Bridge -> BridgeSpec 2008-02-11 19:10:33 +00:00
belugas
cc2b8b574a (svn r12111) -Codechange: Rename Bridge to BridgeSpec, out of consistensy with other Specs in used. 2008-02-11 17:35:15 +00:00
smatz
1011ac353b (svn r12109) -Fix [FS#1745](r8973): use tile index 0 for planes in the air, so it cannot have an invalid tile index 2008-02-11 12:42:49 +00:00
fb6accfcb7 (svn r12108) -Fix [FS#1753]: X/Y axis swap for station tiles in GetNearbyTile() was wrong way around. 2008-02-11 11:21:29 +00:00
belugas
4f0e6ab0ea (svn r12107) -Codechange: Add and use the typedef BridgeType 2008-02-11 04:12:30 +00:00
belugas
d8b3526840 (svn r12106) -Fix(r12105): Kill warnings and raise an error when the transport type is not supported 2008-02-11 03:22:44 +00:00
belugas
9a50fcd281 (svn r12105) -Codechange: Use TransportType instead of guessing what kind of bridge we are preparing to build 2008-02-11 01:06:44 +00:00
smatz
9e0a93d286 (svn r12104) -Fix (r12103): remember loading indicators transparency settings and make in switchable by Ctrl+9 2008-02-10 18:31:33 +00:00
smatz
8a768652c8 (svn r12103) -Feature(tte): separate catenary transparency settings from building transparency settings 2008-02-10 15:53:26 +00:00
maedhros
4e839aacf6 (svn r12102) -Feature: Allow locking individual transparency settings so they will not be changed by pressing 'x'. (Roujin) 2008-02-10 14:49:44 +00:00
smatz
e075cf5500 (svn r12101) -Fix (r12100): there are void tiles at MapMaxX,Y - have to substract one to be on water border tiles 2008-02-10 14:16:25 +00:00
smatz
ad933e1ddb (svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders 2008-02-10 14:00:52 +00:00
smatz
a86921da41 (svn r12099) -Documentation: add new RailGroundType to landscape.html 2008-02-10 12:01:14 +00:00
smatz
9deab65bae (svn r12098) -Fix: make snow appear on rail tiles dependant on track height, not on height of the lowest part of the tile 2008-02-10 11:35:05 +00:00
glx
efe831934a (svn r12097) -Fix (r654, r1525): loading old, pre savegame version 2, savegames. 2008-02-10 05:21:08 +00:00
smatz
d9af979d6a (svn r12096) -Fix: remove leftover property when loading older savegames 2008-02-09 17:36:21 +00:00
smatz
e3301db213 (svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road. 2008-02-09 17:30:13 +00:00
smatz
802c949755 (svn r12094) -Codechange: use DC_BANKRUPT command flag when removing player property to allow further fixes 2008-02-09 15:07:31 +00:00
smatz
221494bd3f (svn r12093) -Fix: do not set station owner for buoys when merging company 2008-02-09 12:20:50 +00:00
belugas
cebb86777a (svn r12092) -Fix(r11532)[FS#1755]: Make sure the production level will not get out of delimited boundaries, while using var result 0D/0E and than multiplying/dividing it.
And use multiply/divide operations instead of shifting.  It does the same, just adds a bit more readability
2008-02-09 03:12:05 +00:00
belugas
a782ab3903 (svn r12091) -Codechange : remove all production level magic numbers and replace them by enums 2008-02-09 03:03:09 +00:00
belugas
cf9447c15b (svn r12090) -Codechange : removed a magic number and code style application on enum ExpensesType 2008-02-09 02:49:33 +00:00
belugas
9343ad44fd (svn r12089) -Cleanup: re-order, yet another time, the files in msvc projects 2008-02-09 02:46:49 +00:00
smatz
8195e57fd4 (svn r12088) -Fix: assert when loading savegame with wrong tiletype at south map borders 2008-02-08 19:57:56 +00:00
glx
e2de86f951 (svn r12087) -Fix: MSVC warnings 2008-02-08 17:53:01 +00:00
glx
731137678c (svn r12086) -Fix [FS#1747] (r11425): check overrides only for industries when mapping newgrf entities to 'real' entities 2008-02-08 16:56:52 +00:00
frosch
7b9efcea21 (svn r12085) -Fix(r12058): Road vehicles could get stuck, when NPF told them to reverse on junction tiles. (spotted by SmatZ) 2008-02-08 16:25:55 +00:00
frosch
2173b03144 (svn r12084) -Fix: 'Early retirement'-properties are signed. 2008-02-08 15:34:54 +00:00
belugas
bf15bc9c57 (svn r12083) -Cleanup: Adding some more files in MSVC projects 2008-02-07 18:02:22 +00:00
belugas
30a8c150d0 (svn r12082) -Cleanup: MSVC projects do not care about the directory of the file while sorting. Only the "Absolute" name matters 2008-02-07 17:24:38 +00:00
belugas
034150c199 (svn r12081) -Codechange: Rename table/roadveh.h to table/roadveh_movment.h
It is more descriptive name and it will not upset the generate script anymore
2008-02-07 17:01:06 +00:00
glx
b68f398cac (svn r12080) -Fix: update waypoint signs when changing language 2008-02-07 16:17:00 +00:00
1bcc1927b1 (svn r12079) -Fix: Use search paths when opening console scripts. 2008-02-07 10:01:18 +00:00
belugas
431c3ce3c1 (svn r12078) -Cleanup: Add missing headers on project files 2008-02-07 04:47:38 +00:00
belugas
8a3f6830a3 (svn r12077) -Cleanup: Remove files not used anymore from project files 2008-02-07 03:45:02 +00:00
glx
eb0d50aaff (svn r12076) -Fix: when reusing a renamed deleted waypoint, keep the new name 2008-02-07 01:56:39 +00:00
a187d92d87 (svn r12075) -Codechange: Remove explicit numbering on command enum, and remove blanks from command list where old commands have been removed. 2008-02-06 23:08:49 +00:00
smatz
8606e70819 (svn r12074) -Cleanup: use C++ variable scope and declaration in DrawTile_Trees() 2008-02-06 23:08:04 +00:00
smatz
c0c9b80db3 (svn r12073) -Codechange: stop drawing trees a bit earlier when they are invisible 2008-02-06 22:59:31 +00:00
frosch
918591c05b (svn r12072) -Fix: Make docks at sea flood neighboured tiles. 2008-02-06 16:19:28 +00:00
frosch
7860d8d18a (svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots. 2008-02-06 16:12:23 +00:00
frosch
e95e887772 (svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed. 2008-02-06 15:32:06 +00:00
belugas
94f4217984 (svn r12069) -Feature[newGRF]: Specify the purchase, rail and road description of a bridge. 2008-02-06 03:01:29 +00:00
belugas
5049ff8e8e (svn r12068) -Fix(r12067): forgot a return 2008-02-06 02:43:42 +00:00
f29c748d4c (svn r12067) -Cleanup: Codestyle on loading object references 2008-02-05 23:22:34 +00:00
belugas
62b3520e51 (svn r12066) -Codechange: Rename GetBridge for the more common GetBridgeSpec
-Codechange: Remove direct access to the _bridge table in favor of the above mentioned GetBridgeSpec
-Codechange: Rationalize the use of Bridge type pointer
2008-02-05 05:21:02 +00:00
belugas
80daad8d4d (svn r12065) -Codechange : removed a now useless declaration ( orig_bridge ) 2008-02-05 05:03:50 +00:00
belugas
3003986e67 (svn r12064) -Codechange : Give grf bridges their own ResetBridges function, and put bridge spec in table/bridge_land.h, where it should be. 2008-02-05 04:48:56 +00:00
smatz
c261218cf5 (svn r12063) -Cleanup: use C++ indenting and variable scope/declaration in BuildTownHouse() 2008-02-05 00:30:58 +00:00
smatz
146779b158 (svn r12062) -Fix: possible deadlock when there are no houses available to build at given tile
-Fix: houses with zero probability could be built
2008-02-04 23:24:22 +00:00
smatz
23c669fe50 (svn r12061) -Cleanup: since r12060, DC_FORCETEST is not used anymore 2008-02-04 22:44:05 +00:00
smatz
dbfdc5df94 (svn r12060) -Fix: do not clear tiles when the town won't be able to build any buildings anyway
-Fix: allow building 2x2 building on slopes if not explicitly forbidden
-Fix: it was possible to build 2x1 and 1x2 buildings on slopes even if it was not allowed
2008-02-04 22:15:48 +00:00
glx
b35611dae3 (svn r12059) -Fix (r12041): industries prop 24 is a word 2008-02-04 16:48:00 +00:00
frosch
5e7c8012ec (svn r12058) -Fix: Teach NPF where road vehicles and trams can reverse.
-Fix: Ships can drive through opponents' ship depots. (Thanks SmatZ)
-Codechange: Split NPFFollowTrack() in smaller parts.
2008-02-04 16:24:25 +00:00
smatz
04ef38ec60 (svn r12057) -Fix: slowdown train when approaching 90deg turn when 90deg turns are forbidden 2008-02-04 15:56:39 +00:00
frosch
2a2aa1d22a (svn r12056) -Fix [FS#1704]: Enable YAPF to start searching inside a wormhole. 2008-02-04 15:26:35 +00:00
smatz
b206e50f80 (svn r12055) -Fix: another way to fix AI trying to build road through depots 2008-02-04 14:08:02 +00:00
a528dc89c7 (svn r12054) -Cleanup: Use VehicleType instead of byte for vehicle types... 2008-02-04 11:28:12 +00:00
maedhros
2588879c6d (svn r12052) -Fix [FS#1737] (r11494): The cargo translation table was loaded at the right time, but all the other global variables were now loaded too early. ;) 2008-02-03 20:23:59 +00:00
rubidium
20e9abed47 (svn r12050) -Fix: random_func broke for desync debug. 2008-02-03 16:21:19 +00:00
smatz
0ca3977af8 (svn r12049) -Fix (r10496)(r10619): memset on multibyte array with wrong byte count 2008-02-03 12:41:06 +00:00
belugas
1e51090e74 (svn r12048) -Cleanup: Move some strings in the original bridge array, adjust documentation a bit. 2008-02-03 03:37:33 +00:00
belugas
90973cdcef (svn r12045) -Feature-ette(newGRF): Add support for var 12, Variational Action 2 2008-02-03 00:24:53 +00:00
rubidium
612ba5c787 (svn r12044) -Fix [FS#1741]: crash when centering on a vehicle (aircraft) that is outside of the map. 2008-02-02 21:09:05 +00:00
smatz
f3663fd25c (svn r12043) -Fix [FS#1736]: allow building transmitters and lighthouses on tree tiles 2008-02-02 20:15:20 +00:00
1d891a8b15 (svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
stored for buoys, docks, locks and depots. All these are now allowed on rivers and removal of them will revert to the 
original water type.
2008-02-02 09:28:43 +00:00
belugas
7cf2c83462 (svn r12041) -Codechange: Add the loader and the property for action 00 industries, prop 24, nearby station name.
No assignation yet, no real work either.
2008-02-02 03:23:26 +00:00
belugas
fc4f6dcfb1 (svn r12040) -Codechange: Change IsOrderListShared from a simple function to a class member(MagicBuzz). 2008-02-02 02:45:09 +00:00
7a78a1b51a (svn r12038) -Fix: Change ownership of or remove statues when merging/bankrupting companies. 2008-02-01 22:13:59 +00:00
glx
525409b0fc (svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class 2008-02-01 22:02:14 +00:00
67782add11 (svn r12036) -Fix: For station tiles, only get road types for road stops. 2008-02-01 20:10:57 +00:00
frosch
45b79bc9f1 (svn r12035) -Fix [FS#1702]: Teach YAPF where trams can reverse, and where not. 2008-02-01 17:27:45 +00:00
belugas
803a1e2353 (svn r12034) -Codechange: A bit of code style cleaning, regarding comments.
Thanks to MagicBuzz who spotted yet another non-converted file
2008-02-01 17:22:24 +00:00
smatz
6537d13c8a (svn r12033) -Fix: do not show train speed as zero after loading paused game 2008-02-01 15:09:55 +00:00
e0849acc5a (svn r12032) -Fix: When removing a statue, remove town statue flag for the statue owner, not current player. 2008-01-31 23:04:45 +00:00
be548ee224 (svn r12031) -Fix [FS#1689,FS#1719]: Prevent towns from removing or claiming ownership of player owned tiles when growing. 2008-01-31 21:16:40 +00:00
miham
f3ecaf796e (svn r12030) -Update: WebTranslator2 update to 2008-01-31 19:43:58
brazilian_portuguese - 1 changed by tucalipe (1)
italian    - 2 changed by lorenzodv (2)
japanese   - 7 fixed by ickoonite (7)
2008-01-31 18:44:28 +00:00
frosch
a1c543e064 (svn r12029) -Feature: Allow trees on shore. 2008-01-31 17:54:13 +00:00
frosch
fe9891c8ec (svn r12028) -Codechange: Split common part of station var 0x67, house var 0x62, indtile var 0x60 and industry var 0x62 to 'newgrf_commons.cpp'. 2008-01-31 17:46:08 +00:00
frosch
ef35cefddc (svn r12027) -Documentation: Update 'landscape.html' and 'landscape_grid.html' to reflect reality and add some details. 2008-01-31 15:18:07 +00:00
orudge
2ef11e0b8b (svn r12026) -Update: 'exit' is consistent with UK English in OpenTTD, 'quit' with US English 2008-01-30 19:07:41 +00:00
miham
bc1542d483 (svn r12025) -Update: WebTranslator2 update to 2008-01-30 19:43:26
czech      - 1 fixed by Hadez (1)
estonian   - 11 changed by kristjans (11)
french     - 2 changed by belugas (2)
korean     - 1 changed by darkttd (1)
spanish    - 5 fixed by eusebio (5)
2008-01-30 18:43:59 +00:00
frosch
1608d67030 (svn r12024) -Codechange: Reduce code duplication inside tree_cmd.
-CodeChange: When rocks get removed while planting trees, barren the ground.
-Fix: In one case trees could spread under bridges.
2008-01-30 18:40:42 +00:00
frosch
a2b35067dd (svn r12023) -Fix [FS#1690]: Put a better suited text in the quit-dialog. 2008-01-30 17:56:19 +00:00
belugas
caf7e8655c (svn r12022) -Revert(r12018): Invisible trees are now separate from the building concept.
So when you want invisible trees, just select the option of the same name in the Patch Options and toggle transparency of trees.
More to come on the saga of Invisibility. So stay tuned.
2008-01-30 17:36:28 +00:00
skidd13
953c3cb6df (svn r12021) -Cleanup: Make some parts of the town growth a bit more descriptive
-Codechange: Remove some needless checks
2008-01-30 17:31:39 +00:00
frosch
46589fa827 (svn r12020) -Documentation: Correct description of TropicZone. 2008-01-30 17:22:06 +00:00
1cdee354b4 (svn r12019) -Codechange: Add support for passenger engine designation for AI-use, NewGRF property 0x08 for trains. 2008-01-30 10:27:45 +00:00
belugas
94aa04948c (svn r12018) -Fix(FS#1721,r9563): Restore initial intent on the invisible tree while transparent building patch setting 2008-01-30 03:34:24 +00:00
rubidium
44f4ebffed (svn r12017) -Fix: when you have more than 9 network interfaces you'll enter the wonderfull world of overflows. 2008-01-29 21:43:22 +00:00
egladil
be6737a2db (svn r12016) -Fix (r12003): os x compilation was broken again ;) 2008-01-29 19:23:31 +00:00
fb8973c64a (svn r12015) -Fix [FS#1716] (Revert r11422): Patch in FS#1430 avoided instead of fixed the problem. GetStringWithArgs() discards information that SCC_GENDER_LIST needs to work. Now use pointers to retrieve GRF strings, so that GetStringPtr() will work correctly. This is advantageous as now no buffer copy is made when using all GRF strings. 2008-01-29 17:09:00 +00:00
rubidium
a736e8500a (svn r12014) -Fix: lighthouses and transmitters were never supposed to be build on a slope. 2008-01-29 14:19:07 +00:00
frosch
9c4cb84c03 (svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases. 2008-01-29 14:17:13 +00:00
frosch
7cf4f09c26 (svn r12012) -Fix (r11795): Enable TownRatingTestMode during cost estimation with 'shift'-key. 2008-01-29 14:02:18 +00:00
frosch
cda0e9f91c (svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides. 2008-01-29 13:54:52 +00:00
smatz
379f89fc7e (svn r12010) -Fix (r11994): build tramway window should use STR_WHITE_TRAMWAY_CONSTRUCTION 2008-01-29 13:52:55 +00:00
b20d220333 (svn r12009) -Fix [FS#1707]: Avoid loading sample.cat if it 'looks' incorrect, and avoid later null pointer dereferences by moving volume lookup deeper. 2008-01-29 13:27:31 +00:00
miham
02f774793b (svn r12008) -Update: WebTranslator2 update to 2008-01-29 14:07:31
brazilian_portuguese - 5 fixed, 5 changed by fukumori (4), tucalipe (6)
bulgarian  - 7 fixed by thetitan (7)
catalan    - 1 fixed by arnaullv (1)
danish     - 9 fixed by ThomasA (9)
dutch      - 5 fixed by habell (5)
estonian   - 7 fixed, 12 changed by kristjans (19)
french     - 1 fixed by glx (1)
german     - 6 fixed by moewe2 (6)
italian    - 1 fixed by lorenzodv (1)
korean     - 6 fixed, 11 changed by leejaeuk5 (17)
russian    - 9 fixed by Smoky555 (9)
slovak     - 7 fixed by lengyel (7)
slovenian  - 7 fixed by Necrolyte (7)
swedish    - 6 fixed by ChrillDeVille (6)
ukrainian  - 7 fixed by mad (7)
2008-01-29 13:13:19 +00:00
glx
fdd71514b2 (svn r12007) -Fix (r12003): win32 compilation was broken again ;) 2008-01-29 00:45:24 +00:00
rubidium
1629699094 (svn r12006) -Fix: implement FS#1697 without the nasty side effects as specified in FS#1712. 2008-01-29 00:36:55 +00:00
rubidium
c9a9103566 (svn r12005) -Fix [FS#1717]: possible reading from an invalid pointer. Patch by PhilSophus. 2008-01-29 00:29:28 +00:00
rubidium
3b2145aafe (svn r12004) -Codechange: refactor the random functions to reduce code duplication. 2008-01-29 00:27:25 +00:00
rubidium
fde33b5547 (svn r12003) -Codechange: don't declare InteractiveRandom[Range] in multiple places. 2008-01-29 00:26:31 +00:00
1a9b741e43 (svn r12002) -Cleanup (r11981): Remove obsolete code to skip sprites from indexed GRFs. 2008-01-28 17:51:45 +00:00
frosch
d3c7a35d22 (svn r12001) -Fix: When skipping Action 11 or 12, also skip belonging sprites. 2008-01-28 15:55:59 +00:00
frosch
abc6e70447 (svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks. 2008-01-28 15:19:35 +00:00
frosch
a1b98cda59 (svn r11999) -Fix: Do entrance-slope-check for every tile of railstations. 2008-01-28 14:36:54 +00:00
smatz
a9031cc5f5 (svn r11998) -Fix [FS#1692](r10053): possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD 2008-01-28 12:40:31 +00:00
belugas
0253b1d02a (svn r11997) -Fix(FS#1712, r11985): Remove the code temporary, until a better scheme is implemented. 2008-01-28 03:33:41 +00:00
smatz
c8ba8d930b (svn r11996) -Fix [FS#1706]: update train statusbar when stopping from zero speed 2008-01-27 20:20:53 +00:00
maedhros
c5b81c9382 (svn r11995) -Cleanup (r11994): Change the string names in all the other languages. 2008-01-27 17:34:08 +00:00
maedhros
21eef65e77 (svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs. 2008-01-27 17:32:12 +00:00
0847def759 (svn r11993) -Fix: Resize station/roadstop/dock/airport construction windows if cargo acceptance list is too long. 2008-01-27 11:01:10 +00:00
bjarni
7b29dcde3c (svn r11992) -Fix (r9905): When building two rail stations close to each other (with control) so they looked like one long track trains would see them as one (spotted and fixed by eddi) 2008-01-27 02:09:46 +00:00
97a1cbdfa1 (svn r11991) -Cleanup: Remove strings removed in r11990 2008-01-26 22:41:24 +00:00
c6656d6b2f (svn r11990) -Codechange: Show all cargo sources (en-route from) in the station view
cargo waiting list instead of just one. The station view window is now 
resizable to cope with the extra information.
2008-01-26 22:15:39 +00:00
2fc2188127 (svn r11989) -Fix: Resize autoreplace window to fit purchase information text if it is too large. 2008-01-26 21:02:35 +00:00
c99eb9e456 (svn r11988) -Codechange: Add a generic way of changing a widget's size and adjust the widgets around it to suit. 2008-01-26 20:55:04 +00:00
belugas
d3990083d3 (svn r11987) -Feature[newGRF]: Allow the industry view window to be resized only when callback 3A (Show additional text in industry window) is available for the current industry.
This now allows grf authors to specify longer than 3 lines of text.
2008-01-26 03:11:27 +00:00
18431dd9f8 (svn r11986) -Fix: build system ignored changes to table/control_codes.h which require strgen to be rebuilt 2008-01-25 21:09:12 +00:00
belugas
e214e03c28 (svn r11985) -Feature[FS#1697, newGRF]: Implement var 8F(random bits) during callback 28 (Industry location permissibility) 2008-01-25 18:13:04 +00:00
frosch
b329781ab2 (svn r11984) -Fix: Also draw corner shores under rail tracks. 2008-01-25 16:51:35 +00:00
frosch
6f6708e844 (svn r11983) -Codechange: Add some helper functions for slopes and use them. 2008-01-25 15:47:58 +00:00
frosch
d11aeb118c (svn r11982) -Revert (r8738): Now we have shores in corners. No need to remove them from TTDP games. 2008-01-25 13:54:27 +00:00
eeeeeb9336 (svn r11981) -Fix [FS#1698]: Use unicode glyph mapping to fix up missing/shuffled sprites in original data files instead of shuffling or skipping
sprites directly. Some required glyphs were not loaded.
-Fix: Large capital U with grave (Ù) along with some other glyphs are broken in the original data files, so do no display them.
2008-01-25 13:48:39 +00:00
smatz
e99c34bef4 (svn r11980) -Fix: newer versions of cut do not accept field index 0 2008-01-24 23:56:43 +00:00
rubidium
bbdc5a9314 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble. 2008-01-24 18:47:05 +00:00
skidd13
4991dcecc7 (svn r11978) -Codechange: Replace some global variables with window owned ones 2008-01-24 18:35:35 +00:00
belugas
44d085af6c (svn r11977) -Fix(r11976): not a typo, not a bug. Just a removal that should have been done.
Would help to compile first...
2008-01-24 18:28:52 +00:00
belugas
1fc0c0d2dc (svn r11976) -Fix: It seems that industries using results 0D/0E on callback cb29/35 were a bit too eager to close down. 2008-01-24 18:16:04 +00:00
frosch
bd0c853e27 (svn r11975) -Documentation: Distinguish between station types in 'landscape_grid.html'. 2008-01-24 17:32:03 +00:00
frosch
da754951f1 (svn r11974) -Fix [FS#1684]: Shore and sea tiles under bridges were converted to canals in old savegames. 2008-01-24 14:57:43 +00:00
frosch
79aa7247c0 (svn r11973) -Fix (r11726, r11947)[FS#1683]: Use grass tiles for corner shores, if shores got replaced by ActionA. 2008-01-24 14:49:40 +00:00
smatz
5f9a877376 (svn r11972) -Fix: old AI shouldn't build fast planes with a small airport in orders 2008-01-24 14:22:10 +00:00
697b07c99c (svn r11971) -Codechange: use of FOR_ALL_ENGINES/ENGINEIDS_OF_TYPE instead of for-loops 2008-01-24 10:47:44 +00:00
9c65bcea7d (svn r11970) -Cleanup: Remove old comment 2008-01-24 10:41:12 +00:00
smatz
541247c830 (svn r11969) -Codechange: documentation update, there are no 'track bits under bridge' anymore 2008-01-23 23:22:47 +00:00
smatz
5a7c903770 (svn r11968) -Codechange: remove redundant FindLengthOfTunnel(), use GetTunnelBridgeLength() and/or GetOtherTunnelEnd() instead 2008-01-23 22:34:04 +00:00
smatz
b5641ae0f2 (svn r11967) -Fix (r1400): MP_ROAD can have railbits too - OPF searching over rail of diffent owner behind crossing 2008-01-23 20:02:30 +00:00
smatz
e40944f8e0 (svn r11966) -Fix: OPF was searching through depots and normal road stops
In effect, it also fixes old AI bugs like FS#1403 and FS#1506
2008-01-23 19:31:11 +00:00
smatz
4cb91fa591 (svn r11965) -Codechange: simplified tunnel/bridge code in TPFMode1 2008-01-23 18:24:04 +00:00
b718cae67d (svn r11964) -Fix [FS#1685]: Tropic zone data was returned incorrectly. 2008-01-23 17:45:48 +00:00
belugas
9c16461c29 (svn r11963) -Fix(r11961): Forgot to specify the meaning of the magical 6 substraction 2008-01-23 17:40:37 +00:00
smatz
d6eaf1a11a (svn r11962) -Cleanup: OPF is no longer used to update signals 2008-01-23 17:30:28 +00:00
belugas
4a3e135086 (svn r11961) -Feature[newGRF]: Add support for Action 0D, var 13: informations about current map size. 2008-01-23 17:08:35 +00:00
smatz
0b888ccc00 (svn r11960) -Cleanup: simplify some IsTunnel(Tile) / IsBridge(Tile) conditions 2008-01-23 14:51:36 +00:00
9515328962 (svn r11959) -Codechange: Use macro to loop for specific engine types instead of using specific indexes each time.
-Codechange: Minor scope changes in said loops.
2008-01-23 13:20:51 +00:00
smatz
a31ebdb2be (svn r11958) -Fix (r11204): NewAI couldn't build any road vehicles when there were any tram grfs loaded 2008-01-23 13:06:00 +00:00
e35cf20a23 (svn r11957) -Codechange [FS#1678]: Minor simplification and optimisation when checking for available road/rail types (bilbo) 2008-01-23 09:43:53 +00:00
0f966a316a (svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids. 2008-01-23 08:47:49 +00:00
ff0891426f (svn r11955) -Fix (r11926): Prevent bridge and tunnel ends being placed on rivers. 2008-01-23 08:28:19 +00:00
smatz
983fdb8a4f (svn r11953) -Fix (r11172): do not allow modifying roadbits when other roadtypes would need different foundation 2008-01-23 00:36:48 +00:00
da53070a38 (svn r11952) -Fix (r11926): Prevent industries from being built on rivers, unless they require water. 2008-01-22 22:17:28 +00:00
smatz
3a423a8747 (svn r11951) -Fix (r11279): loading of very old savegames was broken 2008-01-22 21:01:35 +00:00
39f6173401 (svn r11949) -Codechange: add river icon and cursor, drawn by skidd13. 2008-01-22 20:04:30 +00:00
frosch
49d2087d7f (svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
Tiles which only consist of shore do not flood anymore, instead they get removed if they are no longer connected to flooding water.
2008-01-22 17:48:08 +00:00
frosch
b99c83246b (svn r11946) -Fix: slope detection of bridge ramps.
YAPF failed for steep slopes.
  Trolly failed for a lot.
2008-01-22 16:08:17 +00:00
glx
7d1e3086b8 (svn r11945) -Fix: FileExists() failed for non latin paths (win32) 2008-01-22 15:47:40 +00:00
smatz
96a18d859f (svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner 2008-01-22 15:40:29 +00:00
rubidium
59ec5e62ce (svn r11943) -Codechange: add and use a simple structure to support small stacks by allocating it on the heap or pushing a few kB of data onto the stack when there is a large stack. 2008-01-22 12:09:12 +00:00
30bac58bde (svn r11942) -Codechange: Merge chars.grf into openttd[d|w].grf using action 12. Remove obsolete tables used for index mapping. 2008-01-22 08:47:30 +00:00
ffec79bbcf (svn r11940) -Codechange: Store short filename once per open file instead of once per sprite cache entry. Not all file types need this, but most of the time no sprite cache entry needed it either. 2008-01-22 07:27:06 +00:00
rubidium
9444eb4484 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik. 2008-01-21 23:55:57 +00:00
ca1b3e7b4e (svn r11938) -Codechange: support loading of canal/river properties (though still ignored) 2008-01-21 20:41:04 +00:00
frosch
0a6425926b (svn r11937) -Feature: Allow building bridge heads on more slopes.
These are SLOPE_NW, SLOPE_SW, SLOPE_SE, SLOPE_NE (with bridge perpendicular to the slope) and SLOPE_NS, SLOPE_EW.
2008-01-21 15:48:00 +00:00
frosch
f23e71f22f (svn r11936) -Fix: 'BRIDGE_TOO_LOW_FOR_TERRAIN'-check was wrong for steep slopes. 2008-01-21 15:20:58 +00:00
bjarni
000117aa19 (svn r11935) -Fix (r11875)[FS#1672]: autosend aircraft to hangar for replacement check inverted the check for autorenew
Now it triggers when renew setting is on and only if it's on
  Note: aircraft already enroute to hangars due to this bug will still go there. They will only head there once though
2008-01-21 10:31:27 +00:00
9ca929c812 (svn r11934) -Codechange: add persistent random data for river and canal tiles. 2008-01-20 18:30:53 +00:00
miham
ffb9ca164e (svn r11933) -Update: WebTranslator2 update to 2008-01-20 18:42:56
brazilian_portuguese - 2 fixed by fukumori (2)
catalan    - 6 fixed by arnaullv (6)
croatian   - 4 changed by blozo (4)
czech      - 6 fixed by Hadez (6)
dutch      - 2 fixed by habell (2)
french     - 6 fixed by glx (6)
hungarian  - 15 fixed by miham (15)
italian    - 6 fixed by lorenzodv (6)
portuguese - 5 fixed, 2 changed by nars (7)
russian    - 1 changed by HMage (1)
spanish    - 3 fixed by eusebio (3)
2008-01-20 17:43:38 +00:00
belugas
2c5c97346b (svn r11932) -Codechange: Forgot two occurences of widget enumification 2008-01-20 04:01:28 +00:00
belugas
3423032dbb (svn r11931) -Codechange: enumify the widgets numbers. Give breathing room on the case switches too... 2008-01-20 03:56:15 +00:00
belugas
90a770250f (svn r11930) -Codechange: a bit of code style application 2008-01-20 03:11:14 +00:00
bjarni
e91230415d (svn r11929) -Fix (r9981)[FS#1624]: [autoreplace] fixed a case where a single headed locomotive caused an assert when being replaced to a dualheaded one
This triggered if the player had enough money to replace and refit one of them but not enough to refit the last one as well
2008-01-19 23:34:52 +00:00
bjarni
2f6ee3a4a1 (svn r11928) -Fix (r6393): [autoreplace] autoreplace could refit train engines to the wrong cargo type if the old engine had no cargo capacity and the new one had
Now autoreplace will always look at the wagons to figure out what to replace to (as originally intended)
2008-01-19 22:47:07 +00:00
a580c8d059 (svn r11927) -Fix (r11926): unable to place canals in game 2008-01-19 18:24:20 +00:00
4a2f7db99b (svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor. 2008-01-19 17:00:54 +00:00
rubidium
aa0412e0bc (svn r11925) -Fix (r122, r9867): loading old, pre savegame version 2, savegames. 2008-01-19 14:00:04 +00:00
02c9484ebb (svn r11924) -Codechange: All dropdowns now use the dropdown widget, so compatibility code can be removed 2008-01-19 11:08:06 +00:00
glx
1712a8a0e1 (svn r11923) -Cleanup: Remove strings removed from english.txt in r11919 2008-01-18 22:55:02 +00:00
smatz
730dda867b (svn r11922) -Codechange: use MaybeBarCrossingWithSound() to bar crossing with sound 2008-01-18 21:44:20 +00:00
14416791af (svn r11921) -Cleanup: correct indenting and switch case line spacing. 2008-01-18 21:33:19 +00:00
glx
600046f3d7 (svn r11920) -Fix (r11844): train count was incorrect in network lobby window (and 'players' command) 2008-01-18 21:25:18 +00:00
b6d0684826 (svn r11919) -Codechange: Assign numbered parameters to world generator widgets to avoid separate DrawString()s, and do the same for the scenario flat-land window. 2008-01-18 21:08:40 +00:00
70025a149d (svn r11918) -Codechange: Draw engine lists at widget positions instead of fixed pixel positions 2008-01-18 18:18:39 +00:00
smatz
22a7b95c10 (svn r11917) -Fix (r3677): AI was reading wrong tile slope while building road bridge 2008-01-18 14:48:57 +00:00
smatz
1d59439166 (svn r11916) -Codechange: use enums from VehicleViewWindowWidgets instead of constants
-Fix: refit button widget was not correctly updated
2008-01-18 13:02:47 +00:00
68707808c0 (svn r11915) -Codechange: Add a function to draw a sort button's up/down arrow. Arrows are now drawn in a consistent position based on the widget, instead of randomly positioned by pixel. 2008-01-18 10:36:55 +00:00
glx
b7f50533c2 (svn r11914) -Documentation: fix some @file statement 2008-01-18 03:48:29 +00:00
smatz
0b3db1a92d (svn r11913) -Fix (r11871): update signals after company bankrupt and disaster too 2008-01-18 02:16:39 +00:00
307b0e8e7a (svn r11912) -Codechange: use dropdown widget for autoreplace, station builder and (second?) vehicle list windows 2008-01-17 21:57:20 +00:00
ada41b7b3f (svn r11911) -Codechange: use enum for autoreplace window widgets 2008-01-17 21:44:52 +00:00
smatz
8d077b16d8 (svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
-Fix: crossing sound is bound to tile, not to vehicle
2008-01-17 20:41:33 +00:00
ac0fa7f69f (svn r11909) -Codechange: use dropdown widget for player livery, network lobby/setup and news settings windows 2008-01-17 20:00:13 +00:00
smatz
822242f411 (svn r11908) -Fix: update crossing when merging a company, when building a crossing and after loading older savegame 2008-01-17 19:49:06 +00:00
35135222b5 (svn r11907) -Codechange: clean up of worldgen/heightmap ui: replace many separate DrawString() calls with widgets, use dropdown widgets, and use consistent positioning/sizing. 2008-01-17 19:41:05 +00:00
miham
17c9ea9ca3 (svn r11906) -Fix: fixed a typo in german language (reported by Botcher0) 2008-01-17 19:35:37 +00:00
6d3aa07a24 (svn r11905) -Codechange: add widget enums for player finances and player livery windows 2008-01-17 19:12:53 +00:00
d80e04d6f6 (svn r11904) -Codechange: use dropdown widget in 3 more windows, build vehicle, group vehicle list and station list. 2008-01-17 18:49:39 +00:00
smatz
44a4ff835d (svn r11903) -Fix: try to fix MorphOS compilation 2008-01-17 18:21:31 +00:00
ad54075acc (svn r11902) -Codechange: use new dropdown widget for game options window 2008-01-17 18:10:27 +00:00
c313676c66 (svn r11901) -Add: add two widgets for dropdowns, one raised and one inset, to eventually replace use of two widgets for each dropdown control. 2008-01-17 18:09:15 +00:00
smatz
c74cf439fa (svn r11900) -Fix: set correctly crossing state after train reversal, train leaving crossing, train crash
Fixes several ways to leave crossing red forever or to leave it unbarred when there is a train on crossing
2008-01-17 17:57:39 +00:00
frosch
35f3421842 (svn r11899) -Cleanup: Remove ShowReplaceVehicleWindow() as it is basically a duplicate of ShowReplaceGroupVehicleWindow(). 2008-01-17 17:35:59 +00:00
frosch
c579bffed2 (svn r11898) -Fix: Update neighboured canals + signals when flooding non-flat tiles, too. 2008-01-17 17:13:47 +00:00
frosch
978a7ca56a (svn r11897) -Fix: Replace an uint with TileIndex and a small coding style fix. 2008-01-17 16:55:13 +00:00
glx
4f31704e2e (svn r11896) -Fix (r11886): a missing const broke compilation with MSVC 2008-01-17 16:46:41 +00:00
glx
f37174f0e2 (svn r11895) -Fix (r11875): for once MSVC warns for a good reason 2008-01-17 16:41:02 +00:00
a9c71ce375 (svn r11894) -Cleanup: Remove strings removed from english.txt in r11893 2008-01-17 14:06:49 +00:00
68fc3b35da (svn r11893) -Codechange: build map size drop downs dynamically and remove unneeded strings 2008-01-17 14:00:17 +00:00
f788298209 (svn r11892) -Fix (r11879): View switched from ungrouped to all vehicles as ungrouped is not technically a valid group, and ensure dropdown is removed
on any click in the window.
2008-01-17 13:37:28 +00:00
rubidium
f5d72cc84c (svn r11890) -Change: ignore some files for git too. Patch by bruce89. 2008-01-17 02:13:01 +00:00
rubidium
08c01e64b8 (svn r11889) -Change: small inconsistency between documentation and code. Patch by Yexo. 2008-01-17 02:10:55 +00:00
glx
3d61a1adc5 (svn r11888) -Codechange: simplify sorting of the strings in town names dropdown 2008-01-17 02:10:26 +00:00
rubidium
f658b79e15 (svn r11887) -Fix [FS#1658]: segmentation faults/wrong frees due uninitialized memory in the AI. 2008-01-17 02:09:34 +00:00
glx
69c18efdca (svn r11886) -Add: sort the strings in languages dropdown 2008-01-17 00:21:43 +00:00
4d9a9bf6ff (svn r11885) -Cleanup: Remove gotos from widget drawing code. A side affect is that it is now possible for any widget type to be shown disabled. 2008-01-17 00:06:36 +00:00
bc438a3033 (svn r11884) -Cleanup: leftover use of widget numbers instead of enum 2008-01-16 23:46:46 +00:00
smatz
c8178d43c1 (svn r11883) -Fix (r11864): assert when trying to remove rail from a house or industry tile 2008-01-16 22:26:45 +00:00
smatz
ac7bc24b0e (svn r11882) -Codechange: introduce MarkSingleVehicleDirty() and simplify the code at some places 2008-01-16 21:17:31 +00:00
69cb009075 (svn r11881) -Cleanup: Code style for global variables. 2008-01-16 18:34:53 +00:00
330ec8bdd6 (svn r11880) -Codechange: Generate vehicle group action dropdown dynamically, and assign an enum for the function return codes. 2008-01-16 18:25:23 +00:00
abac83795d (svn r11879) -Fix: Only update group action drop down list when clicking on the dropdown text/button. Other times is not needed and caused a double free. 2008-01-16 17:43:46 +00:00
019ffe29b8 (svn r11878) -Fix: Crash in MP in vehicle group window if the currently selected group is deleted by another player. 2008-01-16 16:52:50 +00:00
smatz
692fbb3c05 (svn r11877) -Fix: another way to crash competitors' train in a station
-Codechange: increase the speed train is approaching line end/semaphore in non-diagonal direction a bit
2008-01-16 15:48:36 +00:00
frosch
5659cbe6fe (svn r11876) -Fix: Start industry tile animation also for overridden industry tiles. (Will only apply to new games or newly build industries.) 2008-01-16 15:06:48 +00:00
bjarni
beb1b07f5f (svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
Now it triggers by the following conditions:
  - aircraft is old enough for renew or needs to be autoreplaced
  - player has 2*cost of new aircraft+autorenew money (we don't want to send many aircraft to hangars when there is only money for replacing one)
  - aircraft has no hangars in it's order list
  - new aircraft is buildable (imagine autorenewing a retired design)
  This triggers right after a helicopter takes off or when a plane touches the ground while landing

  Another effect of this change is that this functionality no longer generates network traffic
2008-01-16 13:59:08 +00:00
rubidium
2817e5425b (svn r11874) -Fix [FS#1655]: all wagons of maglev/monorail trains would get the livery colour of the engine instead of their wagon type. 2008-01-16 11:25:15 +00:00
belugas
7a66d5e21d (svn r11873) -Codechange: less a few magical numbers and a tiny bit more comments on town zones 2008-01-16 02:53:55 +00:00
bjarni
77a20eae43 (svn r11872) -Fix (r9874): EngineHasReplacementForPlayer() didn't look in ALL_GROUP 2008-01-16 01:27:24 +00:00
smatz
9556623281 (svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station 2008-01-16 01:18:15 +00:00
smatz
40a7ace4fa (svn r11870) -Fix: slow down train when approaching tile we can't enter in more cases
(tunnel/bridge/depot from wrong direction, competitor's track, wrong railtype)
-Fix: do not make crossing red when we can't enter it in any case
2008-01-16 00:33:28 +00:00
298 changed files with 17020 additions and 18525 deletions

11
.gitignore vendored Normal file
View File

@@ -0,0 +1,11 @@
Makefile*
bin/*
!bin/data/chars.grf
!bin/data/openttdd.grf
!bin/data/openttdw.grf
!bin/data/opntitle.grf
!bin/scenario/README
!bin/scripts*
config.*
objs/*
src/rev.cpp

View File

@@ -36,7 +36,7 @@ RES := $(shell mkdir -p $(BIN_DIR)/lang )
all: table/strings.h $(LANGS)
strgen.o: $(SRC_DIR)/strgen/strgen.cpp endian_host.h
strgen.o: $(SRC_DIR)/strgen/strgen.cpp endian_host.h $(SRC_DIR)/table/control_codes.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) -DSTRGEN -c -o $@ $<
@@ -44,13 +44,17 @@ string.o: $(SRC_DIR)/string.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) -DSTRGEN -c -o $@ $<
alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp endian_host.h
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
$(Q)$(CXX_BUILD) $(CFLAGS_BUILD) -DSTRGEN -c -o $@ $<
lang/english.txt: $(LANG_DIR)/english.txt
$(Q)mkdir -p lang
$(Q)cp $(LANG_DIR)/english.txt lang/english.txt
$(STRGEN): string.o strgen.o
$(STRGEN): alloc_func.o string.o strgen.o
$(E) '$(STAGE) Compiling and Linking $@'
$(Q)$(CXX_BUILD) string.o strgen.o -o $@
$(Q)$(CXX_BUILD) $^ -o $@
table/strings.h: lang/english.txt $(STRGEN)
$(E) '$(STAGE) Generating $@'

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,3 +1,168 @@
0.6.0-beta5 (2008-03-04)
------------------------------------------------------------------------
-Feature: Vehicle variable FE bit 8 (r12331) [FS#1812]
-Feature: Vehicle variable FE bit 5 and 6 (r12330)
-Feature: Support loading full range of 0xD0xx NewGRF strings which includes 0xD000 to 0xD3FF (r12316)
-Feature: Ability to change aircraft speed factor, from so called 'realistic' (matching other vehicles) (1/1) to original TTD speed (1/4) (r12293, r12294)
-Fix: Don't pause/unpause the game when showing load/save windows when the game is paused due to missing GRFs (r12336) [FS#1733]
-Fix: Disallow building level crossings over one-way roads as this allowed competitors to remove the one-way state (r12329) [FS#1819]
-Fix: Wrong Y pillar specified for girder with arch bridge (r12328)
-Fix: Vehicles could be sorted in a wrong order when a vehicle name changed - cached name was not invalidated (r12324)
-Fix: Vehicle sorting by name was broken, it was comparing two the same strings (when caching was not used) (r12323) [FS#1821]
-Fix: Endian issue when saving/loading group owner (r12322)
-Change: Update readme about where openttd looks for files (r12321)
-Fix: Wrong transparency options could be saved after toggling all (r12320) [FS#1817]
-Fix: Map string IDs that are embedded from other strings (r12317) [FS#1815]
-Fix: Include prop 25 data for all train parts, not just those that carry cargo (r12314)
-Fix: YAPF and NTP did not apply penalty for uphill tracks on steep slopes (r12313)
-Fix: Restore timetable from backupped orders and add group ID to the backup (r12296) [FS#1549]
-Fix: Do not draw trees nor lamps between tram tracks (r12290) [FS#1807]
-Fix: [Win32] Don't create save dir on install (r12269)
-Fix: Autoreplace did not update vehicle index for timetable window (r12261) [FS#1805]
-Fix: GetProductionAroundTiles() may fail if only the second production slot exists (r12258)
-Fix: Removing the Broken FollowTrack_t (pathfinding) fixed related functions (r12252) [FS#1801]
-Fix: Town variables 0x9E to 0xAD (company ratings) returned wrong values (r12247)
-Fix: Proper usage of Clamp() (r12246)
-Fix: Typo resulting in no players are given the engine preview offer (r12244)
-Fix: Mac OSX bundle display name should be 'OpenTTD' (r12234) [FS#1798]
-Fix: [NewGRF] Support using any base price for rail and road vehicles' running cost, show running cost of wagons if available (r12209)
-Fix: When loading a savegame fails, don't start creating a new game, just go straight back to the intro screen (r12202)
-Fix: Force AI to build rail or road instead of bridges if possible, so it doesn't build bridges everywhere (r12200)
-Fix: "Transparent buildings" now only toggles buildings, so show tick when buildings are transparent [FS#1789] (r12198)
-Fix: Show correct last year profit when the train had negative income [FS#1788] (r12197)
-Fix: There can be oil rigs at map borders, do not set water class for them [FS#1787] (r12195)
-Fix: Clamp various town variables to 16bit prior to returning the value (r12192)
-Fix: Do not start overtaking if the RV reaches wrong-way one-way-road in the next tiles (r12191)
-Fix: YAPF always shows 0ms PF time in debug for debug level 2 [FS#1786] (r12190)
-Fix: Assert when trying to play tile sound at NW border of map (placing buyos, leveling land) [FS#1784] (r12186)
-Fix: Wrong operator priority, hopefully harmless (r12185)
-Fix: Take into account possible loan when AI is deciding which bridge to build, so it won't build wooden bridges everytime (r12184)
0.6.0-beta4 (2008-02-18)
------------------------------------------------------------------------
-Feature: Allow buttons to resize in NewGRF settings window (r12172)
-Feature: Change colour of autorail and autoroad selection when Ctrl is pressed (r12167)
-Feature: Separate catenary transparency settings from building transparency settings (r12103)
-Feature: Allow locking individual transparency settings so they will not be changed by pressing 'x' (r12102)
-Feature: Add some missing VarAction2 variables (r12124)
-Feature: Make snow appear on rail tiles dependant on track height, not on height of the lowest part of the tile (r12098)
-Feature[newGRF]: Specify the purchase, rail and road description of a bridge (r12069)
-Feature[newGRF]: Add support for var 12, Variational Action 2 (r12045)
-Feature: Allow trees on shore (r12029)
-Feature: Invisible trees are now separate from the building concept (r12022)
-Feature: Add support for passenger engine designation for AI-use, NewGRF property 0x08 for trains (r12019)
-Feature: Show all cargo sources (en-route from) in the station view cargo waiting list instead of just one (r11990)
-Feature[newGRF]: Resizable industry view window on callback 3A (r11987)
-Feature[newGRF]: Implement var 8F(random bits) during callback 28 [FS#1697] (r11985)
-Feature[newGRF]: Add support for Action 0D, var 13: informations about current map size (r11961)
-Feature: Make use of new sprites added by Action5 type 0D (r11947)
-Feature: Allow building bridge heads on more slopes (r11937)
-Feature[newGRF]: Add support for Rivers. Rivers can currently only be placed with-in the scenario editor (r11926,r11938,r11949,r12071)
-Feature: Generate.vbs script to allow project files generation for users unable to run generate bash script (r12123)
-Feature: Sort the strings in languages dropdown (r11886)
-Codechange: Drop MSVC 2003 support (r11979)
-Fix: Test purchase list loading/loaded sprites instead of unconditionally returning a possibly non-existant sprite (r12180)
-Fix: Return correct bridge price for AI when DC_QUERY_COST is set [FS#609] (r12171)
-Fix: When drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated [FS#337] (r12166)
-Fix: Buffer overflow when drawing scrolling news [FS#1652, FS#1773] (r12165)
-Fix: If a train is 'stopping' when entering a depot, do not let it leave again [FS#1705] (r12163)
-Fix: Towns shouldn't build over houses owned by another town [FS#1757] (r12162)
-Fix: Towns will no longer build houses > 1x1 there where should be road (with 2x2, 3x3 grid town layouts) (r12161)
-Fix: Remove the arbitrary limit of 64 waypoints per town [FS#1744] (r12160)
-Fix: Chance16I was now biased towards zero - round to nearest now (r12156)
-Fix: Adjust aircraft slowing algorithm (r12144)
-Fix: Callback 0x3D always gets a cargobit in var 0x18, independent of grf version [FS#1766] (r12142)
-Fix: Do not allow adding tram to rail-road crossing when there is a vehicle on it (r12138)
-Fix: Show cargo capacity for articulated vehicles correctly in the purchase list. Multiple cargo types can also now been shown [FS#1769] (r12137)
-Fix: With mammoth trains disabled, maximum train length was limited to 9 (r12131)
-Fix: Use tile index 0 for planes in the air, so it cannot have an invalid tile index [FS#1745] (r12109)
-Fix: X/Y axis swap for station tiles in GetNearbyTile() was wrong way around [FS#1753]( r12108)
-Fix: Loading older savegames fixes (r12096,r12097)
-Fix: When a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road [FS#1703] (r12095)
-Fix: Do not set station owner for buoys when merging company (r12093)
-Fix: Keep production level within delimited boundaries, while using var result 0D/0E and than multiplying/dividing it [FS#1755] (r12092)
-Fix: Assert when loading savegame with wrong tiletype at south map borders (r12088)
-Fix: Check overrides only for industries when mapping newgrf entities to 'real' entities [FS#1747] (r12086)
-Fix: Update waypoint signs when changing language (r12080)
-Fix: Use search paths when opening console scripts (r12079)
-Fix: When reusing a renamed deleted waypoint, keep the new name (r12076)
-Fix: Make docks at sea flood neighboured tiles (r12072)
-Fix: Possible deadlock when there are no houses available to build at given tile (r12062)
-Fix: Houses with zero probability could be built (r12062)
-Fix: Do not clear tiles when the town won't be able to build any buildings anyway (r12060)
-Fix: Allow building 2x2 building on slopes if not explicitly forbidden (r12060)
-Fix: It was possible to build 2x1 and 1x2 buildings on slopes even if it was not allowed (r12060)
-Fix: Teach NPF where road vehicles and trams can reverse (r12058)
-Fix: Ships can drive through opponents' ship depots (r12058)
-Fix: Slowdown train when approaching 90deg turn when 90deg turns are forbidden (r12057)
-Fix: Enable YAPF to start searching inside a wormhole [FS#1704] (r12056)
-Fix: Another way to fix AI trying to build road through depots (r12055)
-Fix: The cargo translation table was loaded at the right time, but all the other global variables were now loaded too early [FS#1737] (r12052)
-Fix: Random_func broke for desync debug (r12050)
-Fix: Memset on multibyte array with wrong byte count (r12049)
-Fix: Crash when centering on a vehicle (aircraft) that is outside of the map [FS#1741] (r12044)
-Fix: Allow building transmitters and lighthouses on tree tiles [FS#1736] (r12043)
-Fix: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
stored for buoys, docks, locks and depots. All these are now allowed on rivers and removal of them will revert to the
original water type [FS#1676] (r12042)
-Fix: Change ownership of or remove statues when merging/bankrupting companies (r12038)
-Fix: For station tiles, only get road types for road stops (r12036)
-Fix: Teach YAPF where trams can reverse, and where not [FS#1702] (r12035)
-Fix: Do not show train speed as zero after loading paused game (r12033)
-Fix: When removing a statue, remove town statue flag for the statue owner, not current player (r12032)
-Fix: Prevent towns from removing or claiming ownership of player owned tiles when growing [FS#1689,FS#1719] (r12031)
-Fix: In one case trees could spread under bridges (r12024)
-Fix: Put a better suited text in the quit-dialog [FS#1690] (r12023)
-Fix: Restore initial intent on the invisible tree while transparent building patch setting [FS#1721] (r12018)
-Fix: When you have more than 9 network interfaces you'll enter the wonderfull world of overflows (r12017)
-Fix: Better work on strings in regard to gender [FS#1716] (r12015)
-Fix: Lighthouses and transmitters were never supposed to be build on a slope (r12014)
-Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases (r12013)
-Fix: Enable TownRatingTestMode during cost estimation with 'shift'-key (r12012)
-Fix: Do not consider one-corner-raised-shores to be watered tiles from all sides [FS#1701] (r12011)
-Fix: Avoid loading sample.cat if it 'looks' incorrect, and avoid later null pointer dereferences by moving volume lookup deeper [FS#1707] (r12009)
-Fix: Possible reading from an invalid pointer [FS#1717] (r12005)
-Fix: When skipping Action 11 or 12, also skip belonging sprites (r12001)
-Fix: Do entrance-slope-check for every tile of railstations (r11999)
-Fix: Possible remote assert by setting bit 6 of p1 for CMD_REMOVE_ROAD [FS#1692] (r11998)
-Fix: Update train statusbar when stopping from zero speed [FS#1706] (r11996)
-Fix: Resize station/roadstop/dock/airport construction windows if cargo acceptance list is too long (r11993)
-Fix: When building two rail stations close to each other (with control) so they looked like one long track trains would see them as one (r11992)
-Fix: Resize autoreplace window to fit purchase information text if it is too large (r11989)
-Fix: Build system ignored changes to table/control_codes.h which require strgen to be rebuilt (r11986)
-Fix: Also draw corner shores under rail tracks (r11984)
-Revert(r8738): Now we have shores in corners. No need to remove them from TTDP games (r11982)
-Fix: Use unicode glyph mapping to fix up missing/shuffled sprites in original data files instead of shuffling or skipping sprites directly [FS#1698] (r11981)
-Fix: Industries using results 0D/0E on callback cb29/35 were a bit too eager to close down (r11976)
-Fix: Shore and sea tiles under bridges were converted to canals in old savegames [FS#1684] (r11974)
-Fix: Use grass tiles for corner shores, if shores got replaced by ActionA [FS#1683] (r11973)
-Fix: Old AI shouldn't build fast planes with a small airport in orders(r11972)
-Fix: MP_ROAD can have railbits too - OPF searching over rail of diffen t owner behind crossing (r11967)
-Fix: OPF was searching through depots and normal road stops [FS#1403, FS#1506] (r11966)
-Fix: Tropic zone data was returned incorrectly [FS#1685] (r11964)
-Fix: NewAI couldn't build any road vehicles when there were any tram grfs loaded (r11958)
-Fix: Disallow building locks and docks on rapids [FS#1675] (r11956)
-Fix: Do not allow modifying roadbits when other roadtypes would need different foundation (r11953)
-Fix: Loading of very old savegames was broken (r11951)
-Fix: Slope detection of bridge ramps.Helps YAPF and Trolly (r11946)
-Fix: FileExists() failed for non latin paths (win32) (r11945)
-Fix: Allow building drive-through road/tram stops at road/tram track that has no owner (r11944)
-Fix: 'BRIDGE_TOO_LOW_FOR_TERRAIN'-check was wrong for steep slopes (r11936)
-Fix[autoreplace]: Single to dualhead locomotive replacefailed when player had enough money to replace and refit one but not enough to refit the last one as well [FS#1624] (r11929)
-Fix[autoreplace]: Autoreplace could refit train engines to the wrong cargo type if the old engine had no cargo capacity and the new one had (r11928)
-Fix: Loading old, pre savegame version 2, savegames (r11925)
-Fix: AI was reading wrong tile slope while building road bridge (r11917)
-Fix: set correctly crossing state after train reversal, train leaving crossing, train crash (r11900)
-Fix: Segmentation faults/wrong frees due uninitialized memory in the AI [FS#1658] (r11887)
-Fix: Assert when trying to remove rail from a house or industry tile [FS#1663,FS#1665-6-7-8,FS#1680,FS#1686-7-8 FS#1715 FS#1742 FS#1771 FS#1776](r11883)
-Fix: Crash in MP in vehicle group window if the currently selected group is deleted by another player (r11878)
-Fix: Another way to crash competitors' train in a station (r11877)
-Fix: Automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions (r11875)
-Fix: EngineHasReplacementForPlayer() didn't look in ALL_GROUP (r11872)
-Fix: Do not update signals after each tile when building/removing a large block of track/signals/station [FS#1074] (r11871)
-Fix: Slow down train when approaching tile we can't enter in more cases (r11870)
-Fix: Do not make crossing red when we can't enter it in any case (r11870)
0.6.0-beta3 (2008-01-16)
------------------------------------------------------------------------
-Feature: Replaced fixed size custom name array. Names are now attached to their object directly and there is no limit to the amount of names (r11822)

View File

@@ -5,7 +5,7 @@ log() {
}
set_default() {
released_version=""
released_version="0.6.0-beta5"
ignore_extra_parameters="0"
# We set all kinds of defaults for params. Later on the user can override
@@ -635,7 +635,7 @@ check_params() {
distcc="$with_distcc"
fi
if [ "$with_distcc" != "0" ]; then
res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 0-6`"
res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`"
if [ "$res" != "distcc" ]; then
distcc=""
log 1 "checking distcc... no"
@@ -664,7 +664,7 @@ check_params() {
ccache="$with_ccache"
fi
if [ "$with_ccache" != "0" ]; then
res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 0-6`"
res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`"
if [ "$res" != "ccache" ]; then
ccache=""
log 1 "checking ccache... no"

View File

@@ -6,11 +6,11 @@ PLEASE READ THE ENTIRE DOCUMENT BEFORE DOING ANY ACTUAL CHANGES!!
SUPPORTED MSVC COMPILERS
------------------------
OpenTTD includes projects for MSVC 2003.NET and MSVC 2005.NET. Both will
OpenTTD includes projects for MSVC 2005.NET and MSVC 2008.NET. Both will
compile out of the box, providing you have the required libraries/headers;
which ones, see below. There is no support for VS6, you are therefore
strongly encouraged to either upgrade to MSVC 2005 Express (free) or use GCC.
MSVC 2002 probably works as well, but it has not been tested.
which ones, see below. There is no support for VS6 or MSVC 2002, or
MSVC 2003.NET. You are therefore strongly encouraged to either upgrade to
MSVC 2005 Express (free) or use GCC.
1) REQUIRED FILES
@@ -74,20 +74,6 @@ NOTE: make sure that the directory for the DirectX SDK is the first one in the
list, above all others, otherwise compilation will most likely fail!!
2.3) DEBUGGING - WORKING DIRECTORY (MSVC 2003 ONLY!)
----------------------------------------------------
The very first time you check out and compile OpenTTD with Visual Studio 2003, running
the binary will complain about missing files. You need to go into and change a setting
OpenTTD > Project > Properties > Configuration (All Configurations) > ...
Configuration Properties > Debugging >
* Working Directory: ..\bin
VS 2005 works out of the box because Microsoft allowed a user to supply a humanly-
readable defaults file (openttd_vs80.vcproj.user), whereas 2003 is braindead.
3) TTD GRAPHICS FILES
---------------------
Copy the following files from Transport Tycoon Deluxe to the bin/data folder
@@ -102,12 +88,12 @@ Copy the following files from Transport Tycoon Deluxe to the bin/data folder
4) COMPILING
------------
Open trunk/openttd[_vs80].sln
Open trunk/openttd_vs[89]0.sln
Set the build mode to 'Release' in
Build > Configuration manager > Active solution configuration > select "Release"
Compile...
If everything works well the binary should be in trunk/objs/[Win32]/Release/openttd.exe
If everything works well the binary should be in trunk/objs/Win[32|64]/Release/openttd.exe
5) EDITING, CHANGING SOURCE CODE
@@ -126,4 +112,4 @@ to ask about reasons; or just wait. The problem will most likely solve itself
within a few days as the problem is noticed and fixed.
An up-to-date version of this README can be found on the wiki:
http://wiki.openttd.org/index.php/MicrosoftVisualCExpress
http://wiki.openttd.org/index.php/MicrosoftVisualCExpress

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,7 @@
<title>OpenTTD Landscape Internals - #2</title>
<style type="text/css">
span.abuse { font-family: "Courier New", Courier, mono; background-color: rgb(255, 58, 31); }
span.option{ font-family: "Courier New", Courier, mono; background-color: rgb(255,255, 30); }
span.free { font-family: "Courier New", Courier, mono; background-color: rgb(30, 178, 54); }
span.used { font-family: "Courier New", Courier, mono; }
td.bits { white-space: nowrap; text-align: center; font-family: "Courier New", Courier, mono; }
@@ -22,7 +23,8 @@ the array so you can quickly see what is used and what is not.
<ul>
<li><span style="font-weight: bold;"><span class="free">O</span></span> - bit is free</li>
<li><span style="font-weight: bold;"><span class="used">X</span></span> - bit is used</li>
<li><span style="font-weight: bold;"><span class="abuse">&nbsp;</span></span> - bit of attribute is abused for different purposes</li>
<li><span style="font-weight: bold;"><span class="abuse">&nbsp;</span></span> - bit of attribute is abused for different purposes, i.e. other bits define the actual meaning.</li>
<li><span style="font-weight: bold;"><span class="option">~</span></span> - bit is accessed, but does not really have a meaning (e.g. owner of clear land is always OWNER_NONE)</li>
</ul>
<p>
<ul>
@@ -64,7 +66,7 @@ the array so you can quickly see what is used and what is not.
<td rowspan="2">0</td>
<td class="caption">ground</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XX<span class="free">OO</span></td>
@@ -75,23 +77,34 @@ the array so you can quickly see what is used and what is not.
<tr>
<td class="caption">farmland</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOO</span>X XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td rowspan=3>1</td>
<td rowspan=4>1</td>
<td class="caption">rail</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO</span> <span class="option">~~</span>XX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">rail with signals</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO O</span>XXX <span class="free">O</span>XXX</td>
<td class="bits">XXXX <span class="option">~~</span>XX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
@@ -100,9 +113,9 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO</span> <span class="option">~~</span>XX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">XX<span class="free">OO O</span>XXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
@@ -111,9 +124,9 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits"><span class="free">OOOO</span> <span class="option">~~</span>XX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">XX<span class="free">OO O</span>XXX</td>
<td class="bits">XX<span class="free">OO OOO</span>X</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
@@ -121,7 +134,7 @@ the array so you can quickly see what is used and what is not.
<td rowspan=3>2</td>
<td class="caption">road</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
@@ -134,11 +147,11 @@ the array so you can quickly see what is used and what is not.
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX <span class="option">~~</span>XX</td>
<td class="bits"><span class="free">O</span>XXX XXXX</td>
<td class="bits">XX<span class="free">OO</span> XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td>
</tr>
<tr>
<td class="caption">road depot</td>
@@ -147,7 +160,7 @@ the array so you can quickly see what is used and what is not.
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits">X<span class="free">OOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XX<span class="free">OO</span> XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits">XXX<span class="free">O OOOO</span></td>
</tr>
@@ -157,45 +170,122 @@ the array so you can quickly see what is used and what is not.
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XX<span class="free">O</span>X XXXX</td>
<td class="bits">XX<span class="free">O</span><span class="option">~ ~~</span>XX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XX<span class="abuse">XX XXXX</span></td>
<td class="bits"><span class="abuse">XXXX XX</span>XX</td>
<td class="bits"><span class="abuse">X</span>XX<span class="abuse">X XXX</span>X</td>
<td class="bits">XXX<span class="abuse">X XXXX</span></td>
<td class="bits"><span class="abuse">XXXX X</span>XXX</td>
<td class="bits">XXXX <span class="abuse">XXXX</span></td>
</tr>
<tr>
<td>4</td>
<td class="caption">trees</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOOO</span> XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~</span>XX XXXX</td>
<td class="bits">XXXX XX<span class="free">OO</span></td>
<td class="bits">XX<span class="free">OO O</span>XXX</td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td>5</td>
<td class="caption">station</td>
<td class="bits">XXXX XXXX</td>
<td rowspan=6>5</td>
<td class="caption">rail station</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX <span class="option">~~</span>XX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">road stop</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO O</span>XXX</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
<td class="bits"><span class="free">OO</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td>6</td>
<td class="caption">water</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="caption">dock</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="option">~~~~ ~</span>XXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">airport</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">buoy</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">oilrig</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="option">~~~~ ~~~~</span></td>
<td class="bits"><span class="free">OO</span>XX X<span class="free">O</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td rowspan=3>6</td>
<td class="caption">sea, shore</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">X<span class="option">~~</span>X XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">canal, river</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">shipdepot</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
@@ -203,7 +293,7 @@ the array so you can quickly see what is used and what is not.
<td>8</td>
<td class="caption">industry</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="abuse">X</span><span class="free">OO</span><span class="abuse">X
<td class="bits">X<span class="free">OOO</span> <span class="abuse">
XXXX</span></td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
@@ -216,35 +306,45 @@ the array so you can quickly see what is used and what is not.
<td rowspan=2>9</td>
<td class="caption">tunnel entrance</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits"><span class="free">OOOO</span> <span class="option">~</span><span class="abuse">XXX</span></td>
<td class="bits">X<span class="free">OOO OOOO</span></td>
<td class="bits">X<span class="free">OOO</span> XXXX</td>
<td class="bits">X<span class="free">OOO</span> <span class="option">~</span>XXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td>bridge ramp</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span> <span class="abuse">XXXX</span>
<span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO</span> XXXX</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits"><span class="free">OOOO OOOO</span> XXXX <span class="free">OOOO</span></td>
<td class="bits"><span class="free">OOOO</span> <span class="option">~</span><span class="abuse">XXX</span></td>
<td class="bits">X<span class="free">OOO OOOO</span></td>
<td class="bits">X<span class="free">OOO</span> XXXX</td>
<td class="bits">X<span class="free">OOO</span> <span class="option">~</span>XXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td>A</td>
<td rowspan=2>A</td>
<td class="caption">unmovables</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="option">~~~</span>X XXXX</td>
<td class="bits"><span class="free">OOOO OOOO OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">XXXX XXXX</td>
<td class="bits">X<span class="option">~~</span>X XXXX</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>
<tr>
<td class="caption">company statue</td>
<td class="bits">-inherit-</td>
<td class="bits">-inherit-</td>
<td class="bits">XXXX XXXX XXXX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
<td class="bits">-inherit-</td>
<td class="bits">XX<span class="free">OO OO</span>XX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>
</tr>

View File

@@ -11,18 +11,18 @@ by the number below on http://bugs.openttd.org.
If the bug report is closed, it has been fixed, which then can be verified
in the latest SVN version of /trunk.
Bugs for 0.6.0-beta3
Bugs for 0.6.0-beta5
------------------------------------------------------------------------
URL: http://bugs.openttd.org
- 1624 Autoreplace refit fails -> crash
- 1549 Timetable + group ID are not backed up with orders
- 1762 Strange Autoreplace behaviour
- 1711 Gravel and Clay have no worth
- 1693 Removing road does not reset owner
- 1495 Long vehicles block multistop station
- 1487 Ending_year is never written to
- 1473 Train not going to available platform
- 1404 Spinner widget interprets one click as many
- 1264 Autoreplace for multiple NewGRF DMU sets fails
- 1140 [OSX] Not smooth moving map with touchpad
- 1074 Large slowdown when building tracks
- 1072 Text overflows in several windows
- 119 Clipping problems with vehicles on slopes

View File

@@ -1,8 +1,14 @@
openttd (0.6~svn) unstable; urgency=low
openttd (0.6.0~beta5) unstable; urgency=low
* Unreleased SVN version. Versioned to allow normal upgrades to released versions.
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Mon, 26 Feb 2007 21:07:05 +0100
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Mon, 04 Mar 2008 18:06:31 +0100
openttd (0.6.0~beta4-1) unstable; urgency=low
* New upstream release.
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Mon, 18 Feb 2008 20:09:29 +0100
openttd (0.6.0~beta3-1) unstable; urgency=low

View File

@@ -19,7 +19,7 @@ echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>Open Transport Tycoon</string>
<string>OpenTTD</string>
<key>CFBundleExecutable</key>
<string>openttd</string>
<key>CFBundleGetInfoString</key>

View File

@@ -1,9 +1,9 @@
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "0.6.0" ; Define application version
!define INSTALLERVERSION 41 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define INSTALLERVERSION 43 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPURLLINK "http://www.openttd.org"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}-beta3"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}-beta5"
!define APPVERSIONINTERNAL "${APPVERSION}.0" ; Needs to be of the format X.X.X.X
!define MUI_ICON "..\..\..\media\openttd.ico"
@@ -97,8 +97,6 @@ Section "!OpenTTD" Section1
; Overwrite files by default, but don't complain on failure
SetOverwrite try
; Make savegame folder
SetOutPath "$INSTDIR\save"
; Define root variable relative to installer
!define PATH_ROOT "..\..\..\"

2
projects/determineversion.vbs Normal file → Executable file
View File

@@ -194,7 +194,7 @@ Function IsCachedVersion(version)
End Function
Dim version
version = DetermineSVNVersion
version = "0.6.0-beta5"
If Not (IsCachedVersion(version) And FSO.FileExists("../src/rev.cpp") And FSO.FileExists("../src/ottdres.rc")) Then
UpdateFiles version
End If

View File

@@ -25,13 +25,6 @@ fi
# langs_vs80.vcproj is for MSVC 2005
# strgen_vs80.vcproj is for MSVC 2005
# openttd.sln is for MSVC 2003
# openttd.vcproj is for MSVC 2003
# langs.vcproj is for MSVC 2003
# strgen.vcproj is for MSVC 2003
# openttd.tgt is for WatCom
# First, collect the list of Windows files
@@ -110,7 +103,7 @@ load_main_data() {
print " <Filter";
print " Name=\\""$0"\\"";
print " Filter=\\"\\">";
print " >";
}
next;
@@ -121,7 +114,8 @@ load_main_data() {
gsub(" ", "", $0);
gsub("/", "\\\\", $0);
print " <File";
print " RelativePath=\\".\\\\'$file_prefix'"$0"\\">";
print " RelativePath=\\".\\\\'$file_prefix'"$0"\\"";
print " >";
print " </File>";
}
}
@@ -138,15 +132,18 @@ load_lang_data() {
i=`basename $i | sed s/.txt$//g`
RES="$RES
<File
RelativePath=\"..\\src\\lang\\"$i".txt\">
RelativePath=\"..\\src\\lang\\"$i".txt\"
>
<FileConfiguration
Name=\"Debug|Win32\">
Name=\"Debug|Win32\"
>
<Tool
Name=\"VCCustomBuildTool\"
Description=\"Generating "$i" language file\"
CommandLine=\"..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang &quot;\$(InputPath)&quot;&#x0D;&#x0A;\"
AdditionalDependencies=\"\"
Outputs=\"..\\bin\\lang\\"$i".lng\"/>
Outputs=\"..\\bin\\lang\\"$i".lng\"
/>
</FileConfiguration>
</File>"
done
@@ -165,22 +162,7 @@ generate() {
}
' > "$ROOT_DIR/projects/$2"
# The files-list
echo "$1" | awk -v type="$3" '
/&#x0D;&#x0A;/ {
if (type == "msvc2003") gsub("&#x0D;&#x0A;", "\n", $0);
}
/Filter="">/ {
if (type == "msvc2005") gsub("Filter=\"\">", ">", $0);
}
/"\/>/ {
if (type == "msvc2005") gsub("/>", "\n" substr($0, 1, index($0, $1) - 2) "/>", $0);
}
/">/ {
if (type == "msvc2005") gsub(">", "\n" substr($0, 1, index($0, $1) - 1) ">", $0);
}
{ print $0 }
' >> "$ROOT_DIR/projects/$2"
echo "$1" >> "$ROOT_DIR/projects/$2"
# Everything below the !!FILES!! marker
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
@@ -199,9 +181,7 @@ safety_check "$ROOT_DIR/source.list"
load_main_data "$ROOT_DIR/source.list" openttd
load_lang_data "$ROOT_DIR/src/lang/*.txt" lang
generate "$openttd" "openttd.vcproj" "msvc2003"
generate "$openttd" "openttd_vs80.vcproj" "msvc2005"
generate "$openttd" "openttd_vs90.vcproj" "msvc2005"
generate "$lang" "langs.vcproj" "msvc2003"
generate "$lang" "langs_vs80.vcproj" "msvc2005"
generate "$lang" "langs_vs90.vcproj" "msvc2005"
generate "$openttd" "openttd_vs80.vcproj"
generate "$openttd" "openttd_vs90.vcproj"
generate "$lang" "langs_vs80.vcproj"
generate "$lang" "langs_vs90.vcproj"

183
projects/generate.vbs Executable file
View File

@@ -0,0 +1,183 @@
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
' openttd_vs90.sln is for MSVC 2008
' openttd_vs90.vcproj is for MSVC 2008
' langs_vs90.vcproj is for MSVC 2008
' strgen_vs90.vcproj is for MSVC 2008
' openttd_vs80.sln is for MSVC 2005
' openttd_vs80.vcproj is for MSVC 2005
' langs_vs80.vcproj is for MSVC 2005
' strgen_vs80.vcproj is for MSVC 2005
Sub safety_check(filename)
Dim file, line, regexp, list
' Define regexp
Set regexp = New RegExp
regexp.Pattern = "#|ottdres.rc|win32.cpp|win32_v.cpp"
regexp.Global = True
' We use a dictionary to check duplicates
Set list = CreateObject("Scripting.Dictionary")
Set file = FSO.OpenTextFile(filename, 1, 0, 0)
While Not file.AtEndOfStream
line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs
If Len(line) > 0 And Not regexp.Test(line) Then
line = FSO.GetFileName(line)
if list.Exists(line) Then
WScript.Echo " !! ERROR !!" _
& vbCrLf & "" _
& vbCrLf & "The filename '" & line & "' is already used in this project." _
& vbCrLf & "Because MSVC uses one single directory for all object files, it" _
& vbCrLf & "cannot handle filenames with the same name inside the same project." _
& vbCrLf & "Please rename either one of the file and try generating again." _
& vbCrLf & "" _
& vbCrLf & " !! ERROR !!"
WScript.Quit(1)
End If
list.Add line, line
End If
Wend
file.Close
End Sub
Function load_main_data(filename)
Dim res, file, line, deep, skip, first_time
res = ""
' Read the source.list and process it
Set file = FSO.OpenTextFile(filename, 1, 0, 0)
While Not file.AtEndOfStream
line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs
If Len(line) > 0 Then
Select Case Split(line, " ")(0)
Case "#end"
If deep = skip Then skip = skip - 1
deep = deep - 1
Case "#else"
If deep = skip Then
skip = skip - 1
ElseIf deep - 1 = skip Then
skip = skip + 1
End If
Case "#if"
line = Replace(line, "#if ", "")
If deep = skip And ( _
line = "SDL" Or _
line = "PNG" Or _
line = "WIN32" Or _
line = "MSVC" Or _
line = "DIRECTMUSIC" Or _
line = "NO_THREADS" _
) Then skip = skip + 1
deep = deep + 1
Case "#"
if deep = skip Then
line = Replace(line, "# ", "")
if first_time <> 0 Then
res = res & " </Filter>" & vbCrLf
Else
first_time = 1
End If
res = res & _
" <Filter" & vbCrLf & _
" Name=" & Chr(34) & line & Chr(34) & vbCrLf & _
" >" & vbCrLf
End If
Case Else
If deep = skip Then
line = Replace(line, "/" ,"\")
res = res & _
" <File" & vbCrLf & _
" RelativePath=" & Chr(34) & ".\..\src\" & line & Chr(34) & vbCrLf & _
" >" & vbCrLf & _
" </File>" & vbCrLf
End If
End Select
End If
Wend
res = res & " </Filter>"
file.Close()
load_main_data = res
End Function
Function load_lang_data(dir)
Dim res, folder, file
res = ""
Set folder = FSO.GetFolder(dir)
For Each file In folder.Files
file = FSO.GetFileName(file)
If FSO.GetExtensionName(file) = "txt" Then
file = Left(file, Len(file) - 4)
res = res _
& vbCrLf & " <File" _
& vbCrLf & " RelativePath=" & Chr(34) & "..\src\lang\" & file & ".txt" & Chr(34) _
& vbCrLf & " >" _
& vbCrLf & " <FileConfiguration" _
& vbCrLf & " Name=" & Chr(34) & "Debug|Win32" & Chr(34) _
& vbCrLf & " >" _
& vbCrLf & " <Tool" _
& vbCrLf & " Name=" & Chr(34) & "VCCustomBuildTool" & Chr(34) _
& vbCrLf & " Description=" & Chr(34) & "Generating " & file & " language file" & Chr(34) _
& vbCrLf & " CommandLine=" & Chr(34) & "..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;" & Chr(34) _
& vbCrLf & " AdditionalDependencies=" & Chr(34) & Chr(34) _
& vbCrLf & " Outputs=" & Chr(34) & "..\bin\lang\" & file & ".lng" & Chr(34) _
& vbCrLf & " />" _
& vbCrLf & " </FileConfiguration>" _
& vbCrLf & " </File>"
End If
Next
load_lang_data = res
End Function
Sub generate(data, dest)
Dim srcfile, destfile, line
WScript.Echo "Generating " & FSO.GetFileName(dest) & "..."
Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0)
Set destfile = FSO.CreateTextFile(dest, -1, 0)
' Everything above the !!FILES!! marker
line = srcfile.ReadLine()
While line <> "!!FILES!!"
If len(line) > 0 Then destfile.WriteLine(line)
line = srcfile.ReadLine()
Wend
' Our generated content
destfile.WriteLine(data)
' Everything below the !!FILES!! marker
While Not srcfile.AtEndOfStream
line = srcfile.ReadLine()
If len(line) > 0 Then destfile.WriteLine(line)
Wend
srcfile.Close()
destfile.Close()
End Sub
Dim ROOT_DIR
ROOT_DIR = FSO.GetFolder("..").Path
If Not FSO.FileExists(ROOT_DIR & "/source.list") Then
ROOT_DIR = FSO.GetFolder(".").Path
End If
If Not FSO.FileExists(ROOT_DIR & "/source.list") Then
WScript.Echo "Can't find source.list, needed in order to make this run." _
& vbCrLf & "Please go to either the project dir, or the root dir of a clean SVN checkout."
WScript.Quit(1)
End If
safety_check ROOT_DIR & "/source.list"
Dim openttd
openttd = load_main_data(ROOT_DIR &"/source.list")
generate openttd, ROOT_DIR & "/projects/openttd_vs80.vcproj"
generate openttd, ROOT_DIR & "/projects/openttd_vs90.vcproj"
Dim lang
lang = load_lang_data(ROOT_DIR & "/src/lang")
generate lang, ROOT_DIR & "/projects/langs_vs80.vcproj"
generate lang, ROOT_DIR & "/projects/langs_vs90.vcproj"

View File

@@ -1,538 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="langs"
ProjectGUID="{0F066B23-18DF-4284-8265-F4A5E7E3B966}"
RootNamespace="langs"
SccProjectName=""
SccLocalPath=""
Keyword="MakeFileProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\bin\lang\"
IntermediateDirectory="..\objs\langs\"
ConfigurationType="10"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName="./langs.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"
Description="Generating strings.h"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<File
RelativePath="..\src\lang\afrikaans.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating afrikaans language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\afrikaans.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\brazilian_portuguese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating brazilian_portuguese language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\brazilian_portuguese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\bulgarian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating bulgarian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\bulgarian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\catalan.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating catalan language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\catalan.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\croatian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating croatian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\croatian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\czech.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating czech language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\czech.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\danish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating danish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\danish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\dutch.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating dutch language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\dutch.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\english.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating english language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\english.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\english_US.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating english_US language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\english_US.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\esperanto.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating esperanto language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\esperanto.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\estonian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating estonian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\estonian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\finnish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating finnish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\finnish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\french.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating french language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\french.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\galician.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating galician language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\galician.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\german.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating german language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\german.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\hungarian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating hungarian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\hungarian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\icelandic.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating icelandic language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\icelandic.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\italian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating italian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\italian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\japanese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating japanese language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\japanese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\korean.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating korean language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\korean.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\lithuanian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating lithuanian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\lithuanian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\norwegian_bokmal.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating norwegian_bokmal language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\norwegian_bokmal.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\norwegian_nynorsk.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating norwegian_nynorsk language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\norwegian_nynorsk.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\origveh.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating origveh language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\origveh.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\piglatin.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating piglatin language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\piglatin.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\polish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating polish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\polish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\portuguese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating portuguese language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\portuguese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\romanian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating romanian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\romanian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\russian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating russian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\russian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\simplified_chinese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating simplified_chinese language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\simplified_chinese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\slovak.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating slovak language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\slovak.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\slovenian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating slovenian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\slovenian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\spanish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating spanish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\spanish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\swedish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating swedish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\swedish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\traditional_chinese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating traditional_chinese language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\traditional_chinese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\turkish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating turkish language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\turkish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\ukrainian.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating ukrainian language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;
"
AdditionalDependencies=""
Outputs="..\bin\lang\ukrainian.lng"/>
</FileConfiguration>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="langs"
ProjectGUID="{0F066B23-18DF-4284-8265-F4A5E7E3B966}"
RootNamespace="langs"
SccProjectName=""
SccLocalPath=""
Keyword="MakeFileProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\bin\lang\"
IntermediateDirectory="..\objs\langs\"
ConfigurationType="10"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE">
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName="./langs.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"
Description="Generating strings.h"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
!!FILES!!
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -1,43 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd.vcproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}"
ProjectSection(ProjectDependencies) = postProject
{0F066B23-18DF-4284-8265-F4A5E7E3B966} = {0F066B23-18DF-4284-8265-F4A5E7E3B966}
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen.vcproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs.vcproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}"
ProjectSection(ProjectDependencies) = postProject
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{668328A0-B40E-4CDB-BD72-D0064424414A}.Debug.ActiveCfg = Debug|Win32
{668328A0-B40E-4CDB-BD72-D0064424414A}.Debug.Build.0 = Debug|Win32
{668328A0-B40E-4CDB-BD72-D0064424414A}.Release.ActiveCfg = Release|Win32
{668328A0-B40E-4CDB-BD72-D0064424414A}.Release.Build.0 = Release|Win32
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug.ActiveCfg = Release|Win32
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug.Build.0 = Release|Win32
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release.ActiveCfg = Release|Win32
{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release.Build.0 = Release|Win32
{0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug.ActiveCfg = Debug|Win32
{0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug.Build.0 = Debug|Win32
{0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release.ActiveCfg = Debug|Win32
{0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release.Build.0 = Debug|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
GlobalSection(DPCodeReviewSolutionGUID) = preSolution
DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
EndGlobalSection
EndGlobal

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,177 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="openttd"
RootNamespace="openttd"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory="..\objs\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="..\objs\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="1"
WholeProgramOptimization="TRUE">
<Tool
Name="VCCLCompilerTool"
Optimization="3"
GlobalOptimizations="TRUE"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="TRUE"
FavorSizeOrSpeed="2"
OmitFramePointers="TRUE"
OptimizeForProcessor="1"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
StringPooling="TRUE"
ExceptionHandling="TRUE"
RuntimeLibrary="0"
StructMemberAlignment="3"
BufferSecurityCheck="FALSE"
EnableFunctionLevelLinking="TRUE"
DefaultCharIsUnsigned="TRUE"
UsePrecompiledHeader="0"
PrecompiledHeaderThrough=""
PrecompiledHeaderFile=""
AssemblerOutput="2"
AssemblerListingLocation="$(IntDir)/"
ObjectFile="$(IntDir)/"
ProgramDataBaseFileName="$(IntDir)/$(TargetName).pdb"
BrowseInformation="1"
BrowseInformationFile="$(IntDir)/"
WarningLevel="3"
WarnAsError="TRUE"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"
CallingConvention="1"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="winmm.lib ws2_32.lib libpng.lib zlibstat.lib dxguid.lib libfreetype2.lib"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
OptimizeForWindows98="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Release/openttd.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="&quot;$(InputDir)/determineversion.vbs&quot;"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1053"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\objs\$(PlatformName)\$(ConfigurationName)\"
IntermediateDirectory="..\objs\$(PlatformName)\$(ConfigurationName)\"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="1">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
AssemblerListingLocation="$(IntDir)/"
ObjectFile="$(IntDir)/"
ProgramDataBaseFileName="$(IntDir)/$(TargetName).pdb"
WarningLevel="3"
WarnAsError="TRUE"
SuppressStartupBanner="TRUE"
Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"
CallingConvention="1"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="unicows.lib winmm.lib ws2_32.lib libpng.lib zlibstat.lib dxguid.lib libfreetype2.lib"
LinkIncremental="0"
SuppressStartupBanner="TRUE"
IgnoreDefaultLibraryNames="LIBCMT.lib"
GenerateDebugInformation="TRUE"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Debug/openttd.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"
Description="Determining version number"
CommandLine="&quot;$(InputDir)/determineversion.vbs&quot;"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1053"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
!!FILES!!
<File
RelativePath=".\..\media\mainicon.ico">
</File>
<File
RelativePath=".\..\media\openttd.ico">
</File>
<File
RelativePath=".\..\readme.txt">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -61,7 +61,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -272,7 +272,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -455,6 +455,10 @@
RelativePath=".\..\src\airport.cpp"
>
</File>
<File
RelativePath=".\..\src\core\alloc_func.cpp"
>
</File>
<File
RelativePath=".\..\src\articulated_vehicles.cpp"
>
@@ -467,6 +471,10 @@
RelativePath=".\..\src\aystar.cpp"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.cpp"
>
</File>
<File
RelativePath=".\..\src\bmp.cpp"
>
@@ -495,14 +503,6 @@
RelativePath=".\..\src\console_cmds.cpp"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.cpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.cpp"
>
</File>
<File
RelativePath=".\..\src\currency.cpp"
>
@@ -527,6 +527,10 @@
RelativePath=".\..\src\driver.cpp"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.cpp"
>
</File>
<File
RelativePath=".\..\src\economy.cpp"
>
@@ -667,6 +671,10 @@
RelativePath=".\..\src\rail.cpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.cpp"
>
</File>
<File
RelativePath=".\..\src\rev.cpp"
>
@@ -751,10 +759,6 @@
RelativePath=".\..\src\widget.cpp"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.cpp"
>
</File>
<File
RelativePath=".\..\src\win32.cpp"
>
@@ -779,10 +783,30 @@
RelativePath=".\..\src\airport_movement.h"
>
</File>
<File
RelativePath=".\..\src\core\alloc_func.hpp"
>
</File>
<File
RelativePath=".\..\src\articulated_vehicles.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_base.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_func.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_gui.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_type.h"
>
</File>
<File
RelativePath=".\..\src\autoslope.h"
>
@@ -791,10 +815,26 @@
RelativePath=".\..\src\aystar.h"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.hpp"
>
</File>
<File
RelativePath=".\..\src\bmp.h"
>
</File>
<File
RelativePath=".\..\src\bridge.h"
>
</File>
<File
RelativePath=".\..\src\callback_table.h"
>
</File>
<File
RelativePath=".\..\src\cargo_type.h"
>
</File>
<File
RelativePath=".\..\src\cargopacket.h"
>
@@ -804,31 +844,31 @@
>
</File>
<File
RelativePath=".\..\src\command.h"
RelativePath=".\..\src\cmd_helper.h"
>
</File>
<File
RelativePath=".\..\src\command_func.h"
>
</File>
<File
RelativePath=".\..\src\command_type.h"
>
</File>
<File
RelativePath=".\..\src\console.h"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\math_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.hpp"
>
</File>
<File
RelativePath=".\..\src\currency.h"
>
</File>
<File
RelativePath=".\..\src\date.h"
RelativePath=".\..\src\date_func.h"
>
</File>
<File
RelativePath=".\..\src\date_type.h"
>
</File>
<File
@@ -844,7 +884,11 @@
>
</File>
<File
RelativePath=".\..\src\direction.h"
RelativePath=".\..\src\direction_func.h"
>
</File>
<File
RelativePath=".\..\src\direction_type.h"
>
</File>
<File
@@ -856,13 +900,33 @@
>
</File>
<File
RelativePath=".\..\src\economy.h"
RelativePath=".\..\src\widgets\dropdown_func.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_type.h"
>
</File>
<File
RelativePath=".\..\src\economy_func.h"
>
</File>
<File
RelativePath=".\..\src\economy_type.h"
>
</File>
<File
RelativePath=".\..\src\core\endian_func.hpp"
>
</File>
<File
RelativePath=".\..\src\engine.h"
>
</File>
<File
RelativePath=".\..\src\core\enum_type.hpp"
>
</File>
<File
RelativePath=".\..\src\fileio.h"
>
@@ -884,7 +948,15 @@
>
</File>
<File
RelativePath=".\..\src\gfx.h"
RelativePath=".\..\src\core\geometry_type.hpp"
>
</File>
<File
RelativePath=".\..\src\gfx_func.h"
>
</File>
<File
RelativePath=".\..\src\gfx_type.h"
>
</File>
<File
@@ -895,6 +967,10 @@
RelativePath=".\..\src\group.h"
>
</File>
<File
RelativePath=".\..\src\group_gui.h"
>
</File>
<File
RelativePath=".\..\src\gui.h"
>
@@ -907,6 +983,10 @@
RelativePath=".\..\src\industry.h"
>
</File>
<File
RelativePath=".\..\src\industry_type.h"
>
</File>
<File
RelativePath=".\..\src\landscape.h"
>
@@ -916,7 +996,7 @@
>
</File>
<File
RelativePath=".\..\src\map.h"
RelativePath=".\..\src\core\math_func.hpp"
>
</File>
<File
@@ -951,6 +1031,10 @@
RelativePath=".\..\src\network\network_gui.h"
>
</File>
<File
RelativePath=".\..\src\network\network_internal.h"
>
</File>
<File
RelativePath=".\..\src\network\network_server.h"
>
@@ -987,6 +1071,10 @@
RelativePath=".\..\src\newgrf_engine.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_generic.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_house.h"
>
@@ -1055,18 +1143,38 @@
RelativePath=".\..\src\openttd.h"
>
</File>
<File
RelativePath=".\..\src\order.h"
>
</File>
<File
RelativePath=".\..\src\core\overflowsafe_type.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfind.h"
>
</File>
<File
RelativePath=".\..\src\player.h"
RelativePath=".\..\src\player_base.h"
>
</File>
<File
RelativePath=".\..\src\player_face.h"
>
</File>
<File
RelativePath=".\..\src\player_func.h"
>
</File>
<File
RelativePath=".\..\src\player_gui.h"
>
</File>
<File
RelativePath=".\..\src\player_type.h"
>
</File>
<File
RelativePath=".\..\src\queue.h"
>
@@ -1075,10 +1183,42 @@
RelativePath=".\..\src\rail.h"
>
</File>
<File
RelativePath=".\..\src\rail_gui.h"
>
</File>
<File
RelativePath=".\..\src\rail_type.h"
>
</File>
<File
RelativePath=".\..\src\core\random_func.hpp"
>
</File>
<File
RelativePath=".\..\src\road_cmd.h"
>
</File>
<File
RelativePath=".\..\src\road_func.h"
>
</File>
<File
RelativePath=".\..\src\road_gui.h"
>
</File>
<File
RelativePath=".\..\src\road_internal.h"
>
</File>
<File
RelativePath=".\..\src\road_type.h"
>
</File>
<File
RelativePath=".\..\src\roadveh.h"
>
</File>
<File
RelativePath=".\..\src\saveload.h"
>
@@ -1096,11 +1236,19 @@
>
</File>
<File
RelativePath=".\..\src\settings.h"
RelativePath=".\..\src\settings_func.h"
>
</File>
<File
RelativePath=".\..\src\signs.h"
RelativePath=".\..\src\settings_internal.h"
>
</File>
<File
RelativePath=".\..\src\settings_type.h"
>
</File>
<File
RelativePath=".\..\src\ship.h"
>
</File>
<File
@@ -1108,11 +1256,23 @@
>
</File>
<File
RelativePath=".\..\src\slope.h"
RelativePath=".\..\src\signs.h"
>
</File>
<File
RelativePath=".\..\src\sound.h"
RelativePath=".\..\src\slope_func.h"
>
</File>
<File
RelativePath=".\..\src\slope_type.h"
>
</File>
<File
RelativePath=".\..\src\sound_func.h"
>
</File>
<File
RelativePath=".\..\src\sound_type.h"
>
</File>
<File
@@ -1136,7 +1296,27 @@
>
</File>
<File
RelativePath=".\..\src\string.h"
RelativePath=".\..\src\string_func.h"
>
</File>
<File
RelativePath=".\..\src\string_type.h"
>
</File>
<File
RelativePath=".\..\src\strings_func.h"
>
</File>
<File
RelativePath=".\..\src\strings_type.h"
>
</File>
<File
RelativePath=".\..\src\terraform_gui.h"
>
</File>
<File
RelativePath=".\..\src\textbuf_gui.h"
>
</File>
<File
@@ -1152,7 +1332,11 @@
>
</File>
<File
RelativePath=".\..\src\tile.h"
RelativePath=".\..\src\tile_cmd.h"
>
</File>
<File
RelativePath=".\..\src\tile_type.h"
>
</File>
<File
@@ -1163,6 +1347,18 @@
RelativePath=".\..\src\town.h"
>
</File>
<File
RelativePath=".\..\src\town_type.h"
>
</File>
<File
RelativePath=".\..\src\track_func.h"
>
</File>
<File
RelativePath=".\..\src\track_type.h"
>
</File>
<File
RelativePath=".\..\src\train.h"
>
@@ -1175,12 +1371,24 @@
RelativePath=".\..\src\transparency_gui.h"
>
</File>
<File
RelativePath=".\..\src\tunnelbridge.h"
>
</File>
<File
RelativePath=".\..\src\unmovable.h"
>
</File>
<File
RelativePath=".\..\src\variables.h"
>
</File>
<File
RelativePath=".\..\src\vehicle.h"
RelativePath=".\..\src\vehicle_base.h"
>
</File>
<File
RelativePath=".\..\src\vehicle_func.h"
>
</File>
<File
@@ -1188,7 +1396,7 @@
>
</File>
<File
RelativePath=".\..\src\viewport.h"
RelativePath=".\..\src\vehicle_type.h"
>
</File>
<File
@@ -1208,23 +1416,23 @@
>
</File>
<File
RelativePath=".\..\src\window.h"
RelativePath=".\..\src\window_func.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.h"
RelativePath=".\..\src\window_gui.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_type.h"
RelativePath=".\..\src\window_type.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_func.h"
RelativePath=".\..\src\zoom_func.h"
>
</File>
<File
RelativePath=".\..\src\zoom.hpp"
RelativePath=".\..\src\zoom_type.h"
>
</File>
</Filter>
@@ -1524,7 +1732,7 @@
>
</File>
<File
RelativePath=".\..\src\table\roadveh.h"
RelativePath=".\..\src\table\roadveh_movement.h"
>
</File>
<File
@@ -1743,6 +1951,10 @@
RelativePath=".\..\src\newgrf_engine.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_generic.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_house.cpp"
>
@@ -1819,6 +2031,10 @@
RelativePath=".\..\src\station_map.h"
>
</File>
<File
RelativePath=".\..\src\tile_map.h"
>
</File>
<File
RelativePath=".\..\src\town_map.h"
>
@@ -1959,10 +2175,6 @@
<Filter
Name="YAPF"
>
<File
RelativePath=".\..\src\yapf\follow_track.cpp"
>
</File>
<File
RelativePath=".\..\src\yapf\follow_track.hpp"
>
@@ -1987,10 +2199,6 @@
RelativePath=".\..\src\yapf\yapf_base.hpp"
>
</File>
<File
RelativePath=".\..\src\yapf\yapf_common.cpp"
>
</File>
<File
RelativePath=".\..\src\yapf\yapf_common.hpp"
>

View File

@@ -61,7 +61,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -272,7 +272,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"

View File

@@ -62,7 +62,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -270,7 +270,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -452,6 +452,10 @@
RelativePath=".\..\src\airport.cpp"
>
</File>
<File
RelativePath=".\..\src\core\alloc_func.cpp"
>
</File>
<File
RelativePath=".\..\src\articulated_vehicles.cpp"
>
@@ -464,6 +468,10 @@
RelativePath=".\..\src\aystar.cpp"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.cpp"
>
</File>
<File
RelativePath=".\..\src\bmp.cpp"
>
@@ -492,14 +500,6 @@
RelativePath=".\..\src\console_cmds.cpp"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.cpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.cpp"
>
</File>
<File
RelativePath=".\..\src\currency.cpp"
>
@@ -524,6 +524,10 @@
RelativePath=".\..\src\driver.cpp"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.cpp"
>
</File>
<File
RelativePath=".\..\src\economy.cpp"
>
@@ -664,6 +668,10 @@
RelativePath=".\..\src\rail.cpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.cpp"
>
</File>
<File
RelativePath=".\..\src\rev.cpp"
>
@@ -748,10 +756,6 @@
RelativePath=".\..\src\widget.cpp"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.cpp"
>
</File>
<File
RelativePath=".\..\src\win32.cpp"
>
@@ -776,10 +780,30 @@
RelativePath=".\..\src\airport_movement.h"
>
</File>
<File
RelativePath=".\..\src\core\alloc_func.hpp"
>
</File>
<File
RelativePath=".\..\src\articulated_vehicles.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_base.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_func.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_gui.h"
>
</File>
<File
RelativePath=".\..\src\autoreplace_type.h"
>
</File>
<File
RelativePath=".\..\src\autoslope.h"
>
@@ -788,10 +812,26 @@
RelativePath=".\..\src\aystar.h"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.hpp"
>
</File>
<File
RelativePath=".\..\src\bmp.h"
>
</File>
<File
RelativePath=".\..\src\bridge.h"
>
</File>
<File
RelativePath=".\..\src\callback_table.h"
>
</File>
<File
RelativePath=".\..\src\cargo_type.h"
>
</File>
<File
RelativePath=".\..\src\cargopacket.h"
>
@@ -801,31 +841,31 @@
>
</File>
<File
RelativePath=".\..\src\command.h"
RelativePath=".\..\src\cmd_helper.h"
>
</File>
<File
RelativePath=".\..\src\command_func.h"
>
</File>
<File
RelativePath=".\..\src\command_type.h"
>
</File>
<File
RelativePath=".\..\src\console.h"
>
</File>
<File
RelativePath=".\..\src\core\bitmath_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\math_func.hpp"
>
</File>
<File
RelativePath=".\..\src\core\random_func.hpp"
>
</File>
<File
RelativePath=".\..\src\currency.h"
>
</File>
<File
RelativePath=".\..\src\date.h"
RelativePath=".\..\src\date_func.h"
>
</File>
<File
RelativePath=".\..\src\date_type.h"
>
</File>
<File
@@ -841,7 +881,11 @@
>
</File>
<File
RelativePath=".\..\src\direction.h"
RelativePath=".\..\src\direction_func.h"
>
</File>
<File
RelativePath=".\..\src\direction_type.h"
>
</File>
<File
@@ -853,13 +897,33 @@
>
</File>
<File
RelativePath=".\..\src\economy.h"
RelativePath=".\..\src\widgets\dropdown_func.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_type.h"
>
</File>
<File
RelativePath=".\..\src\economy_func.h"
>
</File>
<File
RelativePath=".\..\src\economy_type.h"
>
</File>
<File
RelativePath=".\..\src\core\endian_func.hpp"
>
</File>
<File
RelativePath=".\..\src\engine.h"
>
</File>
<File
RelativePath=".\..\src\core\enum_type.hpp"
>
</File>
<File
RelativePath=".\..\src\fileio.h"
>
@@ -881,7 +945,15 @@
>
</File>
<File
RelativePath=".\..\src\gfx.h"
RelativePath=".\..\src\core\geometry_type.hpp"
>
</File>
<File
RelativePath=".\..\src\gfx_func.h"
>
</File>
<File
RelativePath=".\..\src\gfx_type.h"
>
</File>
<File
@@ -892,6 +964,10 @@
RelativePath=".\..\src\group.h"
>
</File>
<File
RelativePath=".\..\src\group_gui.h"
>
</File>
<File
RelativePath=".\..\src\gui.h"
>
@@ -904,6 +980,10 @@
RelativePath=".\..\src\industry.h"
>
</File>
<File
RelativePath=".\..\src\industry_type.h"
>
</File>
<File
RelativePath=".\..\src\landscape.h"
>
@@ -913,7 +993,7 @@
>
</File>
<File
RelativePath=".\..\src\map.h"
RelativePath=".\..\src\core\math_func.hpp"
>
</File>
<File
@@ -948,6 +1028,10 @@
RelativePath=".\..\src\network\network_gui.h"
>
</File>
<File
RelativePath=".\..\src\network\network_internal.h"
>
</File>
<File
RelativePath=".\..\src\network\network_server.h"
>
@@ -984,6 +1068,10 @@
RelativePath=".\..\src\newgrf_engine.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_generic.h"
>
</File>
<File
RelativePath=".\..\src\newgrf_house.h"
>
@@ -1052,18 +1140,38 @@
RelativePath=".\..\src\openttd.h"
>
</File>
<File
RelativePath=".\..\src\order.h"
>
</File>
<File
RelativePath=".\..\src\core\overflowsafe_type.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfind.h"
>
</File>
<File
RelativePath=".\..\src\player.h"
RelativePath=".\..\src\player_base.h"
>
</File>
<File
RelativePath=".\..\src\player_face.h"
>
</File>
<File
RelativePath=".\..\src\player_func.h"
>
</File>
<File
RelativePath=".\..\src\player_gui.h"
>
</File>
<File
RelativePath=".\..\src\player_type.h"
>
</File>
<File
RelativePath=".\..\src\queue.h"
>
@@ -1072,10 +1180,42 @@
RelativePath=".\..\src\rail.h"
>
</File>
<File
RelativePath=".\..\src\rail_gui.h"
>
</File>
<File
RelativePath=".\..\src\rail_type.h"
>
</File>
<File
RelativePath=".\..\src\core\random_func.hpp"
>
</File>
<File
RelativePath=".\..\src\road_cmd.h"
>
</File>
<File
RelativePath=".\..\src\road_func.h"
>
</File>
<File
RelativePath=".\..\src\road_gui.h"
>
</File>
<File
RelativePath=".\..\src\road_internal.h"
>
</File>
<File
RelativePath=".\..\src\road_type.h"
>
</File>
<File
RelativePath=".\..\src\roadveh.h"
>
</File>
<File
RelativePath=".\..\src\saveload.h"
>
@@ -1093,11 +1233,19 @@
>
</File>
<File
RelativePath=".\..\src\settings.h"
RelativePath=".\..\src\settings_func.h"
>
</File>
<File
RelativePath=".\..\src\signs.h"
RelativePath=".\..\src\settings_internal.h"
>
</File>
<File
RelativePath=".\..\src\settings_type.h"
>
</File>
<File
RelativePath=".\..\src\ship.h"
>
</File>
<File
@@ -1105,11 +1253,23 @@
>
</File>
<File
RelativePath=".\..\src\slope.h"
RelativePath=".\..\src\signs.h"
>
</File>
<File
RelativePath=".\..\src\sound.h"
RelativePath=".\..\src\slope_func.h"
>
</File>
<File
RelativePath=".\..\src\slope_type.h"
>
</File>
<File
RelativePath=".\..\src\sound_func.h"
>
</File>
<File
RelativePath=".\..\src\sound_type.h"
>
</File>
<File
@@ -1133,7 +1293,27 @@
>
</File>
<File
RelativePath=".\..\src\string.h"
RelativePath=".\..\src\string_func.h"
>
</File>
<File
RelativePath=".\..\src\string_type.h"
>
</File>
<File
RelativePath=".\..\src\strings_func.h"
>
</File>
<File
RelativePath=".\..\src\strings_type.h"
>
</File>
<File
RelativePath=".\..\src\terraform_gui.h"
>
</File>
<File
RelativePath=".\..\src\textbuf_gui.h"
>
</File>
<File
@@ -1149,7 +1329,11 @@
>
</File>
<File
RelativePath=".\..\src\tile.h"
RelativePath=".\..\src\tile_cmd.h"
>
</File>
<File
RelativePath=".\..\src\tile_type.h"
>
</File>
<File
@@ -1160,6 +1344,18 @@
RelativePath=".\..\src\town.h"
>
</File>
<File
RelativePath=".\..\src\town_type.h"
>
</File>
<File
RelativePath=".\..\src\track_func.h"
>
</File>
<File
RelativePath=".\..\src\track_type.h"
>
</File>
<File
RelativePath=".\..\src\train.h"
>
@@ -1172,12 +1368,24 @@
RelativePath=".\..\src\transparency_gui.h"
>
</File>
<File
RelativePath=".\..\src\tunnelbridge.h"
>
</File>
<File
RelativePath=".\..\src\unmovable.h"
>
</File>
<File
RelativePath=".\..\src\variables.h"
>
</File>
<File
RelativePath=".\..\src\vehicle.h"
RelativePath=".\..\src\vehicle_base.h"
>
</File>
<File
RelativePath=".\..\src\vehicle_func.h"
>
</File>
<File
@@ -1185,7 +1393,7 @@
>
</File>
<File
RelativePath=".\..\src\viewport.h"
RelativePath=".\..\src\vehicle_type.h"
>
</File>
<File
@@ -1205,23 +1413,23 @@
>
</File>
<File
RelativePath=".\..\src\window.h"
RelativePath=".\..\src\window_func.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown.h"
RelativePath=".\..\src\window_gui.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_type.h"
RelativePath=".\..\src\window_type.h"
>
</File>
<File
RelativePath=".\..\src\widgets\dropdown_func.h"
RelativePath=".\..\src\zoom_func.h"
>
</File>
<File
RelativePath=".\..\src\zoom.hpp"
RelativePath=".\..\src\zoom_type.h"
>
</File>
</Filter>
@@ -1521,7 +1729,7 @@
>
</File>
<File
RelativePath=".\..\src\table\roadveh.h"
RelativePath=".\..\src\table\roadveh_movement.h"
>
</File>
<File
@@ -1740,6 +1948,10 @@
RelativePath=".\..\src\newgrf_engine.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_generic.cpp"
>
</File>
<File
RelativePath=".\..\src\newgrf_house.cpp"
>
@@ -1816,6 +2028,10 @@
RelativePath=".\..\src\station_map.h"
>
</File>
<File
RelativePath=".\..\src\tile_map.h"
>
</File>
<File
RelativePath=".\..\src\town_map.h"
>
@@ -1956,10 +2172,6 @@
<Filter
Name="YAPF"
>
<File
RelativePath=".\..\src\yapf\follow_track.cpp"
>
</File>
<File
RelativePath=".\..\src\yapf\follow_track.hpp"
>
@@ -1984,10 +2196,6 @@
RelativePath=".\..\src\yapf\yapf_base.hpp"
>
</File>
<File
RelativePath=".\..\src\yapf\yapf_common.cpp"
>
</File>
<File
RelativePath=".\..\src\yapf\yapf_common.hpp"
>

View File

@@ -62,7 +62,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"
@@ -270,7 +270,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
AdditionalIncludeDirectories="..\objs\langs"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\&quot;OpenTTD\&quot;;WITH_ASSERT"
StringPooling="true"
ExceptionHandling="1"
RuntimeLibrary="0"

View File

@@ -1,101 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="strgen"
RootNamespace="strgen"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory="..\objs\strgen\"
IntermediateDirectory="..\objs\strgen\"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="1"
GlobalOptimizations="TRUE"
FavorSizeOrSpeed="2"
PreprocessorDefinitions="STRGEN;WIN32;NDEBUG;_CONSOLE"
BasicRuntimeChecks="0"
RuntimeLibrary="5"
PrecompiledHeaderFile=""
AssemblerOutput="2"
AssemblerListingLocation="$(IntDir)"
ObjectFile="$(IntDir)"
ProgramDataBaseFileName="$(IntDir)\$(TargetName).pdb"
WarningLevel="3"
WarnAsError="TRUE"
SuppressStartupBanner="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(IntDir)\strgen.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(IntDir)\strgen.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Debug/strgen.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1053"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="..\src\strgen\strgen.cpp">
</File>
<File
RelativePath="..\src\string.cpp">
</File>
</Filter>
<File
RelativePath="..\src\macros.h">
</File>
<File
RelativePath="..\src\stdafx.h">
</File>
<File
RelativePath="..\src\string.h">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -112,6 +112,10 @@
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="..\src\core\alloc_func.cpp"
>
</File>
<File
RelativePath="..\src\strgen\strgen.cpp"
>
@@ -122,7 +126,19 @@
</File>
</Filter>
<File
RelativePath="..\src\macros.h"
RelativePath="..\src\core\alloc_func.hpp"
>
</File>
<File
RelativePath="..\src\table\control_codes.h"
>
</File>
<File
RelativePath="..\src\debug.h"
>
</File>
<File
RelativePath="..\src\core\endian_func.hpp"
>
</File>
<File

View File

@@ -112,6 +112,10 @@
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="..\src\core\alloc_func.cpp"
>
</File>
<File
RelativePath="..\src\strgen\strgen.cpp"
>
@@ -122,7 +126,19 @@
</File>
</Filter>
<File
RelativePath="..\src\macros.h"
RelativePath="..\src\core\alloc_func.hpp"
>
</File>
<File
RelativePath="..\src\table\control_codes.h"
>
</File>
<File
RelativePath="..\src\debug.h"
>
</File>
<File
RelativePath="..\src\core\endian_func.hpp"
>
</File>
<File

View File

@@ -1,6 +1,6 @@
OpenTTD README
Last updated: 2008-01-16
Release version: 0.6.0-beta3
Last updated: 2008-03-04
Release version: 0.6.0-beta5
------------------------------------------------------------------------
@@ -11,6 +11,9 @@ Table of Contents:
* 2.1 Reporting Bugs
3.0) Supported Platforms
4.0) Installing and running OpenTTD
* 4.1 (Required) 3rd party files
* 4.2 OpenTTD directories
* 4.3 Portable Installations (External Media)
5.0) OpenTTD features
6.0) Configuration File
7.0) Compiling
@@ -88,25 +91,100 @@ archive which you have to extract to a directory where you want OpenTTD to
be installed, or you have downloaded an installer, which will automatically
extract OpenTTD in the given directory.
Before you run OpenTTD, you need to put the game's datafiles into the data/
subdirectory. You need the following files from the original version
of TTD as OpenTTD makes use of the original TTD artwork. The Windows
installer optionally can copy these files from your Transport Tycoon Deluxe
CD-ROM.
OpenTTD looks in multiple locations to find the required data files (described
in section 4.2). Installing any 3rd party files into a "shared" location has
the advantage that you only need to do this step once, rather than copying the
data files into all OpenTTD versions you have.
Savegames, screenshots, etc are saved relative to the config file (openttd.cfg)
currently being used. This means that if you use a config file in one of the
shared directories, savegames will reside in the save/ directory next to the
openttd.cfg file there.
If you want savegames and screenshots in the directory where the OpenTTD binary
resides, simply have your config file in that location. But if you remove this
config file, savegames will still be in this directory (see notes in section 4.2)
4.1) (Required) 3rd party files:
---- ---------------------------
Before you run OpenTTD, you need to put the game's datafiles into a data/
directory which can be located in various places addressed in the following
section.
As OpenTTD makes use of the original TTD artwork you will need the files listed
below, which you can find on a Transport Tycoon Deluxe CD-ROM.
The Windows installer optionally can copy these files from that CD-ROM.
List of the required files:
sample.cat
trg1r.grf
trgcr.grf
trghr.grf
trgir.grf
trgtr.grf
- sample.cat
- trg1r.grf
- trgcr.grf
- trghr.grf
- trgir.grf
- trgtr.grf
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF,
TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF.
Alternatively you can use the TTD GRF files from the DOS version:
- TRG1.GRF
- TRGC.GRF
- TRGH.GRF
- TRGI.GRF
- TRGT.GRF
If you want music you need to copy the gm/ folder from Windows TTD into your
OpenTTD folder, not your data folder.
If you want the TTD music, copy the gm/ folder from the Windows version
of TTD to your OpenTTD folder (not your data folder - also explained in
the following sections).
Do NOT copy files included with OpenTTD into "shared" directories (explained in
the following sections) as sooner or later you will run into graphical glitches
when using other versions of the game.
4.2) OpenTTD directories
---- -------------------------------
The TTD artwork files listed in the section 4.1 "(Required) 3rd party files"
can be placed in a few different locations:
1. The current working directory (from where you started OpenTTD)
2. Your personal directory
Windows: C:\Documents and Settings\<username>\My Documents\OpenTTD
Mac OSX: ~/Documents/OpenTTD
Linux: ~/.openttd
3. The shared directory
Windows: C:\Documents and Settings\All Users\Documents\OpenTTD
Mac OSX: /Library/Application Support/OpenTTD
Linux: not available
4. The binary directory (where the OpenTTD executable is)
Windows: C:\Program Files\OpenTTD
Linux: /usr/games
5. The installation directory (Linux only)
Linux: /usr/share/games/openttd
6. The application bundle (Mac OSX only)
It includes the OTTD files (grf+lng) and it will work as long as they aren't touched
Notes:
- Linux in the previous list means .deb, but most paths should be similar for others.
- The previous search order is also used for newgrfs and openttd.cfg.
- If openttd.cfg is not found, then it will be created using the 2, 4, 1, 3, 5 order.
- Savegames will be relative to the config file only if there is no save/
directory in paths with higher priority than the config file path, but
autosaves and screenshots will always be relative to the config file.
The prefered setup:
Place 3rd party files in shared directory (or in personal directory if you don't
have write access on shared directory) and have your openttd.cfg config file in
personal directory (where the game will then also place savegames and screenshots).
4.3) Portable Installations (External Media):
---- ----------------------------------------
You can install OpenTTD on external media so you can take it with you, i.e.
using a USB key, or a USB HDD, etc.
Create a directory where you shall store the game in (i.e. OpenTTD/).
Copy the binary (OpenTTD.exe, OpenTTD.app, openttd, etc), data/ and your
openttd.cfg to this directory.
You can copy binaries for any operating system into this directory, which will
allow you to play the game on nearly any computer you can attach the external
media to.
As always - additional grf files are stored in the data/ dir (for details,
again, see section 4.1).
5.0) OpenTTD features:
@@ -285,6 +363,7 @@ The OpenTTD team (in alphabetical order):
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
Loïc Guilloux (glx) - General coding
Christoph Elsenhans (frosch) - General coding
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
Jonathan Coome (Maedhros) - High priest of the newGRF Temple
Attila Bán (MiHaMiX) - WebTranslator, Nightlies, Wiki and bugtracker host

View File

@@ -1,8 +1,10 @@
# Source Files
airport.cpp
core/alloc_func.cpp
articulated_vehicles.cpp
autoreplace_cmd.cpp
aystar.cpp
core/bitmath_func.cpp
bmp.cpp
callback_table.cpp
cargopacket.cpp
@@ -10,14 +12,13 @@ cargotype.cpp
command.cpp
console.cpp
console_cmds.cpp
core/bitmath_func.cpp
core/random_func.cpp
currency.cpp
date.cpp
debug.cpp
dedicated.cpp
depot.cpp
driver.cpp
widgets/dropdown.cpp
economy.cpp
elrail.cpp
engine.cpp
@@ -58,6 +59,7 @@ pathfind.cpp
players.cpp
queue.cpp
rail.cpp
core/random_func.cpp
rev.cpp
road.cpp
saveload.cpp
@@ -93,7 +95,6 @@ vehicle.cpp
viewport.cpp
waypoint.cpp
widget.cpp
widgets/dropdown.cpp
#if WIN32
win32.cpp
#end
@@ -103,41 +104,60 @@ window.cpp
aircraft.h
airport.h
airport_movement.h
core/alloc_func.hpp
articulated_vehicles.h
autoreplace_base.h
autoreplace_func.h
autoreplace_gui.h
autoreplace_type.h
autoslope.h
aystar.h
core/bitmath_func.hpp
bmp.h
bridge.h
callback_table.h
cargo_type.h
cargopacket.h
cargotype.h
command.h
cmd_helper.h
command_func.h
command_type.h
console.h
core/bitmath_func.hpp
core/math_func.hpp
core/random_func.hpp
currency.h
date.h
date_func.h
date_type.h
debug.h
video/dedicated_v.h
depot.h
direction.h
direction_func.h
direction_type.h
music/dmusic.h
driver.h
economy.h
widgets/dropdown_func.h
widgets/dropdown_type.h
economy_func.h
economy_type.h
core/endian_func.hpp
engine.h
core/enum_type.hpp
fileio.h
fios.h
fontcache.h
functions.h
genworld.h
gfx.h
core/geometry_type.hpp
gfx_func.h
gfx_type.h
gfxinit.h
group.h
group_gui.h
gui.h
heightmap.h
industry.h
industry_type.h
landscape.h
livery.h
map.h
core/math_func.hpp
md5.h
mixer.h
music.h
@@ -146,6 +166,7 @@ network/network_client.h
network/network_data.h
network/network_gamelist.h
network/network_gui.h
network/network_internal.h
network/network_server.h
network/network_udp.h
newgrf.h
@@ -155,6 +176,7 @@ newgrf_cargo.h
newgrf_commons.h
newgrf_config.h
newgrf_engine.h
newgrf_generic.h
newgrf_house.h
newgrf_industries.h
newgrf_industrytiles.h
@@ -172,49 +194,79 @@ sound/null_s.h
video/null_v.h
oldpool.h
openttd.h
order.h
core/overflowsafe_type.hpp
pathfind.h
player.h
player_base.h
player_face.h
player_func.h
player_gui.h
player_type.h
queue.h
rail.h
rail_gui.h
rail_type.h
core/random_func.hpp
road_cmd.h
road_func.h
road_gui.h
road_internal.h
road_type.h
roadveh.h
saveload.h
screenshot.h
sound/sdl_s.h
video/sdl_v.h
settings.h
signs.h
settings_func.h
settings_internal.h
settings_type.h
ship.h
signal_func.h
slope.h
sound.h
signs.h
slope_func.h
slope_type.h
sound_func.h
sound_type.h
sprite.h
spritecache.h
station.h
station_gui.h
stdafx.h
string.h
string_func.h
string_type.h
strings_func.h
strings_type.h
terraform_gui.h
textbuf_gui.h
texteff.hpp
tgp.h
thread.h
tile.h
tile_cmd.h
tile_type.h
timetable.h
town.h
town_type.h
track_func.h
track_type.h
train.h
transparency.h
transparency_gui.h
tunnelbridge.h
unmovable.h
variables.h
vehicle.h
vehicle_base.h
vehicle_func.h
vehicle_gui.h
viewport.h
vehicle_type.h
waypoint.h
music/win32_m.h
sound/win32_s.h
video/win32_v.h
window.h
widgets/dropdown.h
widgets/dropdown_type.h
widgets/dropdown_func.h
zoom.hpp
window_func.h
window_gui.h
window_type.h
zoom_func.h
zoom_type.h
# GUI Source Code
aircraft_gui.cpp
@@ -292,7 +344,7 @@ table/landscape_sprite.h
table/namegen.h
table/palettes.h
table/road_land.h
table/roadveh.h
table/roadveh_movement.h
table/sprites.h
table/station_land.h
../objs/langs/table/strings.h
@@ -354,6 +406,7 @@ newgrf_cargo.cpp
newgrf_commons.cpp
newgrf_config.cpp
newgrf_engine.cpp
newgrf_generic.cpp
newgrf_house.cpp
newgrf_industries.cpp
newgrf_industrytiles.cpp
@@ -374,6 +427,7 @@ rail_map.h
road_map.cpp
road_map.h
station_map.h
tile_map.h
town_map.h
tree_map.h
tunnel_map.cpp
@@ -412,14 +466,12 @@ network/core/udp.cpp
network/core/udp.h
# YAPF
yapf/follow_track.cpp
yapf/follow_track.hpp
yapf/nodelist.hpp
yapf/track_dir.hpp
yapf/yapf.h
yapf/yapf.hpp
yapf/yapf_base.hpp
yapf/yapf_common.cpp
yapf/yapf_common.hpp
yapf/yapf_costbase.hpp
yapf/yapf_costcache.hpp

View File

@@ -10,6 +10,7 @@
#include "../player_base.h"
#include "ai.h"
#include "default/default.h"
#include "../signal_func.h"
AIStruct _ai;
AIPlayer _ai_player[MAX_PLAYERS];
@@ -159,6 +160,9 @@ static void AI_RunTick(PlayerID player)
AiDoGameLoop(p);
_is_old_ai_player = false;
}
/* AI could change some track, so update signals */
UpdateSignalsInBuffer();
}

View File

@@ -31,6 +31,7 @@
#include "../../player_base.h"
#include "../../settings_type.h"
#include "default.h"
#include "../../tunnelbridge.h"
#include "../../table/ai_rail.h"
@@ -68,10 +69,9 @@ enum {
};
static TrackBits GetRailTrackStatus(TileIndex tile)
static inline TrackBits GetRailTrackStatus(TileIndex tile)
{
uint32 r = GetTileTrackStatus(tile, TRANSPORT_RAIL, 0);
return (TrackBits)(byte) (r | r >> 8);
return TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_RAIL, 0));
}
@@ -111,8 +111,8 @@ static void AiStateVehLoop(Player *p)
/* not profitable? */
if (v->age >= 730 &&
v->profit_last_year < _price.station_value * 5 &&
v->profit_this_year < _price.station_value * 5) {
v->profit_last_year < _price.station_value * 5 * 256 &&
v->profit_this_year < _price.station_value * 5 * 256) {
_players_ai[p->index].state_counter = 0;
_players_ai[p->index].state = AIS_SELL_VEHICLE;
_players_ai[p->index].cur_veh = v;
@@ -139,10 +139,9 @@ static EngineID AiChooseTrainToBuild(RailType railtype, Money money, byte flag,
{
EngineID best_veh_index = INVALID_ENGINE;
byte best_veh_score = 0;
CommandCost ret;
EngineID i;
for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
FOR_ALL_ENGINEIDS_OF_TYPE(i, VEH_TRAIN) {
const RailVehicleInfo *rvi = RailVehInfo(i);
const Engine* e = GetEngine(i);
@@ -154,7 +153,10 @@ static EngineID AiChooseTrainToBuild(RailType railtype, Money money, byte flag,
continue;
}
ret = DoCommand(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
/* Don't choose an engine designated for passenger use for freight. */
if (rvi->ai_passenger_only != 0 && flag == 1) continue;
CommandCost ret = DoCommand(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
if (CmdSucceeded(ret) && ret.GetCost() <= money && rvi->ai_rank >= best_veh_score) {
best_veh_score = rvi->ai_rank;
best_veh_index = i;
@@ -168,14 +170,11 @@ static EngineID AiChooseRoadVehToBuild(CargoID cargo, Money money, TileIndex til
{
EngineID best_veh_index = INVALID_ENGINE;
int32 best_veh_rating = 0;
EngineID i = ROAD_ENGINES_INDEX;
EngineID end = i + NUM_ROAD_ENGINES;
EngineID i;
for (; i != end; i++) {
FOR_ALL_ENGINEIDS_OF_TYPE(i, VEH_ROAD) {
const RoadVehicleInfo *rvi = RoadVehInfo(i);
const Engine* e = GetEngine(i);
int32 rating;
CommandCost ret;
if (!HasBit(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
continue;
@@ -185,10 +184,10 @@ static EngineID AiChooseRoadVehToBuild(CargoID cargo, Money money, TileIndex til
if (rvi->cargo_type != cargo && !CanRefitTo(i, cargo)) continue;
/* Rate and compare the engine by speed & capacity */
rating = rvi->max_speed * rvi->capacity;
int rating = rvi->max_speed * rvi->capacity;
if (rating <= best_veh_rating) continue;
ret = DoCommand(tile, i, 0, 0, CMD_BUILD_ROAD_VEH);
CommandCost ret = DoCommand(tile, i, 0, 0, CMD_BUILD_ROAD_VEH);
if (CmdFailed(ret)) continue;
/* Add the cost of refitting */
@@ -202,23 +201,28 @@ static EngineID AiChooseRoadVehToBuild(CargoID cargo, Money money, TileIndex til
return best_veh_index;
}
static EngineID AiChooseAircraftToBuild(Money money, byte flag)
/**
* Choose aircraft to build.
* @param money current AI money
* @param forbidden forbidden flags - AIR_HELI = 0 (always allowed), AIR_CTOL = 1 (bit 0), AIR_FAST = 2 (bit 1)
* @return EngineID of aircraft to build
*/
static EngineID AiChooseAircraftToBuild(Money money, byte forbidden)
{
EngineID best_veh_index = INVALID_ENGINE;
Money best_veh_cost = 0;
EngineID i;
for (i = AIRCRAFT_ENGINES_INDEX; i != AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; i++) {
FOR_ALL_ENGINEIDS_OF_TYPE(i, VEH_AIRCRAFT) {
const Engine* e = GetEngine(i);
CommandCost ret;
if (!HasBit(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
continue;
}
if ((AircraftVehInfo(i)->subtype & AIR_CTOL) != flag) continue;
if ((AircraftVehInfo(i)->subtype & forbidden) != 0) continue;
ret = DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT);
CommandCost ret = DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT);
if (CmdSucceeded(ret) && ret.GetCost() <= money && ret.GetCost() >= best_veh_cost) {
best_veh_cost = ret.GetCost();
best_veh_index = i;
@@ -253,8 +257,24 @@ static EngineID AiChooseRoadVehToReplaceWith(const Player* p, const Vehicle* v)
static EngineID AiChooseAircraftToReplaceWith(const Player* p, const Vehicle* v)
{
Money avail_money = p->player_money + v->value;
/* determine forbidden aircraft bits */
byte forbidden = 0;
const Order *o;
FOR_VEHICLE_ORDERS(v, o) {
if (!o->IsValid()) continue;
if (!IsValidStationID(o->dest)) continue;
const Station *st = GetStation(o->dest);
if (!(st->facilities & FACIL_AIRPORT)) continue;
AirportFTAClass::Flags flags = st->Airport()->flags;
if (!(flags & AirportFTAClass::AIRPLANES)) forbidden |= AIR_CTOL | AIR_FAST; // no planes for heliports / oil rigs
if (flags & AirportFTAClass::SHORT_STRIP) forbidden |= AIR_FAST; // no fast planes for small airports
}
return AiChooseAircraftToBuild(
avail_money, AircraftVehInfo(v->engine_type)->subtype & AIR_CTOL
avail_money, forbidden
);
}
@@ -297,9 +317,9 @@ static void AiHandleGotoDepot(Player *p, int cmd)
static void AiRestoreVehicleOrders(Vehicle *v, BackuppedOrders *bak)
{
uint i;
if (bak->order == NULL) return;
for (i = 0; bak->order[i].type != OT_NOTHING; i++) {
for (uint i = 0; bak->order[i].type != OT_NOTHING; i++) {
if (!DoCommandP(0, v->index + (i << 16), PackOrder(&bak->order[i]), NULL, CMD_INSERT_ORDER | CMD_NO_TEST_IF_IN_NETWORK))
break;
}
@@ -338,7 +358,7 @@ static void AiHandleReplaceTrain(Player *p)
static void AiHandleReplaceRoadVeh(Player *p)
{
const Vehicle* v = _players_ai[p->index].cur_veh;
BackuppedOrders orderbak[1];
BackuppedOrders orderbak;
EngineID veh;
if (!v->IsStoppedInDepot()) {
@@ -350,14 +370,14 @@ static void AiHandleReplaceRoadVeh(Player *p)
if (veh != INVALID_ENGINE) {
TileIndex tile;
BackupVehicleOrders(v, orderbak);
BackupVehicleOrders(v, &orderbak);
tile = v->tile;
if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH)) &&
CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH))) {
VehicleID veh = _new_vehicle_id;
AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
AiRestoreVehicleOrders(GetVehicle(veh), &orderbak);
DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
DoCommand(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_SERVICE_INT);
}
@@ -367,7 +387,7 @@ static void AiHandleReplaceRoadVeh(Player *p)
static void AiHandleReplaceAircraft(Player *p)
{
const Vehicle* v = _players_ai[p->index].cur_veh;
BackuppedOrders orderbak[1];
BackuppedOrders orderbak;
EngineID veh;
if (!v->IsStoppedInDepot()) {
@@ -379,13 +399,13 @@ static void AiHandleReplaceAircraft(Player *p)
if (veh != INVALID_ENGINE) {
TileIndex tile;
BackupVehicleOrders(v, orderbak);
BackupVehicleOrders(v, &orderbak);
tile = v->tile;
if (CmdSucceeded(DoCommand(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT)) &&
CmdSucceeded(DoCommand(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT))) {
VehicleID veh = _new_vehicle_id;
AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
AiRestoreVehicleOrders(GetVehicle(veh), &orderbak);
DoCommand(0, veh, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
DoCommand(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_SERVICE_INT);
@@ -1369,7 +1389,7 @@ static void AiWantPassengerAircraftRoute(Player *p)
/* Get aircraft that would be bought for this route
* (probably, as conditions may change before the route is fully built,
* like running out of money and having to select different aircraft, etc ...) */
EngineID veh = AiChooseAircraftToBuild(p->player_money, _players_ai[p->index].build_kind != 0 ? 0 : AIR_CTOL);
EngineID veh = AiChooseAircraftToBuild(p->player_money, _players_ai[p->index].build_kind != 0 ? AIR_CTOL : 0);
/* No aircraft buildable mean no aircraft route */
if (veh == INVALID_ENGINE) return;
@@ -1583,7 +1603,7 @@ static void AiStateWantNewRoute(Player *p)
static bool AiCheckTrackResources(TileIndex tile, const AiDefaultBlockData *p, byte cargo)
{
uint rad = (_patches.modified_catchment) ? CA_TRAIN : 4;
uint rad = (_patches.modified_catchment) ? CA_TRAIN : CA_UNMODIFIED;
for (; p->mode != 4; p++) {
AcceptedCargo values;
@@ -1881,7 +1901,7 @@ struct AiRailPathFindData {
bool flag;
};
static bool AiEnumFollowTrack(TileIndex tile, AiRailPathFindData *a, int track, uint length, byte *state)
static bool AiEnumFollowTrack(TileIndex tile, AiRailPathFindData *a, int track, uint length)
{
if (a->flag) return true;
@@ -1903,7 +1923,7 @@ static bool AiDoFollowTrack(const Player* p)
arpfd.tile2 = _players_ai[p->index].cur_tile_a;
arpfd.flag = false;
arpfd.count = 0;
FollowTrack(_players_ai[p->index].cur_tile_a + TileOffsByDiagDir(_players_ai[p->index].cur_dir_a), 0x2000 | TRANSPORT_RAIL, 0, ReverseDiagDir(_players_ai[p->index].cur_dir_a),
FollowTrack(_players_ai[p->index].cur_tile_a + TileOffsByDiagDir(_players_ai[p->index].cur_dir_a), TRANSPORT_RAIL, 0, ReverseDiagDir(_players_ai[p->index].cur_dir_a),
(TPFEnumProc*)AiEnumFollowTrack, NULL, &arpfd);
return arpfd.count > 8;
}
@@ -2177,26 +2197,55 @@ static void AiBuildRailConstruct(Player *p)
_players_ai[p->index].cur_tile_a += TileOffsByDiagDir(_players_ai[p->index].cur_dir_a);
if (arf.best_ptr[0] & 0x80) {
int i;
int32 bridge_len = GetBridgeLength(arf.bridge_end_tile, _players_ai[p->index].cur_tile_a);
TileIndex t1 = _players_ai[p->index].cur_tile_a;
TileIndex t2 = arf.bridge_end_tile;
/* Figure out which (rail)bridge type to build
* start with best bridge, then go down to worse and worse bridges
* unnecessary to check for worst bridge (i=0), since AI will always build
* that. AI is so fucked up that fixing this small thing will probably not
* solve a thing
*/
for (i = MAX_BRIDGES - 1; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
CommandCost cost = DoCommand(arf.bridge_end_tile, _players_ai[p->index].cur_tile_a, i | (_players_ai[p->index].railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 5)) break;
int32 bridge_len = GetTunnelBridgeLength(t1, t2);
DiagDirection dir = (TileX(t1) == TileX(t2) ? DIAGDIR_SE : DIAGDIR_SW);
Track track = AxisToTrack(DiagDirToAxis(dir));
if (t2 < t1) dir = ReverseDiagDir(dir);
/* try to build a long rail instead of bridge... */
bool fail = false;
CommandCost cost;
TileIndex t = t1;
/* try to build one rail on each tile - can't use CMD_BUILD_RAILROAD_TRACK now, it can build one part of track without failing */
do {
cost = DoCommand(t, _players_ai[p->index].railtype_to_use, track, DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
/* do not allow building over existing track */
if (CmdFailed(cost) || IsTileType(t, MP_RAILWAY)) {
fail = true;
break;
}
t += TileOffsByDiagDir(dir);
} while (t != t2);
/* can we build long track? */
if (!fail) cost = DoCommand(t1, t2, _players_ai[p->index].railtype_to_use | (track << 4), DC_AUTO | DC_NO_WATER, CMD_BUILD_RAILROAD_TRACK);
if (!fail && CmdSucceeded(cost) && cost.GetCost() <= p->player_money) {
DoCommand(t1, t2, _players_ai[p->index].railtype_to_use | (track << 4), DC_AUTO | DC_NO_WATER | DC_EXEC, CMD_BUILD_RAILROAD_TRACK);
} else {
/* Figure out which (rail)bridge type to build
* start with best bridge, then go down to worse and worse bridges
* unnecessary to check for worst bridge (i=0), since AI will always build that. */
int i;
for (i = MAX_BRIDGES - 1; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
CommandCost cost = DoCommand(t1, t2, i | (_players_ai[p->index].railtype_to_use << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 1) && cost.GetCost() < ((p->player_money + _economy.max_loan - p->current_loan) >> 5)) break;
}
}
/* Build it */
DoCommand(t1, t2, i | (_players_ai[p->index].railtype_to_use << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
}
// Build it
DoCommand(arf.bridge_end_tile, _players_ai[p->index].cur_tile_a, i | (_players_ai[p->index].railtype_to_use << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
_players_ai[p->index].cur_tile_a = arf.bridge_end_tile;
_players_ai[p->index].cur_tile_a = t2;
_players_ai[p->index].state_counter = 0;
} else if (arf.best_ptr[0] & 0x40) {
// tunnel
@@ -2233,7 +2282,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
return false;
_players_ai[p->index].cur_tile_a = TILE_MASK(_build_tunnel_endtile - TileOffsByDiagDir(_players_ai[p->index].cur_dir_a));
return true;
} else {
} else { // IsBridge(tile)
// Check if the bridge points in the right direction.
// This is not really needed the first place AiRemoveTileAndGoForward is called.
if (DiagDirToAxis(GetTunnelBridgeDirection(tile)) != (_players_ai[p->index].cur_dir_a & 1)) return false;
@@ -2618,8 +2667,7 @@ static CommandCost AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBloc
_cleared_town = NULL;
if (p->mode == 2) {
if (IsTileType(c, MP_ROAD) &&
GetRoadTileType(c) == ROAD_TILE_NORMAL &&
if (IsNormalRoadTile(c) &&
(GetRoadBits(c, ROADTYPE_ROAD) & p->attr) != 0) {
roadflag |= 2;
@@ -2661,7 +2709,7 @@ clear_town_stuff:;
if (GetTileSlope(c, NULL) != SLOPE_FLAT) return CMD_ERROR;
if (!IsTileType(c, MP_ROAD) || GetRoadTileType(c) != ROAD_TILE_NORMAL) {
if (!IsNormalRoadTile(c)) {
ret = DoCommand(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return CMD_ERROR;
}
@@ -2829,14 +2877,14 @@ static bool AiCheckRoadPathBetter(AiRoadFinder *arf, const byte *p)
}
static bool AiEnumFollowRoad(TileIndex tile, AiRoadEnum *a, int track, uint length, byte *state)
static bool AiEnumFollowRoad(TileIndex tile, AiRoadEnum *a, int track, uint length)
{
uint dist = DistanceManhattan(tile, a->dest);
if (dist <= a->best_dist) {
TileIndex tile2 = TILE_MASK(tile + TileOffsByDiagDir(_dir_by_track[track]));
if (IsTileType(tile2, MP_ROAD) && GetRoadTileType(tile2) == ROAD_TILE_NORMAL) {
if (IsNormalRoadTile(tile2)) {
a->best_dist = dist;
a->best_tile = tile;
a->best_track = track;
@@ -2864,14 +2912,14 @@ static bool AiCheckRoadFinished(Player *p)
tile = TILE_MASK(_players_ai[p->index].cur_tile_a + TileOffsByDiagDir(dir));
if (IsRoadStopTile(tile) || IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
bits = GetTileTrackStatus(tile, TRANSPORT_ROAD, ROADTYPES_ROAD) & _ai_road_table_and[dir];
bits = TrackStatusToTrackdirBits(GetTileTrackStatus(tile, TRANSPORT_ROAD, ROADTYPES_ROAD)) & _ai_road_table_and[dir];
if (bits == 0) return false;
are.best_dist = (uint)-1;
uint i;
FOR_EACH_SET_BIT(i, bits) {
FollowTrack(tile, 0x3000 | TRANSPORT_ROAD, ROADTYPES_ROAD, (DiagDirection)_dir_by_track[i], (TPFEnumProc*)AiEnumFollowRoad, NULL, &are);
FollowTrack(tile, 0x1000 | TRANSPORT_ROAD, ROADTYPES_ROAD, (DiagDirection)_dir_by_track[i], (TPFEnumProc*)AiEnumFollowRoad, NULL, &are);
}
if (DistanceManhattan(tile, are.dest) <= are.best_dist) return false;
@@ -2918,7 +2966,7 @@ static inline void AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile,
tile_new = TILE_MASK(tile_new + TileOffsByDiagDir(dir2));
type = GetTileType(tile_new);
if (type == MP_CLEAR || type == MP_TREES || GetTileSlope(tile, NULL) != SLOPE_FLAT) {
if (type == MP_CLEAR || type == MP_TREES || GetTileSlope(tile_new, NULL) != SLOPE_FLAT) {
// Allow a bridge if either we have a tile that's water, rail or street,
// or if we found an up tile.
if (!flag) return;
@@ -3067,26 +3115,36 @@ do_some_terraform:
tile = TILE_MASK(_players_ai[p->index].cur_tile_a + TileOffsByDiagDir(_players_ai[p->index].cur_dir_a));
if (arf.best_ptr[0] & 0x80) {
int i;
int32 bridge_len;
_players_ai[p->index].cur_tile_a = arf.bridge_end_tile;
bridge_len = GetBridgeLength(tile, _players_ai[p->index].cur_tile_a); // tile
TileIndex t1 = tile;
TileIndex t2 = arf.bridge_end_tile;
/* Figure out what (road)bridge type to build
* start with best bridge, then go down to worse and worse bridges
* unnecessary to check for worse bridge (i=0), since AI will always build that.
*AI is so fucked up that fixing this small thing will probably not solve a thing
*/
for (i = 10; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
CommandCost cost = DoCommand(tile, _players_ai[p->index].cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 5)) break;
int32 bridge_len = GetTunnelBridgeLength(t1, t2);
Axis axis = (TileX(t1) == TileX(t2) ? AXIS_Y : AXIS_X);
/* try to build a long road instead of bridge - CMD_BUILD_LONG_ROAD has to fail if it couldn't build at least one piece! */
CommandCost cost = DoCommand(t2, t1, (t2 < t1 ? 1 : 2) | (axis << 2) | (ROADTYPE_ROAD << 3), DC_AUTO | DC_NO_WATER, CMD_BUILD_LONG_ROAD);
if (CmdSucceeded(cost) && cost.GetCost() <= p->player_money) {
DoCommand(t2, t1, (t2 < t1 ? 1 : 2) | (axis << 2) | (ROADTYPE_ROAD << 3), DC_AUTO | DC_EXEC | DC_NO_WATER, CMD_BUILD_LONG_ROAD);
} else {
int i;
/* Figure out what (road)bridge type to build
* start with best bridge, then go down to worse and worse bridges
* unnecessary to check for worse bridge (i=0), since AI will always build that */
for (i = MAX_BRIDGES - 1; i != 0; i--) {
if (CheckBridge_Stuff(i, bridge_len)) {
CommandCost cost = DoCommand(t1, t2, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE);
if (CmdSucceeded(cost) && cost.GetCost() < (p->player_money >> 1) && cost.GetCost() < ((p->player_money + _economy.max_loan - p->current_loan) >> 5)) break;
}
}
/* Build it */
DoCommand(t1, t2, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
}
// Build it
DoCommand(tile, _players_ai[p->index].cur_tile_a, i + ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO | DC_EXEC, CMD_BUILD_BRIDGE);
_players_ai[p->index].cur_tile_a = t2;
_players_ai[p->index].state_counter = 0;
} else if (arf.best_ptr[0] & 0x40) {
// tunnel
@@ -3389,7 +3447,7 @@ static bool AiCheckAirportResources(TileIndex tile, const AiDefaultBlockData *p,
const AirportFTAClass* airport = GetAirport(p->attr);
uint w = airport->size_x;
uint h = airport->size_y;
uint rad = _patches.modified_catchment ? airport->catchment : 4;
uint rad = _patches.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
if (cargo & 0x80) {
GetProductionAroundTiles(values, tile2, w, h, rad);
@@ -3508,7 +3566,20 @@ static void AiStateBuildAircraftVehicles(Player *p)
tile = TILE_ADD(_players_ai[p->index].src.use_tile, ToTileIndexDiff(ptr->tileoffs));
veh = AiChooseAircraftToBuild(p->player_money, _players_ai[p->index].build_kind != 0 ? 0 : AIR_CTOL);
/* determine forbidden aircraft bits */
byte forbidden = 0;
for (i = 0; _players_ai[p->index].order_list_blocks[i] != 0xFF; i++) {
const AiBuildRec *aib = (&_players_ai[p->index].src) + _players_ai[p->index].order_list_blocks[i];
const Station *st = GetStationByTile(aib->use_tile);
if (st == NULL || !(st->facilities & FACIL_AIRPORT)) continue;
AirportFTAClass::Flags flags = st->Airport()->flags;
if (!(flags & AirportFTAClass::AIRPLANES)) forbidden |= AIR_CTOL | AIR_FAST; // no planes for heliports / oil rigs
if (flags & AirportFTAClass::SHORT_STRIP) forbidden |= AIR_FAST; // no fast planes for small airports
}
veh = AiChooseAircraftToBuild(p->player_money, forbidden);
if (veh == INVALID_ENGINE) return;
/* XXX - Have the AI pick the hangar terminal in an airport. Eg get airport-type
@@ -3706,7 +3777,7 @@ pos_3:
if (IsLevelCrossing(tile)) goto is_rail_crossing;
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT) {
if (IsRoadDepot(tile)) {
DiagDirection dir;
TileIndex t;

View File

@@ -15,6 +15,8 @@
#include "../../player_base.h"
#include "../../player_func.h"
#include "../ai.h"
#include "../../tunnelbridge.h"
// Build HQ
// Params:
@@ -58,7 +60,7 @@ CommandCost AiNew_Build_Bridge(Player *p, TileIndex tile_a, TileIndex tile_b, by
int bridge_type, bridge_len, type, type2;
// Find a good bridgetype (the best money can buy)
bridge_len = GetBridgeLength(tile_a, tile_b);
bridge_len = GetTunnelBridgeLength(tile_a, tile_b);
type = type2 = 0;
for (bridge_type = MAX_BRIDGES-1; bridge_type >= 0; bridge_type--) {
if (CheckBridge_Stuff(bridge_type, bridge_len)) {
@@ -234,30 +236,29 @@ EngineID AiNew_PickVehicle(Player *p)
} else {
EngineID best_veh_index = INVALID_ENGINE;
int32 best_veh_rating = 0;
EngineID start = ROAD_ENGINES_INDEX;
EngineID end = ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES;
EngineID i;
/* Loop through all road vehicles */
for (i = start; i != end; i++) {
FOR_ALL_ENGINEIDS_OF_TYPE(i, VEH_ROAD) {
const RoadVehicleInfo *rvi = RoadVehInfo(i);
const Engine* e = GetEngine(i);
int32 rating;
CommandCost ret;
/* Skip vehicles which can't take our cargo type */
if (rvi->cargo_type != _players_ainew[p->index].cargo && !CanRefitTo(i, _players_ainew[p->index].cargo)) continue;
/* Skip trams */
if (HasBit(EngInfo(i)->misc_flags, EF_ROAD_TRAM)) continue;
// Is it availiable?
// Also, check if the reliability of the vehicle is above the AI_VEHICLE_MIN_RELIABILTY
if (!HasBit(e->player_avail, _current_player) || e->reliability * 100 < AI_VEHICLE_MIN_RELIABILTY << 16) continue;
/* Rate and compare the engine by speed & capacity */
rating = rvi->max_speed * rvi->capacity;
int rating = rvi->max_speed * rvi->capacity;
if (rating <= best_veh_rating) continue;
// Can we build it?
ret = AI_DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_ROAD_VEH);
CommandCost ret = AI_DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_ROAD_VEH);
if (CmdFailed(ret)) continue;
best_veh_rating = rating;

View File

@@ -14,6 +14,7 @@
#include "../../variables.h"
#include "../../player_base.h"
#include "../../player_func.h"
#include "../../tunnelbridge.h"
#define TEST_STATION_NO_DIR 0xFF
@@ -320,7 +321,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
new_tile += TileOffsByDiagDir(dir);
// Precheck, is the length allowed?
if (!CheckBridge_Stuff(0, GetBridgeLength(tile, new_tile))) break;
if (!CheckBridge_Stuff(0, GetTunnelBridgeLength(tile, new_tile))) break;
// Check if we hit the station-tile.. we don't like that!
if (TILES_BETWEEN(new_tile, PathFinderInfo->end_tile_tl, PathFinderInfo->end_tile_br)) break;
@@ -340,14 +341,11 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// Next, check for tunnels!
// Tunnels can only be built on slopes corresponding to the direction
// For now, we check both sides for this tile.. terraforming gives fuzzy result
if ((dir == DIAGDIR_NE && tileh == SLOPE_NE) ||
(dir == DIAGDIR_SE && tileh == SLOPE_SE) ||
(dir == DIAGDIR_SW && tileh == SLOPE_SW) ||
(dir == DIAGDIR_NW && tileh == SLOPE_NW)) {
if (tileh == InclinedSlope(dir)) {
// Now simply check if a tunnel can be build
ret = AI_DoCommand(tile, (PathFinderInfo->rail_or_road?0:0x200), 0, DC_AUTO, CMD_BUILD_TUNNEL);
tileh = GetTileSlope(_build_tunnel_endtile, NULL);
if (CmdSucceeded(ret) && (tileh == SLOPE_SW || tileh == SLOPE_SE || tileh == SLOPE_NW || tileh == SLOPE_NE)) {
if (CmdSucceeded(ret) && IsInclinedSlope(tileh)) {
aystar->neighbours[aystar->num_neighbours].tile = _build_tunnel_endtile;
aystar->neighbours[aystar->num_neighbours].user_data[0] = AI_PATHFINDER_FLAG_TUNNEL + (dir << 8);
aystar->neighbours[aystar->num_neighbours++].direction = 0;
@@ -359,10 +357,6 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
extern Foundation GetRailFoundation(Slope tileh, TrackBits bits); // XXX function declaration in .c
extern Foundation GetRoadFoundation(Slope tileh, RoadBits bits); // XXX function declaration in .c
extern Foundation GetBridgeFoundation(Slope tileh, Axis); // XXX function declaration in .c
enum BridgeFoundation {
BRIDGE_NO_FOUNDATION = 1 << 0 | 1 << 3 | 1 << 6 | 1 << 9 | 1 << 12,
};
// The most important function: it calculates the g-value
static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current, OpenListNode *parent)
@@ -405,8 +399,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
if (parent->path.node.user_data[0] == 0 && current->user_data[0] == 0) {
if (PathFinderInfo->rail_or_road) {
Foundation f = GetRailFoundation(parent_tileh, (TrackBits)(1 << AiNew_GetRailDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile)));
// Maybe is BRIDGE_NO_FOUNDATION a bit strange here, but it contains just the right information..
if (IsInclinedFoundation(f) || (!IsFoundation(f) && HasBit(BRIDGE_NO_FOUNDATION, parent_tileh))) {
if (IsInclinedFoundation(f) || (!IsFoundation(f) && IsInclinedSlope(parent_tileh))) {
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
} else {
res += AI_PATHFINDER_FOUNDATION_PENALTY;
@@ -414,7 +407,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
} else {
if (!IsRoad(parent->path.node.tile) || !IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE)) {
Foundation f = GetRoadFoundation(parent_tileh, (RoadBits)AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
if (IsInclinedFoundation(f) || (!IsFoundation(f) && HasBit(BRIDGE_NO_FOUNDATION, parent_tileh))) {
if (IsInclinedFoundation(f) || (!IsFoundation(f) && IsInclinedSlope(parent_tileh))) {
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
} else {
res += AI_PATHFINDER_FOUNDATION_PENALTY;
@@ -429,29 +422,19 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
int r;
// Tunnels are very expensive when build on long routes..
// Ironicly, we are using BridgeCode here ;)
r = AI_PATHFINDER_TUNNEL_PENALTY * GetBridgeLength(current->tile, parent->path.node.tile);
r = AI_PATHFINDER_TUNNEL_PENALTY * GetTunnelBridgeLength(current->tile, parent->path.node.tile);
res += r + (r >> 8);
}
// Are we part of a bridge?
if ((AI_PATHFINDER_FLAG_BRIDGE & current->user_data[0]) != 0) {
// That means for every length a penalty
res += AI_PATHFINDER_BRIDGE_PENALTY * GetBridgeLength(current->tile, parent->path.node.tile);
res += AI_PATHFINDER_BRIDGE_PENALTY * GetTunnelBridgeLength(current->tile, parent->path.node.tile);
// Check if we are going up or down, first for the starting point
// In user_data[0] is at the 8th bit the direction
if (!HasBit(BRIDGE_NO_FOUNDATION, parent_tileh)) {
if (IsLeveledFoundation(GetBridgeFoundation(parent_tileh, (Axis)((current->user_data[0] >> 8) & 1)))) {
res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
}
}
if (!HasBridgeFlatRamp(parent_tileh, (Axis)((current->user_data[0] >> 8) & 1))) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
// Second for the end point
if (!HasBit(BRIDGE_NO_FOUNDATION, tileh)) {
if (IsLeveledFoundation(GetBridgeFoundation(tileh, (Axis)((current->user_data[0] >> 8) & 1)))) {
res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
}
}
if (parent_tileh == SLOPE_FLAT) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
if (tileh == SLOPE_FLAT) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
if (!HasBridgeFlatRamp(tileh, (Axis)((current->user_data[0] >> 8) & 1))) res += AI_PATHFINDER_BRIDGE_GOES_UP_PENALTY;
}
// To prevent the AI from taking the fastest way in tiles, but not the fastest way

View File

@@ -801,8 +801,7 @@ static void AiNew_State_FindDepot(Player *p)
for (j = DIAGDIR_BEGIN; j < DIAGDIR_END; j++) {
TileIndex t = tile + TileOffsByDiagDir(j);
if (IsTileType(t, MP_ROAD) &&
GetRoadTileType(t) == ROAD_TILE_DEPOT &&
if (IsRoadDepotTile(t) &&
IsTileOwner(t, _current_player) &&
GetRoadDepotDirection(t) == ReverseDiagDir(j)) {
_players_ainew[p->index].depot_tile = t;
@@ -1102,7 +1101,7 @@ static void AiNew_State_BuildDepot(Player *p)
CommandCost res;
assert(_players_ainew[p->index].state == AI_STATE_BUILD_DEPOT);
if (IsTileType(_players_ainew[p->index].depot_tile, MP_ROAD) && GetRoadTileType(_players_ainew[p->index].depot_tile) == ROAD_TILE_DEPOT) {
if (IsRoadDepotTile(_players_ainew[p->index].depot_tile)) {
if (IsTileOwner(_players_ainew[p->index].depot_tile, _current_player)) {
// The depot is already built
_players_ainew[p->index].state = AI_STATE_BUILD_VEHICLE;
@@ -1252,7 +1251,7 @@ static void AiNew_CheckVehicle(Player *p, Vehicle *v)
if (v->age > 360) {
// If both years together are not more than AI_MINIMUM_ROUTE_PROFIT,
// it is not worth the line I guess...
if (v->profit_last_year + v->profit_this_year < AI_MINIMUM_ROUTE_PROFIT ||
if (v->profit_last_year + v->profit_this_year < (Money)256 * AI_MINIMUM_ROUTE_PROFIT ||
(v->reliability * 100 >> 16) < 40) {
// There is a possibility that the route is fucked up...
if (v->cargo.DaysInTransit() > AI_VEHICLE_LOST_DAYS) {

View File

@@ -124,6 +124,7 @@ struct Aircraft : public Vehicle {
Money GetRunningCost() const { return AircraftVehInfo(this->engine_type)->running_cost * _price.aircraft_running; }
bool IsInDepot() const { return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile); }
void Tick();
void OnNewDay();
};
#endif /* AIRCRAFT_H */

View File

@@ -321,6 +321,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
u->z_pos = GetSlopeZ(x, y);
v->z_pos = u->z_pos + 1;
v->running_ticks = 0;
// u->delta_x = u->delta_y = 0;
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
@@ -537,7 +539,7 @@ CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32
v->vehstatus ^= VS_STOPPED;
v->cur_speed = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
InvalidateWindowClasses(WC_AIRCRAFT_LIST);
}
@@ -576,7 +578,7 @@ CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uin
if (flags & DC_EXEC) {
ClrBit(v->current_order.flags, OF_PART_OF_ORDERS);
ToggleBit(v->current_order.flags, OF_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
return CommandCost();
}
@@ -586,7 +588,7 @@ CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uin
if (v->current_order.flags & OFB_UNLOAD) v->cur_order_index++;
v->current_order.type = OT_DUMMY;
v->current_order.flags = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
} else {
bool next_airport_has_hangar = true;
@@ -610,7 +612,7 @@ CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uin
if (!(p2 & DEPOT_SERVICE)) SetBit(v->current_order.flags, OF_HALT_IN_DEPOT);
v->current_order.refit_cargo = CT_INVALID;
v->current_order.dest = next_airport_index;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
if (v->u.air.state == FLYING && !next_airport_has_hangar) {
/* The aircraft is now heading for a different hangar than the next in the orders */
AircraftNextAirportPos_and_Order(v);
@@ -715,35 +717,36 @@ static void CheckIfAircraftNeedsService(Vehicle *v)
// v->u.air.targetairport = st->index;
v->current_order.type = OT_GOTO_DEPOT;
v->current_order.flags = OFB_NON_STOP;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
} else if (v->current_order.type == OT_GOTO_DEPOT) {
v->current_order.type = OT_DUMMY;
v->current_order.flags = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
}
void OnNewDay_Aircraft(Vehicle *v)
void Aircraft::OnNewDay()
{
if (!IsNormalAircraft(v)) return;
if (!IsNormalAircraft(this)) return;
if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this);
CheckOrders(v);
CheckOrders(this);
CheckVehicleBreakdown(v);
AgeVehicle(v);
CheckIfAircraftNeedsService(v);
CheckVehicleBreakdown(this);
AgeVehicle(this);
CheckIfAircraftNeedsService(this);
if (v->vehstatus & VS_STOPPED) return;
if (this->running_ticks == 0) return;
CommandCost cost = CommandCost(EXPENSES_AIRCRAFT_RUN, GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364);
CommandCost cost(EXPENSES_AIRCRAFT_RUN, GetVehicleProperty(this, 0x0E, AircraftVehInfo(this->engine_type)->running_cost) * _price.aircraft_running * this->running_ticks / (364 * DAY_TICKS));
v->profit_this_year -= cost.GetCost() >> 8;
this->profit_this_year -= cost.GetCost();
this->running_ticks = 0;
SubtractMoneyFromPlayerFract(v->owner, cost);
SubtractMoneyFromPlayerFract(this->owner, cost);
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
InvalidateWindow(WC_VEHICLE_DETAILS, this->index);
InvalidateWindowClasses(WC_AIRCRAFT_LIST);
}
@@ -921,6 +924,10 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
uint spd = v->acceleration * 16;
byte t;
/* Adjust speed limits by plane speed factor to prevent taxiing
* and take-off speeds being too low. */
speed_limit *= _patches.plane_speed;
if (v->u.air.cached_max_speed < speed_limit) {
if (v->cur_speed < speed_limit) hard_limit = false;
speed_limit = v->u.air.cached_max_speed;
@@ -930,7 +937,15 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
v->subspeed = (t=v->subspeed) + (byte)spd;
if (!hard_limit && v->cur_speed > speed_limit) speed_limit = v->cur_speed - (v->cur_speed / 48);
/* Aircraft's current speed is used twice so that very fast planes are
* forced to slow down rapidly in the short distance needed. The magic
* value 16384 was determined to give similar results to the old speed/48
* method at slower speeds. This also results in less reduction at slow
* speeds to that aircraft do not get to taxi speed straight after
* touchdown. */
if (!hard_limit && v->cur_speed > speed_limit) {
speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _patches.plane_speed);
}
spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit);
@@ -941,9 +956,12 @@ static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE,
if (spd != v->cur_speed) {
v->cur_speed = spd;
if (_patches.vehicle_speed)
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
}
/* Adjust distance moved by plane speed setting */
if (_patches.plane_speed > 1) spd /= _patches.plane_speed;
if (!(v->direction & 1)) spd = spd * 3 / 4;
spd += v->progress;
@@ -1194,7 +1212,7 @@ static bool AircraftController(Vehicle *v)
v->tile = gp.new_tile;
/* If vehicle is in the air, use tile coordinate 0. */
// if (amd->flag & (AMED_TAKEOFF | AMED_SLOWTURN | AMED_LAND)) v->tile = 0;
if (amd->flag & (AMED_TAKEOFF | AMED_SLOWTURN | AMED_LAND)) v->tile = 0;
/* Adjust Z for land or takeoff? */
uint z = v->z_pos;
@@ -1288,8 +1306,7 @@ static void HandleCrashedAircraft(Vehicle *v)
CLRBITS(st->airport_flags, RUNWAY_IN_OUT_block); // commuter airport
CLRBITS(st->airport_flags, RUNWAY_IN2_block); // intercontinental
BeginVehicleMove(v);
EndVehicleMove(v);
MarkSingleVehicleDirty(v);
DoDeleteAircraft(v);
}
@@ -1417,7 +1434,7 @@ void Aircraft::MarkDirty()
{
this->cur_image = this->GetImage(this->direction);
if (this->subtype == AIR_HELICOPTER) this->Next()->Next()->cur_image = GetRotorImage(this);
MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
MarkSingleVehicleDirty(this);
}
static void CrashAirplane(Vehicle *v)
@@ -1549,6 +1566,45 @@ static void AircraftLeaveHangar(Vehicle *v)
InvalidateWindowClasses(WC_AIRCRAFT_LIST);
}
/** Checks if an aircraft should head towards a hangar because it needs replacement
* @param *v the vehicle to test
* @return true if the aircraft should head towards a hangar
*/
static inline bool CheckSendAircraftToHangarForReplacement(const Vehicle *v)
{
EngineID new_engine;
Player *p = GetPlayer(v->owner);
if (VehicleHasDepotOrders(v)) return false; // The aircraft will end up in the hangar eventually on it's own
new_engine = EngineReplacementForPlayer(p, v->engine_type, v->group_id);
if (new_engine == INVALID_ENGINE) {
/* There is no autoreplace assigned to this EngineID so we will set it to renew to the same type if needed */
new_engine = v->engine_type;
if (!v->NeedsAutorenewing(p)) {
/* No need to replace the aircraft */
return false;
}
}
if (!HasBit(GetEngine(new_engine)->player_avail, v->owner)) {
/* Engine is not buildable anymore */
return false;
}
if (p->player_money < (p->engine_renew_money + (2 * DoCommand(0, new_engine, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT).GetCost()))) {
/* We lack enough money to request the replacement right away.
* We want 2*(the price of the new vehicle) and not looking at the value of the vehicle we are going to sell.
* The reason is that we don't want to send a whole lot of vehicles to the hangars when we only have enough money to replace a single one.
* Remember this happens in the background so the user can't stop this. */
return false;
}
/* We found no reason NOT to send the aircraft to a hangar so we will send it there at once */
return true;
}
////////////////////////////////////////////////////////////////////////////////
/////////////////// AIRCRAFT MOVEMENT SCHEME ////////////////////////////////
@@ -1677,22 +1733,16 @@ static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *a
static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass *apc)
{
const Player* p = GetPlayer(v->owner);
v->u.air.state = FLYING;
v->UpdateDeltaXY(INVALID_DIR);
/* get the next position to go to, differs per airport */
AircraftNextAirportPos_and_Order(v);
/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed
* unless it is due for renewal but the engine is no longer available */
if (v->owner == _local_player && (
EngineHasReplacementForPlayer(p, v->engine_type, v->group_id) ||
((p->engine_renew && v->age - v->max_age > p->engine_renew_months * 30) &&
HasBit(GetEngine(v->engine_type)->player_avail, _local_player))
)) {
_current_player = _local_player;
DoCommandP(v->tile, v->index, DEPOT_SERVICE | DEPOT_LOCATE_HANGAR, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
/* Send the helicopter to a hangar if needed for replacement */
if (CheckSendAircraftToHangarForReplacement(v)) {
_current_player = v->owner;
DoCommand(v->tile, v->index, DEPOT_SERVICE | DEPOT_LOCATE_HANGAR, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR);
_current_player = OWNER_NONE;
}
}
@@ -1742,16 +1792,10 @@ static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc)
AircraftLandAirplane(v); // maybe crash airplane
/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */
if (v->current_order.type != OT_GOTO_DEPOT && v->owner == _local_player) {
/* only the vehicle owner needs to calculate the rest (locally) */
const Player* p = GetPlayer(v->owner);
if (EngineHasReplacementForPlayer(p, v->engine_type, v->group_id) ||
(p->engine_renew && v->age - v->max_age > (p->engine_renew_months * 30))) {
/* send the aircraft to the hangar at next airport */
_current_player = _local_player;
DoCommandP(v->tile, v->index, DEPOT_SERVICE, NULL, CMD_SEND_AIRCRAFT_TO_HANGAR | CMD_SHOW_NO_ERROR);
_current_player = OWNER_NONE;
}
if (CheckSendAircraftToHangarForReplacement(v)) {
_current_player = v->owner;
DoCommand(v->tile, v->index, DEPOT_SERVICE, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR);
_current_player = OWNER_NONE;
}
}
@@ -2120,6 +2164,8 @@ void Aircraft::Tick()
{
if (!IsNormalAircraft(this)) return;
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++;
if (this->subtype == AIR_HELICOPTER) HelicopterTickHandler(this);
AgeAircraftCargo(this);

View File

@@ -179,14 +179,19 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
airport = GetAirport(_selected_airport_type);
SetTileSelectSize(airport->size_x, airport->size_y);
int rad = _patches.modified_catchment ? airport->catchment : 4;
int rad = _patches.modified_catchment ? airport->catchment : (uint)CA_UNMODIFIED;
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
DrawWindowWidgets(w);
// strings such as 'Size' and 'Coverage Area'
// 'Coverage Area'
DrawStationCoverageAreaText(2, 206, SCT_ALL, rad);
int text_end = DrawStationCoverageAreaText(2, 206, SCT_ALL, rad) + 4;
if (text_end > w->widget[6].bottom) {
SetWindowDirty(w);
ResizeWindowForWidget(w, 6, 0, text_end - w->widget[6].bottom);
SetWindowDirty(w);
}
break;
}

View File

@@ -34,6 +34,42 @@ uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
return i - 1;
}
uint16 *GetCapacityOfArticulatedParts(EngineID engine, VehicleType type)
{
static uint16 capacity[NUM_CARGO];
memset(capacity, 0, sizeof(capacity));
if (type == VEH_TRAIN) {
const RailVehicleInfo *rvi = RailVehInfo(engine);
capacity[rvi->cargo_type] = rvi->capacity;
if (rvi->railveh_type == RAILVEH_MULTIHEAD) capacity[rvi->cargo_type] += rvi->capacity;
} else if (type == VEH_ROAD) {
const RoadVehicleInfo *rvi = RoadVehInfo(engine);
capacity[rvi->cargo_type] = rvi->capacity;
}
if (!HasBit(EngInfo(engine)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return capacity;
for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine, NULL);
if (callback == CALLBACK_FAILED || callback == 0xFF) break;
EngineID artic_engine = GetFirstEngineOfType(type) + GB(callback, 0, 7);
if (type == VEH_TRAIN) {
const RailVehicleInfo *rvi = RailVehInfo(artic_engine);
capacity[rvi->cargo_type] += GetEngineProperty(artic_engine, 0x14, rvi->capacity);
} else if (type == VEH_ROAD) {
const RoadVehicleInfo *rvi = RoadVehInfo(artic_engine);
capacity[rvi->cargo_type] += GetEngineProperty(artic_engine, 0x0F, rvi->capacity);
}
}
return capacity;
}
void AddArticulatedParts(Vehicle **vl, VehicleType type)
{
const Vehicle *v = vl[0];

View File

@@ -8,6 +8,7 @@
#include "vehicle_type.h"
uint CountArticulatedParts(EngineID engine_type, bool purchase_window);
uint16 *GetCapacityOfArticulatedParts(EngineID engine, VehicleType type);
void AddArticulatedParts(Vehicle **vl, VehicleType type);
#endif /* ARTICULATED_VEHICLES_H */

View File

@@ -21,9 +21,11 @@
#include "functions.h"
#include "variables.h"
#include "autoreplace_func.h"
#include "articulated_vehicles.h"
#include "table/strings.h"
/*
* move the cargo from one engine to another if possible
*/
@@ -93,7 +95,7 @@ static CargoID GetNewCargoTypeForReplace(Vehicle *v, EngineID engine_type)
if (new_cargo_type == CT_INVALID) return CT_NO_REFIT; // Don't try to refit an engine with no cargo capacity
if (v->cargo_type == new_cargo_type || CanRefitTo(engine_type, v->cargo_type)) {
if (v->cargo_cap != 0 && (v->cargo_type == new_cargo_type || CanRefitTo(engine_type, v->cargo_type))) {
if (VerifyAutoreplaceRefitForOrders(v, engine_type)) {
return v->cargo_type == new_cargo_type ? (CargoID)CT_NO_REFIT : v->cargo_type;
} else {
@@ -175,7 +177,10 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, Money total_cost)
if (replacement_cargo_type != CT_NO_REFIT) {
/* add refit cost */
CommandCost refit_cost = GetRefitCost(new_engine_type);
if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost.AddCost(refit_cost); // pay for both ends
if (old_v->type == VEH_TRAIN && RailVehInfo(new_engine_type)->railveh_type == RAILVEH_MULTIHEAD) {
/* Since it's a dualheaded engine we have to pay once more because the rear end is being refitted too. */
refit_cost.AddCost(refit_cost);
}
cost.AddCost(refit_cost);
}
@@ -211,7 +216,7 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, Money total_cost)
DoCommand(0, (front->index << 16) | new_v->index, 1, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
} else {
// copy/clone the orders
DoCommand(0, (old_v->index << 16) | new_v->index, IsOrderListShared(old_v) ? CO_SHARE : CO_COPY, DC_EXEC, CMD_CLONE_ORDER);
DoCommand(0, (old_v->index << 16) | new_v->index, old_v->IsOrderListShared() ? CO_SHARE : CO_COPY, DC_EXEC, CMD_CLONE_ORDER);
new_v->cur_order_index = old_v->cur_order_index;
ChangeVehicleViewWindow(old_v, new_v);
new_v->profit_this_year = old_v->profit_this_year;
@@ -338,8 +343,7 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
}
// check if the vehicle should be replaced
if (!p->engine_renew ||
w->age - w->max_age < (p->engine_renew_months * 30) || // replace if engine is too old
if (!w->NeedsAutorenewing(p) || // replace if engine is too old
w->max_age == 0) { // rail cars got a max age of 0
/* If the vehicle belongs to a group, check if the group is protected from the global autoreplace.
If not, chek if an global auto remplacement is defined */

View File

@@ -36,6 +36,24 @@ static const StringID _rail_types_list[] = {
INVALID_STRING_ID
};
enum ReplaceVehicleWindowWidgets {
RVW_WIDGET_LEFT_DETAILS = 3,
RVW_WIDGET_START_REPLACE,
RVW_WIDGET_INFO_TAB,
RVW_WIDGET_STOP_REPLACE,
RVW_WIDGET_LEFT_MATRIX,
RVW_WIDGET_LEFT_SCROLLBAR,
RVW_WIDGET_RIGHT_MATRIX,
RVW_WIDGET_RIGHT_SCROLLBAR,
RVW_WIDGET_RIGHT_DETAILS,
RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE,
RVW_WIDGET_TRAIN_FLUFF_LEFT,
RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN,
RVW_WIDGET_TRAIN_FLUFF_RIGHT,
RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE,
};
static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
{
const EngineID va = *(const EngineID*)a;
@@ -62,7 +80,7 @@ void InitializeVehiclesGuiList()
void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g)
{
Player *p = GetPlayer(_local_player);
byte type = GetEngine(e)->type;
VehicleType type = GetEngine(e)->type;
uint num_engines = GetGroupNumEngines(_local_player, id_g, e);
if (num_engines == 0 || p->num_engines[e] == 0) {
@@ -157,7 +175,7 @@ static void GenerateReplaceVehList(Window *w, bool draw_left)
{
EngineID e;
EngineID selected_engine = INVALID_ENGINE;
byte type = w->window_number;
VehicleType type = (VehicleType)w->window_number;
byte i = draw_left ? 0 : 1;
EngineList *list = &WP(w, replaceveh_d).list[i];
@@ -264,7 +282,7 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
* Either list is empty
* or The selected replacement engine has a replacement (to prevent loops)
* or The right list (new replacement) has the existing replacement vehicle selected */
w->SetWidgetDisabledState(4,
w->SetWidgetDisabledState(RVW_WIDGET_START_REPLACE,
selected_id[0] == INVALID_ENGINE ||
selected_id[1] == INVALID_ENGINE ||
EngineReplacementForPlayer(p, selected_id[1], selected_group) != INVALID_ENGINE ||
@@ -273,7 +291,7 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
/* Disable the "Stop Replacing" button if:
* The left list (existing vehicle) is empty
* or The selected vehicle has no replacement set up */
w->SetWidgetDisabledState(6,
w->SetWidgetDisabledState(RVW_WIDGET_STOP_REPLACE,
selected_id[0] == INVALID_ENGINE ||
!EngineHasReplacementForPlayer(p, selected_id[0], selected_group));
@@ -288,18 +306,18 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
SetDParam(2, WP(w, replaceveh_d).wagon_btnstate ? STR_ENGINES : STR_WAGONS);
/* sets the colour of that art thing */
w->widget[13].color = _player_colors[_local_player];
w->widget[16].color = _player_colors[_local_player];
w->widget[RVW_WIDGET_TRAIN_FLUFF_LEFT].color = _player_colors[_local_player];
w->widget[RVW_WIDGET_TRAIN_FLUFF_RIGHT].color = _player_colors[_local_player];
}
if (w->window_number == VEH_TRAIN) {
/* Show the selected railtype in the pulldown menu */
RailType railtype = _railtype_selected_in_replace_gui;
w->widget[RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN].data = _rail_types_list[railtype];
}
DrawWindowWidgets(w);
if (w->window_number == VEH_TRAIN) {
/* Draw the selected railtype in the pulldown menu */
RailType railtype = _railtype_selected_in_replace_gui;
DrawString(157, w->widget[14].top + 1, _rail_types_list[railtype], TC_BLACK);
}
/* sets up the string for the vehicle that is being replaced to */
if (selected_id[0] != INVALID_ENGINE) {
if (!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)) {
@@ -312,22 +330,28 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED);
}
DrawString(145, w->widget[5].top + 1, STR_02BD, TC_BLACK);
DrawString(145, w->widget[RVW_WIDGET_INFO_TAB].top + 1, STR_02BD, TC_BLACK);
/* Draw the lists */
for(byte i = 0; i < 2; i++) {
uint16 x = i == 0 ? 2 : 230; // at what X offset
uint widget = (i == 0) ? RVW_WIDGET_LEFT_MATRIX : RVW_WIDGET_RIGHT_MATRIX;
EngineList list = WP(w, replaceveh_d).list[i]; // which list to draw
EngineID start = i == 0 ? w->vscroll.pos : w->vscroll2.pos; // what is the offset for the start (scrolling)
EngineID end = min((i == 0 ? w->vscroll.cap : w->vscroll2.cap) + start, EngList_Count(&list));
/* Do the actual drawing */
DrawEngineList((VehicleType)w->window_number, x, 15, list, start, end, WP(w, replaceveh_d).sel_engine[i], i == 0, selected_group);
DrawEngineList((VehicleType)w->window_number, w->widget[widget].left + 2, w->widget[widget].top + 1, list, start, end, WP(w, replaceveh_d).sel_engine[i], i == 0, selected_group);
/* Also draw the details if an engine is selected */
if (WP(w, replaceveh_d).sel_engine[i] != INVALID_ENGINE) {
const Widget *wi = &w->widget[i == 0 ? 3 : 11];
DrawVehiclePurchaseInfo(wi->left + 2, wi->top + 1, wi->right - wi->left - 2, WP(w, replaceveh_d).sel_engine[i]);
const Widget *wi = &w->widget[i == 0 ? RVW_WIDGET_LEFT_DETAILS : RVW_WIDGET_RIGHT_DETAILS];
int text_end = DrawVehiclePurchaseInfo(wi->left + 2, wi->top + 1, wi->right - wi->left - 2, WP(w, replaceveh_d).sel_engine[i]);
if (text_end > wi->bottom) {
SetWindowDirty(w);
ResizeWindowForWidget(w, i == 0 ? RVW_WIDGET_LEFT_DETAILS : RVW_WIDGET_RIGHT_DETAILS, 0, text_end - wi->bottom);
SetWindowDirty(w);
}
}
}
@@ -335,39 +359,38 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
case WE_CLICK: {
switch (e->we.click.widget) {
case 12:
case RVW_WIDGET_TRAIN_ENGINEWAGON_TOGGLE:
WP(w, replaceveh_d).wagon_btnstate = !(WP(w, replaceveh_d).wagon_btnstate);
WP(w, replaceveh_d).update_left = true;
WP(w, replaceveh_d).init_lists = true;
SetWindowDirty(w);
break;
case 14:
case 15: /* Railtype selection dropdown menu */
ShowDropDownMenu(w, _rail_types_list, _railtype_selected_in_replace_gui, 15, 0, ~GetPlayer(_local_player)->avail_railtypes);
case RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN: /* Railtype selection dropdown menu */
ShowDropDownMenu(w, _rail_types_list, _railtype_selected_in_replace_gui, RVW_WIDGET_TRAIN_RAILTYPE_DROPDOWN, 0, ~GetPlayer(_local_player)->avail_railtypes);
break;
case 17: /* toggle renew_keep_length */
case RVW_WIDGET_TRAIN_WAGONREMOVE_TOGGLE: /* toggle renew_keep_length */
DoCommandP(0, 5, GetPlayer(_local_player)->renew_keep_length ? 0 : 1, NULL, CMD_SET_AUTOREPLACE);
break;
case 4: { /* Start replacing */
case RVW_WIDGET_START_REPLACE: { /* Start replacing */
EngineID veh_from = WP(w, replaceveh_d).sel_engine[0];
EngineID veh_to = WP(w, replaceveh_d).sel_engine[1];
DoCommandP(0, 3 + (WP(w, replaceveh_d).sel_group << 16) , veh_from + (veh_to << 16), NULL, CMD_SET_AUTOREPLACE);
} break;
case 6: { /* Stop replacing */
case RVW_WIDGET_STOP_REPLACE: { /* Stop replacing */
EngineID veh_from = WP(w, replaceveh_d).sel_engine[0];
DoCommandP(0, 3 + (WP(w, replaceveh_d).sel_group << 16), veh_from + (INVALID_ENGINE << 16), NULL, CMD_SET_AUTOREPLACE);
} break;
case 7:
case 9: {
case RVW_WIDGET_LEFT_MATRIX:
case RVW_WIDGET_RIGHT_MATRIX: {
uint i = (e->we.click.pt.y - 14) / w->resize.step_height;
uint16 click_scroll_pos = e->we.click.widget == 7 ? w->vscroll.pos : w->vscroll2.pos;
uint16 click_scroll_cap = e->we.click.widget == 7 ? w->vscroll.cap : w->vscroll2.cap;
byte click_side = e->we.click.widget == 7 ? 0 : 1;
uint16 click_scroll_pos = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? w->vscroll.pos : w->vscroll2.pos;
uint16 click_scroll_cap = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? w->vscroll.cap : w->vscroll2.cap;
byte click_side = e->we.click.widget == RVW_WIDGET_LEFT_MATRIX ? 0 : 1;
uint16 engine_count = EngList_Count(&WP(w, replaceveh_d).list[click_side]);
if (i < click_scroll_cap) {
@@ -405,8 +428,8 @@ static void ReplaceVehicleWndProc(Window *w, WindowEvent *e)
w->vscroll.cap += e->we.sizing.diff.y / (int)w->resize.step_height;
w->vscroll2.cap += e->we.sizing.diff.y / (int)w->resize.step_height;
w->widget[7].data = (w->vscroll.cap << 8) + 1;
w->widget[9].data = (w->vscroll2.cap << 8) + 1;
w->widget[RVW_WIDGET_LEFT_MATRIX].data = (w->vscroll.cap << 8) + 1;
w->widget[RVW_WIDGET_RIGHT_MATRIX].data = (w->vscroll2.cap << 8) + 1;
break;
case WE_INVALIDATE_DATA:
@@ -438,8 +461,7 @@ static const Widget _replace_rail_vehicle_widgets[] = {
// train specific stuff
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 138, 228, 239, STR_REPLACE_ENGINE_WAGON_SELECT, STR_REPLACE_ENGINE_WAGON_SELECT_HELP}, // widget 12
{ WWT_PANEL, RESIZE_TB, 14, 139, 153, 240, 251, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_TB, 14, 154, 277, 240, 251, 0x0, STR_REPLACE_HELP_RAILTYPE},
{ WWT_TEXTBTN, RESIZE_TB, 14, 278, 289, 240, 251, STR_0225, STR_REPLACE_HELP_RAILTYPE},
{ WWT_DROPDOWN, RESIZE_TB, 14, 154, 289, 240, 251, 0x0, STR_REPLACE_HELP_RAILTYPE},
{ WWT_PANEL, RESIZE_TB, 14, 290, 305, 240, 251, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 317, 455, 228, 239, STR_REPLACE_REMOVE_WAGON, STR_REPLACE_REMOVE_WAGON_HELP},
// end of train specific stuff
@@ -506,38 +528,6 @@ static const WindowDesc _replace_ship_aircraft_vehicle_desc = {
};
void ShowReplaceVehicleWindow(VehicleType vehicletype)
{
Window *w;
DeleteWindowById(WC_REPLACE_VEHICLE, vehicletype);
switch (vehicletype) {
case VEH_TRAIN:
w = AllocateWindowDescFront(&_replace_rail_vehicle_desc, vehicletype);
w->vscroll.cap = 8;
w->resize.step_height = 14;
WP(w, replaceveh_d).wagon_btnstate = true;
break;
case VEH_ROAD:
w = AllocateWindowDescFront(&_replace_road_vehicle_desc, vehicletype);
w->vscroll.cap = 8;
w->resize.step_height = 14;
break;
case VEH_SHIP:
case VEH_AIRCRAFT:
w = AllocateWindowDescFront(&_replace_ship_aircraft_vehicle_desc, vehicletype);
w->vscroll.cap = 4;
w->resize.step_height = 24;
break;
default: return;
}
w->caption_color = _local_player;
w->vscroll2.cap = w->vscroll.cap; // these two are always the same
WP(w, replaceveh_d).sel_group = DEFAULT_GROUP;
}
void ShowReplaceGroupVehicleWindow(GroupID id_g, VehicleType vehicletype)
{
Window *w;

View File

@@ -13,7 +13,6 @@
*/
void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type);
void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g);
void ShowReplaceVehicleWindow(VehicleType vehicletype);
void ShowReplaceGroupVehicleWindow(GroupID group, VehicleType veh);
#endif /* AUTOREPLACE_GUI_H */

View File

@@ -13,27 +13,30 @@ enum {
MAX_BRIDGES = 13
};
typedef uint BridgeType;
/** Struct containing information about a single bridge type
*/
struct Bridge {
Year avail_year; ///< the year in which the bridge becomes available
byte min_length; ///< the minimum length of the bridge (not counting start and end tile)
byte max_length; ///< the maximum length of the bridge (not counting start and end tile)
uint16 price; ///< the relative price of the bridge
uint16 speed; ///< maximum travel speed
SpriteID sprite; ///< the sprite which is used in the GUI
SpriteID pal; ///< the palette which is used in the GUI
StringID material; ///< the string that contains the bridge description
PalSpriteID **sprite_table; ///< table of sprites for drawing the bridge
byte flags; ///< bit 0 set: disable drawing of far pillars.
struct BridgeSpec {
Year avail_year; ///< the year where it becomes available
byte min_length; ///< the minimum length (not counting start and end tile)
byte max_length; ///< the maximum length (not counting start and end tile)
uint16 price; ///< the price multiplier
uint16 speed; ///< maximum travel speed
SpriteID sprite; ///< the sprite which is used in the GUI
SpriteID pal; ///< the palette which is used in the GUI
StringID material; ///< the string that contains the bridge description
StringID transport_name[2]; ///< description of the bridge, when built for road or rail
PalSpriteID **sprite_table; ///< table of sprites for drawing the bridge
byte flags; ///< bit 0 set: disable drawing of far pillars.
};
extern const Bridge orig_bridge[MAX_BRIDGES];
extern Bridge _bridge[MAX_BRIDGES];
extern BridgeSpec _bridge[MAX_BRIDGES];
Foundation GetBridgeFoundation(Slope tileh, Axis axis);
bool HasBridgeFlatRamp(Slope tileh, Axis axis);
static inline const Bridge *GetBridge(uint i)
static inline const BridgeSpec *GetBridgeSpec(BridgeType i)
{
assert(i < lengthof(_bridge));
return &_bridge[i];
@@ -41,8 +44,9 @@ static inline const Bridge *GetBridge(uint i)
void DrawBridgeMiddle(const TileInfo *ti);
bool CheckBridge_Stuff(byte bridge_type, uint bridge_len);
uint32 GetBridgeLength(TileIndex begin, TileIndex end);
bool CheckBridge_Stuff(BridgeType bridge_type, uint bridge_len);
int CalcBridgeLenCostFactor(int x);
void ResetBridges();
#endif /* BRIDGE_H */

View File

@@ -16,6 +16,7 @@
#include "map_func.h"
#include "viewport_func.h"
#include "gfx_func.h"
#include "tunnelbridge.h"
#include "table/strings.h"
@@ -24,8 +25,8 @@ static struct BridgeData {
uint count;
TileIndex start_tile;
TileIndex end_tile;
uint8 type;
uint8 indexes[MAX_BRIDGES];
uint32 type; ///< Data type for the bridge. Bit 16,15 = transport type, 14..8 = road/rail pieces, 7..0 = type of bridge
BridgeType indexes[MAX_BRIDGES];
Money costs[MAX_BRIDGES];
BridgeData()
@@ -43,7 +44,7 @@ static void BuildBridge(Window *w, int i)
{
DeleteWindow(w);
DoCommandP(_bridgedata.end_tile, _bridgedata.start_tile,
_bridgedata.indexes[i] | (_bridgedata.type << 8), CcBuildBridge,
_bridgedata.type | _bridgedata.indexes[i], CcBuildBridge,
CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE));
}
@@ -78,7 +79,7 @@ static void BuildBridgeWndProc(Window *w, WindowEvent *e)
uint y = 15;
for (uint i = 0; (i < w->vscroll.cap) && ((i + w->vscroll.pos) < _bridgedata.count); i++) {
const Bridge *b = &_bridge[_bridgedata.indexes[i + w->vscroll.pos]];
const BridgeSpec *b = GetBridgeSpec(_bridgedata.indexes[i + w->vscroll.pos]);
SetDParam(2, _bridgedata.costs[i + w->vscroll.pos]);
SetDParam(1, b->speed * 10 / 16);
@@ -142,38 +143,18 @@ static const WindowDesc _build_bridge_desc = {
BuildBridgeWndProc
};
/* Widget definition for the road bridge selection window */
static const Widget _build_road_bridge_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // BBSW_CLOSEBOX
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 199, 0, 13, STR_1803_SELECT_ROAD_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS}, // BBSW_CAPTION
{ WWT_MATRIX, RESIZE_BOTTOM, 7, 0, 187, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK}, // BBSW_BRIDGE_LIST
{ WWT_SCROLLBAR, RESIZE_BOTTOM, 7, 188, 199, 14, 89, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // BBSW_SCROLLBAR
{ WWT_RESIZEBOX, RESIZE_TB, 7, 188, 199, 90, 101, 0x0, STR_RESIZE_BUTTON}, // BBSW_RESIZEBOX
{ WIDGETS_END},
};
/* Window definition for the road bridge selection window */
static const WindowDesc _build_road_bridge_desc = {
WDP_AUTO, WDP_AUTO, 200, 102, 200, 102,
WC_BUILD_BRIDGE, WC_BUILD_TOOLBAR,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
_build_road_bridge_widgets,
BuildBridgeWndProc
};
void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type)
{
DeleteWindowById(WC_BUILD_BRIDGE, 0);
_bridgedata.type = bridge_type;
_bridgedata.type = (transport_type << 15) | (bridge_type << 8); //prepare the parameter for use only once
_bridgedata.start_tile = start;
_bridgedata.end_tile = end;
/* only query bridge building possibility once, result is the same for all bridges!
* returns CMD_ERROR on failure, and price on success */
StringID errmsg = INVALID_STRING_ID;
CommandCost ret = DoCommand(end, start, (bridge_type << 8), DC_AUTO | DC_QUERY_COST, CMD_BUILD_BRIDGE);
CommandCost ret = DoCommand(end, start, _bridgedata.type, DC_AUTO | DC_QUERY_COST, CMD_BUILD_BRIDGE);
uint8 j = 0;
if (CmdFailed(ret)) {
@@ -182,19 +163,19 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
/* check which bridges can be built
* get absolute bridge length
* length of the middle parts of the bridge */
const uint bridge_len = GetBridgeLength(start, end);
const uint bridge_len = GetTunnelBridgeLength(start, end);
/* total length of bridge */
const uint tot_bridgedata_len = CalcBridgeLenCostFactor(bridge_len + 2);
/* loop for all bridgetypes */
for (bridge_type = 0; bridge_type != MAX_BRIDGES; bridge_type++) {
if (CheckBridge_Stuff(bridge_type, bridge_len)) {
for (BridgeType brd_type = 0; brd_type != MAX_BRIDGES; brd_type++) {
if (CheckBridge_Stuff(brd_type, bridge_len)) {
/* bridge is accepted, add to list */
const Bridge *b = &_bridge[bridge_type];
const BridgeSpec *b = GetBridgeSpec(brd_type);
/* Add to terraforming & bulldozing costs the cost of the
* bridge itself (not computed with DC_QUERY_COST) */
_bridgedata.costs[j] = ret.GetCost() + (((int64)tot_bridgedata_len * _price.build_bridge * b->price) >> 8);
_bridgedata.indexes[j] = bridge_type;
_bridgedata.indexes[j] = brd_type;
j++;
}
}
@@ -203,7 +184,9 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
}
if (j != 0) {
AllocateWindowDesc((_bridgedata.type & 0x80) ? &_build_road_bridge_desc : &_build_bridge_desc);
Window *w = AllocateWindowDesc(&_build_bridge_desc);
/* Change the data, or the caption of the gui. Set it to road or rail, accordingly */
w->widget[BBSW_CAPTION].data = (transport_type == TRANSPORT_ROAD) ? STR_1803_SELECT_ROAD_BRIDGE : STR_100D_SELECT_RAIL_BRIDGE;
} else {
ShowErrorMessage(errmsg, STR_5015_CAN_T_BUILD_BRIDGE_HERE, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE);
}

View File

@@ -8,6 +8,7 @@
#include "direction_func.h"
#include "rail_type.h"
#include "road_map.h"
#include "bridge.h"
/**
@@ -67,7 +68,7 @@ static inline bool IsBridgeAbove(TileIndex t)
* @pre IsBridgeTile(t)
* @return The bridge type
*/
static inline uint GetBridgeType(TileIndex t)
static inline BridgeType GetBridgeType(TileIndex t)
{
assert(IsBridgeTile(t));
return GB(_m[t].m2, 4, 4);
@@ -163,7 +164,7 @@ static inline void SetBridgeMiddle(TileIndex t, Axis a)
* @param rt the road or rail type
* @note this function should not be called directly.
*/
static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, TransportType tt, uint rt)
static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, DiagDirection d, TransportType tt, uint rt)
{
SetTileType(t, MP_TUNNELBRIDGE);
SetTileOwner(t, o);
@@ -181,7 +182,7 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDir
* @param d the direction this ramp must be facing
* @param r the road type of the bridge
*/
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RoadTypes r)
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, DiagDirection d, RoadTypes r)
{
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD, r);
}
@@ -194,7 +195,7 @@ static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, Dia
* @param d the direction this ramp must be facing
* @param r the rail type of the bridge
*/
static inline void MakeRailBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RailType r)
static inline void MakeRailBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, DiagDirection d, RailType r)
{
MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL, r);
}

View File

@@ -55,7 +55,6 @@ enum BuildVehicleWidgets {
BUILD_VEHICLE_WIDGET_CLOSEBOX = 0,
BUILD_VEHICLE_WIDGET_CAPTION,
BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING,
BUILD_VEHICLE_WIDGET_SORT_TEXT,
BUILD_VEHICLE_WIDGET_SORT_DROPDOWN,
BUILD_VEHICLE_WIDGET_LIST,
BUILD_VEHICLE_WIDGET_SCROLLBAR,
@@ -70,8 +69,7 @@ static const Widget _build_vehicle_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 239, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS },
{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 80, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP},
{ WWT_PANEL, RESIZE_RIGHT, 14, 81, 227, 14, 25, 0x0, STR_SORT_CRITERIA_TIP},
{ WWT_TEXTBTN, RESIZE_LR, 14, 228, 239, 14, 25, STR_0225, STR_SORT_CRITERIA_TIP},
{ WWT_DROPDOWN, RESIZE_RIGHT, 14, 81, 239, 14, 25, 0x0, STR_SORT_CRITERIA_TIP},
{ WWT_MATRIX, RESIZE_RB, 14, 0, 227, 26, 39, 0x101, STR_NULL },
{ WWT_SCROLLBAR, RESIZE_LRB, 14, 228, 239, 26, 39, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST },
{ WWT_PANEL, RESIZE_RTB, 14, 0, 239, 40, 161, 0x0, STR_NULL },
@@ -83,9 +81,11 @@ static const Widget _build_vehicle_widgets[] = {
};
/* Setup widget strings to fit the different types of vehicles */
static void SetupWindowStrings(Window *w, byte type)
static void SetupWindowStrings(Window *w, VehicleType type)
{
switch (type) {
default: NOT_REACHED();
case VEH_TRAIN:
w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = STR_JUST_STRING;
w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_8843_TRAIN_VEHICLE_SELECTION;
@@ -94,6 +94,7 @@ static void SetupWindowStrings(Window *w, byte type)
w->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_8820_RENAME;
w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_8845_RENAME_TRAIN_VEHICLE_TYPE;
break;
case VEH_ROAD:
w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = STR_9006_NEW_ROAD_VEHICLES;
w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9026_ROAD_VEHICLE_SELECTION;
@@ -102,6 +103,7 @@ static void SetupWindowStrings(Window *w, byte type)
w->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9034_RENAME;
w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9035_RENAME_ROAD_VEHICLE_TYPE;
break;
case VEH_SHIP:
w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = STR_9808_NEW_SHIPS;
w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_9825_SHIP_SELECTION_LIST_CLICK;
@@ -110,6 +112,7 @@ static void SetupWindowStrings(Window *w, byte type)
w->widget[BUILD_VEHICLE_WIDGET_RENAME].data = STR_9836_RENAME;
w->widget[BUILD_VEHICLE_WIDGET_RENAME].tooltips = STR_9837_RENAME_SHIP_TYPE;
break;
case VEH_AIRCRAFT:
w->widget[BUILD_VEHICLE_WIDGET_CAPTION].data = STR_A005_NEW_AIRCRAFT;
w->widget[BUILD_VEHICLE_WIDGET_LIST].tooltips = STR_A025_AIRCRAFT_SELECTION_LIST;
@@ -227,8 +230,8 @@ static int CDECL TrainEngineRunningCostSorter(const void *a, const void *b)
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
Money va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
Money vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
Money va = rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
Money vb = rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int r = ClampToI32(va - vb);
return _internal_sort_order ? -r : r;
@@ -245,8 +248,8 @@ static int CDECL TrainEnginePowerVsRunningCostSorter(const void *a, const void *
* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
* Another thing is that both power and running costs should be doubled for multiheaded engines.
* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
Money va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max(1U, (uint)rvi_a->power);
Money vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max(1U, (uint)rvi_b->power);
Money va = (rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class)) / max(1U, (uint)rvi_a->power);
Money vb = (rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class)) / max(1U, (uint)rvi_b->power);
int r = ClampToI32(vb - va);
return _internal_sort_order ? -r : r;
@@ -309,9 +312,12 @@ static int CDECL RoadVehEngineSpeedSorter(const void *a, const void *b)
static int CDECL RoadVehEngineRunningCostSorter(const void *a, const void *b)
{
const int va = RoadVehInfo(*(const EngineID*)a)->running_cost;
const int vb = RoadVehInfo(*(const EngineID*)b)->running_cost;
const int r = va - vb;
const RoadVehicleInfo *rvi_a = RoadVehInfo(*(const EngineID*)a);
const RoadVehicleInfo *rvi_b = RoadVehInfo(*(const EngineID*)b);
Money va = rvi_a->running_cost * GetPriceByIndex(rvi_a->running_cost_class);
Money vb = rvi_b->running_cost * GetPriceByIndex(rvi_b->running_cost_class);
int r = ClampToI32(va - vb);
if (r == 0) {
/* Use EngineID to sort instead since we want consistent sorting */
@@ -527,6 +533,26 @@ static const StringID _sort_listing[][11] = {{
INVALID_STRING_ID
}};
static int DrawCargoCapacityInfo(int x, int y, EngineID engine, VehicleType type, bool refittable)
{
uint16 *cap = GetCapacityOfArticulatedParts(engine, type);
for (uint c = 0; c < NUM_CARGO; c++) {
if (cap[c] == 0) continue;
SetDParam(0, c);
SetDParam(1, cap[c]);
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
y += 10;
/* Only show as refittable once */
refittable = false;
}
return y;
}
/* Draw rail wagon specific details */
static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
{
@@ -551,6 +577,14 @@ static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const
y += 10;
}
}
/* Running cost */
if (rvi->running_cost_class != 0xFF) {
SetDParam(0, GetEngineProperty(engine_number, 0x0D, rvi->running_cost) * GetPriceByIndex(rvi->running_cost_class) >> 8);
DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
y += 10;
}
return y;
}
@@ -580,9 +614,11 @@ static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, cons
}
/* Running cost */
SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost_base) * _price.running_rail[rvi->running_cost_class] >> 8) << multihead);
DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
y += 10;
if (rvi->running_cost_class != 0xFF) {
SetDParam(0, (GetEngineProperty(engine_number, 0x0D, rvi->running_cost) * GetPriceByIndex(rvi->running_cost_class) >> 8) << multihead);
DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
y += 10;
}
/* Powered wagons power - Powered wagons extra weight */
if (rvi->pow_wag_power != 0) {
@@ -607,18 +643,12 @@ static int DrawRoadVehPurchaseInfo(int x, int y, EngineID engine_number, const R
y += 10;
/* Running cost */
SetDParam(0, rvi->running_cost * _price.roadveh_running >> 8);
SetDParam(0, rvi->running_cost * GetPriceByIndex(rvi->running_cost_class) >> 8);
DrawString(x, y, STR_PURCHASE_INFO_RUNNINGCOST, TC_FROMSTRING);
y += 10;
/* Cargo type + capacity */
SetDParam(0, rvi->cargo_type);
SetDParam(1, GetEngineProperty(engine_number, 0x0F, rvi->capacity));
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
y += 10;
return y;
return DrawCargoCapacityInfo(x, y, engine_number, VEH_ROAD, refittable);
}
/* Draw ship specific details */
@@ -709,20 +739,18 @@ int DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
}
/* Cargo type + capacity, or N/A */
if (rvi->capacity == 0) {
int new_y = DrawCargoCapacityInfo(x, y, engine_number, VEH_TRAIN, refitable);
if (new_y == y) {
SetDParam(0, CT_INVALID);
SetDParam(2, STR_EMPTY);
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
y += 10;
} else {
int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
SetDParam(0, rvi->cargo_type);
SetDParam(1, (capacity * (CountArticulatedParts(engine_number, true) + 1)) << multihead);
SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
y = new_y;
}
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
y += 10;
}
break;
}
case VEH_ROAD:
y = DrawRoadVehPurchaseInfo(x, y, engine_number, RoadVehInfo(engine_number));
refitable = true;
@@ -775,7 +803,8 @@ static void GenerateBuildTrainList(Window *w)
* Also check to see if the previously selected engine is still available,
* and if not, reset selection to INVALID_ENGINE. This could be the case
* when engines become obsolete and are removed */
for (EngineID eid = 0; eid < NUM_TRAIN_ENGINES; eid++) {
EngineID eid;
FOR_ALL_ENGINEIDS_OF_TYPE(eid, VEH_TRAIN) {
const RailVehicleInfo *rvi = RailVehInfo(eid);
if (bv->filter.railtype != RAILTYPE_END && !HasPowerOnRail(rvi->railtype, bv->filter.railtype)) continue;
@@ -813,7 +842,8 @@ static void GenerateBuildRoadVehList(Window *w)
EngList_RemoveAll(&bv->eng_list);
for (EngineID eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
EngineID eid;
FOR_ALL_ENGINEIDS_OF_TYPE(eid, VEH_ROAD) {
if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
if (!HasBit(bv->filter.roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)) continue;
EngList_Add(&bv->eng_list, eid);
@@ -831,7 +861,8 @@ static void GenerateBuildShipList(Window *w)
EngList_RemoveAll(&bv->eng_list);
for (EngineID eid = SHIP_ENGINES_INDEX; eid < SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES; eid++) {
EngineID eid;
FOR_ALL_ENGINEIDS_OF_TYPE(eid, VEH_SHIP) {
if (!IsEngineBuildable(eid, VEH_SHIP, _local_player)) continue;
EngList_Add(&bv->eng_list, eid);
@@ -852,7 +883,8 @@ static void GenerateBuildAircraftList(Window *w)
* Also check to see if the previously selected plane is still available,
* and if not, reset selection to INVALID_ENGINE. This could be the case
* when planes become obsolete and are removed */
for (EngineID eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
EngineID eid;
FOR_ALL_ENGINEIDS_OF_TYPE(eid, VEH_AIRCRAFT) {
if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_player)) continue;
/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
if (w->window_number > VEH_END && !CanAircraftUseStation(eid, w->window_number)) continue;
@@ -888,7 +920,7 @@ static void GenerateBuildList(Window *w)
EngList_Sort(&bv->eng_list, _sorter[bv->vehicle_type][bv->sort_criteria]);
}
static void DrawVehicleEngine(byte type, int x, int y, EngineID engine, SpriteID pal)
static void DrawVehicleEngine(VehicleType type, int x, int y, EngineID engine, SpriteID pal)
{
switch (type) {
case VEH_TRAIN: DrawTrainEngine( x, y, engine, pal); break;
@@ -956,23 +988,6 @@ void DrawEngineList(VehicleType type, int x, int y, const EngineList eng_list, u
}
}
static void ExpandPurchaseInfoWidget(Window *w, int expand_by)
{
Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL];
SetWindowDirty(w);
wi->bottom += expand_by;
for (uint i = BUILD_VEHICLE_WIDGET_BUILD; i < BUILD_VEHICLE_WIDGET_END; i++) {
wi = &w->widget[i];
wi->top += expand_by;
wi->bottom += expand_by;
}
w->height += expand_by;
SetWindowDirty(w);
}
static void DrawBuildVehicleWindow(Window *w)
{
const buildvehicle_d *bv = &WP(w, buildvehicle_d);
@@ -982,19 +997,26 @@ static void DrawBuildVehicleWindow(Window *w)
SetVScrollCount(w, EngList_Count(&bv->eng_list));
SetDParam(0, bv->filter.railtype + STR_881C_NEW_RAIL_VEHICLES); // This should only affect rail vehicles
/* Set text of sort by dropdown */
w->widget[BUILD_VEHICLE_WIDGET_SORT_DROPDOWN].data = _sort_listing[bv->vehicle_type][bv->sort_criteria];
DrawWindowWidgets(w);
DrawEngineList(bv->vehicle_type, 2, 27, bv->eng_list, w->vscroll.pos, max, bv->sel_engine, false, DEFAULT_GROUP);
DrawEngineList(bv->vehicle_type, w->widget[BUILD_VEHICLE_WIDGET_LIST].left + 2, w->widget[BUILD_VEHICLE_WIDGET_LIST].top + 1, bv->eng_list, w->vscroll.pos, max, bv->sel_engine, false, DEFAULT_GROUP);
if (bv->sel_engine != INVALID_ENGINE) {
const Widget *wi = &w->widget[BUILD_VEHICLE_WIDGET_PANEL];
int text_end = DrawVehiclePurchaseInfo(2, wi->top + 1, wi->right - wi->left - 2, bv->sel_engine);
if (text_end > wi->bottom) ExpandPurchaseInfoWidget(w, text_end - wi->bottom);
if (text_end > wi->bottom) {
SetWindowDirty(w);
ResizeWindowForWidget(w, BUILD_VEHICLE_WIDGET_PANEL, 0, text_end - wi->bottom);
SetWindowDirty(w);
}
}
DrawString(85, 15, _sort_listing[bv->vehicle_type][bv->sort_criteria], TC_BLACK);
DoDrawString(bv->descending_sort_order ? DOWNARROW : UPARROW, 69, 15, TC_BLACK);
DrawSortButtonState(w, BUILD_VEHICLE_WIDGET_SORT_ASSENDING_DESCENDING, bv->descending_sort_order ? SBS_DOWN : SBS_UP);
}
static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
@@ -1010,14 +1032,14 @@ static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
break;
case BUILD_VEHICLE_WIDGET_LIST: {
uint i = (e->we.click.pt.y - 26) / GetVehicleListHeight(bv->vehicle_type) + w->vscroll.pos;
uint i = (e->we.click.pt.y - w->widget[BUILD_VEHICLE_WIDGET_LIST].top) / GetVehicleListHeight(bv->vehicle_type) + w->vscroll.pos;
uint num_items = EngList_Count(&bv->eng_list);
bv->sel_engine = (i < num_items) ? bv->eng_list[i] : INVALID_ENGINE;
SetWindowDirty(w);
break;
}
case BUILD_VEHICLE_WIDGET_SORT_TEXT: case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
ShowDropDownMenu(w, _sort_listing[bv->vehicle_type], bv->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
break;

View File

@@ -37,7 +37,7 @@ CargoPacket::~CargoPacket()
this->count = 0;
}
bool CargoPacket::SameSource(CargoPacket *cp)
bool CargoPacket::SameSource(const CargoPacket *cp) const
{
return this->source_xy == cp->source_xy && this->days_in_transit == cp->days_in_transit && this->paid_for == cp->paid_for;
}

View File

@@ -1,6 +1,6 @@
/* $Id$ */
/** @file cargotype.h */
/** @file cargopacket.h */
#ifndef CARGOPACKET_H
#define CARGOPACKET_H
@@ -53,7 +53,7 @@ struct CargoPacket : PoolItem<CargoPacket, CargoPacketID, &_CargoPacket_pool> {
* @param cp the cargo packet to compare to
* @return true if and only if days_in_transit and source_xy are equal
*/
bool SameSource(CargoPacket *cp);
bool SameSource(const CargoPacket *cp) const;
};
/**

View File

@@ -315,7 +315,7 @@ static void ClickTile_Clear(TileIndex tile)
/* not used */
}
static uint32 GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode)
static TrackStatus GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
{
return 0;
}

View File

@@ -20,6 +20,7 @@
#include "debug.h"
#include "player_func.h"
#include "player_base.h"
#include "signal_func.h"
#include "table/strings.h"
@@ -208,160 +209,145 @@ DEF_COMMAND(CmdAutofillTimetable);
* as the value from the CMD_* enums.
*/
static const Command _command_proc_table[] = {
{CmdBuildRailroadTrack, CMD_AUTO}, /* 0, CMD_BUILD_RAILROAD_TRACK */
{CmdRemoveRailroadTrack, CMD_AUTO}, /* 1, CMD_REMOVE_RAILROAD_TRACK */
{CmdBuildSingleRail, CMD_AUTO}, /* 2, CMD_BUILD_SINGLE_RAIL */
{CmdRemoveSingleRail, CMD_AUTO}, /* 3, CMD_REMOVE_SINGLE_RAIL */
{CmdLandscapeClear, 0}, /* 4, CMD_LANDSCAPE_CLEAR */
{CmdBuildBridge, CMD_AUTO}, /* 5, CMD_BUILD_BRIDGE */
{CmdBuildRailroadStation, CMD_AUTO}, /* 6, CMD_BUILD_RAILROAD_STATION */
{CmdBuildTrainDepot, CMD_AUTO}, /* 7, CMD_BUILD_TRAIN_DEPOT */
{CmdBuildSingleSignal, CMD_AUTO}, /* 8, CMD_BUILD_SIGNALS */
{CmdRemoveSingleSignal, CMD_AUTO}, /* 9, CMD_REMOVE_SIGNALS */
{CmdTerraformLand, CMD_AUTO}, /* 10, CMD_TERRAFORM_LAND */
{CmdPurchaseLandArea, CMD_AUTO}, /* 11, CMD_PURCHASE_LAND_AREA */
{CmdSellLandArea, 0}, /* 12, CMD_SELL_LAND_AREA */
{CmdBuildTunnel, CMD_AUTO}, /* 13, CMD_BUILD_TUNNEL */
{CmdRemoveFromRailroadStation, 0}, /* 14, CMD_REMOVE_FROM_RAILROAD_STATION */
{CmdConvertRail, 0}, /* 15, CMD_CONVERT_RAILD */
{CmdBuildTrainWaypoint, 0}, /* 16, CMD_BUILD_TRAIN_WAYPOINT */
{CmdRenameWaypoint, 0}, /* 17, CMD_RENAME_WAYPOINT */
{CmdRemoveTrainWaypoint, 0}, /* 18, CMD_REMOVE_TRAIN_WAYPOINT */
{NULL, 0}, /* 19, unused */
{NULL, 0}, /* 20, unused */
{CmdBuildRoadStop, CMD_AUTO}, /* 21, CMD_BUILD_ROAD_STOP */
{CmdRemoveRoadStop, 0}, /* 22, CMD_REMOVE_ROAD_STOP */
{CmdBuildLongRoad, CMD_AUTO}, /* 23, CMD_BUILD_LONG_ROAD */
{CmdRemoveLongRoad, CMD_AUTO}, /* 24, CMD_REMOVE_LONG_ROAD */
{CmdBuildRoad, 0}, /* 25, CMD_BUILD_ROAD */
{CmdRemoveRoad, 0}, /* 26, CMD_REMOVE_ROAD */
{CmdBuildRoadDepot, CMD_AUTO}, /* 27, CMD_BUILD_ROAD_DEPOT */
{NULL, 0}, /* 28, unused */
{CmdBuildAirport, CMD_AUTO}, /* 29, CMD_BUILD_AIRPORT */
{CmdBuildDock, CMD_AUTO}, /* 30, CMD_BUILD_DOCK */
{CmdBuildShipDepot, CMD_AUTO}, /* 31, CMD_BUILD_SHIP_DEPOT */
{CmdBuildBuoy, CMD_AUTO}, /* 32, CMD_BUILD_BUOY */
{CmdPlantTree, CMD_AUTO}, /* 33, CMD_PLANT_TREE */
{CmdBuildRailVehicle, 0}, /* 34, CMD_BUILD_RAIL_VEHICLE */
{CmdMoveRailVehicle, 0}, /* 35, CMD_MOVE_RAIL_VEHICLE */
{CmdStartStopTrain, 0}, /* 36, CMD_START_STOP_TRAIN */
{NULL, 0}, /* 37, unused */
{CmdSellRailWagon, 0}, /* 38, CMD_SELL_RAIL_WAGON */
{CmdSendTrainToDepot, 0}, /* 39, CMD_SEND_TRAIN_TO_DEPOT */
{CmdForceTrainProceed, 0}, /* 40, CMD_FORCE_TRAIN_PROCEED */
{CmdReverseTrainDirection, 0}, /* 41, CMD_REVERSE_TRAIN_DIRECTION */
{CmdBuildRailroadTrack, CMD_AUTO}, /* CMD_BUILD_RAILROAD_TRACK */
{CmdRemoveRailroadTrack, CMD_AUTO}, /* CMD_REMOVE_RAILROAD_TRACK */
{CmdBuildSingleRail, CMD_AUTO}, /* CMD_BUILD_SINGLE_RAIL */
{CmdRemoveSingleRail, CMD_AUTO}, /* CMD_REMOVE_SINGLE_RAIL */
{CmdLandscapeClear, 0}, /* CMD_LANDSCAPE_CLEAR */
{CmdBuildBridge, CMD_AUTO}, /* CMD_BUILD_BRIDGE */
{CmdBuildRailroadStation, CMD_AUTO}, /* CMD_BUILD_RAILROAD_STATION */
{CmdBuildTrainDepot, CMD_AUTO}, /* CMD_BUILD_TRAIN_DEPOT */
{CmdBuildSingleSignal, CMD_AUTO}, /* CMD_BUILD_SIGNALS */
{CmdRemoveSingleSignal, CMD_AUTO}, /* CMD_REMOVE_SIGNALS */
{CmdTerraformLand, CMD_AUTO}, /* CMD_TERRAFORM_LAND */
{CmdPurchaseLandArea, CMD_AUTO}, /* CMD_PURCHASE_LAND_AREA */
{CmdSellLandArea, 0}, /* CMD_SELL_LAND_AREA */
{CmdBuildTunnel, CMD_AUTO}, /* CMD_BUILD_TUNNEL */
{CmdRemoveFromRailroadStation, 0}, /* CMD_REMOVE_FROM_RAILROAD_STATION */
{CmdConvertRail, 0}, /* CMD_CONVERT_RAILD */
{CmdBuildTrainWaypoint, 0}, /* CMD_BUILD_TRAIN_WAYPOINT */
{CmdRenameWaypoint, 0}, /* CMD_RENAME_WAYPOINT */
{CmdRemoveTrainWaypoint, 0}, /* CMD_REMOVE_TRAIN_WAYPOINT */
{CmdModifyOrder, 0}, /* 42, CMD_MODIFY_ORDER */
{CmdSkipToOrder, 0}, /* 43, CMD_SKIP_TO_ORDER */
{CmdDeleteOrder, 0}, /* 44, CMD_DELETE_ORDER */
{CmdInsertOrder, 0}, /* 45, CMD_INSERT_ORDER */
{CmdBuildRoadStop, CMD_AUTO}, /* CMD_BUILD_ROAD_STOP */
{CmdRemoveRoadStop, 0}, /* CMD_REMOVE_ROAD_STOP */
{CmdBuildLongRoad, CMD_AUTO}, /* CMD_BUILD_LONG_ROAD */
{CmdRemoveLongRoad, CMD_AUTO}, /* CMD_REMOVE_LONG_ROAD */
{CmdBuildRoad, 0}, /* CMD_BUILD_ROAD */
{CmdRemoveRoad, 0}, /* CMD_REMOVE_ROAD */
{CmdBuildRoadDepot, CMD_AUTO}, /* CMD_BUILD_ROAD_DEPOT */
{CmdChangeServiceInt, 0}, /* 46, CMD_CHANGE_SERVICE_INT */
{CmdBuildAirport, CMD_AUTO}, /* CMD_BUILD_AIRPORT */
{CmdBuildDock, CMD_AUTO}, /* CMD_BUILD_DOCK */
{CmdBuildShipDepot, CMD_AUTO}, /* CMD_BUILD_SHIP_DEPOT */
{CmdBuildBuoy, CMD_AUTO}, /* CMD_BUILD_BUOY */
{CmdPlantTree, CMD_AUTO}, /* CMD_PLANT_TREE */
{CmdBuildRailVehicle, 0}, /* CMD_BUILD_RAIL_VEHICLE */
{CmdMoveRailVehicle, 0}, /* CMD_MOVE_RAIL_VEHICLE */
{CmdStartStopTrain, 0}, /* CMD_START_STOP_TRAIN */
{CmdBuildIndustry, 0}, /* 47, CMD_BUILD_INDUSTRY */
{CmdBuildCompanyHQ, CMD_AUTO}, /* 48, CMD_BUILD_COMPANY_HQ */
{CmdSetPlayerFace, 0}, /* 49, CMD_SET_PLAYER_FACE */
{CmdSetPlayerColor, 0}, /* 50, CMD_SET_PLAYER_COLOR */
{CmdSellRailWagon, 0}, /* CMD_SELL_RAIL_WAGON */
{CmdSendTrainToDepot, 0}, /* CMD_SEND_TRAIN_TO_DEPOT */
{CmdForceTrainProceed, 0}, /* CMD_FORCE_TRAIN_PROCEED */
{CmdReverseTrainDirection, 0}, /* CMD_REVERSE_TRAIN_DIRECTION */
{CmdIncreaseLoan, 0}, /* 51, CMD_INCREASE_LOAN */
{CmdDecreaseLoan, 0}, /* 52, CMD_DECREASE_LOAN */
{CmdModifyOrder, 0}, /* CMD_MODIFY_ORDER */
{CmdSkipToOrder, 0}, /* CMD_SKIP_TO_ORDER */
{CmdDeleteOrder, 0}, /* CMD_DELETE_ORDER */
{CmdInsertOrder, 0}, /* CMD_INSERT_ORDER */
{CmdWantEnginePreview, 0}, /* 53, CMD_WANT_ENGINE_PREVIEW */
{CmdChangeServiceInt, 0}, /* CMD_CHANGE_SERVICE_INT */
{CmdNameVehicle, 0}, /* 54, CMD_NAME_VEHICLE */
{CmdRenameEngine, 0}, /* 55, CMD_RENAME_ENGINE */
{CmdBuildIndustry, 0}, /* CMD_BUILD_INDUSTRY */
{CmdBuildCompanyHQ, CMD_AUTO}, /* CMD_BUILD_COMPANY_HQ */
{CmdSetPlayerFace, 0}, /* CMD_SET_PLAYER_FACE */
{CmdSetPlayerColor, 0}, /* CMD_SET_PLAYER_COLOR */
{CmdChangeCompanyName, 0}, /* 56, CMD_CHANGE_COMPANY_NAME */
{CmdChangePresidentName, 0}, /* 57, CMD_CHANGE_PRESIDENT_NAME */
{CmdIncreaseLoan, 0}, /* CMD_INCREASE_LOAN */
{CmdDecreaseLoan, 0}, /* CMD_DECREASE_LOAN */
{CmdRenameStation, 0}, /* 58, CMD_RENAME_STATION */
{CmdWantEnginePreview, 0}, /* CMD_WANT_ENGINE_PREVIEW */
{CmdSellAircraft, 0}, /* 59, CMD_SELL_AIRCRAFT */
{CmdStartStopAircraft, 0}, /* 60, CMD_START_STOP_AIRCRAFT */
{CmdNameVehicle, 0}, /* CMD_NAME_VEHICLE */
{CmdRenameEngine, 0}, /* CMD_RENAME_ENGINE */
{CmdBuildAircraft, 0}, /* 61, CMD_BUILD_AIRCRAFT */
{CmdSendAircraftToHangar, 0}, /* 62, CMD_SEND_AIRCRAFT_TO_HANGAR */
{NULL, 0}, /* 63, unused */
{CmdRefitAircraft, 0}, /* 64, CMD_REFIT_AIRCRAFT */
{CmdChangeCompanyName, 0}, /* CMD_CHANGE_COMPANY_NAME */
{CmdChangePresidentName, 0}, /* CMD_CHANGE_PRESIDENT_NAME */
{CmdPlaceSign, 0}, /* 65, CMD_PLACE_SIGN */
{CmdRenameSign, 0}, /* 66, CMD_RENAME_SIGN */
{CmdRenameStation, 0}, /* CMD_RENAME_STATION */
{CmdBuildRoadVeh, 0}, /* 67, CMD_BUILD_ROAD_VEH */
{CmdStartStopRoadVeh, 0}, /* 68, CMD_START_STOP_ROADVEH */
{CmdSellRoadVeh, 0}, /* 69, CMD_SELL_ROAD_VEH */
{CmdSendRoadVehToDepot, 0}, /* 70, CMD_SEND_ROADVEH_TO_DEPOT */
{CmdTurnRoadVeh, 0}, /* 71, CMD_TURN_ROADVEH */
{CmdRefitRoadVeh, 0}, /* 72, CMD_REFIT_ROAD_VEH */
{CmdSellAircraft, 0}, /* CMD_SELL_AIRCRAFT */
{CmdStartStopAircraft, 0}, /* CMD_START_STOP_AIRCRAFT */
{CmdPause, CMD_SERVER}, /* 73, CMD_PAUSE */
{CmdBuildAircraft, 0}, /* CMD_BUILD_AIRCRAFT */
{CmdSendAircraftToHangar, 0}, /* CMD_SEND_AIRCRAFT_TO_HANGAR */
{CmdRefitAircraft, 0}, /* CMD_REFIT_AIRCRAFT */
{CmdBuyShareInCompany, 0}, /* 74, CMD_BUY_SHARE_IN_COMPANY */
{CmdSellShareInCompany, 0}, /* 75, CMD_SELL_SHARE_IN_COMPANY */
{CmdBuyCompany, 0}, /* 76, CMD_BUY_COMANY */
{CmdPlaceSign, 0}, /* CMD_PLACE_SIGN */
{CmdRenameSign, 0}, /* CMD_RENAME_SIGN */
{CmdBuildTown, CMD_OFFLINE}, /* 77, CMD_BUILD_TOWN */
{NULL, 0}, /* 78, unused */
{NULL, 0}, /* 79, unused */
{CmdRenameTown, CMD_SERVER}, /* 80, CMD_RENAME_TOWN */
{CmdDoTownAction, 0}, /* 81, CMD_DO_TOWN_ACTION */
{CmdBuildRoadVeh, 0}, /* CMD_BUILD_ROAD_VEH */
{CmdStartStopRoadVeh, 0}, /* CMD_START_STOP_ROADVEH */
{CmdSellRoadVeh, 0}, /* CMD_SELL_ROAD_VEH */
{CmdSendRoadVehToDepot, 0}, /* CMD_SEND_ROADVEH_TO_DEPOT */
{CmdTurnRoadVeh, 0}, /* CMD_TURN_ROADVEH */
{CmdRefitRoadVeh, 0}, /* CMD_REFIT_ROAD_VEH */
{CmdSetRoadDriveSide, CMD_SERVER}, /* 82, CMD_SET_ROAD_DRIVE_SIDE */
{NULL, 0}, /* 83, unused */
{NULL, 0}, /* 84, unused */
{CmdChangeDifficultyLevel, CMD_SERVER}, /* 85, CMD_CHANGE_DIFFICULTY_LEVEL */
{CmdPause, CMD_SERVER}, /* CMD_PAUSE */
{CmdStartStopShip, 0}, /* 86, CMD_START_STOP_SHIP */
{CmdSellShip, 0}, /* 87, CMD_SELL_SHIP */
{CmdBuildShip, 0}, /* 88, CMD_BUILD_SHIP */
{CmdSendShipToDepot, 0}, /* 89, CMD_SEND_SHIP_TO_DEPOT */
{NULL, 0}, /* 90, unused */
{CmdRefitShip, 0}, /* 91, CMD_REFIT_SHIP */
{CmdBuyShareInCompany, 0}, /* CMD_BUY_SHARE_IN_COMPANY */
{CmdSellShareInCompany, 0}, /* CMD_SELL_SHARE_IN_COMPANY */
{CmdBuyCompany, 0}, /* CMD_BUY_COMANY */
{NULL, 0}, /* 92, unused */
{NULL, 0}, /* 93, unused */
{NULL, 0}, /* 94, unused */
{NULL, 0}, /* 95, unused */
{NULL, 0}, /* 96, unused */
{NULL, 0}, /* 97, unused */
{CmdBuildTown, CMD_OFFLINE}, /* CMD_BUILD_TOWN */
{CmdRenameTown, CMD_SERVER}, /* CMD_RENAME_TOWN */
{CmdDoTownAction, 0}, /* CMD_DO_TOWN_ACTION */
{CmdOrderRefit, 0}, /* 98, CMD_ORDER_REFIT */
{CmdCloneOrder, 0}, /* 99, CMD_CLONE_ORDER */
{CmdSetRoadDriveSide, CMD_SERVER}, /* CMD_SET_ROAD_DRIVE_SIDE */
{CmdChangeDifficultyLevel, CMD_SERVER}, /* CMD_CHANGE_DIFFICULTY_LEVEL */
{CmdClearArea, 0}, /* 100, CMD_CLEAR_AREA */
{NULL, 0}, /* 101, unused */
{CmdStartStopShip, 0}, /* CMD_START_STOP_SHIP */
{CmdSellShip, 0}, /* CMD_SELL_SHIP */
{CmdBuildShip, 0}, /* CMD_BUILD_SHIP */
{CmdSendShipToDepot, 0}, /* CMD_SEND_SHIP_TO_DEPOT */
{CmdRefitShip, 0}, /* CMD_REFIT_SHIP */
{CmdMoneyCheat, CMD_OFFLINE}, /* 102, CMD_MONEY_CHEAT */
{CmdBuildCanal, CMD_AUTO}, /* 103, CMD_BUILD_CANAL */
{CmdPlayerCtrl, 0}, /* 104, CMD_PLAYER_CTRL */
{CmdOrderRefit, 0}, /* CMD_ORDER_REFIT */
{CmdCloneOrder, 0}, /* CMD_CLONE_ORDER */
{CmdLevelLand, CMD_AUTO}, /* 105, CMD_LEVEL_LAND */
{CmdClearArea, 0}, /* CMD_CLEAR_AREA */
{CmdRefitRailVehicle, 0}, /* 106, CMD_REFIT_RAIL_VEHICLE */
{CmdRestoreOrderIndex, 0}, /* 107, CMD_RESTORE_ORDER_INDEX */
{CmdBuildLock, CMD_AUTO}, /* 108, CMD_BUILD_LOCK */
{NULL, 0}, /* 109, unused */
{CmdBuildSignalTrack, CMD_AUTO}, /* 110, CMD_BUILD_SIGNAL_TRACK */
{CmdRemoveSignalTrack, CMD_AUTO}, /* 111, CMD_REMOVE_SIGNAL_TRACK */
{NULL, 0}, /* 112, unused */
{CmdGiveMoney, 0}, /* 113, CMD_GIVE_MONEY */
{CmdChangePatchSetting, CMD_SERVER}, /* 114, CMD_CHANGE_PATCH_SETTING */
{CmdSetAutoReplace, 0}, /* 115, CMD_SET_AUTOREPLACE */
{CmdCloneVehicle, 0}, /* 116, CMD_CLONE_VEHICLE */
{CmdMassStartStopVehicle, 0}, /* 117, CMD_MASS_START_STOP */
{CmdDepotSellAllVehicles, 0}, /* 118, CMD_DEPOT_SELL_ALL_VEHICLES */
{CmdDepotMassAutoReplace, 0}, /* 119, CMD_DEPOT_MASS_AUTOREPLACE */
{CmdCreateGroup, 0}, /* 120, CMD_CREATE_GROUP */
{CmdDeleteGroup, 0}, /* 121, CMD_DELETE_GROUP */
{CmdRenameGroup, 0}, /* 122, CMD_RENAME_GROUP */
{CmdAddVehicleGroup, 0}, /* 123, CMD_ADD_VEHICLE_GROUP */
{CmdAddSharedVehicleGroup, 0}, /* 124, CMD_ADD_SHARE_VEHICLE_GROUP */
{CmdRemoveAllVehiclesGroup, 0}, /* 125, CMD_REMOVE_ALL_VEHICLES_GROUP */
{CmdSetGroupReplaceProtection, 0}, /* 126, CMD_SET_GROUP_REPLACE_PROTECTION */
{CmdMoveOrder, 0}, /* 127, CMD_MOVE_ORDER */
{CmdChangeTimetable, 0}, /* 128, CMD_CHANGE_TIMETABLE */
{CmdSetVehicleOnTime, 0}, /* 129, CMD_SET_VEHICLE_ON_TIME */
{CmdAutofillTimetable, 0}, /* 130, CMD_AUTOFILL_TIMETABLE */
{CmdMoneyCheat, CMD_OFFLINE}, /* CMD_MONEY_CHEAT */
{CmdBuildCanal, CMD_AUTO}, /* CMD_BUILD_CANAL */
{CmdPlayerCtrl, 0}, /* CMD_PLAYER_CTRL */
{CmdLevelLand, CMD_AUTO}, /* CMD_LEVEL_LAND */
{CmdRefitRailVehicle, 0}, /* CMD_REFIT_RAIL_VEHICLE */
{CmdRestoreOrderIndex, 0}, /* CMD_RESTORE_ORDER_INDEX */
{CmdBuildLock, CMD_AUTO}, /* CMD_BUILD_LOCK */
{CmdBuildSignalTrack, CMD_AUTO}, /* CMD_BUILD_SIGNAL_TRACK */
{CmdRemoveSignalTrack, CMD_AUTO}, /* CMD_REMOVE_SIGNAL_TRACK */
{CmdGiveMoney, 0}, /* CMD_GIVE_MONEY */
{CmdChangePatchSetting, CMD_SERVER}, /* CMD_CHANGE_PATCH_SETTING */
{CmdSetAutoReplace, 0}, /* CMD_SET_AUTOREPLACE */
{CmdCloneVehicle, 0}, /* CMD_CLONE_VEHICLE */
{CmdMassStartStopVehicle, 0}, /* CMD_MASS_START_STOP */
{CmdDepotSellAllVehicles, 0}, /* CMD_DEPOT_SELL_ALL_VEHICLES */
{CmdDepotMassAutoReplace, 0}, /* CMD_DEPOT_MASS_AUTOREPLACE */
{CmdCreateGroup, 0}, /* CMD_CREATE_GROUP */
{CmdDeleteGroup, 0}, /* CMD_DELETE_GROUP */
{CmdRenameGroup, 0}, /* CMD_RENAME_GROUP */
{CmdAddVehicleGroup, 0}, /* CMD_ADD_VEHICLE_GROUP */
{CmdAddSharedVehicleGroup, 0}, /* CMD_ADD_SHARE_VEHICLE_GROUP */
{CmdRemoveAllVehiclesGroup, 0}, /* CMD_REMOVE_ALL_VEHICLES_GROUP */
{CmdSetGroupReplaceProtection, 0}, /* CMD_SET_GROUP_REPLACE_PROTECTION */
{CmdMoveOrder, 0}, /* CMD_MOVE_ORDER */
{CmdChangeTimetable, 0}, /* CMD_CHANGE_TIMETABLE */
{CmdSetVehicleOnTime, 0}, /* CMD_SET_VEHICLE_ON_TIME */
{CmdAutofillTimetable, 0}, /* CMD_AUTOFILL_TIMETABLE */
};
/*!
@@ -413,7 +399,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32
CommandProc *proc;
/* Do not even think about executing out-of-bounds tile-commands */
if (tile >= MapSize() || IsTileType(tile, MP_VOID)) {
if (!IsValidTile(tile)) {
_cmd_text = NULL;
return CMD_ERROR;
}
@@ -425,7 +411,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32
_docommand_recursive++;
/* only execute the test call if it's toplevel, or we're not execing. */
if (_docommand_recursive == 1 || !(flags & DC_EXEC) || (flags & DC_FORCETEST) ) {
if (_docommand_recursive == 1 || !(flags & DC_EXEC) ) {
SetTownRatingTestMode(true);
res = proc(tile, flags & ~DC_EXEC, p1, p2);
SetTownRatingTestMode(false);
@@ -436,6 +422,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32
if (_docommand_recursive == 1 &&
!(flags & DC_QUERY_COST) &&
!(flags & DC_BANKRUPT) &&
res.GetCost() != 0 &&
!CheckPlayerHasMoney(res)) {
goto error;
@@ -460,7 +447,7 @@ error:
}
/* if toplevel, subtract the money. */
if (--_docommand_recursive == 0) {
if (--_docommand_recursive == 0 && !(flags & DC_BANKRUPT)) {
SubtractMoneyFromPlayer(res);
/* XXX - Old AI hack which doesn't use DoCommandDP; update last build coord of player */
if (tile != 0 && IsValidPlayer(_current_player)) {
@@ -512,7 +499,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
int y = TileY(tile) * TILE_SIZE;
/* Do not even think about executing out-of-bounds tile-commands */
if (tile >= MapSize() || IsTileType(tile, MP_VOID)) {
if (!IsValidTile(tile)) {
_cmd_text = NULL;
return false;
}
@@ -571,7 +558,9 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
!(cmd & (CMD_NETWORK_COMMAND | CMD_SHOW_NO_ERROR)) &&
(cmd & 0xFF) != CMD_PAUSE) {
/* estimate the cost. */
SetTownRatingTestMode(true);
res = proc(tile, flags, p1, p2);
SetTownRatingTestMode(false);
if (CmdFailed(res)) {
res.SetGlobalErrorMessage();
ShowErrorMessage(_error_message, error_part1, x, y);
@@ -642,6 +631,9 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
SubtractMoneyFromPlayer(res2);
/* update signals if needed */
UpdateSignalsInBuffer();
if (IsLocalPlayer() && _game_mode != GM_EDITOR) {
if (res2.GetCost() != 0 && tile != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
if (_additional_cash_required != 0) {

View File

@@ -106,156 +106,156 @@ public:
* @see _command_proc_table
*/
enum {
CMD_BUILD_RAILROAD_TRACK = 0, ///< build a rail track
CMD_REMOVE_RAILROAD_TRACK = 1, ///< remove a rail track
CMD_BUILD_SINGLE_RAIL = 2, ///< build a single rail track
CMD_REMOVE_SINGLE_RAIL = 3, ///< remove a single rail track
CMD_LANDSCAPE_CLEAR = 4, ///< demolish a tile
CMD_BUILD_BRIDGE = 5, ///< build a bridge
CMD_BUILD_RAILROAD_STATION = 6, ///< build a railroad station
CMD_BUILD_TRAIN_DEPOT = 7, ///< build a train depot
CMD_BUILD_SIGNALS = 8, ///< build a signal
CMD_REMOVE_SIGNALS = 9, ///< remove a signal
CMD_TERRAFORM_LAND = 10, ///< terraform a tile
CMD_PURCHASE_LAND_AREA = 11, ///< purchase a tile
CMD_SELL_LAND_AREA = 12, ///< sell a bought tile before
CMD_BUILD_TUNNEL = 13, ///< build a tunnel
CMD_BUILD_RAILROAD_TRACK, ///< build a rail track
CMD_REMOVE_RAILROAD_TRACK, ///< remove a rail track
CMD_BUILD_SINGLE_RAIL, ///< build a single rail track
CMD_REMOVE_SINGLE_RAIL, ///< remove a single rail track
CMD_LANDSCAPE_CLEAR, ///< demolish a tile
CMD_BUILD_BRIDGE, ///< build a bridge
CMD_BUILD_RAILROAD_STATION, ///< build a railroad station
CMD_BUILD_TRAIN_DEPOT, ///< build a train depot
CMD_BUILD_SIGNALS, ///< build a signal
CMD_REMOVE_SIGNALS, ///< remove a signal
CMD_TERRAFORM_LAND, ///< terraform a tile
CMD_PURCHASE_LAND_AREA, ///< purchase a tile
CMD_SELL_LAND_AREA, ///< sell a bought tile before
CMD_BUILD_TUNNEL, ///< build a tunnel
CMD_REMOVE_FROM_RAILROAD_STATION = 14, ///< remove a tile station
CMD_CONVERT_RAIL = 15, ///< convert a rail type
CMD_REMOVE_FROM_RAILROAD_STATION, ///< remove a tile station
CMD_CONVERT_RAIL, ///< convert a rail type
CMD_BUILD_TRAIN_WAYPOINT = 16, ///< build a waypoint
CMD_RENAME_WAYPOINT = 17, ///< rename a waypoint
CMD_REMOVE_TRAIN_WAYPOINT = 18, ///< remove a waypoint
CMD_BUILD_TRAIN_WAYPOINT, ///< build a waypoint
CMD_RENAME_WAYPOINT, ///< rename a waypoint
CMD_REMOVE_TRAIN_WAYPOINT, ///< remove a waypoint
CMD_BUILD_ROAD_STOP = 21, ///< build a road stop
CMD_REMOVE_ROAD_STOP = 22, ///< remove a road stop
CMD_BUILD_LONG_ROAD = 23, ///< build a complete road (not a "half" one)
CMD_REMOVE_LONG_ROAD = 24, ///< remove a complete road (not a "half" one)
CMD_BUILD_ROAD = 25, ///< build a "half" road
CMD_REMOVE_ROAD = 26, ///< remove a "half" road
CMD_BUILD_ROAD_DEPOT = 27, ///< build a road depot
CMD_BUILD_ROAD_STOP, ///< build a road stop
CMD_REMOVE_ROAD_STOP, ///< remove a road stop
CMD_BUILD_LONG_ROAD, ///< build a complete road (not a "half" one)
CMD_REMOVE_LONG_ROAD, ///< remove a complete road (not a "half" one)
CMD_BUILD_ROAD, ///< build a "half" road
CMD_REMOVE_ROAD, ///< remove a "half" road
CMD_BUILD_ROAD_DEPOT, ///< build a road depot
CMD_BUILD_AIRPORT = 29, ///< build an airport
CMD_BUILD_AIRPORT, ///< build an airport
CMD_BUILD_DOCK = 30, ///< build a dock
CMD_BUILD_DOCK, ///< build a dock
CMD_BUILD_SHIP_DEPOT = 31, ///< build a ship depot
CMD_BUILD_BUOY = 32, ///< build a buoy
CMD_BUILD_SHIP_DEPOT, ///< build a ship depot
CMD_BUILD_BUOY, ///< build a buoy
CMD_PLANT_TREE = 33, ///< plant a tree
CMD_PLANT_TREE, ///< plant a tree
CMD_BUILD_RAIL_VEHICLE = 34, ///< build a rail vehicle
CMD_MOVE_RAIL_VEHICLE = 35, ///< move a rail vehicle (in the depot)
CMD_BUILD_RAIL_VEHICLE, ///< build a rail vehicle
CMD_MOVE_RAIL_VEHICLE, ///< move a rail vehicle (in the depot)
CMD_START_STOP_TRAIN = 36, ///< start or stop a train
CMD_START_STOP_TRAIN, ///< start or stop a train
CMD_SELL_RAIL_WAGON = 38, ///< sell a rail wagon
CMD_SELL_RAIL_WAGON, ///< sell a rail wagon
CMD_SEND_TRAIN_TO_DEPOT = 39, ///< send a train to a depot
CMD_FORCE_TRAIN_PROCEED = 40, ///< proceed a train to pass a red signal
CMD_REVERSE_TRAIN_DIRECTION = 41, ///< turn a train around
CMD_SEND_TRAIN_TO_DEPOT, ///< send a train to a depot
CMD_FORCE_TRAIN_PROCEED, ///< proceed a train to pass a red signal
CMD_REVERSE_TRAIN_DIRECTION, ///< turn a train around
CMD_MODIFY_ORDER = 42, ///< modify an order (like set full-load)
CMD_SKIP_TO_ORDER = 43, ///< skip an order to the next of specific one
CMD_DELETE_ORDER = 44, ///< delete an order
CMD_INSERT_ORDER = 45, ///< insert a new order
CMD_MODIFY_ORDER, ///< modify an order (like set full-load)
CMD_SKIP_TO_ORDER, ///< skip an order to the next of specific one
CMD_DELETE_ORDER, ///< delete an order
CMD_INSERT_ORDER, ///< insert a new order
CMD_CHANGE_SERVICE_INT = 46, ///< change the server interval of a vehicle
CMD_CHANGE_SERVICE_INT, ///< change the server interval of a vehicle
CMD_BUILD_INDUSTRY = 47, ///< build a new industry
CMD_BUILD_INDUSTRY, ///< build a new industry
CMD_BUILD_COMPANY_HQ = 48, ///< build the company headquarter
CMD_SET_PLAYER_FACE = 49, ///< set the face of the player/company
CMD_SET_PLAYER_COLOR = 50, ///< set the color of the player/company
CMD_BUILD_COMPANY_HQ, ///< build the company headquarter
CMD_SET_PLAYER_FACE, ///< set the face of the player/company
CMD_SET_PLAYER_COLOR, ///< set the color of the player/company
CMD_INCREASE_LOAN = 51, ///< increase the loan from the bank
CMD_DECREASE_LOAN = 52, ///< decrease the loan from the bank
CMD_INCREASE_LOAN, ///< increase the loan from the bank
CMD_DECREASE_LOAN, ///< decrease the loan from the bank
CMD_WANT_ENGINE_PREVIEW = 53, ///< confirm the preview of an engine
CMD_WANT_ENGINE_PREVIEW, ///< confirm the preview of an engine
CMD_NAME_VEHICLE = 54, ///< rename a whole vehicle
CMD_RENAME_ENGINE = 55, ///< rename a engine (in the engine list)
CMD_CHANGE_COMPANY_NAME = 56, ///< change the company name
CMD_CHANGE_PRESIDENT_NAME = 57, ///< change the president name
CMD_RENAME_STATION = 58, ///< rename a station
CMD_NAME_VEHICLE, ///< rename a whole vehicle
CMD_RENAME_ENGINE, ///< rename a engine (in the engine list)
CMD_CHANGE_COMPANY_NAME, ///< change the company name
CMD_CHANGE_PRESIDENT_NAME, ///< change the president name
CMD_RENAME_STATION, ///< rename a station
CMD_SELL_AIRCRAFT = 59, ///< sell an aircraft
CMD_START_STOP_AIRCRAFT = 60, ///< start/stop an aircraft
CMD_BUILD_AIRCRAFT = 61, ///< build an aircraft
CMD_SEND_AIRCRAFT_TO_HANGAR = 62, ///< send an aircraft to a hanger
CMD_REFIT_AIRCRAFT = 64, ///< refit the cargo space of an aircraft
CMD_SELL_AIRCRAFT, ///< sell an aircraft
CMD_START_STOP_AIRCRAFT, ///< start/stop an aircraft
CMD_BUILD_AIRCRAFT, ///< build an aircraft
CMD_SEND_AIRCRAFT_TO_HANGAR, ///< send an aircraft to a hanger
CMD_REFIT_AIRCRAFT, ///< refit the cargo space of an aircraft
CMD_PLACE_SIGN = 65, ///< place a sign
CMD_RENAME_SIGN = 66, ///< rename a sign
CMD_PLACE_SIGN, ///< place a sign
CMD_RENAME_SIGN, ///< rename a sign
CMD_BUILD_ROAD_VEH = 67, ///< build a road vehicle
CMD_START_STOP_ROADVEH = 68, ///< start/stop a road vehicle
CMD_SELL_ROAD_VEH = 69, ///< sell a road vehicle
CMD_SEND_ROADVEH_TO_DEPOT = 70, ///< send a road vehicle to the depot
CMD_TURN_ROADVEH = 71, ///< turn a road vehicle around
CMD_REFIT_ROAD_VEH = 72, ///< refit the cargo space of a road vehicle
CMD_BUILD_ROAD_VEH, ///< build a road vehicle
CMD_START_STOP_ROADVEH, ///< start/stop a road vehicle
CMD_SELL_ROAD_VEH, ///< sell a road vehicle
CMD_SEND_ROADVEH_TO_DEPOT, ///< send a road vehicle to the depot
CMD_TURN_ROADVEH, ///< turn a road vehicle around
CMD_REFIT_ROAD_VEH, ///< refit the cargo space of a road vehicle
CMD_PAUSE = 73, ///< pause the game
CMD_PAUSE, ///< pause the game
CMD_BUY_SHARE_IN_COMPANY = 74, ///< buy a share from a company
CMD_SELL_SHARE_IN_COMPANY = 75, ///< sell a share from a company
CMD_BUY_COMPANY = 76, ///< buy a company which is bankrupt
CMD_BUY_SHARE_IN_COMPANY, ///< buy a share from a company
CMD_SELL_SHARE_IN_COMPANY, ///< sell a share from a company
CMD_BUY_COMPANY, ///< buy a company which is bankrupt
CMD_BUILD_TOWN = 77, ///< build a town
CMD_BUILD_TOWN, ///< build a town
CMD_RENAME_TOWN = 80, ///< rename a town
CMD_DO_TOWN_ACTION = 81, ///< do a action from the town detail window (like advertises or bribe)
CMD_RENAME_TOWN, ///< rename a town
CMD_DO_TOWN_ACTION, ///< do a action from the town detail window (like advertises or bribe)
CMD_SET_ROAD_DRIVE_SIDE = 82, ///< set the side where the road vehicles drive
CMD_SET_ROAD_DRIVE_SIDE, ///< set the side where the road vehicles drive
CMD_CHANGE_DIFFICULTY_LEVEL = 85, ///< change the difficult of a game (each setting for it own)
CMD_CHANGE_DIFFICULTY_LEVEL, ///< change the difficult of a game (each setting for it own)
CMD_START_STOP_SHIP = 86, ///< start/stop a ship
CMD_SELL_SHIP = 87, ///< sell a ship
CMD_BUILD_SHIP = 88, ///< build a new ship
CMD_SEND_SHIP_TO_DEPOT = 89, ///< send a ship to a depot
CMD_REFIT_SHIP = 91, ///< refit the cargo space of a ship
CMD_START_STOP_SHIP, ///< start/stop a ship
CMD_SELL_SHIP, ///< sell a ship
CMD_BUILD_SHIP, ///< build a new ship
CMD_SEND_SHIP_TO_DEPOT, ///< send a ship to a depot
CMD_REFIT_SHIP, ///< refit the cargo space of a ship
CMD_ORDER_REFIT = 98, ///< change the refit informaction of an order (for "goto depot" )
CMD_CLONE_ORDER = 99, ///< clone (and share) an order
CMD_CLEAR_AREA = 100, ///< clear an area
CMD_ORDER_REFIT, ///< change the refit informaction of an order (for "goto depot" )
CMD_CLONE_ORDER, ///< clone (and share) an order
CMD_CLEAR_AREA, ///< clear an area
CMD_MONEY_CHEAT = 102, ///< do the money cheat
CMD_BUILD_CANAL = 103, ///< build a canal
CMD_MONEY_CHEAT, ///< do the money cheat
CMD_BUILD_CANAL, ///< build a canal
CMD_PLAYER_CTRL = 104, ///< used in multiplayer to create a new player etc.
CMD_LEVEL_LAND = 105, ///< level land
CMD_PLAYER_CTRL, ///< used in multiplayer to create a new player etc.
CMD_LEVEL_LAND, ///< level land
CMD_REFIT_RAIL_VEHICLE = 106, ///< refit the cargo space of a train
CMD_RESTORE_ORDER_INDEX = 107, ///< restore vehicle order-index and service interval
CMD_BUILD_LOCK = 108, ///< build a lock
CMD_REFIT_RAIL_VEHICLE, ///< refit the cargo space of a train
CMD_RESTORE_ORDER_INDEX, ///< restore vehicle order-index and service interval
CMD_BUILD_LOCK, ///< build a lock
CMD_BUILD_SIGNAL_TRACK = 110, ///< add signals along a track (by dragging)
CMD_REMOVE_SIGNAL_TRACK = 111, ///< remove signals along a track (by dragging)
CMD_BUILD_SIGNAL_TRACK, ///< add signals along a track (by dragging)
CMD_REMOVE_SIGNAL_TRACK, ///< remove signals along a track (by dragging)
CMD_GIVE_MONEY = 113, ///< give money to an other player
CMD_CHANGE_PATCH_SETTING = 114, ///< change a patch setting
CMD_GIVE_MONEY, ///< give money to an other player
CMD_CHANGE_PATCH_SETTING, ///< change a patch setting
CMD_SET_AUTOREPLACE = 115, ///< set an autoreplace entry
CMD_SET_AUTOREPLACE, ///< set an autoreplace entry
CMD_CLONE_VEHICLE = 116, ///< clone a vehicle
CMD_MASS_START_STOP = 117, ///< start/stop all vehicles (in a depot)
CMD_DEPOT_SELL_ALL_VEHICLES = 118, ///< sell all vehicles which are in a given depot
CMD_DEPOT_MASS_AUTOREPLACE = 119, ///< force the autoreplace to take action in a given depot
CMD_CLONE_VEHICLE, ///< clone a vehicle
CMD_MASS_START_STOP, ///< start/stop all vehicles (in a depot)
CMD_DEPOT_SELL_ALL_VEHICLES, ///< sell all vehicles which are in a given depot
CMD_DEPOT_MASS_AUTOREPLACE, ///< force the autoreplace to take action in a given depot
CMD_CREATE_GROUP = 120, ///< create a new group
CMD_DELETE_GROUP = 121, ///< delete a group
CMD_RENAME_GROUP = 122, ///< rename a group
CMD_ADD_VEHICLE_GROUP = 123, ///< add a vehicle to a group
CMD_ADD_SHARED_VEHICLE_GROUP = 124, ///< add all other shared vehicles to a group which are missing
CMD_REMOVE_ALL_VEHICLES_GROUP = 125, ///< remove all vehicles from a group
CMD_SET_GROUP_REPLACE_PROTECTION = 126, ///< set the autoreplace-protection for a group
CMD_CREATE_GROUP, ///< create a new group
CMD_DELETE_GROUP, ///< delete a group
CMD_RENAME_GROUP, ///< rename a group
CMD_ADD_VEHICLE_GROUP, ///< add a vehicle to a group
CMD_ADD_SHARED_VEHICLE_GROUP, ///< add all other shared vehicles to a group which are missing
CMD_REMOVE_ALL_VEHICLES_GROUP, ///< remove all vehicles from a group
CMD_SET_GROUP_REPLACE_PROTECTION, ///< set the autoreplace-protection for a group
CMD_MOVE_ORDER = 127, ///< move an order
CMD_CHANGE_TIMETABLE = 128, ///< change the timetable for a vehicle
CMD_SET_VEHICLE_ON_TIME = 129, ///< set the vehicle on time feature (timetable)
CMD_AUTOFILL_TIMETABLE = 130, ///< autofill the timetable
CMD_MOVE_ORDER, ///< move an order
CMD_CHANGE_TIMETABLE, ///< change the timetable for a vehicle
CMD_SET_VEHICLE_ON_TIME, ///< set the vehicle on time feature (timetable)
CMD_AUTOFILL_TIMETABLE, ///< autofill the timetable
};
/**
@@ -271,7 +271,7 @@ enum {
DC_NO_RAIL_OVERLAP = 0x10, ///< don't allow overlap of rails (used in buildrail)
DC_AI_BUILDING = 0x20, ///< special building rules for AI
DC_NO_TOWN_RATING = 0x40, ///< town rating does not disallow you from building
DC_FORCETEST = 0x80, ///< force test too.
DC_BANKRUPT = 0x80, ///< company bankrupts, skip money check, skip vehicle on tile check in some cases
};
/**

View File

@@ -810,7 +810,7 @@ DEF_CONSOLE_CMD(ConExec)
if (argc < 2) return false;
_script_file = fopen(argv[1], "r");
_script_file = FioFOpenFile(argv[1], "r", BASE_DIR);
if (_script_file == NULL) {
if (argc == 2 || atoi(argv[2]) != 0) IConsoleError("script file not found");
@@ -834,7 +834,7 @@ DEF_CONSOLE_CMD(ConExec)
IConsoleError("Encountered errror while trying to read from script file");
_script_running = false;
fclose(_script_file);
FioFCloseFile(_script_file);
return true;
}

24
src/core/alloc_func.cpp Normal file
View File

@@ -0,0 +1,24 @@
/* $Id$ */
/** @file alloc_func.cpp functions to 'handle' memory allocation errors */
#include "../stdafx.h"
#include "alloc_func.hpp"
/**
* Function to exit with an error message after malloc() or calloc() have failed
* @param size number of bytes we tried to allocate
*/
void MallocError(size_t size)
{
error("Out of memory. Cannot allocate %i bytes", size);
}
/**
* Function to exit with an error message after realloc() have failed
* @param size number of bytes we tried to allocate
*/
void ReallocError(size_t size)
{
error("Out of memory. Cannot reallocate %i bytes", size);
}

View File

@@ -5,6 +5,15 @@
#ifndef ALLOC_FUNC_HPP
#define ALLOC_FUNC_HPP
/**
* Functions to exit badly with an error message.
* It has to be linked so the error messages are not
* duplicated in each object file making the final
* binary needlessly large.
*/
void MallocError(size_t size);
void ReallocError(size_t size);
/**
* Simplified allocation function that allocates the specified number of
* elements of the given type. It also explicitly casts it to the requested
@@ -25,7 +34,7 @@ template <typename T> FORCEINLINE T* MallocT(size_t num_elements)
if (num_elements == 0) return NULL;
T *t_ptr = (T*)malloc(num_elements * sizeof(T));
if (t_ptr == NULL) error("Out of memory. Cannot allocate %i bytes", num_elements * sizeof(T));
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
return t_ptr;
}
@@ -49,7 +58,7 @@ template <typename T> FORCEINLINE T* CallocT(size_t num_elements)
if (num_elements == 0) return NULL;
T *t_ptr = (T*)calloc(num_elements, sizeof(T));
if (t_ptr == NULL) error("Out of memory. Cannot allocate %i bytes", num_elements * sizeof(T));
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
return t_ptr;
}
@@ -77,8 +86,39 @@ template <typename T> FORCEINLINE T* ReallocT(T *t_ptr, size_t num_elements)
}
t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T));
if (t_ptr == NULL) error("Out of memory. Cannot reallocate %i bytes", num_elements * sizeof(T));
if (t_ptr == NULL) ReallocError(num_elements * sizeof(T));
return t_ptr;
}
/**
* A small 'wrapper' for allocations that can be done on most OSes on the
* stack, but are just too large to fit in the stack on devices with a small
* stack such as the NDS.
* So when it is possible a stack allocation is made, otherwise a heap
* allocation is made and this is freed once the struct goes out of scope.
* @param T the type to make the allocation for
* @param length the amount of items to allocate
*/
template <typename T, size_t length>
struct SmallStackSafeStackAlloc {
#if !defined(__NDS__)
/** Storing the data on the stack */
T data[length];
#else
/** Storing it on the heap */
T *data;
/** Allocating the memory */
SmallStackSafeStackAlloc() : data(MallocT<T>(length)) {}
/** And freeing when it goes out of scope */
~SmallStackSafeStackAlloc() { free(data); }
#endif
/**
* Gets a pointer to the data stored in this wrapper.
* @return the pointer.
*/
operator T* () { return data; }
};
#endif /* ALLOC_FUNC_HPP */

View File

@@ -168,6 +168,18 @@ static inline int32 ClampToI32(const int64 a)
return (int32)a;
}
/**
* Reduce an usigned 64-bit int to an unsigned 16-bit one
*
* @param a The 64-bit value to clamp
* @return The 64-bit value reduced to a 16-bit value
* @see ClampU(uint, uint, uint)
*/
static inline uint16 ClampToU16(const uint64 a)
{
return min(a, 0xFFFF);
}
/**
* Returns the (absolute) difference between two (scalar) variables
*

View File

@@ -6,20 +6,26 @@
#include "random_func.hpp"
#include "bitmath_func.hpp"
uint32 _random_seeds[2][2];
Randomizer _random, _interactive_random;
uint32 InteractiveRandom()
uint32 Randomizer::Next()
{
const uint32 s = _random_seeds[1][0];
const uint32 t = _random_seeds[1][1];
const uint32 s = this->state[0];
const uint32 t = this->state[1];
_random_seeds[1][0] = s + ROR(t ^ 0x1234567F, 7) + 1;
return _random_seeds[1][1] = ROR(s, 3) - 1;
this->state[0] = s + ROR(t ^ 0x1234567F, 7) + 1;
return this->state[1] = ROR(s, 3) - 1;
}
uint InteractiveRandomRange(uint max)
uint32 Randomizer::Next(uint16 max)
{
return GB(InteractiveRandom(), 0, 16) * max >> 16;
return GB(this->Next(), 0, 16) * max >> 16;
}
void Randomizer::SetSeed(uint32 seed)
{
this->state[0] = seed;
this->state[1] = seed;
}
#ifdef MERSENNE_TWISTER
@@ -119,28 +125,24 @@ uint32 Random()
#else /* MERSENNE_TWISTER */
void SetRandomSeed(uint32 seed)
{
_random_seeds[0][0] = seed;
_random_seeds[0][1] = seed;
_random_seeds[1][0] = seed * 0x1234567;
_random_seeds[1][1] = _random_seeds[1][0];
_random.SetSeed(seed);
_interactive_random.SetSeed(seed * 0x1234567);
}
#ifdef RANDOM_DEBUG
#include "../network/network_data.h"
#include "../variables.h" /* _frame_counter */
#include "../player_func.h"
uint32 DoRandom(int line, const char *file)
{
if (_networking && (DEREF_CLIENT(0)->status != STATUS_INACTIVE || !_network_server))
if (_networking && (DEREF_CLIENT(0)->status != STATUS_INACTIVE || !_network_server)) {
printf("Random [%d/%d] %s:%d\n",_frame_counter, (byte)_current_player, file, line);
#else /* RANDOM_DEBUG */
uint32 Random()
{
#endif /* RANDOM_DEBUG */
const uint32 s = _random_seeds[0][0];
const uint32 t = _random_seeds[0][1];
}
_random_seeds[0][0] = s + ROR(t ^ 0x1234567F, 7) + 1;
return _random_seeds[0][1] = ROR(s, 3) - 1;
return _random.Next();
}
#endif /* RANDOM_DEBUG */
#endif /* MERSENNE_TWISTER */
#if defined(RANDOM_DEBUG) && !defined(MERSENNE_TWISTER)
@@ -148,9 +150,4 @@ uint DoRandomRange(uint max, int line, const char *file)
{
return GB(DoRandom(line, file), 0, 16) * max >> 16;
}
#else /* RANDOM_DEBUG & !MERSENNE_TWISTER */
uint RandomRange(uint max)
{
return GB(Random(), 0, 16) * max >> 16;
}
#endif /* RANDOM_DEBUG & !MERSENNE_TWISTER */

View File

@@ -1,6 +1,6 @@
/* $Id$ */
/** @file random_func.h */
/** @file random_func.hpp */
#ifndef RANDOM_FUNC_HPP
#define RANDOM_FUNC_HPP
@@ -27,6 +27,35 @@
// Doesn't work with network yet.
// #define MERSENNE_TWISTER
/**
* Structure to encapsulate the pseudo random number generators.
*/
struct Randomizer {
/** The state of the randomizer */
uint32 state[2];
/**
* Generate the next pseudo random number
* @return the random number
*/
uint32 Next();
/**
* Generate the next pseudo random number scaled to max
* @param max the maximum value of the returned random number
* @return the random number
*/
uint32 Next(uint16 max);
/**
* (Re)set the state of the random number generator.
* @param seed the new state
*/
void SetSeed(uint32 seed);
};
extern Randomizer _random; ///< Random used in the game state calculations
extern Randomizer _interactive_random; ///< Random used every else where is does not (directly) influence the game state
void SetRandomSeed(uint32 seed);
#ifdef RANDOM_DEBUG
#define Random() DoRandom(__LINE__, __FILE__)
@@ -34,12 +63,12 @@ void SetRandomSeed(uint32 seed);
#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
uint DoRandomRange(uint max, int line, const char *file);
#else
uint32 Random();
uint RandomRange(uint max);
static inline uint32 Random() { return _random.Next(); }
static inline uint32 RandomRange(uint16 max) { return _random.Next(max); }
#endif
uint32 InteractiveRandom(); // Used for random sequences that are not the same on the other end of the multiplayer link
uint InteractiveRandomRange(uint max);
static inline uint32 InteractiveRandom() { return _interactive_random.Next(); }
static inline uint32 InteractiveRandomRange(uint16 max) { return _interactive_random.Next(max); }
/**
* Checks if a given randomize-number is below a given probability.
@@ -59,7 +88,7 @@ uint InteractiveRandomRange(uint max);
static inline bool Chance16I(const uint a, const uint b, const uint32 r)
{
assert(b != 0);
return (uint16)r < (uint16)((a << 16) / b);
return (uint16)r < (uint16)(((a << 16) + b / 2) / b);
}
/**
@@ -100,6 +129,4 @@ static inline bool Chance16R(const uint a, const uint b, uint32 &r)
return Chance16I(a, b, r);
}
extern uint32 _random_seeds[2][2];
#endif /* RANDOM_FUNC_HPP */

View File

@@ -165,24 +165,6 @@ Date ConvertYMDToDate(Year year, Month month, Day day)
/** Functions used by the IncreaseDate function */
extern void OnNewDay_Train(Vehicle *v);
extern void OnNewDay_RoadVeh(Vehicle *v);
extern void OnNewDay_Aircraft(Vehicle *v);
extern void OnNewDay_Ship(Vehicle *v);
static void OnNewDay_EffectVehicle(Vehicle *v) { /* empty */ }
extern void OnNewDay_DisasterVehicle(Vehicle *v);
typedef void OnNewVehicleDayProc(Vehicle *v);
static OnNewVehicleDayProc * _on_new_vehicle_day_proc[] = {
OnNewDay_Train,
OnNewDay_RoadVeh,
OnNewDay_Ship,
OnNewDay_Aircraft,
OnNewDay_EffectVehicle,
OnNewDay_DisasterVehicle,
};
extern void WaypointsDailyLoop();
extern void ChatMessageDailyLoop();
extern void EnginesDailyLoop();
@@ -225,7 +207,7 @@ static void RunVehicleDayProc(uint daytick)
if (v->IsValid()) {
/* Call the 32-day callback if needed */
CheckVehicle32Day(v);
_on_new_vehicle_day_proc[v->type](v);
v->OnNewDay();
}
}
}

View File

@@ -59,50 +59,34 @@ struct DebugLevel {
#if !defined(NO_DEBUG_MESSAGES)
/** Functionized DEBUG macro for compilers that don't support
* variadic macros (__VA_ARGS__) such as...yes MSVC2003 and lower */
#if defined(NO_VARARG_MACRO)
void CDECL DEBUG(int name, int level, ...)
{
va_list va;
const char *dbg;
const DebugLevel *dl = &debug_level[name];
if (level != 0 && *dl->level < level) return;
dbg = dl->name;
va_start(va, level);
#else
void CDECL debug(const char *dbg, ...)
{
va_list va;
va_start(va, dbg);
#endif /* NO_VARARG_MACRO */
{
const char *s;
char buf[1024];
const char *s;
char buf[1024];
s = va_arg(va, const char*);
vsnprintf(buf, lengthof(buf), s, va);
va_end(va);
s = va_arg(va, const char*);
vsnprintf(buf, lengthof(buf), s, va);
va_end(va);
#if defined(ENABLE_NETWORK)
if (_debug_socket != INVALID_SOCKET) {
char buf2[lengthof(buf) + 32];
if (_debug_socket != INVALID_SOCKET) {
char buf2[lengthof(buf) + 32];
snprintf(buf2, lengthof(buf2), "dbg: [%s] %s\n", dbg, buf);
send(_debug_socket, buf2, strlen(buf2), 0);
} else
snprintf(buf2, lengthof(buf2), "dbg: [%s] %s\n", dbg, buf);
send(_debug_socket, buf2, strlen(buf2), 0);
} else
#endif /* ENABLE_NETWORK */
{
{
#if defined(WINCE)
/* We need to do OTTD2FS twice, but as it uses a static buffer, we need to store one temporary */
TCHAR tbuf[512];
_sntprintf(tbuf, sizeof(tbuf), _T("%s"), OTTD2FS(dbg));
NKDbgPrintfW(_T("dbg: [%s] %s\n"), tbuf, OTTD2FS(buf));
/* We need to do OTTD2FS twice, but as it uses a static buffer, we need to store one temporary */
TCHAR tbuf[512];
_sntprintf(tbuf, sizeof(tbuf), _T("%s"), OTTD2FS(dbg));
NKDbgPrintfW(_T("dbg: [%s] %s\n"), tbuf, OTTD2FS(buf));
#else
fprintf(stderr, "dbg: [%s] %s\n", dbg, buf);
fprintf(stderr, "dbg: [%s] %s\n", dbg, buf);
#endif
IConsoleDebug(dbg, buf);
}
IConsoleDebug(dbg, buf);
}
}
#endif /* NO_DEBUG_MESSAGES */

View File

@@ -19,44 +19,14 @@
* 6.. - extremely detailed spamming
*/
/* Of course MSVC 2003 and lower has no support for variadic macros
* so we need to work around this... *sigh* */
#if defined(_MSC_VER) && (_MSC_VER < 1400)
#define NO_VARARG_MACRO
#endif
#if defined(NO_VARARG_MACRO)
enum DebugLevelType {
ai,
driver,
grf,
map,
misc,
ms,
net,
sprite,
oldloader,
ntp,
npf,
yapf,
freetype,
sl,
station,
};
#endif /* NO_VARARG_MACRO */
#ifdef NO_DEBUG_MESSAGES
#if defined(NO_VARARG_MACRO)
static inline void DEBUG(int name, int level, ...) {}
#elif defined(__GNUC__) && (__GNUC__ < 3)
#if defined(__GNUC__) && (__GNUC__ < 3)
#define DEBUG(name, level, args...)
#else
#define DEBUG(name, level, ...)
#endif
#else /* NO_DEBUG_MESSAGES */
#if defined(NO_VARARG_MACRO)
void CDECL DEBUG(int name, int level, ...);
#elif defined(__GNUC__) && (__GNUC__ < 3)
#if defined(__GNUC__) && (__GNUC__ < 3)
#define DEBUG(name, level, args...) if ((level == 0) || ( _debug_ ## name ## _level >= level)) debug(#name, args)
#else
#define DEBUG(name, level, ...) if (level == 0 || _debug_ ## name ## _level >= level) debug(#name, __VA_ARGS__)
@@ -78,9 +48,7 @@
extern int _debug_sl_level;
extern int _debug_station_level;
#if !defined(NO_VARARG_MACRO)
void CDECL debug(const char *dbg, ...);
#endif /* NO_VARARG_MACRO */
void CDECL debug(const char *dbg, ...);
#endif /* NO_DEBUG_MESSAGES */
void SetDebugString(const char *s);

View File

@@ -45,7 +45,7 @@ static inline bool IsTileDepotType(TileIndex tile, TransportType type)
return IsTileType(tile, MP_RAILWAY) && GetRailTileType(tile) == RAIL_TILE_DEPOT;
case TRANSPORT_ROAD:
return IsTileType(tile, MP_ROAD) && GetRoadTileType(tile) == ROAD_TILE_DEPOT;
return IsRoadDepotTile(tile);
case TRANSPORT_WATER:
return IsTileType(tile, MP_WATER) && GetWaterTileType(tile) == WATER_TILE_DEPOT;
@@ -64,7 +64,7 @@ static inline bool IsTileDepotType(TileIndex tile, TransportType type)
static inline bool IsDepotTile(TileIndex tile)
{
switch (GetTileType(tile)) {
case MP_ROAD: return GetRoadTileType(tile) == ROAD_TILE_DEPOT;
case MP_ROAD: return IsRoadDepot(tile);
case MP_WATER: return GetWaterTileType(tile) == WATER_TILE_DEPOT;
case MP_RAILWAY: return GetRailTileType(tile) == RAIL_TILE_DEPOT;
case MP_STATION: return IsHangar(tile);

View File

@@ -519,9 +519,11 @@ static void ResizeDepotButtons(Window *w)
* Only use this if it's the same widget, that's used for more than one vehicle type and it needs different text/sprites
* Vehicle specific text/sprites, that's in a widget, that's only shown for one vehicle type (like sell whole train) is set in the widget array
*/
static void SetupStringsForDepotWindow(Window *w, byte type)
static void SetupStringsForDepotWindow(Window *w, VehicleType type)
{
switch (type) {
default: NOT_REACHED();
case VEH_TRAIN:
w->widget[DEPOT_WIDGET_CAPTION].data = STR_8800_TRAIN_DEPOT;
w->widget[DEPOT_WIDGET_STOP_ALL].tooltips = STR_MASS_STOP_DEPOT_TRAIN_TIP;
@@ -858,8 +860,13 @@ static void DepotWndProc(Window *w, WindowEvent *e)
} break;
case WE_ABORT_PLACE_OBJ: {
/* abort clone */
w->RaiseWidget(DEPOT_WIDGET_CLONE);
w->InvalidateWidget(DEPOT_WIDGET_CLONE);
/* abort drag & drop */
WP(w, depot_d).sel = INVALID_VEHICLE;
w->InvalidateWidget(DEPOT_WIDGET_MATRIX);
} break;
/* check if a vehicle in a depot was clicked.. */

View File

@@ -72,6 +72,9 @@ static void DisasterClearSquare(TileIndex tile)
_current_player = OWNER_WATER;
DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
_current_player = p;
/* update signals in buffer */
UpdateSignalsInBuffer();
}
break;
@@ -138,8 +141,7 @@ static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Directio
DisasterVehicleUpdateImage(v);
VehiclePositionChanged(v);
BeginVehicleMove(v);
EndVehicleMove(v);
MarkSingleVehicleDirty(v);
}
static void DeleteDisasterVeh(Vehicle *v)
@@ -547,8 +549,7 @@ static void DisasterTick_Helicopter_Rotors(Vehicle *v)
if (++v->cur_image > SPR_ROTOR_MOVING_3) v->cur_image = SPR_ROTOR_MOVING_1;
VehiclePositionChanged(v);
BeginVehicleMove(v);
EndVehicleMove(v);
MarkSingleVehicleDirty(v);
}
/**
@@ -706,8 +707,7 @@ static void DisasterTick_Submarine(Vehicle *v)
if (++v->age > 8880) {
VehiclePositionChanged(v);
BeginVehicleMove(v);
EndVehicleMove(v);
MarkSingleVehicleDirty(v);
delete v;
return;
}
@@ -716,9 +716,8 @@ static void DisasterTick_Submarine(Vehicle *v)
tile = v->tile + TileOffsByDiagDir(DirToDiagDir(v->direction));
if (IsValidTile(tile)) {
TrackdirBits r = (TrackdirBits)GetTileTrackStatus(tile, TRANSPORT_WATER, 0);
if (TrackdirBitsToTrackBits(r) == TRACK_BIT_ALL && !Chance16(1, 90)) {
TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0));
if (trackbits == TRACK_BIT_ALL && !Chance16(1, 90)) {
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
return;
@@ -749,12 +748,6 @@ void DisasterVehicle::Tick()
_disastervehicle_tick_procs[this->subtype](this);
}
void OnNewDay_DisasterVehicle(Vehicle *v)
{
// not used
}
typedef void DisasterInitProc();

View File

@@ -19,6 +19,7 @@
#include "viewport_func.h"
#include "gfx_func.h"
#include "player_func.h"
#include "slope_func.h"
#include "table/sprites.h"
#include "table/strings.h"
@@ -189,14 +190,11 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
TileIndex tile_from;
TileIndex tile_to;
tile_from = tile_to = e->we.place.tile;
switch (GetTileSlope(tile_from, NULL)) {
case SLOPE_SW: tile_to += TileDiffXY(-1, 0); break;
case SLOPE_SE: tile_to += TileDiffXY( 0, -1); break;
case SLOPE_NW: tile_to += TileDiffXY( 0, 1); break;
case SLOPE_NE: tile_to += TileDiffXY( 1, 0); break;
default: break;
}
tile_from = e->we.place.tile;
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile_from, NULL));
tile_to = (dir != INVALID_DIAGDIR ? TileAddByDiagDir(tile_from, ReverseDiagDir(dir)) : tile_from);
VpSetPresizeRange(tile_from, tile_to);
} break;
@@ -245,7 +243,7 @@ static void BuildDockStationWndProc(Window *w, WindowEvent *e)
case WE_CREATE: w->LowerWidget(_station_show_coverage + 3); break;
case WE_PAINT: {
int rad = (_patches.modified_catchment) ? CA_DOCK : 4;
int rad = (_patches.modified_catchment) ? CA_DOCK : CA_UNMODIFIED;
if (WP(w, def_d).close) return;
DrawWindowWidgets(w);
@@ -256,7 +254,13 @@ static void BuildDockStationWndProc(Window *w, WindowEvent *e)
SetTileSelectSize(1, 1);
}
DrawStationCoverageAreaText(4, 50, SCT_ALL, rad);
int text_end = DrawStationCoverageAreaText(4, 50, SCT_ALL, rad) + 4;
if (text_end > w->widget[2].bottom) {
SetWindowDirty(w);
ResizeWindowForWidget(w, 2, 0, text_end - w->widget[2].bottom);
SetWindowDirty(w);
}
break;
}

View File

@@ -64,7 +64,7 @@ static void ChangeTileOwner_Dummy(TileIndex tile, PlayerID old_player, PlayerID
/* not used */
}
static uint32 GetTileTrackStatus_Dummy(TileIndex tile, TransportType mode, uint sub_mode)
static TrackStatus GetTileTrackStatus_Dummy(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
{
return 0;
}

View File

@@ -41,6 +41,7 @@
#include "sound_func.h"
#include "track_type.h"
#include "track_func.h"
#include "road_func.h"
#include "rail_map.h"
#include "signal_func.h"
#include "gfx_func.h"
@@ -162,16 +163,16 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
num++;
if (v->age > 730) {
/* Find the vehicle with the lowest amount of profit */
if (min_profit_first == true) {
if (min_profit_first || min_profit > v->profit_last_year) {
min_profit = v->profit_last_year;
min_profit_first = false;
} else if (min_profit > v->profit_last_year) {
min_profit = v->profit_last_year;
}
}
}
}
min_profit >>= 8; // remove the fract part
_score_part[owner][SCORE_VEHICLES] = num;
/* Don't allow negative min_profit to show */
if (min_profit > 0)
@@ -432,7 +433,9 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
if (new_player != PLAYER_SPECTATOR) {
/* Update all signals because there can be new segment that was owned by two players
* and signals were not propagated */
* and signals were not propagated
* Similiar with crossings - it is needed to bar crossings that weren't before
* because of different owner of crossing and approaching train */
tile = 0;
do {
@@ -440,11 +443,16 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
TrackBits tracks = GetTrackBits(tile);
do { // there may be two tracks with signals for TRACK_BIT_HORZ and TRACK_BIT_VERT
Track track = RemoveFirstTrack(&tracks);
if (HasSignalOnTrack(tile, track)) SetSignalsOnBothDir(tile, track, new_player);
if (HasSignalOnTrack(tile, track)) AddTrackToSignalBuffer(tile, track, new_player);
} while (tracks != TRACK_BIT_NONE);
} else if (IsLevelCrossingTile(tile) && IsTileOwner(tile, new_player)) {
UpdateLevelCrossing(tile);
}
} while (++tile != MapSize());
}
/* update signals in buffer */
UpdateSignalsInBuffer();
}
/* Change color of existing windows */
@@ -838,9 +846,9 @@ static const Money _price_base[NUM_PRICES] = {
55, ///< remove_dock
1600, ///< remove_house
40, ///< remove_road
5600, ///< running_rail[0] railroad
5200, ///< running_rail[1] monorail
4800, ///< running_rail[2] maglev
5600, ///< running_rail[0] steam
5200, ///< running_rail[1] diesel
4800, ///< running_rail[2] electric
9600, ///< aircraft_running
1600, ///< roadveh_running
5600, ///< ship_running
@@ -906,6 +914,15 @@ void StartupEconomy()
_economy.fluct = GB(Random(), 0, 8) + 168;
}
Money GetPriceByIndex(uint8 index)
{
if (index > NUM_PRICES) return 0;
return ((Money*)&_price)[index];
}
Pair SetupSubsidyDecodeParam(const Subsidy* s, bool mode)
{
TileIndex tile;
@@ -1497,7 +1514,7 @@ void VehiclePayment(Vehicle *front_v)
cp->days_in_transit,
v->cargo_type);
front_v->profit_this_year += profit;
front_v->profit_this_year += profit << 8;
virtual_profit += profit; // accumulate transfer profits for whole vehicle
cp->feeder_share += profit; // account for the (virtual) profit already made for the cargo packet
cp->paid_for = true; // record that the cargo has been paid for to eliminate double counting
@@ -1515,7 +1532,7 @@ void VehiclePayment(Vehicle *front_v)
}
if (route_profit != 0) {
front_v->profit_this_year += vehicle_profit;
front_v->profit_this_year += vehicle_profit << 8;
SubtractMoneyFromPlayer(CommandCost(front_v->GetExpenseType(true), -route_profit));
if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
@@ -1863,7 +1880,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32
if (!p->is_active) return CMD_ERROR;
/* Protect new companies from hostile takeovers */
if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_7080_PROTECTED);
if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_PROTECTED);
/* Those lines are here for network-protection (clients can be slow) */
if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0) return cost;

View File

@@ -41,4 +41,6 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount)
void VehiclePayment(Vehicle *front_v);
void LoadUnloadStation(Station *st);
Money GetPriceByIndex(uint8 index);
#endif /* ECONOMY_FUNC_H */

View File

@@ -112,18 +112,19 @@ assert_compile(NUM_PRICES * sizeof(Money) == sizeof(Prices));
enum ExpensesType {
EXPENSES_CONSTRUCTION = 0,
EXPENSES_NEW_VEHICLES = 1,
EXPENSES_TRAIN_RUN = 2,
EXPENSES_ROADVEH_RUN = 3,
EXPENSES_AIRCRAFT_RUN = 4,
EXPENSES_SHIP_RUN = 5,
EXPENSES_PROPERTY = 6,
EXPENSES_TRAIN_INC = 7,
EXPENSES_ROADVEH_INC = 8,
EXPENSES_AIRCRAFT_INC = 9,
EXPENSES_SHIP_INC = 10,
EXPENSES_LOAN_INT = 11,
EXPENSES_OTHER = 12,
EXPENSES_NEW_VEHICLES,
EXPENSES_TRAIN_RUN,
EXPENSES_ROADVEH_RUN,
EXPENSES_AIRCRAFT_RUN,
EXPENSES_SHIP_RUN,
EXPENSES_PROPERTY,
EXPENSES_TRAIN_INC,
EXPENSES_ROADVEH_INC,
EXPENSES_AIRCRAFT_INC,
EXPENSES_SHIP_INC,
EXPENSES_LOAN_INT,
EXPENSES_OTHER,
EXPENSES_END,
INVALID_EXPENSES = 0xFF,
};

View File

@@ -64,6 +64,7 @@
#include "tunnelbridge_map.h"
#include "vehicle_func.h"
#include "player_base.h"
#include "tunnelbridge.h"
#include "table/sprites.h"
#include "table/elrail_data.h"
@@ -73,8 +74,11 @@ static inline TLG GetTLG(TileIndex t)
return (TLG)((HasBit(TileX(t), 0) << 1) + HasBit(TileY(t), 0));
}
/** Finds which Rail Bits are present on a given tile. For bridge tiles,
* returns track bits under the bridge
/**
* Finds which Electrified Rail Bits are present on a given tile.
* @param t tile to check
* @param override pointer to PCP override, can be NULL
* @return trackbits of tile if it is electrified
*/
static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
{
@@ -93,13 +97,13 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
case MP_TUNNELBRIDGE:
if (GetRailType(t) != RAILTYPE_ELECTRIC) return TRACK_BIT_NONE;
if (override != NULL && (IsTunnel(t) || DistanceMax(t, GetOtherBridgeEnd(t)) > 1)) {
if (override != NULL && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) {
*override = 1 << GetTunnelBridgeDirection(t);
}
return AxisToTrackBits(DiagDirToAxis(GetTunnelBridgeDirection(t)));
case MP_ROAD:
if (GetRoadTileType(t) != ROAD_TILE_CROSSING) return TRACK_BIT_NONE;
if (!IsLevelCrossing(t)) return TRACK_BIT_NONE;
if (GetRailType(t) != RAILTYPE_ELECTRIC) return TRACK_BIT_NONE;
return GetCrossingRailBits(t);
@@ -126,13 +130,7 @@ static void AdjustTileh(TileIndex tile, Slope *tileh)
} else if (*tileh != SLOPE_FLAT) {
*tileh = SLOPE_FLAT;
} else {
switch (GetTunnelBridgeDirection(tile)) {
case DIAGDIR_NE: *tileh = SLOPE_NE; break;
case DIAGDIR_SE: *tileh = SLOPE_SE; break;
case DIAGDIR_SW: *tileh = SLOPE_SW; break;
case DIAGDIR_NW: *tileh = SLOPE_NW; break;
default: NOT_REACHED();
}
*tileh = InclinedSlope(GetTunnelBridgeDirection(tile));
}
}
}
@@ -191,7 +189,7 @@ void DrawCatenaryOnTunnel(const TileInfo *ti)
sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
BB_data[2] - sss->x_offset, BB_data[3] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset + 1,
GetTileZ(ti->tile) + sss->z_offset,
IsTransparencySet(TO_BUILDINGS),
IsTransparencySet(TO_CATENARY),
BB_data[0] - sss->x_offset, BB_data[1] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset
);
}
@@ -338,7 +336,7 @@ static void DrawCatenaryRailway(const TileInfo *ti)
AddSortableSpriteToDraw(pylon_sprites[temp], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE,
GetPCPElevation(ti->tile, i),
IsTransparencySet(TO_BUILDINGS), -1, -1);
IsTransparencySet(TO_CATENARY), -1, -1);
break; /* We already have drawn a pylon, bail out */
}
}
@@ -346,7 +344,7 @@ static void DrawCatenaryRailway(const TileInfo *ti)
}
/* Don't draw a wire under a low bridge */
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !IsTransparencySet(TO_BUILDINGS)) {
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile) && !IsTransparencySet(TO_CATENARY)) {
uint height = GetBridgeHeight(GetNorthernBridgeEnd(ti->tile));
if (height <= GetTileMaxZ(ti->tile) + TILE_HEIGHT) return;
@@ -373,7 +371,7 @@ static void DrawCatenaryRailway(const TileInfo *ti)
*/
AddSortableSpriteToDraw(sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
IsTransparencySet(TO_BUILDINGS));
IsTransparencySet(TO_CATENARY));
}
}
}
@@ -383,8 +381,8 @@ static void DrawCatenaryOnBridge(const TileInfo *ti)
TileIndex end = GetSouthernBridgeEnd(ti->tile);
TileIndex start = GetOtherBridgeEnd(end);
uint length = GetBridgeLength(start, end);
uint num = DistanceMax(ti->tile, start);
uint length = GetTunnelBridgeLength(start, end);
uint num = GetTunnelBridgeLength(ti->tile, start) + 1;
uint height;
const SortableSpriteStruct *sss;
@@ -406,7 +404,7 @@ static void DrawCatenaryOnBridge(const TileInfo *ti)
AddSortableSpriteToDraw(sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size, height + sss->z_offset,
IsTransparencySet(TO_BUILDINGS)
IsTransparencySet(TO_CATENARY)
);
/* Finished with wires, draw pylons */
@@ -417,17 +415,17 @@ static void DrawCatenaryOnBridge(const TileInfo *ti)
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) PPPpos = ReverseDir(PPPpos);
uint x = ti->x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
uint y = ti->y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_BUILDINGS), -1, -1);
AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
}
/* need a pylon on the southern end of the bridge */
if (DistanceMax(ti->tile, start) == length) {
if (GetTunnelBridgeLength(ti->tile, start) + 1 == length) {
DiagDirection PCPpos = (axis == AXIS_X ? DIAGDIR_SW : DIAGDIR_SE);
Direction PPPpos = (axis == AXIS_X ? DIR_NW : DIR_NE);
if (HasBit(tlg, (axis == AXIS_X ? 0 : 1))) PPPpos = ReverseDir(PPPpos);
uint x = ti->x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
uint y = ti->y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_BUILDINGS), -1, -1);
AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, IsTransparencySet(TO_CATENARY), -1, -1);
}
}
@@ -453,7 +451,7 @@ void DrawCatenary(const TileInfo *ti)
sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size,
GetTileMaxZ(ti->tile) + sss->z_offset,
IsTransparencySet(TO_BUILDINGS)
IsTransparencySet(TO_CATENARY)
);
return;
}
@@ -471,7 +469,6 @@ void DrawCatenary(const TileInfo *ti)
int32 SettingsDisableElrail(int32 p1)
{
EngineID e_id;
Vehicle *v;
Player *p;
bool disable = (p1 != 0);
@@ -481,8 +478,9 @@ int32 SettingsDisableElrail(int32 p1)
const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC;
/* walk through all train engines */
for (e_id = 0; e_id < NUM_TRAIN_ENGINES; e_id++) {
RailVehicleInfo *rv_info = &_rail_vehicle_info[e_id];
EngineID eid;
FOR_ALL_ENGINEIDS_OF_TYPE(eid, VEH_TRAIN) {
RailVehicleInfo *rv_info = &_rail_vehicle_info[eid];
/* if it is an electric rail engine and its railtype is the wrong one */
if (rv_info->engclass == 2 && rv_info->railtype == old_railtype) {
/* change it to the proper one */

View File

@@ -91,8 +91,9 @@ static void CalcEngineReliability(Engine *e)
/* Check for early retirement */
if (e->player_avail != 0 && !_patches.never_expire_vehicles) {
uint retire_early = EngInfo(e - _engines)->retire_early;
if (retire_early > 0 && age >= e->duration_phase_1 + e->duration_phase_2 - retire_early * 12) {
int retire_early = EngInfo(e - _engines)->retire_early;
uint retire_early_max_age = max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12);
if (retire_early != 0 && age >= retire_early_max_age) {
/* Early retirement is enabled and we're past the date... */
e->player_avail = 0;
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
@@ -172,12 +173,6 @@ void StartupEngines()
e->flags |= ENGINE_AVAILABLE;
e->player_avail = 0;
}
/* This sets up type for the engine
* It is needed if you want to ask the engine what type it is
* It should hopefully be the same as when you ask a vehicle what it is
* but using this, you can ask what type an engine number is
* even if it is not a vehicle (yet)*/
}
}
@@ -196,13 +191,13 @@ static void AcceptEnginePreview(EngineID eid, PlayerID player)
SetBit(p->avail_roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD);
}
e->preview_player = INVALID_PLAYER;
e->preview_player_rank = 0xFF;
if (player == _local_player) {
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
}
}
static PlayerID GetBestPlayer(PlayerID pp)
static PlayerID GetBestPlayer(uint8 pp)
{
const Player *p;
int32 best_hist;
@@ -223,7 +218,7 @@ static PlayerID GetBestPlayer(PlayerID pp)
if (best_player == PLAYER_SPECTATOR) return PLAYER_SPECTATOR;
SetBit(mask, best_player);
} while (pp--, pp != 0);
} while (--pp != 0);
return best_player;
}
@@ -239,16 +234,16 @@ void EnginesDailyLoop()
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) {
if (e->flags & ENGINE_OFFER_WINDOW_OPEN) {
if (e->preview_player != 0xFF && !--e->preview_wait) {
if (e->preview_player_rank != 0xFF && !--e->preview_wait) {
e->flags &= ~ENGINE_OFFER_WINDOW_OPEN;
DeleteWindowById(WC_ENGINE_PREVIEW, i);
e->preview_player++;
e->preview_player_rank++;
}
} else if (e->preview_player != 0xFF) {
PlayerID best_player = GetBestPlayer(e->preview_player);
} else if (e->preview_player_rank != 0xFF) {
PlayerID best_player = GetBestPlayer(e->preview_player_rank);
if (best_player == PLAYER_SPECTATOR) {
e->preview_player = INVALID_PLAYER;
e->preview_player_rank = 0xFF;
continue;
}
@@ -278,7 +273,7 @@ CommandCost CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32
if (!IsEngineIndex(p1)) return CMD_ERROR;
e = GetEngine(p1);
if (GetBestPlayer(e->preview_player) != _current_player) return CMD_ERROR;
if (GetBestPlayer(e->preview_player_rank) != _current_player) return CMD_ERROR;
if (flags & DC_EXEC) AcceptEnginePreview(p1, _current_player);
@@ -348,10 +343,9 @@ static void NewVehicleAvailable(Engine *e)
void EnginesMonthlyLoop()
{
Engine *e;
if (_cur_year < YEAR_ENGINE_AGING_STOPS) {
for (e = _engines; e != endof(_engines); e++) {
Engine *e;
FOR_ALL_ENGINES(e) {
/* Age the vehicle */
if (e->flags & ENGINE_AVAILABLE && e->age != 0xFFFF) {
e->age++;
@@ -367,7 +361,7 @@ void EnginesMonthlyLoop()
/* Do not introduce new rail wagons */
if (!IsWagon(e - _engines))
e->preview_player = (PlayerID)1; // Give to the player with the highest rating.
e->preview_player_rank = 1; // Give to the player with the highest rating.
}
}
}
@@ -410,22 +404,19 @@ CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
}
/*
* returns true if an engine is valid, of the specified type, and buildable by
* the given player, false otherwise
*
* engine = index of the engine to check
* type = the type the engine should be of (VEH_xxx)
* player = index of the player
/** Check if an engine is buildable.
* @param engine index of the engine to check.
* @param type the type the engine should be.
* @param player index of the player.
* @return True if an engine is valid, of the specified type, and buildable by
* the given player.
*/
bool IsEngineBuildable(EngineID engine, byte type, PlayerID player)
bool IsEngineBuildable(EngineID engine, VehicleType type, PlayerID player)
{
const Engine *e;
/* check if it's an engine that is in the engine array */
if (!IsEngineIndex(engine)) return false;
e = GetEngine(engine);
const Engine *e = GetEngine(engine);
/* check if it's an engine of specified type */
if (e->type != type) return false;
@@ -507,6 +498,10 @@ void RemoveAllEngineReplacement(EngineRenewList *erl)
EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group)
{
const EngineRenew *er = GetEngineReplacement(erl, engine, group);
if (er == NULL && (group == DEFAULT_GROUP || (IsValidGroupID(group) && !GetGroup(group)->replace_protection))) {
/* We didn't find anything useful in the vehicle's own group so we will try ALL_GROUP */
er = GetEngineReplacement(erl, engine, ALL_GROUP);
}
return er == NULL ? INVALID_ENGINE : er->to;
}
@@ -618,7 +613,7 @@ static const SaveLoad _engine_desc[] = {
SLE_VAR(Engine, lifelength, SLE_UINT8),
SLE_VAR(Engine, flags, SLE_UINT8),
SLE_VAR(Engine, preview_player, SLE_UINT8),
SLE_VAR(Engine, preview_player_rank, SLE_UINT8),
SLE_VAR(Engine, preview_wait, SLE_UINT8),
SLE_CONDNULL(1, 0, 44),
SLE_VAR(Engine, player_avail, SLE_UINT8),

View File

@@ -36,12 +36,13 @@ struct RailVehicleInfo {
uint16 max_speed;
uint16 power;
uint16 weight;
byte running_cost_base;
byte running_cost;
byte running_cost_class;
EngineClass engclass; ///< Class of engine for this vehicle
byte capacity;
CargoID cargo_type;
byte ai_rank;
byte ai_passenger_only; ///< Bit value to tell AI that this engine is for passenger use only
uint16 pow_wag_power;
byte pow_wag_weight;
byte visual_effect; // NOTE: this is not 100% implemented yet, at the moment it is only used as a 'fallback' value
@@ -89,6 +90,7 @@ struct RoadVehicleInfo {
byte image_index;
byte base_cost;
byte running_cost;
byte running_cost_class;
SoundFxByte sfx;
byte max_speed;
byte capacity;
@@ -109,7 +111,7 @@ struct EngineInfo {
byte refit_cost;
byte misc_flags;
byte callbackmask;
byte retire_early; ///< Number of years early to retire vehicle
int8 retire_early; ///< Number of years early to retire vehicle
StringID string_id; ///< Default name of engine
};
@@ -123,7 +125,7 @@ struct Engine {
uint16 duration_phase_1, duration_phase_2, duration_phase_3;
byte lifelength;
byte flags;
PlayerByte preview_player;
uint8 preview_player_rank;
byte preview_wait;
byte player_avail;
VehicleType type; ///< type, ie VEH_ROAD, VEH_TRAIN, etc.
@@ -167,7 +169,7 @@ void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal);
void LoadCustomEngineNames();
void DeleteCustomEngineNames();
bool IsEngineBuildable(EngineID engine, byte type, PlayerID player);
bool IsEngineBuildable(EngineID engine, VehicleType type, PlayerID player);
CargoID GetEngineCargoType(EngineID engine);
enum {
@@ -184,14 +186,14 @@ enum {
ROAD_ENGINES_INDEX = NUM_TRAIN_ENGINES,
};
static inline EngineID GetFirstEngineOfType(byte type)
static inline EngineID GetFirstEngineOfType(VehicleType type)
{
const EngineID start[] = {0, ROAD_ENGINES_INDEX, SHIP_ENGINES_INDEX, AIRCRAFT_ENGINES_INDEX};
return start[type];
}
static inline EngineID GetLastEngineOfType(byte type)
static inline EngineID GetLastEngineOfType(VehicleType type)
{
const EngineID end[] = {
NUM_TRAIN_ENGINES,

View File

@@ -126,7 +126,7 @@ static void DrawTrainEngineInfo(EngineID engine, int x, int y, int maxw)
SetDParam(3, rvi->power << multihead);
SetDParam(1, rvi->weight << multihead);
SetDParam(4, rvi->running_cost_base * _price.running_rail[rvi->running_cost_class] >> 8 << multihead);
SetDParam(4, rvi->running_cost * GetPriceByIndex(rvi->running_cost_class) >> 8 << multihead);
if (rvi->capacity != 0) {
SetDParam(5, rvi->cargo_type);
@@ -155,7 +155,7 @@ static void DrawRoadVehEngineInfo(EngineID engine, int x, int y, int maxw)
SetDParam(0, (_price.roadveh_base >> 3) * rvi->base_cost >> 5);
SetDParam(1, rvi->max_speed * 10 / 32);
SetDParam(2, rvi->running_cost * _price.roadveh_running >> 8);
SetDParam(2, rvi->running_cost * GetPriceByIndex(rvi->running_cost_class) >> 8);
SetDParam(3, rvi->cargo_type);
SetDParam(4, rvi->capacity);

View File

@@ -33,6 +33,7 @@ struct Fio {
FILE *handles[MAX_FILE_SLOTS]; ///< array of file handles we can have open
byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file
const char *filenames[MAX_FILE_SLOTS]; ///< array of filenames we (should) have open
char *shortnames[MAX_FILE_SLOTS];///< array of short names for spriteloader's use
#if defined(LIMITED_FDS)
uint open_handles; ///< current amount of open handles
uint usage_count[MAX_FILE_SLOTS]; ///< count how many times this file has been opened
@@ -47,9 +48,9 @@ uint32 FioGetPos()
return _fio.pos + (_fio.buffer - _fio.buffer_start) - FIO_BUFFER_SIZE;
}
const char *FioGetFilename()
const char *FioGetFilename(uint8 slot)
{
return _fio.filename;
return _fio.shortnames[slot];
}
void FioSeekTo(uint32 pos, int mode)
@@ -131,6 +132,10 @@ static inline void FioCloseFile(int slot)
{
if (_fio.handles[slot] != NULL) {
fclose(_fio.handles[slot]);
free(_fio.shortnames[slot]);
_fio.shortnames[slot] = NULL;
_fio.handles[slot] = NULL;
#if defined(LIMITED_FDS)
_fio.open_handles--;
@@ -184,6 +189,14 @@ void FioOpenFile(int slot, const char *filename)
FioCloseFile(slot); // if file was opened before, close it
_fio.handles[slot] = f;
_fio.filenames[slot] = filename;
/* Store the filename without path and extension */
const char *t = strrchr(filename, PATHSEPCHAR);
_fio.shortnames[slot] = strdup(t == NULL ? filename : t);
char *t2 = strrchr(_fio.shortnames[slot], '.');
if (t2 != NULL) *t2 = '\0';
strtolower(_fio.shortnames[slot]);
#if defined(LIMITED_FDS)
_fio.usage_count[slot] = 0;
_fio.open_handles++;

View File

@@ -12,7 +12,7 @@
void FioSeekTo(uint32 pos, int mode);
void FioSeekToFile(uint8 slot, uint32 pos);
uint32 FioGetPos();
const char *FioGetFilename();
const char *FioGetFilename(uint8 slot);
byte FioReadByte();
uint16 FioReadWord();
uint32 FioReadDword();

View File

@@ -19,6 +19,8 @@
#ifdef WIN32
# include <tchar.h>
# include <io.h>
# define access _taccess
# define unlink _tunlink
#else
# include <unistd.h>
#endif /* WIN32 */
@@ -202,7 +204,7 @@ bool FileExists(const char *filename)
CloseHandle(hand);
return 0;
#else
return access(filename, 0) == 0;
return access(OTTD2FS(filename), 0) == 0;
#endif
}

View File

@@ -518,34 +518,38 @@ void SetUnicodeGlyph(FontSize size, uint32 key, SpriteID sprite)
void InitializeUnicodeGlyphMap()
{
FontSize size;
SpriteID base;
SpriteID sprite;
uint i;
for (size = FS_NORMAL; size != FS_END; size++) {
for (FontSize size = FS_NORMAL; size != FS_END; size++) {
/* Clear out existing glyph map if it exists */
if (_unicode_glyph_map[size] != NULL) {
for (i = 0; i < 256; i++) {
for (uint i = 0; i < 256; i++) {
if (_unicode_glyph_map[size][i] != NULL) free(_unicode_glyph_map[size][i]);
}
free(_unicode_glyph_map[size]);
_unicode_glyph_map[size] = NULL;
}
base = GetFontBase(size);
for (i = ASCII_LETTERSTART; i < 256; i++) {
sprite = base + i - ASCII_LETTERSTART;
SpriteID base = GetFontBase(size);
for (uint i = ASCII_LETTERSTART; i < 256; i++) {
SpriteID sprite = base + i - ASCII_LETTERSTART;
if (!SpriteExists(sprite)) continue;
SetUnicodeGlyph(size, i, sprite);
SetUnicodeGlyph(size, i + SCC_SPRITE_START, sprite);
}
for (i = 0; i < lengthof(_default_unicode_map); i++) {
sprite = base + _default_unicode_map[i].key - ASCII_LETTERSTART;
SetUnicodeGlyph(size, _default_unicode_map[i].code, sprite);
for (uint i = 0; i < lengthof(_default_unicode_map); i++) {
byte key = _default_unicode_map[i].key;
if (key == CLRA || key == CLRL) {
/* Clear the glyph. This happens if the glyph at this code point
* is non-standard and should be accessed by an SCC_xxx enum
* entry only. */
if (key == CLRA || size == FS_LARGE) {
SetUnicodeGlyph(size, _default_unicode_map[i].code, 0);
}
} else {
SpriteID sprite = base + key - ASCII_LETTERSTART;
SetUnicodeGlyph(size, _default_unicode_map[i].code, sprite);
}
}
}
}

View File

@@ -24,6 +24,7 @@
#include "engine.h"
#include "settings_type.h"
#include "newgrf_storage.h"
#include "water.h"
#include "table/sprites.h"
@@ -89,7 +90,7 @@ static void *_GenerateWorld(void *arg)
if (_network_dedicated) DEBUG(net, 0, "Generating map, please wait...");
/* Set the Random() seed to generation_seed so we produce the same map with the same seed */
if (_patches.generation_seed == GENERATE_NEW_SEED) _patches.generation_seed = _patches_newgame.generation_seed = InteractiveRandom();
_random_seeds[0][0] = _random_seeds[0][1] = _patches.generation_seed;
_random.SetSeed(_patches.generation_seed);
SetGeneratingWorldProgress(GWP_MAP_INIT, 2);
SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, VHM_NONE, WC_MAIN_WINDOW, 0);

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@ bool _screen_disable_anim = false; ///< Disable palette animation (important f
bool _exit_game;
bool _networking; ///< are we in networking mode?
byte _game_mode;
byte _pause_game;
int8 _pause_game;
int _pal_first_dirty;
int _pal_count_dirty;

View File

@@ -65,12 +65,11 @@ extern uint16 _cur_resolution[2];
extern Colour _cur_palette[256];
void HandleKeypress(uint32 key);
void HandleCtrlChanged();
void HandleMouseEvents();
void CSleep(int milliseconds);
void UpdateWindows();
uint32 InteractiveRandom(); //< Used for random sequences that are not the same on the other end of the multiplayer link
uint InteractiveRandomRange(uint max);
void DrawChatMessage();
void DrawMouseCursor();
void ScreenSizeChanged();
@@ -83,12 +82,6 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo);
void DrawSprite(SpriteID img, SpriteID pal, int x, int y, const SubSprite *sub = NULL);
/* XXX doesn't really belong here, but the only
* consumers always use it in conjunction with DoDrawString() */
#define UPARROW "\xEE\x8A\x80"
#define DOWNARROW "\xEE\x8A\xAA"
int DrawStringCentered(int x, int y, StringID str, uint16 color);
int DrawStringCenteredTruncated(int xl, int xr, int y, StringID str, uint16 color);
int DoDrawStringCentered(int x, int y, const char *str, uint16 color);

View File

@@ -30,7 +30,6 @@ struct FileList {
MD5File basic[2]; ///< GRF files that always have to be loaded
MD5File landscape[3]; ///< Landscape specific grf files
MD5File sound; ///< Sound samples
MD5File chars; ///< GRF File with character replacements
MD5File openttd; ///< GRF File with OTTD specific graphics
};
@@ -71,20 +70,15 @@ void LoadSpritesIndexed(int file_index, uint *sprite_id, const SpriteID *index_t
while ((start = *index_tbl++) != END) {
uint end = *index_tbl++;
if (start == SKIP) { // skip sprites (amount in second var)
SkipSprites(end);
(*sprite_id) += end;
} else { // load sprites and use indexes from start to end
do {
#ifdef NDEBUG
LoadNextSprite(start, file_index, *sprite_id);
#else
bool b = LoadNextSprite(start, file_index, *sprite_id);
assert(b);
#endif
(*sprite_id)++;
} while (++start <= end);
}
do {
#ifdef NDEBUG
LoadNextSprite(start, file_index, *sprite_id);
#else
bool b = LoadNextSprite(start, file_index, *sprite_id);
assert(b);
#endif
(*sprite_id)++;
} while (++start <= end);
}
}
@@ -192,10 +186,6 @@ void CheckExternalFiles()
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n");
}
if (!FileMD5(files->chars)) {
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files->chars.filename);
}
if (!FileMD5(files->openttd)) {
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files->openttd.filename);
}
@@ -204,142 +194,12 @@ void CheckExternalFiles()
}
static const SpriteID trg1idx[] = {
0, 1, ///< Mouse cursor, ZZZ
/* Medium font */
2, 92, ///< ' ' till 'z'
SKIP, 36,
160, 160, ///< Move Ÿ to the correct position
98, 98, ///< Up arrow
131, 133,
SKIP, 1, ///< skip currency sign
135, 135,
SKIP, 1,
137, 137,
SKIP, 1,
139, 139,
140, 140, ///< @todo Down arrow
141, 141,
142, 142, ///< @todo Check mark
143, 143, ///< @todo Cross
144, 144,
145, 145, ///< @todo Right arrow
146, 149,
118, 122, ///< Transport markers
SKIP, 2,
157, 157,
114, 115, ///< Small up/down arrows
SKIP, 1,
161, 225,
/* Small font */
226, 316, ///< ' ' till 'z'
SKIP, 36,
384, 384, ///< Move Ÿ to the correct position
322, 322, ///< Up arrow
355, 357,
SKIP, 1, ///< skip currency sign
359, 359,
SKIP, 1,
361, 361,
SKIP, 1,
363, 363,
364, 364, ////< @todo Down arrow
365, 366,
SKIP, 1,
368, 368,
369, 369, ///< @todo Right arrow
370, 373,
SKIP, 7,
381, 381,
SKIP, 3,
385, 449,
/* Big font */
450, 540, ///< ' ' till 'z'
SKIP, 36,
608, 608, ///< Move Ÿ to the correct position
SKIP, 1,
579, 581,
SKIP, 1,
583, 583,
SKIP, 5,
589, 589,
SKIP, 15,
605, 605,
SKIP, 3,
609, 625,
SKIP, 1,
627, 632,
SKIP, 1,
634, 639,
SKIP, 1,
641, 657,
SKIP, 1,
659, 664,
SKIP, 2,
667, 671,
SKIP, 1,
673, 673,
/* Graphics */
674, 4792,
END
};
/** Replace some letter sprites with some other letters */
static const SpriteID _chars_grf_indexes[] = {
134, 134, ///< euro symbol medium size
582, 582, ///< euro symbol large size
358, 358, ///< euro symbol tiny
648, 648, ///< nordic char: æ
616, 616, ///< nordic char: Æ
666, 666, ///< nordic char: ø
634, 634, ///< nordic char: Ø
382, 383, ///< Œ œ tiny
158, 159, ///< Œ œ medium
606, 607, ///< Œ œ large
360, 360, ///< Š tiny
362, 362, ///< š tiny
136, 136, ///< Š medium
138, 138, ///< š medium
584, 584, ///< Š large
586, 586, ///< š large
626, 626, ///< Ð large
658, 658, ///< ð large
374, 374, ///< Ž tiny
378, 378, ///< ž tiny
150, 150, ///< Ž medium
154, 154, ///< ž medium
598, 598, ///< Ž large
602, 602, ///< ž large
640, 640, ///< Þ large
672, 672, ///< þ large
380, 380, ///< º tiny
156, 156, ///< º medium
604, 604, ///< º large
317, 320, ///< { | } ~ tiny
93, 96, ///< { | } ~ medium
541, 544, ///< { | } ~ large
585, 585, ///< § large
587, 587, ///< © large
592, 592, ///< ® large
594, 597, ///< ° ± ² ³ large
633, 633, ///< × large
665, 665, ///< ÷ large
377, 377, ///< · small
153, 153, ///< · medium
601, 601, ///< · large
END
};
static void LoadSpriteTables()
{
const FileList *files = _use_dos_palette ? &files_dos : &files_win;
uint i = FIRST_GRF_SLOT;
LoadGrfIndexed(files->basic[0].filename, trg1idx, i++);
DupSprite( 2, 130); // non-breaking space medium
DupSprite(226, 354); // non-breaking space tiny
DupSprite(450, 578); // non-breaking space large
LoadGrfFile(files->basic[0].filename, 0, i++);
/*
* The second basic file always starts at the given location and does
@@ -362,8 +222,6 @@ static void LoadSpriteTables()
);
}
LoadGrfIndexed(files->chars.filename, _chars_grf_indexes, i++);
/* Initialize the unicode to sprite mapping table */
InitializeUnicodeGlyphMap();

View File

@@ -43,7 +43,7 @@ enum {
};
/* Apparently these don't play well with enums. */
static const OverflowSafeInt64 INVALID_DATAPOINT = INT64_MAX; // Value used for a datapoint that shouldn't be drawn.
static const OverflowSafeInt64 INVALID_DATAPOINT(INT64_MAX); // Value used for a datapoint that shouldn't be drawn.
static const uint INVALID_DATAPOINT_POS = UINT_MAX; // Used to determine if the previous point was drawn.
struct GraphDrawer {

View File

@@ -23,7 +23,7 @@ struct Group : PoolItem<Group, GroupID, &_Group_pool> {
char *name; ///< Group Name
uint16 num_vehicle; ///< Number of vehicles wich belong to the group
PlayerID owner; ///< Group Owner
PlayerByte owner; ///< Group Owner
VehicleTypeByte vehicle_type; ///< Vehicle type of the group
bool replace_protection; ///< If set to true, the global autoreplace have no effect on the group

View File

@@ -134,6 +134,9 @@ CommandCost CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (v->group_id == g->index && v->type == g->vehicle_type) v->group_id = DEFAULT_GROUP;
}
/* Update backupped orders if needed */
if (_backup_orders_data.group == g->index) _backup_orders_data.group = DEFAULT_GROUP;
/* If we set an autoreplace for the group we delete, remove it. */
if (_current_player < MAX_PLAYERS) {
Player *p;

View File

@@ -23,6 +23,7 @@
#include "viewport_func.h"
#include "gfx_func.h"
#include "player_func.h"
#include "widgets/dropdown_type.h"
#include "widgets/dropdown_func.h"
#include "table/strings.h"
@@ -114,7 +115,6 @@ enum GroupListWidgets {
GRP_WIDGET_LIST_GROUP,
GRP_WIDGET_LIST_GROUP_SCROLLBAR,
GRP_WIDGET_SORT_BY_ORDER,
GRP_WIDGET_SORT_BY_TEXT,
GRP_WIDGET_SORT_BY_DROPDOWN,
GRP_WIDGET_EMPTY_TOP_RIGHT,
GRP_WIDGET_LIST_VEHICLE,
@@ -126,7 +126,6 @@ enum GroupListWidgets {
GRP_WIDGET_REPLACE_PROTECTION,
GRP_WIDGET_EMPTY2,
GRP_WIDGET_AVAILABLE_VEHICLES,
GRP_WIDGET_MANAGE_VEHICLES,
GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN,
GRP_WIDGET_STOP_ALL,
GRP_WIDGET_START_ALL,
@@ -145,8 +144,7 @@ static const Widget _group_widgets[] = {
{ WWT_MATRIX, RESIZE_BOTTOM, 14, 0, 188, 52, 168, 0x701, STR_GROUPS_CLICK_ON_GROUP_FOR_TIP},
{ WWT_SCROLLBAR, RESIZE_BOTTOM, 14, 189, 200, 52, 168, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 201, 281, 14, 25, STR_SORT_BY, STR_SORT_ORDER_TIP},
{ WWT_PANEL, RESIZE_NONE, 14, 282, 435, 14, 25, 0x0, STR_SORT_CRITERIA_TIP},
{ WWT_TEXTBTN, RESIZE_NONE, 14, 436, 447, 14, 25, STR_0225, STR_SORT_CRITERIA_TIP},
{ WWT_DROPDOWN, RESIZE_NONE, 14, 282, 447, 14, 25, 0x0, STR_SORT_CRITERIA_TIP},
{ WWT_PANEL, RESIZE_RIGHT, 14, 448, 459, 14, 25, 0x0, STR_NULL},
{ WWT_MATRIX, RESIZE_RB, 14, 201, 447, 26, 181, 0x701, STR_NULL},
{ WWT_SCROLL2BAR, RESIZE_LRB, 14, 448, 459, 26, 181, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
@@ -157,8 +155,7 @@ static const Widget _group_widgets[] = {
{ WWT_PUSHIMGBTN, RESIZE_TB, 14, 165, 188, 169, 193, 0x0, STR_GROUP_REPLACE_PROTECTION_TIP},
{ WWT_PANEL, RESIZE_TB, 14, 189, 200, 169, 193, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 201, 306, 182, 193, 0x0, STR_AVAILABLE_ENGINES_TIP},
{ WWT_TEXTBTN, RESIZE_TB, 14, 307, 411, 182, 193, STR_MANAGE_LIST, STR_MANAGE_LIST_TIP},
{ WWT_TEXTBTN, RESIZE_TB, 14, 412, 423, 182, 193, STR_0225, STR_MANAGE_LIST_TIP},
{ WWT_DROPDOWN, RESIZE_TB, 14, 307, 423, 182, 193, STR_MANAGE_LIST, STR_MANAGE_LIST_TIP},
{ WWT_PUSHIMGBTN, RESIZE_TB, 14, 424, 435, 182, 193, SPR_FLAG_VEH_STOPPED, STR_MASS_STOP_LIST_TIP},
{ WWT_PUSHIMGBTN, RESIZE_TB, 14, 436, 447, 182, 193, SPR_FLAG_VEH_RUNNING, STR_MASS_START_LIST_TIP},
{ WWT_PANEL, RESIZE_RTB, 14, 448, 447, 182, 193, 0x0, STR_NULL},
@@ -258,28 +255,33 @@ static void CreateVehicleGroupWindow(Window *w)
}
}
enum GroupActionListFunction {
GALF_REPLACE,
GALF_SERVICE,
GALF_DEPOT,
GALF_ADD_SHARED,
GALF_REMOVE_ALL,
};
/**
* Update/redraw the group action dropdown
* @param w the window the dropdown belongs to
* @param gid the currently selected group in the window
*/
static void UpdateGroupActionDropdown(Window *w, GroupID gid, bool refresh = true)
static void ShowGroupActionDropdown(Window *w, GroupID gid)
{
if (refresh && !w->IsWidgetLowered(GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN)) return;
DropDownList *list = new DropDownList();
static StringID action_str[] = {
STR_REPLACE_VEHICLES,
STR_SEND_FOR_SERVICING,
STR_SEND_TRAIN_TO_DEPOT,
STR_NULL,
STR_NULL,
INVALID_STRING_ID
};
list->push_back(new DropDownListStringItem(STR_REPLACE_VEHICLES, GALF_REPLACE, false));
list->push_back(new DropDownListStringItem(STR_SEND_FOR_SERVICING, GALF_SERVICE, false));
list->push_back(new DropDownListStringItem(STR_SEND_TRAIN_TO_DEPOT, GALF_DEPOT, false));
action_str[3] = IsValidGroupID(gid) ? STR_GROUP_ADD_SHARED_VEHICLE : INVALID_STRING_ID;
action_str[4] = IsValidGroupID(gid) ? STR_GROUP_REMOVE_ALL_VEHICLES : INVALID_STRING_ID;
if (IsValidGroupID(gid)) {
list->push_back(new DropDownListStringItem(STR_GROUP_ADD_SHARED_VEHICLE, GALF_ADD_SHARED, false));
list->push_back(new DropDownListStringItem(STR_GROUP_REMOVE_ALL_VEHICLES, GALF_REMOVE_ALL, false));
}
ShowDropDownMenu(w, action_str, 0, GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, 0);
ShowDropDownList(w, list, 0, GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN);
}
/**
@@ -299,7 +301,10 @@ static void GroupWndProc(Window *w, WindowEvent *e)
case WE_INVALIDATE_DATA:
gv->l.flags |= VL_REBUILD;
gl->l.flags |= VL_REBUILD;
UpdateGroupActionDropdown(w, gv->group_sel);
if (!(IsAllGroupID(gv->group_sel) || IsDefaultGroupID(gv->group_sel) || IsValidGroupID(gv->group_sel))) {
gv->group_sel = ALL_GROUP;
HideDropDownMenu(w);
}
SetWindowDirty(w);
break;
@@ -336,7 +341,6 @@ static void GroupWndProc(Window *w, WindowEvent *e)
w->SetWidgetsDisabledState(gv->l.list_length == 0 || _local_player != owner,
GRP_WIDGET_STOP_ALL,
GRP_WIDGET_START_ALL,
GRP_WIDGET_MANAGE_VEHICLES,
GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN,
WIDGET_LIST_END);
@@ -411,6 +415,8 @@ static void GroupWndProc(Window *w, WindowEvent *e)
}
}
/* Set text of sort by dropdown */
w->widget[GRP_WIDGET_SORT_BY_DROPDOWN].data = _vehicle_sort_listing[gv->l.sort_type];
DrawWindowWidgets(w);
@@ -460,10 +466,9 @@ static void GroupWndProc(Window *w, WindowEvent *e)
DrawStringRightAligned(187, y1 + 1, STR_GROUP_TINY_NUM, (gv->group_sel == g->index) ? TC_WHITE : TC_BLACK);
}
/* Draw Matrix Vehicle according to the vehicle list built before */
DrawString(285, 15, _vehicle_sort_listing[gv->l.sort_type], TC_BLACK);
DoDrawString(gv->l.flags & VL_DESC ? DOWNARROW : UPARROW, 269, 15, TC_BLACK);
DrawSortButtonState(w, GRP_WIDGET_SORT_BY_ORDER, gv->l.flags & VL_DESC ? SBS_DOWN : SBS_UP);
/* Draw Matrix Vehicle according to the vehicle list built before */
max = min(w->vscroll2.pos + w->vscroll2.cap, gv->l.list_length);
for (i = w->vscroll2.pos ; i < max ; ++i) {
const Vehicle* v = gv->sort_list[i];
@@ -478,8 +483,8 @@ static void GroupWndProc(Window *w, WindowEvent *e)
if (w->resize.step_height == PLY_WND_PRC__SIZE_OF_ROW_BIG2) DrawSmallOrderList(v, x + 138, y2);
SetDParam(0, v->profit_this_year);
SetDParam(1, v->profit_last_year);
SetDParam(0, v->GetDisplayProfitThisYear());
SetDParam(1, v->GetDisplayProfitLastYear());
DrawString(x + 19, y2 + w->resize.step_height - 8, STR_0198_PROFIT_THIS_YEAR_LAST_YEAR, TC_FROMSTRING);
if (IsValidGroupID(v->group_id)) {
@@ -494,6 +499,8 @@ static void GroupWndProc(Window *w, WindowEvent *e)
}
case WE_CLICK:
HideDropDownMenu(w);
switch(e->we.click.widget) {
case GRP_WIDGET_SORT_BY_ORDER: // Flip sorting method ascending/descending
gv->l.flags ^= VL_DESC;
@@ -503,7 +510,6 @@ static void GroupWndProc(Window *w, WindowEvent *e)
SetWindowDirty(w);
break;
case GRP_WIDGET_SORT_BY_TEXT:
case GRP_WIDGET_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu
ShowDropDownMenu(w, _vehicle_sort_listing, gv->l.sort_type, GRP_WIDGET_SORT_BY_DROPDOWN, 0, 0);
return;
@@ -512,7 +518,6 @@ static void GroupWndProc(Window *w, WindowEvent *e)
if (!IsAllGroupID(gv->group_sel)) {
gv->group_sel = ALL_GROUP;
gv->l.flags |= VL_REBUILD;
UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
}
break;
@@ -521,7 +526,6 @@ static void GroupWndProc(Window *w, WindowEvent *e)
if (!IsDefaultGroupID(gv->group_sel)) {
gv->group_sel = DEFAULT_GROUP;
gv->l.flags |= VL_REBUILD;
UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
}
break;
@@ -538,7 +542,6 @@ static void GroupWndProc(Window *w, WindowEvent *e)
gv->group_sel = gl->sort_list[id_g]->index;;
gv->l.flags |= VL_REBUILD;
UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
break;
}
@@ -591,12 +594,9 @@ static void GroupWndProc(Window *w, WindowEvent *e)
ShowBuildVehicleWindow(0, gv->vehicle_type);
break;
case GRP_WIDGET_MANAGE_VEHICLES:
case GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN: {
UpdateGroupActionDropdown(w, gv->group_sel, false);
case GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN:
ShowGroupActionDropdown(w, gv->group_sel);
break;
}
case GRP_WIDGET_START_ALL:
case GRP_WIDGET_STOP_ALL: { // Start/stop all vehicles of the list
@@ -709,24 +709,24 @@ static void GroupWndProc(Window *w, WindowEvent *e)
assert(gv->l.list_length != 0);
switch (e->we.dropdown.index) {
case 0: // Replace window
case GALF_REPLACE: // Replace window
ShowReplaceGroupVehicleWindow(gv->group_sel, gv->vehicle_type);
break;
case 1: // Send for servicing
case GALF_SERVICE: // Send for servicing
DoCommandP(0, gv->group_sel, ((IsAllGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK)
| DEPOT_MASS_SEND
| DEPOT_SERVICE, NULL, GetCmdSendToDepot(gv->vehicle_type));
break;
case 2: // Send to Depots
case GALF_DEPOT: // Send to Depots
DoCommandP(0, gv->group_sel, ((IsAllGroupID(gv->group_sel) ? VLW_STANDARD : VLW_GROUP_LIST) & VLW_MASK)
| DEPOT_MASS_SEND, NULL, GetCmdSendToDepot(gv->vehicle_type));
break;
case 3: // Add shared Vehicles
case GALF_ADD_SHARED: // Add shared Vehicles
assert(IsValidGroupID(gv->group_sel));
DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_ADD_SHARED_VEHICLE_GROUP | CMD_MSG(STR_GROUP_CAN_T_ADD_SHARED_VEHICLE));
break;
case 4: // Remove all Vehicles from the selected group
case GALF_REMOVE_ALL: // Remove all Vehicles from the selected group
assert(IsValidGroupID(gv->group_sel));
DoCommandP(0, gv->group_sel, gv->vehicle_type, NULL, CMD_REMOVE_ALL_VEHICLES_GROUP | CMD_MSG(STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES));
@@ -761,6 +761,13 @@ static void GroupWndProc(Window *w, WindowEvent *e)
SetWindowDirty(w);
}
break;
case WE_ABORT_PLACE_OBJ: // called when new object to place is selected from keyboard
/* abort drag & drop */
gv->vehicle_sel = INVALID_VEHICLE;
w->InvalidateWidget(GRP_WIDGET_LIST_VEHICLE);
break;
}
}

View File

@@ -60,6 +60,7 @@ enum {
DDSP_CREATE_DESERT,
DDSP_CREATE_ROCKS,
DDSP_CREATE_WATER,
DDSP_CREATE_RIVER,
DDSP_PLANT_TREES,
DDSP_BUILD_BRIDGE,
@@ -105,7 +106,7 @@ void SetFiosType(const byte fiostype);
extern const TextColour _fios_colors[];
/* bridge_gui.cpp */
void ShowBuildBridgeWindow(uint start, uint end, byte type);
void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type);
void ShowBuildIndustryWindow();
void ShowMusicWindow();

View File

@@ -179,6 +179,7 @@ struct IndustrySpec {
GRFMappedStringID closure_text; ///< Message appearing when the industry closes
GRFMappedStringID production_up_text; ///< Message appearing when the industry's production is increasing
GRFMappedStringID production_down_text; ///< Message appearing when the industry's production is decreasing
GRFMappedStringID station_name; ///< Default name for nearby station
byte appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game
byte appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation
uint8 number_of_sounds; ///< Number of sounds available in the sounds array

View File

@@ -815,7 +815,7 @@ static void ClickTile_Industry(TileIndex tile)
ShowIndustryViewWindow(GetIndustryIndex(tile));
}
static uint32 GetTileTrackStatus_Industry(TileIndex tile, TransportType mode, uint sub_mode)
static TrackStatus GetTileTrackStatus_Industry(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
{
return 0;
}
@@ -841,7 +841,7 @@ static bool IsBadFarmFieldTile(TileIndex tile)
{
switch (GetTileType(tile)) {
case MP_CLEAR: return IsClearGround(tile, CLEAR_FIELDS) || IsClearGround(tile, CLEAR_SNOW) || IsClearGround(tile, CLEAR_DESERT);
case MP_TREES: return false;
case MP_TREES: return (GetTreeGround(tile) == TREE_GROUND_SHORE);
default: return true;
}
}
@@ -850,7 +850,7 @@ static bool IsBadFarmFieldTile2(TileIndex tile)
{
switch (GetTileType(tile)) {
case MP_CLEAR: return IsClearGround(tile, CLEAR_SNOW) || IsClearGround(tile, CLEAR_DESERT);
case MP_TREES: return false;
case MP_TREES: return (GetTreeGround(tile) == TREE_GROUND_SHORE);
default: return true;
}
}
@@ -1415,6 +1415,16 @@ static bool CheckIfFarEnoughFromIndustry(TileIndex tile, int type)
return true;
}
/** Production level maximum, minimum and default values.
* It is not a value been really used in order to change, but rather an indicator
* of how the industry is behaving. */
enum ProductionLevels {
PRODLEVEL_CLOSURE = 0x00, ///< signal set to actually close the industry
PRODLEVEL_MINIMUM = 0x04, ///< below this level, the industry is set to be closing
PRODLEVEL_DEFAULT = 0x10, ///< default level set when the industry is created
PRODLEVEL_MAXIMUM = 0x80, ///< the industry is running at full speed
};
static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const IndustryTileTable *it, byte layout, const Town *t, Owner owner)
{
const IndustrySpec *indspec = GetIndustrySpec(type);
@@ -1503,7 +1513,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
if (!_generating_world) i->last_month_production[0] = i->last_month_production[1] = 0;
i->prod_level = 0x10;
i->prod_level = PRODLEVEL_DEFAULT;
do {
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
@@ -1524,11 +1534,11 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
SetIndustryConstructionCounter(cur_tile, 3);
SetIndustryConstructionStage(cur_tile, 2);
}
if (it->gfx >= NEW_INDUSTRYTILEOFFSET) {
/* New industry */
const IndustryTileSpec *its = GetIndustryTileSpec(it->gfx);
if (its->animation_info != 0xFFFF) AddAnimatedTile(cur_tile);
}
/* it->gfx is stored in the map. But the translated ID cur_gfx is the interesting one */
IndustryGfx cur_gfx = GetTranslatedIndustryTileID(it->gfx);
const IndustryTileSpec *its = GetIndustryTileSpec(cur_gfx);
if (its->animation_info != 0xFFFF) AddAnimatedTile(cur_tile);
}
} while ((++it)->ti.x != -0x80);
@@ -1548,9 +1558,10 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind
* @param flags of operations to conduct
* @param indspec pointer to industry specifications
* @param itspec_index the index of the itsepc to build/fund
* @param seed random seed (possibly) used by industries
* @return the pointer of the newly created industry, or NULL if it failed
*/
static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint32 flags, const IndustrySpec *indspec, uint itspec_index)
static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint32 flags, const IndustrySpec *indspec, uint itspec_index, uint32 seed)
{
const IndustryTileTable *it = indspec->table[itspec_index];
bool custom_shape_check = false;
@@ -1558,7 +1569,7 @@ static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint
if (!CheckIfIndustryTilesAreFree(tile, it, itspec_index, type, &custom_shape_check)) return NULL;
if (HasBit(GetIndustrySpec(type)->callback_flags, CBM_IND_LOCATION)) {
if (!CheckIfCallBackAllowsCreation(tile, type, itspec_index)) return NULL;
if (!CheckIfCallBackAllowsCreation(tile, type, itspec_index, seed)) return NULL;
} else {
if (!_check_new_industry_procs[indspec->check_proc](tile)) return NULL;
}
@@ -1588,15 +1599,15 @@ static Industry *CreateNewIndustryHelper(TileIndex tile, IndustryType type, uint
/** Build/Fund an industry
* @param tile tile where industry is built
* @param flags of operations to conduct
* @param p1 industry type see build_industry.h and see industry.h
* @param p2 first layout to try
* @param p1 various bitstuffed elements
* - p1 = (bit 0 - 15) - industry type see build_industry.h and see industry.h
* - p1 = (bit 16 - 31) - first layout to try
* @param p2 seed to use for variable 8F
* @return index of the newly create industry, or CMD_ERROR if it failed
*/
CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
const IndustrySpec *indspec;
indspec = GetIndustrySpec(p1);
const IndustrySpec *indspec = GetIndustrySpec(GB(p1, 0, 16));
/* Check if the to-be built/founded industry is available for this climate. */
if (!indspec->enabled) {
@@ -1620,7 +1631,7 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
* because parameter evaluation order is not guaranteed in the c++ standard
*/
tile = RandomTile();
const Industry *ind = CreateNewIndustryHelper(tile, p1, flags, indspec, RandomRange(indspec->num_table));
const Industry *ind = CreateNewIndustryHelper(tile, p1, flags, indspec, RandomRange(indspec->num_table), p2);
if (ind != NULL) {
SetDParam(0, indspec->name);
if (indspec->new_industry_text > STR_LAST_STRINGID) {
@@ -1639,7 +1650,7 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
} else {
int count = indspec->num_table;
const IndustryTileTable * const *itt = indspec->table;
int num = Clamp(p2, 0, count - 1);
int num = Clamp(GB(p1, 16, 16), 0, count - 1);
_error_message = STR_0239_SITE_UNSUITABLE;
do {
@@ -1647,7 +1658,7 @@ CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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;
if (CreateNewIndustryHelper(tile, p1, flags, indspec, num, p2) == NULL) return CMD_ERROR;
}
return CommandCost(EXPENSES_OTHER, indspec->GetConstructionCost());
@@ -1658,7 +1669,8 @@ Industry *CreateNewIndustry(TileIndex tile, IndustryType type)
{
const IndustrySpec *indspec = GetIndustrySpec(type);
return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, RandomRange(indspec->num_table));
uint32 seed = Random();
return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, RandomRange(indspec->num_table), seed);
}
enum {
@@ -2007,7 +2019,6 @@ enum {
*/
static void ChangeIndustryProduction(Industry *i, bool monthly)
{
extern StringID MapGRFStringID(uint32 grfid, StringID str);
StringID str = STR_NULL;
bool closeit = false;
const IndustrySpec *indspec = GetIndustrySpec(i->type);
@@ -2124,8 +2135,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
}
/* Increase if needed */
while (mul-- != 0 && i->prod_level < 0x80) {
i->prod_level <<= 1;
while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) {
i->prod_level = min(i->prod_level * 2, PRODLEVEL_MAXIMUM);
i->production_rate[0] = min(i->production_rate[0] * 2, 0xFF);
i->production_rate[1] = min(i->production_rate[1] * 2, 0xFF);
if (str == STR_NULL) str = indspec->production_up_text;
@@ -2133,24 +2144,28 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* Decrease if needed */
while (div-- != 0 && !closeit) {
if (i->prod_level == 4) {
if (i->prod_level == PRODLEVEL_MINIMUM) {
closeit = true;
} else {
i->prod_level >>= 1;
i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
i->prod_level = max(i->prod_level / 2, (int)PRODLEVEL_MINIMUM); // typecast to int required to please MSVC
i->production_rate[0] = (i->production_rate[0] + 1) / 2;
i->production_rate[1] = (i->production_rate[1] + 1) / 2;
if (str == STR_NULL) str = indspec->production_down_text;
}
}
/* Increase or Decreasing the production level if needed */
if (increment != 0) {
i->prod_level = ClampU(i->prod_level + increment, 4, 0x80);
if (i->prod_level == 4) closeit = true;
if (increment < 0 && i->prod_level == PRODLEVEL_MINIMUM) {
closeit = true;
} else {
i->prod_level = ClampU(i->prod_level + increment, PRODLEVEL_MINIMUM, PRODLEVEL_MAXIMUM);
}
}
/* Close if needed and allowed */
if (closeit && !CheckIndustryCloseDownProtection(i->type)) {
i->prod_level = 0;
i->prod_level = PRODLEVEL_CLOSURE;
str = indspec->closure_text;
}
@@ -2194,7 +2209,7 @@ void IndustryMonthlyLoop()
FOR_ALL_INDUSTRIES(i) {
UpdateIndustryStatistics(i);
if (i->prod_level == 0) {
if (i->prod_level == PRODLEVEL_CLOSURE) {
delete i;
} else {
ChangeIndustryProduction(i, true);
@@ -2300,12 +2315,12 @@ static const SaveLoad _industry_desc[] = {
SLE_VAR(Industry, width, SLE_UINT8),
SLE_VAR(Industry, height, SLE_UINT8),
SLE_REF(Industry, town, REF_TOWN),
SLE_CONDNULL( 2, 2, 60), ///< used to be industry's produced_cargo
SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo
SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, SL_MAX_VERSION),
SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, SL_MAX_VERSION),
SLE_ARR(Industry, produced_cargo_waiting, SLE_UINT16, 2),
SLE_ARR(Industry, production_rate, SLE_UINT8, 2),
SLE_CONDNULL( 3, 2, 60), ///< used to be industry's accepts_cargo
SLE_CONDNULL( 3, 0, 60), ///< used to be industry's accepts_cargo
SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, SL_MAX_VERSION),
SLE_VAR(Industry, prod_level, SLE_UINT8),
SLE_ARR(Industry, this_month_production, SLE_UINT16, 2),

View File

@@ -57,6 +57,9 @@ static struct IndustryData {
bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_AVAILABLE (if ever)
} _fund_gui;
assert_compile(lengthof(_fund_gui.index) == lengthof(_fund_gui.text));
assert_compile(lengthof(_fund_gui.index) == lengthof(_fund_gui.enabled));
static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
@@ -79,11 +82,14 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
WP(w, fnd_d).timer_enabled = _loaded_newgrf_features.has_newindustries;
/* Initilialize structures */
memset(&_fund_gui.index, 0xFF, NUM_INDUSTRYTYPES);
memset(&_fund_gui.text, STR_NULL, NUM_INDUSTRYTYPES);
memset(&_fund_gui.enabled, false, NUM_INDUSTRYTYPES);
_fund_gui.count = 0;
for (uint i = 0; i < lengthof(_fund_gui.index); i++) {
_fund_gui.index[i] = 0xFF;
_fund_gui.text[i] = STR_NULL;
_fund_gui.enabled[i] = false;
}
w->vscroll.cap = 8; // rows in grid, same in scroller
w->resize.step_height = 13;
@@ -253,7 +259,7 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
_generating_world = false;
}
} else if (_game_mode != GM_EDITOR && _patches.raw_industry_construction == 2 && GetIndustrySpec(WP(w, fnd_d).select)->IsRawIndustry()) {
DoCommandP(0, WP(w, fnd_d).select, 0, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
DoCommandP(0, WP(w, fnd_d).select, InteractiveRandom(), NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
w->HandleButtonClick(DPIW_FUND_WIDGET);
} else {
HandlePlacePushButton(w, DPIW_FUND_WIDGET, SPR_CURSOR_INDUSTRY, VHM_RECT, NULL);
@@ -272,6 +278,7 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
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);
uint32 seed = InteractiveRandom();
if (_game_mode == GM_EDITOR) {
/* Show error if no town exists at all */
@@ -284,7 +291,7 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
_current_player = OWNER_NONE;
_generating_world = true;
_ignore_restrictions = true;
success = DoCommandP(e->we.place.tile, WP(w, fnd_d).select, InteractiveRandomRange(indsp->num_table), NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
success = DoCommandP(e->we.place.tile, (InteractiveRandomRange(indsp->num_table) << 16) | WP(w, fnd_d).select, seed, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
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);
@@ -293,7 +300,7 @@ static void BuildDynamicIndustryWndProc(Window *w, WindowEvent *e)
_ignore_restrictions = false;
_generating_world = false;
} else {
success = DoCommandP(e->we.place.tile, WP(w, fnd_d).select, InteractiveRandomRange(indsp->num_table), NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
success = DoCommandP(e->we.place.tile, (InteractiveRandomRange(indsp->num_table) << 16) | WP(w, fnd_d).select, seed, NULL, CMD_BUILD_INDUSTRY | CMD_MSG(STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY));
}
/* If an industry has been built, just reset the cursor and the system */
@@ -384,6 +391,7 @@ enum IndustryViewWidgets {
IVW_INFO,
IVW_GOTO,
IVW_SPACER,
IVW_RESIZE_WIDGET,
};
/** Information to store about the industry window */
@@ -437,13 +445,27 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
lines++;
}
if (HasBit(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) lines += 2;
for (byte j = 5; j <= 7; j++) {
if (j != 5) w->widget[j].top += lines * 10;
w->widget[j].bottom += lines * 10;
if (HasBit(ind->callback_flags, CBM_IND_WINDOW_MORE_TEXT)) {
lines += 2;
} else {
/* Remove the resizing option from the widgets. Do it before the Hiding since it will be overwritten */
for (byte j = IVW_INFO; j <= IVW_RESIZE_WIDGET; j++) {
w->widget[j].display_flags = RESIZE_NONE;
}
/* Hide the resize button and enlarge the spacer so it will take its place */
w->HideWidget(IVW_RESIZE_WIDGET);
w->widget[IVW_SPACER].right = w->widget[IVW_RESIZE_WIDGET].right;
}
w->height += lines * 10;
lines *= 10;
/* Resize the widgets for the new size, given by the addition of cargos */
for (byte j = IVW_INFO; j <= IVW_RESIZE_WIDGET; j++) {
if (j != IVW_INFO) w->widget[j].top += lines;
w->widget[j].bottom += lines;
}
w->height += lines;
w->resize.height += lines;
} break;
case WE_PAINT: {
@@ -515,10 +537,12 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
if (callback_res != CALLBACK_FAILED) {
StringID message = GetGRFStringID(ind->grf_prop.grffile->grfid, 0xD000 + callback_res);
if (message != STR_NULL && message != STR_UNDEFINED) {
const Widget *wi = &w->widget[IVW_INFO];
y += 10;
PrepareTextRefStackUsage(6);
DrawString(2, y, message, TC_FROMSTRING);
/* Use all the available space left from where we stand up to the end of the window */
DrawStringMultiLine(2, y, message, wi->right - wi->left - 4, wi->bottom - y);
StopTextRefStackUsage();
}
}
@@ -607,9 +631,10 @@ static const Widget _industry_view_widgets[] = {
{ WWT_STICKYBOX, RESIZE_NONE, 9, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON}, // IVW_STICKY
{ WWT_PANEL, RESIZE_NONE, 9, 0, 259, 14, 105, 0x0, STR_NULL}, // IVW_BACKGROUND
{ WWT_INSET, RESIZE_NONE, 9, 2, 257, 16, 103, 0x0, STR_NULL}, // IVW_VIEWPORT
{ WWT_PANEL, RESIZE_NONE, 9, 0, 259, 106, 147, 0x0, STR_NULL}, // IVW_INFO
{ WWT_PUSHTXTBTN, RESIZE_NONE, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON}, // IVW_GOTO
{ WWT_PANEL, RESIZE_NONE, 9, 130, 259, 148, 159, 0x0, STR_NULL}, // IVW_SPACER
{ WWT_PANEL, RESIZE_BOTTOM, 9, 0, 259, 106, 147, 0x0, STR_NULL}, // IVW_INFO
{ WWT_PUSHTXTBTN, RESIZE_TB, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON}, // IVW_GOTO
{ WWT_PANEL, RESIZE_TB, 9, 130, 247, 148, 159, 0x0, STR_NULL}, // IVW_SPACER
{ WWT_RESIZEBOX, RESIZE_TB, 9, 248, 259, 148, 159, 0x0, STR_RESIZE_BUTTON}, // IVW_RESIZE_WIDGET
{ WIDGETS_END},
};
@@ -617,7 +642,7 @@ static const Widget _industry_view_widgets[] = {
static const WindowDesc _industry_view_desc = {
WDP_AUTO, WDP_AUTO, 260, 160, 260, 160,
WC_INDUSTRY_VIEW, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_industry_view_widgets,
IndustryViewWndProc
};
@@ -781,10 +806,6 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
case WE_PAINT: {
int n;
uint p;
static const uint16 _indicator_positions[4] = {88, 187, 284, 387};
if (_industry_sort_dirty) {
_industry_sort_dirty = false;
MakeSortedIndustryList();
@@ -793,10 +814,10 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
SetVScrollCount(w, _num_industry_sort);
DrawWindowWidgets(w);
DoDrawString(_industry_sort_order & 1 ? DOWNARROW : UPARROW, _indicator_positions[_industry_sort_order >> 1], 15, TC_BLACK);
DrawSortButtonState(w, IDW_SORTBYNAME + (_industry_sort_order >> 1), _industry_sort_order & 1 ? SBS_DOWN : SBS_UP);
p = w->vscroll.pos;
n = 0;
uint p = w->vscroll.pos;
int n = 0;
while (p < _num_industry_sort) {
const Industry* i = _industry_sort[p];

View File

@@ -52,51 +52,73 @@ static inline void SetNewLandscapeType(byte landscape)
InvalidateWindowClasses(WC_SELECT_GAME);
}
enum SelectGameIntroWidgets {
SGI_GENERATE_GAME = 2,
SGI_LOAD_GAME,
SGI_PLAY_SCENARIO,
SGI_PLAY_HEIGHTMAP,
SGI_EDIT_SCENARIO,
SGI_PLAY_NETWORK,
SGI_TEMPERATE_LANDSCAPE,
SGI_ARCTIC_LANDSCAPE,
SGI_TROPIC_LANDSCAPE,
SGI_TOYLAND_LANDSCAPE,
SGI_OPTIONS,
SGI_DIFFICULTIES,
SGI_PATCHES_OPTIONS,
SGI_GRF_SETTINGS,
SGI_EXIT,
};
static void SelectGameWndProc(Window *w, WindowEvent *e)
{
switch (e->event) {
case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + 8); break;
case WE_CREATE: w->LowerWidget(_opt_newgame.landscape + 8); break;
case WE_PAINT:
w->SetWidgetLoweredState(8, _opt_newgame.landscape == LT_TEMPERATE);
w->SetWidgetLoweredState(9, _opt_newgame.landscape == LT_ARCTIC);
w->SetWidgetLoweredState(10, _opt_newgame.landscape == LT_TROPIC);
w->SetWidgetLoweredState(11, _opt_newgame.landscape == LT_TOYLAND);
SetDParam(0, STR_6801_EASY + _opt_newgame.diff_level);
DrawWindowWidgets(w);
break;
case WE_PAINT:
w->SetWidgetLoweredState(SGI_TEMPERATE_LANDSCAPE, _opt_newgame.landscape == LT_TEMPERATE);
w->SetWidgetLoweredState(SGI_ARCTIC_LANDSCAPE, _opt_newgame.landscape == LT_ARCTIC);
w->SetWidgetLoweredState(SGI_TROPIC_LANDSCAPE, _opt_newgame.landscape == LT_TROPIC);
w->SetWidgetLoweredState(SGI_TOYLAND_LANDSCAPE, _opt_newgame.landscape == LT_TOYLAND);
SetDParam(0, STR_6801_EASY + _opt_newgame.diff_level);
DrawWindowWidgets(w);
break;
case WE_CLICK:
case WE_CLICK:
#ifdef ENABLE_NETWORK
/* Do not create a network server when you (just) have closed one of the game
* creation/load windows for the network server. */
if (2 <= e->we.click.widget && e->we.click.widget <= 6) _is_network_server = false;
/* Do not create a network server when you (just) have closed one of the game
* creation/load windows for the network server. */
if (SGI_GENERATE_GAME <= e->we.click.widget && e->we.click.widget <= SGI_EDIT_SCENARIO) _is_network_server = false;
#endif /* ENABLE_NETWORK */
switch (e->we.click.widget) {
case 2: ShowGenerateLandscape(); break;
case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
case 4: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
case 5: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
case 6: StartScenarioEditor(); break;
case 7:
if (!_network_available) {
ShowErrorMessage(INVALID_STRING_ID, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
} else {
ShowNetworkGameWindow();
switch (e->we.click.widget) {
case SGI_GENERATE_GAME: ShowGenerateLandscape(); break;
case SGI_LOAD_GAME: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
case SGI_PLAY_SCENARIO: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
case SGI_PLAY_HEIGHTMAP: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
case SGI_EDIT_SCENARIO: StartScenarioEditor(); break;
case SGI_PLAY_NETWORK:
if (!_network_available) {
ShowErrorMessage(INVALID_STRING_ID, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
} else {
ShowNetworkGameWindow();
}
break;
case SGI_TEMPERATE_LANDSCAPE: case SGI_ARCTIC_LANDSCAPE:
case SGI_TROPIC_LANDSCAPE: case SGI_TOYLAND_LANDSCAPE:
w->RaiseWidget(_opt_newgame.landscape + SGI_TEMPERATE_LANDSCAPE);
SetNewLandscapeType(e->we.click.widget - SGI_TEMPERATE_LANDSCAPE);
break;
case SGI_OPTIONS: ShowGameOptions(); break;
case SGI_DIFFICULTIES: ShowGameDifficulty(); break;
case SGI_PATCHES_OPTIONS: ShowPatchesSelection(); break;
case SGI_GRF_SETTINGS: ShowNewGRFSettings(true, true, false, &_grfconfig_newgame); break;
case SGI_EXIT: HandleExitGameRequest(); break;
}
break;
case 8: case 9: case 10: case 11:
w->RaiseWidget(_opt_newgame.landscape + 8);
SetNewLandscapeType(e->we.click.widget - 8);
break;
case 12: ShowGameOptions(); break;
case 13: ShowGameDifficulty(); break;
case 14: ShowPatchesSelection(); break;
case 15: ShowNewGRFSettings(true, true, false, &_grfconfig_newgame); break;
case 16: HandleExitGameRequest(); break;
}
break;
}
}
@@ -121,9 +143,9 @@ static void AskExitGameCallback(Window *w, bool confirmed)
void AskExitGame()
{
#if defined(_WIN32)
SetDParam(0, STR_0133_WINDOWS);
SetDParam(0, STR_OSNAME_WINDOWS);
#elif defined(__APPLE__)
SetDParam(0, STR_0135_OSX);
SetDParam(0, STR_OSNAME_OSX);
#elif defined(__BEOS__)
SetDParam(0, STR_OSNAME_BEOS);
#elif defined(__MORPHOS__)
@@ -135,7 +157,7 @@ void AskExitGame()
#elif defined(SUNOS)
SetDParam(0, STR_OSNAME_SUNOS);
#else
SetDParam(0, STR_0134_UNIX);
SetDParam(0, STR_OSNAME_UNIX);
#endif
ShowQuery(
STR_00C7_QUIT,

View File

@@ -23,6 +23,7 @@
#include "date_func.h"
#include "vehicle_func.h"
#include "settings_type.h"
#include "water.h"
#include "table/sprites.h"
@@ -141,7 +142,7 @@ uint GetPartialZ(int x, int y, Slope corners)
int z = 0;
switch (corners & ~SLOPE_HALFTILE_MASK) {
switch (RemoveHalftileSlope(corners)) {
case SLOPE_W:
if (x - y >= 0)
z = (x - y) >> 1;
@@ -253,10 +254,7 @@ uint GetSlopeZ(int x, int y)
int GetSlopeZInCorner(Slope tileh, Corner corner)
{
assert(!IsHalftileSlope(tileh));
static const int _corner_slopes[4][2] = {
{ SLOPE_W, SLOPE_STEEP_W }, { SLOPE_S, SLOPE_STEEP_S }, { SLOPE_E, SLOPE_STEEP_E }, { SLOPE_N, SLOPE_STEEP_N }
};
return ((tileh & _corner_slopes[corner][0]) != 0 ? TILE_HEIGHT : 0) + (tileh == _corner_slopes[corner][1] ? TILE_HEIGHT : 0);
return ((tileh & SlopeWithOneCornerRaised(corner)) != 0 ? TILE_HEIGHT : 0) + (tileh == SteepSlope(corner) ? TILE_HEIGHT : 0);
}
/**
@@ -288,15 +286,24 @@ void GetSlopeZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2)
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 & ~SLOPE_HALFTILE_MASK) == corners[edge][2]) *z1 += TILE_HEIGHT; // z1 is highest corner of a steep slope
if ((tileh & ~SLOPE_HALFTILE_MASK) == corners[edge][3]) *z2 += TILE_HEIGHT; // z2 is highest corner of a steep slope
if (RemoveHalftileSlope(tileh) == corners[edge][2]) *z1 += TILE_HEIGHT; // z1 is highest corner of a steep slope
if (RemoveHalftileSlope(tileh) == corners[edge][3]) *z2 += TILE_HEIGHT; // z2 is highest corner of a steep slope
}
static Slope GetFoundationSlope(TileIndex tile, uint* z)
/**
* Get slope of a tile on top of a (possible) foundation
* If a tile does not have a foundation, the function returns the same as GetTileSlope.
*
* @param tile The tile of interest.
* @param z returns the z of the foundation slope. (Can be NULL, if not needed)
* @return The slope on top of the foundation.
*/
Slope GetFoundationSlope(TileIndex tile, uint* z)
{
Slope tileh = GetTileSlope(tile, z);
Foundation f = _tile_type_procs[GetTileType(tile)]->get_foundation_proc(tile, tileh);
*z += ApplyFoundationToSlope(f, &tileh);
uint z_inc = ApplyFoundationToSlope(f, &tileh);
if (z != NULL) *z += z_inc;
return tileh;
}
@@ -430,9 +437,18 @@ void DoClearSquare(TileIndex tile)
MarkTileDirtyByTile(tile);
}
uint32 GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode)
/** Returns information about trackdirs and signal states.
* If there is any trackbit at 'side', return all trackdirbits.
* For TRANSPORT_ROAD, return no trackbits if there is no roadbit (of given subtype) at given side.
* @param tile tile to get info about
* @param mode transport type
* @param sub_mode for TRANSPORT_ROAD, roadtypes to check
* @param side side we are entering from, INVALID_DIAGDIR to return all trackbits
* @return trackdirbits and other info depending on 'mode'
*/
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
{
return _tile_type_procs[GetTileType(tile)]->get_tile_track_status_proc(tile, mode, sub_mode);
return _tile_type_procs[GetTileType(tile)]->get_tile_track_status_proc(tile, mode, sub_mode, side);
}
void ChangeTileOwner(TileIndex tile, PlayerID old_player, PlayerID new_player)
@@ -629,7 +645,7 @@ void InitializeLandscape()
for (x = 0; x < maxx; x++) {
MakeClear(sizex * y + x, CLEAR_GRASS, 3);
SetTileHeight(sizex * y + x, 0);
SetTropicZone(sizex * y + x, TROPICZONE_INVALID);
SetTropicZone(sizex * y + x, TROPICZONE_NORMAL);
ClearBridgeMiddle(sizex * y + x);
}
MakeVoid(sizex * y + x);
@@ -637,53 +653,6 @@ void InitializeLandscape()
for (x = 0; x < sizex; x++) MakeVoid(sizex * y + x);
}
void ConvertGroundTilesIntoWaterTiles()
{
TileIndex tile;
uint z;
Slope slope;
for (tile = 0; tile < MapSize(); ++tile) {
slope = GetTileSlope(tile, &z);
if (IsTileType(tile, MP_CLEAR) && z == 0) {
/* Make both water for tiles at level 0
* and make shore, as that looks much better
* during the generation. */
switch (slope) {
case SLOPE_FLAT:
MakeWater(tile);
break;
case SLOPE_N:
case SLOPE_E:
case SLOPE_S:
case SLOPE_W:
MakeShore(tile);
break;
case SLOPE_NW:
if (GetTileSlope(TileAddByDiagDir(tile, DIAGDIR_SE), NULL) != SLOPE_SE) MakeShore(tile);
break;
case SLOPE_SW:
if (GetTileSlope(TileAddByDiagDir(tile, DIAGDIR_NE), NULL) != SLOPE_NE) MakeShore(tile);
break;
case SLOPE_SE:
if (GetTileSlope(TileAddByDiagDir(tile, DIAGDIR_NW), NULL) != SLOPE_NW) MakeShore(tile);
break;
case SLOPE_NE:
if (GetTileSlope(TileAddByDiagDir(tile, DIAGDIR_SW), NULL) != SLOPE_SW) MakeShore(tile);
break;
default:
break;
}
}
}
}
static const byte _genterrain_tbl_1[5] = { 10, 22, 33, 37, 4 };
static const byte _genterrain_tbl_2[5] = { 0, 0, 0, 0, 33 };
@@ -950,8 +919,3 @@ TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng)
TileY(a) + (GB(r, 8, 8) * rn * 2 >> 8) - rn
));
}
bool IsValidTile(TileIndex tile)
{
return (tile < MapSizeX() * MapMaxY() && TileX(tile) != MapMaxX());
}

View File

@@ -26,12 +26,11 @@ byte GetSnowLine(void);
byte HighestSnowLine(void);
void ClearSnowLine(void);
bool IsValidTile(TileIndex tile);
uint GetPartialZ(int x, int y, Slope corners);
uint GetSlopeZ(int x, int y);
void GetSlopeZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2);
int GetSlopeZInCorner(Slope tileh, Corner corner);
Slope GetFoundationSlope(TileIndex tile, uint* z);
static inline Point RemapCoords(int x, int y, int z)
{
@@ -55,8 +54,6 @@ void RunTileLoop();
void InitializeLandscape();
void GenerateLandscape(byte mode);
void ConvertGroundTilesIntoWaterTiles();
TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
#endif /* LANDSCAPE_H */

View File

@@ -15,8 +15,6 @@ STR_EMPTY :
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} (en-roete van
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Aanvaar: {WHITE}
STR_000D_ACCEPTS :{BLACK}Aanvaar: {GOLD}
STR_000E :
@@ -274,9 +272,9 @@ STR_0130_RENAME :{BLACK}Hernoem
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Te veel name bepaal
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Gekies naam alreeds in gebruik
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
@@ -287,11 +285,11 @@ STR_013B_OWNED_BY :{WHITE}...besit
STR_013C_CARGO :{BLACK}Vrag
STR_013D_INFORMATION :{BLACK}Inligting
STR_013E_CAPACITIES :{BLACK}Kapasiteite
STR_013E_TOTAL_CARGO :{BLACK}Totaale Vrag
STR_TOTAL_CARGO :{BLACK}Totaale Vrag
STR_013F_CAPACITY :{BLACK}Kapasiteit: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Kapasiteit: {LTBLUE}{CARGO} (x{NUM})
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Totaale vrag kapasitiet van die trein:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_TEXT :{BLACK}Totaale vrag kapasitiet van die trein:
STR_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Nuwe Speletjie
STR_0141_LOAD_GAME :{BLACK}Laai Speletjie
@@ -299,12 +297,6 @@ STR_SINGLE_PLAYER :{BLACK}Enkel sp
STR_MULTIPLAYER :{BLACK}Veelspeler
STR_SCENARIO_EDITOR :{BLACK}Draaiboek Redakteur
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_MAPSIZE :{BLACK}Werfkaart groote:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Speletjie Opsies
@@ -733,7 +725,7 @@ 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_MENU_LOAD_HEIGHTMAP :Laai Hoogtekaart
STR_0294_QUIT_EDITOR :Laat vaar redigeerder
STR_0295 :
STR_0296_QUIT :Laat vaar
@@ -773,9 +765,9 @@ STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Spaar pa
STR_CHECKMARK :{CHECKMARK}
############ range for menu starts
STR_02C3_GAME_OPTIONS :Speletjie opsies
STR_02C5_DIFFICULTY_SETTINGS :Moeite stellings
STR_02C7_CONFIG_PATCHES :Konfigureer laslappe
STR_02C4_GAME_OPTIONS :Speletjie opsies
STR_02C6_DIFFICULTY_SETTINGS :Moeite stellings
STR_MENU_CONFIG_PATCHES :Konfigureer laslappe
STR_NEWGRF_SETTINGS :NewGRF stellings
STR_TRANSPARENCY_OPTIONS :Deursigtigheid opsies
STR_GAMEOPTMENU_0A :
@@ -875,8 +867,8 @@ STR_SAVING_GAME :{RED}* * BESP
STR_SAVE_STILL_IN_PROGRESS :{WHITE}Spaar nog in vorder, {}wag asb tot dit klaar is!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Straat styl musiek' musiek lys
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
STR_6 :{BLACK}6
STR_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ORIGINAL_ENGLISH :Engels (Oorspronkilik)
@@ -1051,7 +1043,6 @@ STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Laattoe
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_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}
@@ -1205,9 +1196,6 @@ STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
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_TEMPERATE_LANDSCAPE :Magtig landskap
STR_SUB_ARCTIC_LANDSCAPE :Onder-noordpool landskap
@@ -1649,41 +1637,41 @@ STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Moet eer
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet pad eers verwyder
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Pad werke in vorder
STR_1802_ROAD_CONSTRUCTION :{WHITE}Pad Konstruksie
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Tremweg Konstruksie
STR_WHITE_TRAMWAY_CONSTRUCTION :{WHITE}Tremweg Konstruksie
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Kies Pad Brug
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... een rigting paaie kan nie aansluitings hê nie
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan nie pad hier bou nie...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan nie tremweg hier bou nie...
STR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan nie tremweg hier bou nie...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan nie pad van hier verwyder nie...
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan nie tremweg van hier af verwyder nie...
STR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan nie tremweg van hier af verwyder nie...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Pad Depot Ori<72>tering
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Trem Depot Orientasie
STR_TRAM_DEPOT_ORIENTATION :{WHITE}Trem Depot Orientasie
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_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 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_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan nie passasier trem stasie bou nie...
STR_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_TRAMWAY_CONSTRUCTION :Tremweg konstruksie
STR_180B_BUILD_ROAD_SECTION :{BLACK}Bou pad afdeling
STR_BUILD_AUTOROAD_TIP :{BLACK}Bou pad seksie gebruikend Outopad metode
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Bou tremweg afdeling
STR_BUILD_TRAMWAY_SECTION :{BLACK}Bou tremweg afdeling
STR_BUILD_AUTOTRAM_TIP :{BLACK}Bou tremweg gebruikend die Outotrem metode
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_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
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bou passasier trem stasie
STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Bou vrag trem stasie
STR_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bou passasier trem stasie
STR_BUILD_CARGO_TRAM_STATION :{BLACK}Bou vrag trem stasie
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Bou pad brug
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Bou tremweg brug
STR_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_BUILD_TRAMWAY_TUNNEL :{BLACK}Bou tremweg tonnel
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_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_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
@@ -1825,8 +1813,8 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Te naby
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grens aan meer as een bestaande stasie/laai area
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 vragmotor stasies
STR_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushalte
STR_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
@@ -1857,12 +1845,12 @@ STR_3040_NOW_ACCEPTS :{WHITE}{STATION
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} aanvaar nou {STRING} en {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Bus Stasie Orientasie
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Vragmotor Stasie Orientasie
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Passasier Trem Orientasie
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Vrag Trem Orientasie
STR_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Passasier Trem Orientasie
STR_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 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_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Moet eers passasier trem stasie afbreek
STR_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Moet eers vrag trem stasie afbreek
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stasie{P "" s}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Geen -
@@ -1874,8 +1862,8 @@ STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Kies nom
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Kies lengte van spoorweg stasie
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_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Kies passasier trem stasie orientasie
STR_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}Toon stasie graderings
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Verander naam van stasie
@@ -1897,7 +1885,7 @@ 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 versper
STR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...ongelyk stasies is versper
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Hou in CTRL om meer as een item te selekteer
STR_UNDEFINED :(undefined string)
@@ -1938,7 +1926,7 @@ STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Spaar di
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
STR_LOAD_HEIGHTMAP :{WHITE}Laai Hoogtekaart
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} in die pad
@@ -2142,10 +2130,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Hoeveel
STR_6813_ECONOMY :{LTBLUE}Ekonomie: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Trein omkeer: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Rampe: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Stad raad se houding na area herstruktuuring: {ORANGE}{STRING}
STR_CITY_APPROVAL :{LTBLUE}Stad raad se houding na area herstruktuuring: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Geen
STR_NONE :Geen
STR_NUM_VERY_LOW :Baie laag
STR_6816_LOW :Laag
STR_6817_NORMAL :Normaal
@@ -2183,9 +2171,9 @@ STR_6835_AT_END_OF_LINE_ONLY :Slegs op die en
STR_6836_OFF :Af
STR_6837_ON :Aan
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Wys ho<68>telling tabel
STR_6839_PERMISSIVE :Permissief
STR_683A_TOLERANT :Toelaatbaar
STR_683B_HOSTILE :Vyandelik
STR_PERMISSIVE :Permissief
STR_TOLERANT :Toelaatbaar
STR_HOSTILE :Vyandelik
##id 0x7000
STR_7000 :
@@ -2317,7 +2305,7 @@ STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kan nie
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Kan nie 25% aandeel in die maatskappy verkoop nie...
STR_707D_OWNED_BY :{WHITE}({COMMA}% besit by {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} is deur {COMPANY} oorgevat!
STR_7080_PROTECTED :{WHITE}Die maatskappy is nie oud genoeg om aandeele te handel nie...
STR_PROTECTED :{WHITE}Die maatskappy is nie oud genoeg om aandeele te handel nie...
STR_LIVERY_DEFAULT :Standaard Lewery
STR_LIVERY_STEAM :Stoom Enjin
@@ -2624,17 +2612,17 @@ STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trein in
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Gaan na {STATION}
STR_8807_GO_TO_TRANSFER :Gaan na {STATION} (Oordrag en vat vrag)
STR_8808_GO_TO_UNLOAD :Gaan na {STATION} (Aflaai)
STR_8809_GO_TO_TRANSFER_UNLOAD :Gaan na {STATION} (Oordrag en verlaat leeg)
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} (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} (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} (Oordra en wag vir volle lading)
STR_GO_TO_TRANSFER :Gaan na {STATION} (Oordrag en vat vrag)
STR_8807_GO_TO_UNLOAD :Gaan na {STATION} (Aflaai)
STR_GO_TO_TRANSFER_UNLOAD :Gaan na {STATION} (Oordrag en verlaat leeg)
STR_8808_GO_TO_LOAD :Gaan na {STATION} (Laai)
STR_GO_TO_TRANSFER_LOAD :Gaan na {STATION} (Oordrag en wag vir volle lading)
STR_880A_GO_NON_STOP_TO :Gaan deurgaande na {STATION}
STR_GO_TO_NON_STOP_TRANSFER :Gaan deurgaande na {STATION} (Oordra en neem vrag)
STR_880B_GO_NON_STOP_TO_UNLOAD :Gaan deurgaande na {STATION} (Aflaai)
STR_GO_TO_NON_STOP_TRANSFER_UNLOAD :Gaan deurgaande na {STATION} (Oordra en verlaat leë)
STR_880C_GO_NON_STOP_TO_LOAD :Gaan deurgaande na {STATION} (Laai)
STR_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
@@ -2738,7 +2726,7 @@ STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Verminde
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_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}Vee uit die verlig opdrag
@@ -2769,8 +2757,8 @@ STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT
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 verlig opdrag forseer die voertuig om sy vrag te stort
STR_886F_TRANSFER :{BLACK}Oordra
STR_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die verlig opdrag forseer die voertuig om sy vrag te stort
STR_TRANSFER :{BLACK}Oordra
STR_CLEAR_TIME :{BLACK}Reinig Tyd
STR_RESET_LATENESS :{BLACK}Herstel Laat Teller
@@ -2847,8 +2835,8 @@ STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Pad voer
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Benaam pad voertuig
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste bus arriveer by {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste trok arriveer by {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste passasier trein arriveer by {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste vrag trein arriveer by {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_PASSENGER_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste passasier trein arriveer by {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_CARGO_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 forseer om te omdraai nie...
@@ -2857,7 +2845,7 @@ STR_9034_RENAME :{BLACK}Hernoem
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Hernoem pad voertuig tipe
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Hernoem pad voertuig tipe
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Pad voertuig tipe kan nie hernoem word nie...
STR_9038_GO_TO_ROADVEH_DEPOT :Gaan na {TOWN} Pad Voertuig Depot
STR_GO_TO_ROADVEH_DEPOT :Gaan na {TOWN} Pad Voertuig Depot
STR_SERVICE_AT_ROADVEH_DEPOT :Diens by {TOWN} Pad Voertuig Depot
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Herpas pad voertuig om 'n ander vrag tipe te ontvoer
@@ -3256,7 +3244,6 @@ STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Skaal wa
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Om te verstel oorsprong werfkaart te is nie aanbeveel. Voortgaan met die generasie?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Dorp uitleg waarskuwing
STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Die dorp uitleg "geen meer paaie" is nie aanbeveel nie. Gaan aan met generasie?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Hoogtekaart name:
STR_HEIGHTMAP_SIZE :{BLACK}Groote: {ORANGE}{NUM} x {NUM}
STR_GENERATION_WORLD :{WHITE}Genereer wêreld...
@@ -3282,7 +3269,6 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Beweeg d
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}
STR_SMALLMAP_CENTER :{BLACK}Senter die kleinwerfkaart op die huidige posisie

View File

@@ -17,8 +17,7 @@ STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Requer terreno plano
STR_0008_WAITING :{BLACK}Aguardando: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (em rota de
STR_000B :{YELLOW}{STATION})
STR_EN_ROUTE_FROM :{YELLOW}({SHORTCARGO} vindo de {STATION})
STR_000C_ACCEPTS :{BLACK}Aceita: {WHITE}
STR_000D_ACCEPTS :{BLACK}Aceita: {GOLD}
STR_000E :
@@ -215,7 +214,7 @@ STR_00F3_400M :{BLACK}{TINYFON
STR_00F4_500M :{BLACK}{TINYFONT}500m
STR_00F5_TRAINS :{BLACK}{TINYFONT}Trens
STR_00F6_ROAD_VEHICLES :{BLACK}{TINYFONT}Automóveis
STR_00F7_SHIPS :{BLACK}{TINYFONT}Navios
STR_00F7_SHIPS :{BLACK}{TINYFONT}Embarcação
STR_00F8_AIRCRAFT :{BLACK}{TINYFONT}Aeronaves
STR_00F9_TRANSPORT_ROUTES :{BLACK}{TINYFONT}Rotas de Transporte
STR_00FA_COAL_MINE :{BLACK}{TINYFONT}Mina de Carvão
@@ -276,9 +275,9 @@ STR_0130_RENAME :{BLACK}Renomear
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Muitos nomes definidos
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}O nome escolhido já está em uso
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
@@ -289,11 +288,11 @@ STR_013B_OWNED_BY :{WHITE}...propr
STR_013C_CARGO :{BLACK}Carga
STR_013D_INFORMATION :{BLACK}Informação
STR_013E_CAPACITIES :{BLACK}Capacidades
STR_013E_TOTAL_CARGO :{BLACK}Carga Total
STR_TOTAL_CARGO :{BLACK}Carga Total
STR_013F_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Capacidade: {LTBLUE}{CARGO} (x{NUM})
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Capacidade total deste trem:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_TEXT :{BLACK}Capacidade total deste trem:
STR_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Novo Jogo
STR_0141_LOAD_GAME :{BLACK}Abrir Jogo
@@ -301,12 +300,6 @@ STR_SINGLE_PLAYER :{BLACK}1 jogado
STR_MULTIPLAYER :{BLACK}Multi-jogador
STR_SCENARIO_EDITOR :{BLACK}Editor de Cenário
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_MAPSIZE :{BLACK}Dimensões do mapa:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Opções do Jogo
@@ -379,7 +372,7 @@ STR_SORT_BY_DROPDOWN_NAME :Nome
STR_SORT_BY_DATE :{BLACK}Data
STR_SORT_BY_NUMBER :Número
STR_SORT_BY_PROFIT_LAST_YEAR :Lucros do último ano
STR_SORT_BY_PROFIT_THIS_YEAR :Lucros deste ano
STR_SORT_BY_PROFIT_THIS_YEAR :Lucro anual
STR_SORT_BY_AGE :Idade
STR_SORT_BY_RELIABILITY :Confiabilidade
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacidade total por tipo de carga
@@ -474,7 +467,7 @@ STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Exibir r
STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Exibir vegetação no mapa
STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Exibir propriedades no mapa
STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Alternar exibir/ocultar nomes das cidades no mapa
STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Lucro deste ano: {CURRENCY} (ano passado: {CURRENCY})
STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Lucro anual: {CURRENCY} (último ano: {CURRENCY})
############ range for service numbers starts
STR_AGE :{COMMA} ano{P "" s} ({COMMA})
@@ -487,7 +480,7 @@ STR_019E_SHIP :{G=m}Embarcaç
STR_019F_TRAIN :{G=m}Trem
STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} está ficando velho
STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA} está ficando muito velho
STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} está ficando muito velho e precisa substituição urgente
STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} está ficando muito velho e precisa ser substituído urgentemente
STR_01A3_LAND_AREA_INFORMATION :{WHITE}Informações do Terreno
STR_01A4_COST_TO_CLEAR_N_A :{BLACK}Custo para limpar: {LTBLUE}N/D
STR_01A5_COST_TO_CLEAR :{BLACK}Custo para limpar: {LTBLUE}{CURRENCY}
@@ -734,11 +727,12 @@ STR_028D_PLACE_LIGHTHOUSE :{BLACK}Colocar
STR_028E_PLACE_TRANSMITTER :{BLACK}Colocar transmissor
STR_028F_DEFINE_DESERT_AREA :{BLACK}Define área desértica.{} Pressione e segure CTRL para removê-la
STR_CREATE_LAKE :{BLACK}Define área com água.{} Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
STR_CREATE_RIVER :{BLACK}Criar Rios
STR_0290_DELETE :{BLACK}Remover
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Remover esta cidade completamente
STR_0292_SAVE_SCENARIO :Salvar cenário
STR_0293_LOAD_SCENARIO :Abrir cenário
STR_LOAD_HEIGHTMAP :Carregar relevo
STR_MENU_LOAD_HEIGHTMAP :Carregar relevo
STR_0294_QUIT_EDITOR :Sair do editor
STR_0295 :
STR_0296_QUIT :Sair
@@ -778,9 +772,9 @@ STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Salvar n
STR_CHECKMARK :{CHECKMARK}
############ range for menu starts
STR_02C3_GAME_OPTIONS :Opções do Jogo
STR_02C5_DIFFICULTY_SETTINGS :Configurações de dificuldade
STR_02C7_CONFIG_PATCHES :Configurar correções
STR_02C4_GAME_OPTIONS :Opções do Jogo
STR_02C6_DIFFICULTY_SETTINGS :Configurações de dificuldade
STR_MENU_CONFIG_PATCHES :Configurar correções
STR_NEWGRF_SETTINGS :Configurar NewGRF
STR_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_GAMEOPTMENU_0A :
@@ -880,8 +874,8 @@ STR_SAVING_GAME :{RED}* * SALV
STR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação em progresso,{}por favor aguarde até que termine!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Selecionar programa 'Ezy Street'
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
STR_6 :{BLACK}6
STR_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ORIGINAL_ENGLISH :Inglês (Original)
@@ -900,7 +894,7 @@ STR_TOWNNAME_HUNGARIAN :Húngaro
STR_TOWNNAME_AUSTRIAN :Austríaco
STR_TOWNNAME_ROMANIAN :Romeno
STR_TOWNNAME_CZECH :Checo
STR_TOWNNAME_SWISS :Suiça
STR_TOWNNAME_SWISS :Suiço
STR_TOWNNAME_DANISH :Dinamarquês
STR_TOWNNAME_TURKISH :Turco
STR_TOWNNAME_ITALIAN :Italiano
@@ -917,7 +911,7 @@ STR_CURR_CHF :Franco Suíço
STR_CURR_CZK :Coroa Checa (CZK)
STR_CURR_DEM :Marco Alemão (DEM)
STR_CURR_DKK :Coroa Dinamarquesa (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_ESP :Peso (ESP)
STR_CURR_FIM :Marco Finlandês (FIM)
STR_CURR_FRF :Franco (FRF)
STR_CURR_GRD :Dracma Grego (GRD)
@@ -932,7 +926,7 @@ STR_CURR_RUR :Rublo Russo (RU
STR_CURR_SIT :Tolar Eslovênio (SIT)
STR_CURR_SEK :Coroa Sueca (SEK)
STR_CURR_YTL :Lira Turca (YTL)
STR_CURR_SKK :Koruna Eslovaca (SKK)
STR_CURR_SKK :Coroa Eslovaca (SKK)
STR_CURR_BRR :Real Brasileiro (BRL)
STR_CURR_CUSTOM :Personalizado...
@@ -969,8 +963,8 @@ STR_MONTH_OCT :Outubro
STR_MONTH_NOV :Novembro
STR_MONTH_DEC :Dezembro
STR_HEADING_FOR_STATION :{LTBLUE}Dirigindo-se para {STATION}
STR_HEADING_FOR_STATION_VEL :{LTBLUE}Dirigindo-se para {STATION}, {VELOCITY}
STR_HEADING_FOR_STATION :{LTBLUE}Indo para {STATION}
STR_HEADING_FOR_STATION_VEL :{LTBLUE}Indo para {STATION}, {VELOCITY}
STR_NO_ORDERS :{LTBLUE}Sem ordens
STR_NO_ORDERS_VEL :{LTBLUE}Sem ordens, {VELOCITY}
@@ -1055,9 +1049,8 @@ STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Fila de
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_ALLOW_GIVE_MONEY :{LTBLUE}Permitir o envio de dinheiro a outras empresas: {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}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Permitir estações drive-through em ruas locais: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Permitir construção de estações adjacentes: {ORANGE}{STRING}
@@ -1122,12 +1115,12 @@ STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Desligado
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pausar automaticamente ao inicar 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 :Própria Compania
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Todas as companias
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Própria empresa
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Todas as empresas
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Desligado
STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Própria Compania
STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Todas as Companias
STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Própria empresa
STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Todas as empresas
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Ativar plano de horário para veículos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Exibir plano de horário em tiques ao invés de dias: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Tipo padrão de ferrovia (ao criar ou carregar um jogo): {ORANGE}{STRING}
@@ -1169,7 +1162,7 @@ STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Noticia
STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Data de início: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Terminar jogo em: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Ativar economia regular (alterações menores)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Permite comprar ações de outras companhias
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Permite comprar ações de outras empresas
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Ao arrastar colocar sinais a cada: {ORANGE}{STRING} quadrado(s)
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Automaticamente constroi semáforos anteriores: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENABLE_SIGNAL_GUI :{LTBLUE}Ativar interface de sinais: {ORANGE}{STRING}
@@ -1212,9 +1205,19 @@ STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Alterar valor
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Alguns ou todos os intervalo(s) de serviço predefinidos abaixo são incompatíveis com o valor escolhido! São válidos 5-90% e 30-800 dias
STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}Usar YAPF para embarcações: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}Usar YAPF para automóveis: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}Usar YAPF para trens: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS :{LTBLUE}Pathfinder para trens: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NTP :NTP {RED}(Não recomendado)
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(Recomendado)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH :{LTBLUE}Pathfinder para automóveis: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_OPF :Original {RED}(Não recomendado)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_YAPF :YAPF {BLUE}(Recomendado)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS :{LTBLUE}Pathfinder para embarcações: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_OPF :Original {BLUE}(Recomendado)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_YAPF :YAPF {RED}(Não recomendado)
STR_TEMPERATE_LANDSCAPE :terreno temperado
STR_SUB_ARCTIC_LANDSCAPE :terreno subártico
@@ -1234,8 +1237,8 @@ STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Mudar d
STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE} {DATE_SHORT}
STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Dirigindo-se para {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Dirigindo-se para {WAYPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Indo para {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Indo para {WAYPOINT}, {VELOCITY}
STR_GO_TO_WAYPOINT :Ir via {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Ir sem parar via {WAYPOINT}
@@ -1404,11 +1407,11 @@ STR_NETWORK_LAN_INTERNET :Rede Local / In
STR_NETWORK_INTERNET_ADVERTISE :Internet (divulgar)
STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} cliente{P "" s}
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não precisa estarem todos preenchidos
STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P ia ias}
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não é necessário estarem todos preenchidos
STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} empresa{P "" s}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Máximo de empresas:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita o servidor para uma certa quantia de empresas
STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} espectator{P "" es}
STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} espectador{P "" es}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max espectadores:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limita o servidor para um certa quantia de espectadores
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Idioma falado:
@@ -1656,42 +1659,42 @@ STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Deve rem
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Deve remover a rodovia primeiro
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Recapeamento rodoviário em progresso
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construir rodovias
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construção de Bonde
STR_WHITE_TRAMWAY_CONSTRUCTION :{WHITE}Construção de Bonde
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Selecionar Ponte Rodoviária
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... vias de mão única não podem ter junções
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Impossível construir rodovia aqui...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Impossível construir bonde aqui...
STR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Impossível construir bonde aqui...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Impossível remover rodovia daqui...
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossível remover bonde daqui...
STR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossível remover bonde daqui...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientação da Garagem
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Orientação do Depósito
STR_TRAM_DEPOT_ORIENTATION :{WHITE}Orientação do Depósito
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Impossível construir garagem aqui...
STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Impossível construir depósito aqui...
STR_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Impossível construir depósito aqui...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Impossível construir estação de ônibus...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Impossível construir estação de caminhão
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Impossível construir estação de bonde...
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Impossível construir estação de bonde
STR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Impossível construir estação de bonde...
STR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Impossível construir estação de bonde
STR_180A_ROAD_CONSTRUCTION :Construir rodovias
STR_180A_TRAMWAY_CONSTRUCTION :Construção de Bonde
STR_TRAMWAY_CONSTRUCTION :Construção de Bonde
STR_180B_BUILD_ROAD_SECTION :{BLACK}Construir trecho rodoviário
STR_BUILD_AUTOROAD_TIP :{BLACK}Construir estradas usando o modo Autoestrada
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construir linha de bonde
STR_BUILD_TRAMWAY_SECTION :{BLACK}Construir linha de bonde
STR_BUILD_AUTOTRAM_TIP :{BLACK}Construir linha de bonde usando o modo Automático
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir garagem (para construção e manutenção de automóveis)
STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para construção e manutenção de bondes)
STR_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de bonde (para construção e manutenção de bondes)
STR_180D_BUILD_BUS_STATION :{BLACK}Construir estação de ônibus
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir carga de caminhões
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Constuir estação de bonde para passageiros
STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Constuir estação de bonde para carga
STR_BUILD_PASSENGER_TRAM_STATION :{BLACK}Constuir estação de bonde para passageiros
STR_BUILD_CARGO_TRAM_STATION :{BLACK}Constuir estação de bonde para carga
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Construir ponte rodoviária
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte de bonde
STR_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir ponte de bonde
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel rodoviário
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de bonde
STR_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de bonde
STR_TOGGLE_ONE_WAY_ROAD :{BLACK}Ativar/Desativar vias de mão única
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alternar construir/remover para contrução rodoviária
STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar construir/remover linhas de bonde e sinais
STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar construir/remover linhas de bonde e sinais
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Selecionar a orientação da garagem
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Selecionar a orientação do depósito de bonde
STR_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Selecionar a orientação do depósito de bonde
STR_1814_ROAD :Rodovia
STR_1815_ROAD_WITH_STREETLIGHTS :Rodovia iluminada
STR_1816_TREE_LINED_ROAD :Rodovia arborizada
@@ -1757,7 +1760,7 @@ STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT
STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsídio concedido a {COMPANY}!{}{} Transporte de {STRING} de {STATION} para {STATION} receberá 50% extra durante um ano!
STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsídio concedido a {COMPANY}!{}{} Transporte de {STRING} de {STATION} para {STATION} receberá em dobro durante um ano!
STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsídio concedido a {COMPANY}!{}{} Transporte de {STRING} de {STATION} para {STATION} receberá o triplo durante um ano!
STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsídio concedido a {COMPANY}!{}{}Transporte de {STRING} de {STATION} para {STATION} receberá o quadruplo durante um ano!
STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subsídio concedido a {COMPANY}!{}{} Transporte de {STRING} de {STATION} para {STATION} receberá o quadruplo durante um ano!
STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}a autoridade local de {TOWN} não permite que outro aeroporto seja construído nesta cidade
STR_2036_COTTAGES :Casas de campo
STR_2037_HOUSES :Casas
@@ -1796,7 +1799,7 @@ STR_2056 :{TINYFONT}{WHIT
STR_2057 :{ORANGE}{TOWN}{BLACK} ({COMMA})
STR_2058_UNDER_CONSTRUCTION :{STRING} (em construção)
STR_2059_IGLOO :Iglú
STR_205A_TEPEES :Tepees
STR_205A_TEPEES :Ocas
STR_205B_TEAPOT_HOUSE :Casa-bule
STR_205C_PIGGY_BANK :Mealheiro
@@ -1836,8 +1839,8 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Muito pe
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Muito perto de uma estação/local de carga já existente
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Muitas estações/áreas de carga nesta cidade
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Muitas estações/áreas de carga
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Muitas estações de ônibus
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Muitos locais de carga
STR_TOO_MANY_BUS_STOPS :{WHITE}Muitas estações de ônibus
STR_TOO_MANY_TRUCK_STOPS :{WHITE}Muitos locais de carga
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Muito perto de outra estação/local de carga
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Deve demolir a estação primeiro
@@ -1868,12 +1871,12 @@ STR_3040_NOW_ACCEPTS :{WHITE}{STATION
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} agora aceita {STRING} e {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Orientação do estação de ônibus
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Orientação da estação de caminhão
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientação da Estação de Bonde
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientação da Estação de Bonde
STR_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientação da Estação de Bonde
STR_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientação da Estação de Bonde
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Deve demolir a estação de ônibus primeiro
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Deve demolir a estação de caminhão
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Deve demolir a estação de bonde primeiro
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Deve demolir a estação de bonde primeiro
STR_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Deve demolir a estação de bonde primeiro
STR_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Deve demolir a estação de bonde primeiro
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Estações
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Nenhuma -
@@ -1885,8 +1888,8 @@ STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Selecion
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Selecionar o tamanho da estação ferroviária
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Selecionar orientação do estação de ônibus
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Selecionar orientação da área de carga
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Selecionar orientação da estação de bonde
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Selecionar orientação da estação de bonde
STR_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Selecionar orientação da estação de bonde
STR_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Selecionar orientação da estação de bonde
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centralizar visualização no local estação
STR_3054_SHOW_STATION_RATINGS :{BLACK}Exibir avaliações da estação
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Alterar o nome da estação
@@ -1908,7 +1911,7 @@ STR_3068_DOCK :{WHITE}Doca
STR_3069_BUOY :Bóia
STR_306A_BUOY_IN_THE_WAY :{WHITE}...bóia no caminho
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...estação muito extensa
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...Estações não-uniformes desativadas
STR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...Estações não-uniformes desativadas
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Segure CTRL para selecionar mais de um item
STR_UNDEFINED :(undefined string)
@@ -1949,7 +1952,7 @@ STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Salvar o
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Selecionar Novo Tipo de Jogo
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Selecionar cenário (verde), jogo pré-programado (azul), ou novo jogo aleatório
STR_4010_GENERATE_RANDOM_NEW_GAME :Gerar novo jogo aleatório
STR_4011_LOAD_HEIGHTMAP :{WHITE}Carregar Relevo
STR_LOAD_HEIGHTMAP :{WHITE}Carregar Relevo
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} no caminho
@@ -2008,8 +2011,8 @@ STR_4828_PRODUCES :{BLACK}Produz:
STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Produção no mês passado:
STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} ({COMMA}% transportado)
STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centralizar visualização na localização da indústria
STR_482D_NEW_UNDER_CONSTRUCTION :{BLACK}{BIGFONT}Nova {STRING} em construção em {TOWN}!
STR_482E_NEW_BEING_PLANTED_NEAR :{BLACK}{BIGFONT}Nova {STRING} sendo plantada em {TOWN}!
STR_482D_NEW_UNDER_CONSTRUCTION :{BLACK}{BIGFONT}Nov{G o a} {STRING} em construção em {TOWN}!
STR_482E_NEW_BEING_PLANTED_NEAR :{BLACK}{BIGFONT}Nov{G o a} {STRING} sendo plantada em {TOWN}!
STR_482F_COST :{BLACK}Custo: {YELLOW}{CURRENCY}
STR_4830_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossível construir este tipo de indústria aqui...
STR_4831_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}...a floresta só pode ser plantada acima do nível de neve
@@ -2153,10 +2156,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Quantid
STR_6813_ECONOMY :{LTBLUE}Economia: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Inverter trem: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Desastres: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Atitude das autoridades sobre reestruturamentos: {ORANGE}{STRING}
STR_CITY_APPROVAL :{LTBLUE}Atitude das autoridades sobre reestruturamentos: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Nenhum
STR_NONE :Nenhum
STR_NUM_VERY_LOW :Muito baixo
STR_6816_LOW :Baixo
STR_6817_NORMAL :Normal
@@ -2194,9 +2197,9 @@ STR_6835_AT_END_OF_LINE_ONLY :Só no fim da l
STR_6836_OFF :Off
STR_6837_ON :On
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Exibir melhores pontuações
STR_6839_PERMISSIVE :Permissivo
STR_683A_TOLERANT :Tolerante
STR_683B_HOSTILE :Hostil
STR_PERMISSIVE :Permissivo
STR_TOLERANT :Tolerante
STR_HOSTILE :Hostil
##id 0x7000
STR_7000 :
@@ -2245,7 +2248,7 @@ STR_702A_REPAY :{BLACK}Pagar {S
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossível pedir mais dinheiro emprestado...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...não há empréstimo para pagar
STR_702E_REQUIRED :{WHITE}...{CURRENCY} requerido
STR_702E_REQUIRED :{WHITE}...precisa de {CURRENCY}
STR_702F_CAN_T_REPAY_LOAN :{WHITE}Impossível pagar empréstimo...
STR_INSUFFICIENT_FUNDS :{WHITE}Impossível dar o dinheiro emprestado do banco
STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Selecionar novo rosto para o presidente
@@ -2253,7 +2256,7 @@ STR_7031_CHANGE_THE_COMPANY_VEHICLE :{BLACK}Alterar
STR_7032_CHANGE_THE_PRESIDENT_S :{BLACK}Alterar nome do presidente
STR_7033_CHANGE_THE_COMPANY_NAME :{BLACK}Alterar nome da empresa
STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Clique no novo esquema de cor
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Aumentar empréstimo
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Pedir empréstimo
STR_7036_REPAY_PART_OF_LOAN :{BLACK}Pagar parte do empréstimo
STR_7037_PRESIDENT :{WHITE}{PLAYERNAME}{}{GOLD}(Presidente)
STR_7038_INAUGURATED :{GOLD}Inaugurado: {WHITE}{NUM}
@@ -2322,7 +2325,7 @@ STR_COMPANY_PASSWORD_CAPTION :{WHITE}Senha da
STR_MAKE_DEFAULT_COMPANY_PASSWORD :{BLACK}Senha padrão da empresa
STR_MAKE_DEFAULT_COMPANY_PASSWORD_TIP :{BLACK}Usar esta senha de empresa como padrão para novas empresas
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recessão Mundial!{}{}Economistas temem crise!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fim do recessão!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fim da recessão!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena
STR_7076_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Comprar 25% de ações
@@ -2333,7 +2336,7 @@ STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossí
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Impossível vender 25% das ações desta empresa...
STR_707D_OWNED_BY :{WHITE}({COMMA}% propriedade de {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} foi comprada por {COMPANY}!
STR_7080_PROTECTED :{WHITE}Esta empresa ainda não troca ações...
STR_PROTECTED :{WHITE}Esta empresa ainda não troca ações...
STR_LIVERY_DEFAULT :Cores padrão
STR_LIVERY_STEAM :Máquina a Vapor
@@ -2346,6 +2349,8 @@ STR_LIVERY_EMU :EMU
STR_LIVERY_PASSENGER_WAGON_STEAM :Vagão de Passageiro (Vapor)
STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagão de Passageiro (Diesel)
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagão de Passageiro (Elétrico)
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagão de Passageiro (Monorail)
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagão de Passageiro (Maglev)
STR_LIVERY_FREIGHT_WAGON :Vagão de carga
STR_LIVERY_BUS :Ônibus
STR_LIVERY_TRUCK :Caminhão
@@ -2576,12 +2581,12 @@ STR_80CD_CS_INC_OIL_TANKER :Petroleiro CS-I
STR_80CE_MPS_PASSENGER_FERRY :Barco de Passageiros MPS
STR_80CF_FFP_PASSENGER_FERRY :Barco de Passageiros FFP
STR_80D0_BAKEWELL_300_HOVERCRAFT :Hovercraft Bakewell 300
STR_80D1_CHUGGER_CHUG_PASSENGER :Barco de Passageiros Chugger-Chug
STR_80D2_SHIVERSHAKE_PASSENGER_FERRY :Barco de Passageiros Shivershake
STR_80D3_YATE_CARGO_SHIP :Navio de Bens Yate
STR_80D4_BAKEWELL_CARGO_SHIP :Navio de Bens Bakewell
STR_80D5_MIGHTYMOVER_CARGO_SHIP :Navio de Bens Mightymover
STR_80D6_POWERNAUT_CARGO_SHIP :Navio de Bens Powernaut
STR_80D1_CHUGGER_CHUG_PASSENGER :Navio de Passageiros Chugger-Chug
STR_80D2_SHIVERSHAKE_PASSENGER_FERRY :Navio de Passageiros Shivershake
STR_80D3_YATE_CARGO_SHIP :Cargueiro Yate
STR_80D4_BAKEWELL_CARGO_SHIP :Cargueiro Bakewell
STR_80D5_MIGHTYMOVER_CARGO_SHIP :Cargueiro Mightymover
STR_80D6_POWERNAUT_CARGO_SHIP :Cargueiro Powernaut
STR_80D7_SAMPSON_U52 :Sampson U52
STR_80D8_COLEMAN_COUNT :Coleman Count
STR_80D9_FFP_DART :FFP Dart
@@ -2640,17 +2645,17 @@ STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trem no
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Ir para {STATION}
STR_8807_GO_TO_TRANSFER :Ir para {STATION} (Transferir e carregar)
STR_8808_GO_TO_UNLOAD :Ir para {STATION} (Descarregar)
STR_8809_GO_TO_TRANSFER_UNLOAD :Ir para {STATION} (Transferir e deixar vazio)
STR_880A_GO_TO_LOAD :Ir para {STATION} (Carregar)
STR_880B_GO_TO_TRANSFER_LOAD :Ir para {STATION} (Trasferir e aguardar carga total)
STR_880C_GO_NON_STOP_TO :Ir sem parar para {STATION}
STR_880D_GO_TO_NON_STOP_TRANSFER :Ir sem parar para {STATION} (Transferir e carregar)
STR_880E_GO_NON_STOP_TO_UNLOAD :Ir sem parar para {STATION} (Descarregar)
STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Ir sem parar para {STATION} (Transferir e deixar vazio)
STR_8810_GO_NON_STOP_TO_LOAD :Ir sem parar para {STATION} (Carregar)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Ir sem parar para {STATION} (Trasferir e aguardar carga total)
STR_GO_TO_TRANSFER :Ir para {STATION} (Transferir e carregar)
STR_8807_GO_TO_UNLOAD :Ir para {STATION} (Descarregar)
STR_GO_TO_TRANSFER_UNLOAD :Ir para {STATION} (Transferir e deixar vazio)
STR_8808_GO_TO_LOAD :Ir para {STATION} (Carregar)
STR_GO_TO_TRANSFER_LOAD :Ir para {STATION} (Trasferir e aguardar carga total)
STR_880A_GO_NON_STOP_TO :Ir sem parar para {STATION}
STR_GO_TO_NON_STOP_TRANSFER :Ir sem parar para {STATION} (Transferir e carregar)
STR_880B_GO_NON_STOP_TO_UNLOAD :Ir sem parar para {STATION} (Descarregar)
STR_GO_TO_NON_STOP_TRANSFER_UNLOAD :Ir sem parar para {STATION} (Transferir e deixar vazio)
STR_880C_GO_NON_STOP_TO_LOAD :Ir sem parar para {STATION} (Carregar)
STR_GO_TO_NON_STOP_TRANSFER_LOAD :Ir sem parar para {STATION} (Trasferir e aguardar carga total)
STR_GO_TO_TRAIN_DEPOT :Ir para o depósito de {TOWN}
STR_SERVICE_AT_TRAIN_DEPOT :Manutenção no depósito de {TOWN}
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ir sem parar para o depósito de {TOWN}
@@ -2663,8 +2668,8 @@ STR_TIMETABLE_STAY_FOR :e ficar durante
STR_TIMETABLE_DAYS :{COMMA} dia{P "" s}
STR_TIMETABLE_TICKS :{COMMA} tique{P "" s}
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Dirigindo-se ao depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Dirigindo-se ao depósito de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Indo para o depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Indo para o depósito de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Manutenção no depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL :{LTBLUE}Manutenção no depósito de {TOWN}, {VELOCITY}
@@ -2754,7 +2759,7 @@ STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Diminuir
STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Exibir detalhes da carga transportada
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Exibir detalhes dos veículos
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Exibir capacidades de cada veículo
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Exibir capacidade total do trem, dividir por tipo de carga
STR_SHOW_TOTAL_CARGO :{BLACK}Exibir capacidade total do trem, dividir por tipo de carga
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Lista de ordens - clique numa ordem para a selecionar
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Pula a ordem atual e executa a próxima. CTRL + clique pula a ordem selecionada
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Remover a ordem selecionada
@@ -2766,13 +2771,13 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Plano de
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mude a quantidade de tempo que a ordem deverá levar
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Reseta a quantidade de tempo para a ordem selecionada
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reseta o contador de atraso, fazendo o veículo estar na hora
STR_SERVICE_HINT :{BLACK}Saltar esta ordem a menos que seja preciso manutenção
STR_SERVICE_HINT :{BLACK}Pular esta ordem a menos que necessite de manutenção
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Custo: {CURRENCY} Peso: {WEIGHT_S}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Quebrado
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de circulação: {LTBLUE}{CURRENCY}/ano
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade: {LTBLUE}{VELOCITY} {BLACK}Manutenção.: {LTBLUE}{FORCE}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro anual: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Parado
STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossível fazer o trem passar o sinal de perigo...
@@ -2785,8 +2790,8 @@ STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Impossível inverter a direção do trem...
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Renomear tipo de veículo ferroviário
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Impossível renomear tipo de veículo ferroviário...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Força o veículo a deixar a carga na ordem selecionada
STR_886F_TRANSFER :{BLACK}Transferir
STR_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Força o veículo a deixar a carga na ordem selecionada
STR_TRANSFER :{BLACK}Transferir
STR_CLEAR_TIME :{BLACK}Resetar horário
STR_RESET_LATENESS :{BLACK}Resetar contador de atraso
@@ -2796,9 +2801,9 @@ STR_INCOMPATIBLE_RAIL_TYPES :Tipo de ferrovi
STR_TRAIN_NO_POWER :{RED}Sem força
STR_TRAIN_START_NO_CATENARY :Essa linha não tem energia, portanto o trem não parte
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Novo {STRING} agora disponível!
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nov{G o a} {STRING} agora disponível!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {ENGINE}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} agora disponível! - {ENGINE}
STR_CAN_T_SELL_DESTROYED_VEHICLE :{WHITE}Impossível vender veículo destruído...
STR_CAN_T_REFIT_DESTROYED_VEHICLE :{WHITE}Impossível adptar veículo destruído...
@@ -2827,7 +2832,7 @@ STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Impossí
STR_900C_DETAILS :{WHITE}{VEHICLE} (Detalhes)
STR_900D_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de circulação: {LTBLUE}{CURRENCY}/ano
STR_900E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro anual: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
@@ -2835,8 +2840,8 @@ STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...deve
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Impossível vender automóvel...
STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Impossível iniciar/parar automóvel...
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Automóvel {COMMA} está aguardando na garagem
STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Dirigindo-se à garagem de {TOWN}
STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Dirigindo-se à garagem de {TOWN}, {VELOCITY}
STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Indo para a garagem de {TOWN}
STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Indo para a garagem de {TOWN}, {VELOCITY}
STR_HEADING_FOR_ROAD_DEPOT_SERVICE :{LTBLUE}Manutenção na garagem de {TOWN}
STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}Manutenção na garagem de {TOWN}, {VELOCITY}
STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Impossível enviar o veículo para a garagem...
@@ -2864,8 +2869,8 @@ STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Impossí
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Renomear automóvel
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro ônibus chega a {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro caminhão chega a {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro bonde de passageiros chega a {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro bonde de carga chega a {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_PASSENGER_TRAM :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro bonde de passageiros chega a {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_CARGO_TRAM :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro bonde de carga chega a {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Acidente Rodoviário!{} Condutor morre numa explosão após a colisão com um trem
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Acidente Rodoviário!{} {COMMA} mortos numa explosão após a colisão com um trem
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Impossível fazer o veículo dar a volta...
@@ -2874,7 +2879,7 @@ STR_9034_RENAME :{BLACK}Renomear
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Renomear tipo do automóvel
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Renomear tipo do automóvel
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Impossível renomear tipo do automóvel...
STR_9038_GO_TO_ROADVEH_DEPOT :Ir para a garagem de {TOWN}
STR_GO_TO_ROADVEH_DEPOT :Ir para a garagem de {TOWN}
STR_SERVICE_AT_ROADVEH_DEPOT :Manutenção na garagem de {TOWN}
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Adaptar automóvel para carregar tipo de carga diferente
@@ -2903,15 +2908,15 @@ STR_980F :{WHITE}{VEHICLE
STR_9811_DETAILS :{WHITE}{VEHICLE} (Detalhes)
STR_9812_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de circulação: {LTBLUE}{CURRENCY}/ano
STR_9813_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro anual: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Impossível iniciar/parar embarcação...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Impossível enviar embarcação para o depósito...
STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Incapaz de encontrar depósito local
STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Dirigindo-se ao depósito naval de {TOWN}
STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Dirigindo-se ao depósito naval {TOWN}, {VELOCITY}
STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Indo para o depósito naval de {TOWN}
STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Indo para o depósito naval {TOWN}, {VELOCITY}
STR_HEADING_FOR_SHIP_DEPOT_SERVICE :{LTBLUE}Manutenção no depósito naval de {TOWN}
STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Manutenção no depósito naval de {TOWN}, {VELOCITY}
STR_981C_SHIP_IS_WAITING_IN_DEPOT :{WHITE}Embarcação {COMMA} está aguardando no depósito naval
@@ -2971,12 +2976,12 @@ STR_A00B_ORDERS :{WHITE}{VEHICLE
STR_A00C_DETAILS :{WHITE}{VEHICLE} (Detalhes)
STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de circulação: {LTBLUE}{CURRENCY}/ano
STR_A00E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro anual: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Impossível enviar aeronave para o hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Dirigindo-se ao hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Dirigindo-se ao hangar de {STATION}, {VELOCITY}
STR_HEADING_FOR_HANGAR :{ORANGE}Indo para o hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Indo para o hangar de {STATION}, {VELOCITY}
STR_HEADING_FOR_HANGAR_SERVICE :{LTBLUE}Manutenção no Hangar de {STATION}
STR_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Manutenção no Hangar de {STATION}, {VELOCITY}
STR_A014_AIRCRAFT_IS_WAITING_IN :{WHITE}Aeronave {COMMA} está aguardando no hangar
@@ -3034,7 +3039,7 @@ STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT
STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Explosão na refinaria de petróleo em {TOWN}!
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fábrica destruída em circunstâncias suspeitas em {TOWN}!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}OVNI pousa próximo a {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Afundamento de mina de carvão deixa um rasto de destruição em {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Afundamento da mina de carvão deixa um rasto de destruição em {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Inundações!{}Pelo menos {COMMA} perdidos ou mortos após terríveis inundações!
STR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi
@@ -3176,7 +3181,7 @@ STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP :{BLACK}Autosubs
STR_VEHICLE_LIST_TRAIN_DEPOT :{BLACK}{STRING} - {COMMA} Tre{P m ns}
STR_VEHICLE_LIST_ROADVEH_DEPOT :{BLACK}{STRING} - {COMMA} Automóve{P l is}
STR_VEHICLE_LIST_SHIP_DEPOT :{BLACK}{STRING} - {COMMA} Embarcaç{P ão ões}
STR_VEHICLE_LIST_AIRCRAFT_DEPOT :{BLACK}{STRING} - {COMMA} Aeronave
STR_VEHICLE_LIST_AIRCRAFT_DEPOT :{BLACK}{STRING} - {COMMA} Aeronave{P "" s}
STR_REPLACE_VEHICLES_WHITE :{WHITE}Substituir {STRING}
STR_REPLACE_VEHICLES_START :{BLACK}Iniciar Substituição
@@ -3248,6 +3253,12 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos as cargas
STR_PURCHASE_INFO_ALL_BUT :Todas menos {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tração : {GOLD}{FORCE}
########### For showing numbers in widgets
STR_NUM_1 :{BLACK}{SKIP}{NUM}
STR_NUM_2 :{BLACK}{SKIP}{SKIP}{NUM}
STR_NUM_3 :{BLACK}{SKIP}{SKIP}{SKIP}{NUM}
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Gerar
@@ -3275,7 +3286,6 @@ STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Aviso de
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Alterar muito o tamanho do mapa original não é recomendado. Continuar com a geração?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Aviso do layout da cidade
STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}O Layout "sem mais estradas" não é recomendado. Continuar com a geração?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Nome do mapa em relevo:
STR_HEIGHTMAP_SIZE :{BLACK}Tamanho: {ORANGE}{NUM} x {NUM}
STR_GENERATION_WORLD :{WHITE}Gerando mundo...
@@ -3301,7 +3311,6 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover a
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover a altitude da terra plana em uma unidade a mais
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Mudar a altitude da terra plana
STR_FLAT_WORLD_HEIGHT :{BLACK}Altitude da terra plana
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
STR_SMALLMAP_CENTER :{BLACK}Centralizar o minimapa na posição atual
STR_SMALLMAP_INDUSTRY :{TINYFONT}{STRING} ({NUM})
@@ -3348,6 +3357,7 @@ STR_TRANSPARENT_INDUSTRIES_DESC :{BLACK}Alternar
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Alternar transparência para construções como estações, depósitos, pontos de controle e eletrificação da ferrovia
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Alternar transparência para pontes
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Alternar transparência para estruturas como faróis e antenas, talvez no futuro para efeitos visuais
STR_TRANSPARENT_CATENARY_DESC :{BLACK}Alternar transparência para catenária. CTRL+click para travar.
STR_TRANSPARENT_LOADING_DESC :{BLACK}Altera transparência para os indicadores de carga
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
@@ -3362,20 +3372,20 @@ STR_GROUP_NAME_FORMAT :Agrupar {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
STR_GROUP_ALL_TRAINS :Todos os trens
STR_GROUP_ALL_ROADS :Todos os automóveis
STR_GROUP_ALL_SHIPS :Todos os navios
STR_GROUP_ALL_SHIPS :Todas as embarcações
STR_GROUP_ALL_AIRCRAFTS :Todas as aeronaves
STR_GROUP_DEFAULT_TRAINS :Trens sem grupo
STR_GROUP_DEFAULT_ROADS :Automóveis sem grupo
STR_GROUP_DEFAULT_SHIPS :Navios sem grupo
STR_GROUP_DEFAULT_SHIPS :Embarcações sem grupo
STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
STR_GROUP_ADD_SHARED_VEHICLE :Adicionar veículos compartilhados
STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos
STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Trem{P "" s}
STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Automóvel{P "" s}
STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Navio{P "" s}
STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Aeronave
STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Tre{P m ns}
STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Automóve{P l is}
STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Embarcaç{P ão ões}
STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Aeronave{P "" s}
STR_GROUP_RENAME_CAPTION :{BLACK}Renomear um grupo
STR_GROUP_REPLACE_CAPTION :{WHITE}Substituir Veículos de "{GROUP}"

View File

@@ -17,8 +17,7 @@ STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Трябва равна земя
STR_0008_WAITING :{BLACK}Чакане: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (на път от
STR_000B :{YELLOW}{STATION})
STR_EN_ROUTE_FROM :{YELLOW}({SHORTCARGO} на път от {STATION})
STR_000C_ACCEPTS :{BLACK}Приема: {WHITE}
STR_000D_ACCEPTS :{BLACK}Приема: {GOLD}
STR_000E :
@@ -276,9 +275,9 @@ STR_0130_RENAME :{BLACK}Преи
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Прекалено много имена
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Избраното име вече е в употреба
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :ОС Х
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :ОС Х
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
@@ -289,11 +288,11 @@ STR_013B_OWNED_BY :{WHITE}...со
STR_013C_CARGO :{BLACK}Товар
STR_013D_INFORMATION :{BLACK}Информация
STR_013E_CAPACITIES :{BLACK}Вместимости
STR_013E_TOTAL_CARGO :{BLACK}Общо товар
STR_TOTAL_CARGO :{BLACK}Общо товар
STR_013F_CAPACITY :{BLACK}Вместимост: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Капацитет: {LTBLUE}{CARGO} (x{NUM})
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Обща товарна вместимост на влака:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_TEXT :{BLACK}Обща товарна вместимост на влака:
STR_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Нова игра
STR_0141_LOAD_GAME :{BLACK}Отвори игра
@@ -301,12 +300,6 @@ STR_SINGLE_PLAYER :{BLACK}Сам
STR_MULTIPLAYER :{BLACK}Много играчи
STR_SCENARIO_EDITOR :{BLACK}Редактор сценарии
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_MAPSIZE :{BLACK}Размер на картата:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Настройки
@@ -734,11 +727,12 @@ STR_028D_PLACE_LIGHTHOUSE :{BLACK}Пост
STR_028E_PLACE_TRANSMITTER :{BLACK}Постави предавател
STR_028F_DEFINE_DESERT_AREA :{BLACK}Избери пустинен терен.{}Задръж CTRL за да го премахнеш.
STR_CREATE_LAKE :{BLACK}Определи водна площ.{}Построи канал, освем когато CTRL е натиснат на морско ниво, когато ще наводни околната среда в замяна
STR_CREATE_RIVER :{BLACK}Направи реки.
STR_0290_DELETE :{BLACK}Изтрий
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Премахни напълно града
STR_0292_SAVE_SCENARIO :Запис на сценарий
STR_0293_LOAD_SCENARIO :Зареждане на сценарий
STR_LOAD_HEIGHTMAP :Отвори височинна карта
STR_MENU_LOAD_HEIGHTMAP :Отвори височинна карта
STR_0294_QUIT_EDITOR :Изход от редактора
STR_0295 :
STR_0296_QUIT :Изход
@@ -778,9 +772,9 @@ STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Запи
STR_CHECKMARK :{CHECKMARK}
############ range for menu starts
STR_02C3_GAME_OPTIONS :Игрови опции
STR_02C5_DIFFICULTY_SETTINGS :Опции за трудност
STR_02C7_CONFIG_PATCHES :Конфигурирай патчове
STR_02C4_GAME_OPTIONS :Игрови опции
STR_02C6_DIFFICULTY_SETTINGS :Опции за трудност
STR_MENU_CONFIG_PATCHES :Конфигурирай патчове
STR_NEWGRF_SETTINGS :Newgrf настройки
STR_TRANSPARENCY_OPTIONS :Опций на прозрачност
STR_GAMEOPTMENU_0A :
@@ -880,8 +874,8 @@ STR_SAVING_GAME :{RED}* * ЗА
STR_SAVE_STILL_IN_PROGRESS :{WHITE}Записването продължава,{}моля изчакайте да сръши!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Избери програмата 'Ezy Street style music'
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
STR_6 :{BLACK}6
STR_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ORIGINAL_ENGLISH :английски (оригинални)
@@ -1057,7 +1051,6 @@ STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Под
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}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Преминаване през спирки на градски пътища: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Позвалявай допрени гари: {ORANGE}{STRING}
@@ -1212,9 +1205,19 @@ STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Промяна стойноста на настройка
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Някои от стойностите за интервал(и) на сервиз са несъвместими с избраните настройки! 5-90% и 30-800 са валидни стойности
STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}YAPF за кораби: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}YAPF за автомобили: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}YAPF за влакове: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS :{LTBLUE}Пътенамирач за влакове: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NTP :NTP {RED}(Не е препоръчано)
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(Препоръчано)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH :{LTBLUE}Пътенамирач за пътни превозни средства: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_OPF :Оригинал {RED}(Не е препоръчано)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_YAPF :YAPF {BLUE}(Препоръчано)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS :{LTBLUE}Пътенамирач за кораби: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_OPF :Оригинал {BLUE}(Препоръчано)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_YAPF :YAPF {RED}(Не е препоръчано)
STR_TEMPERATE_LANDSCAPE :умерен климат
STR_SUB_ARCTIC_LANDSCAPE :Арктичен климат
@@ -1656,42 +1659,42 @@ STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Желе
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Първо махнете пътя
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Пътни ремонти в процес
STR_1802_ROAD_CONSTRUCTION :{WHITE}Пътно строителство
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Конструкциа на трамвайна линиа
STR_WHITE_TRAMWAY_CONSTRUCTION :{WHITE}Конструкциа на трамвайна линиа
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Избор на асфалтов мост
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... еднопосочни пътища немогат да имат съединениа
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Пътя не може да се построи...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Трамвайна линиа неможе да бъде посроена тук...
STR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Трамвайна линиа неможе да бъде посроена тук...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Пътя не може да се махне...
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Трамвайната линиа неможе да бъде премахната от тук...
STR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Трамвайната линиа неможе да бъде премахната от тук...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Ориентация на гараж
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Посока на Трамвайно Депо
STR_TRAM_DEPOT_ORIENTATION :{WHITE}Посока на Трамвайно Депо
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Гаража не може да се построи...
STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Трамвайно депо неможе да бъде построено тук...
STR_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Трамвайно депо неможе да бъде построено тук...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Автогарата не може да се построи...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Товарната гара не може да се построи...
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Пътническа трамвайна гара неможе да бъде построена...
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Товарна трамвайна гара неможе да бъде построена...
STR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Пътническа трамвайна гара неможе да бъде построена...
STR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Товарна трамвайна гара неможе да бъде построена...
STR_180A_ROAD_CONSTRUCTION :Пътно строителство
STR_180A_TRAMWAY_CONSTRUCTION :Конструкциа на трамвайна линиа
STR_TRAMWAY_CONSTRUCTION :Конструкциа на трамвайна линиа
STR_180B_BUILD_ROAD_SECTION :{BLACK}Строене на път
STR_BUILD_AUTOROAD_TIP :{BLACK}Построи отсечка от шосе използвайки Афто-шосе методът
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Построи секциа от трамвайна линиа
STR_BUILD_TRAMWAY_SECTION :{BLACK}Построи секциа от трамвайна линиа
STR_BUILD_AUTOTRAM_TIP :{BLACK}Построи отсечка от железопътна линиа използвайки Афто-линиа методът
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Строене на гараж (за строене и сервиз на МПС-та)
STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Построи трамвайно депо (за стройтелни и сервизни коли)
STR_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Построи трамвайно депо (за стройтелни и сервизни коли)
STR_180D_BUILD_BUS_STATION :{BLACK}Строене на автогара
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Строене на товарна гара
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Построи пъгническа трамвайна гара
STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Построи товарна трамвайна гара
STR_BUILD_PASSENGER_TRAM_STATION :{BLACK}Построи пъгническа трамвайна гара
STR_BUILD_CARGO_TRAM_STATION :{BLACK}Построи товарна трамвайна гара
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Построй мост
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Построи трамвайен мост
STR_BUILD_TRAMWAY_BRIDGE :{BLACK}Построи трамвайен мост
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Построй тунел
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Построи трамвайен тунел
STR_BUILD_TRAMWAY_TUNNEL :{BLACK}Построи трамвайен тунел
STR_TOGGLE_ONE_WAY_ROAD :{BLACK}Активирай/Деактивирай еднопосочни пътища
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Премахване на асфалтов път
STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване строене/разрушаване на трамвайни консктрукции
STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване строене/разрушаване на трамвайни консктрукции
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Ориентация на гараж
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Избери посоката на трамвайното депо
STR_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Избери посоката на трамвайното депо
STR_1814_ROAD :път
STR_1815_ROAD_WITH_STREETLIGHTS :Асфалтов път с улични лампи
STR_1816_TREE_LINED_ROAD :Асфалтов път с дървета
@@ -1834,8 +1837,8 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Твър
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Граничи с повече от една гара/товарна платформа
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Твърде много гари/товарни платформи в града
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Твърде много гари/товарни платформи
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Твърде много автобусни спирки
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Твърде много гари за камиони
STR_TOO_MANY_BUS_STOPS :{WHITE}Твърде много автобусни спирки
STR_TOO_MANY_TRUCK_STOPS :{WHITE}Твърде много гари за камиони
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Твърде близо до друга гара/товарна платформа
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Първо разрушете ЖП гарата
@@ -1866,12 +1869,12 @@ STR_3040_NOW_ACCEPTS :{WHITE}{STATION
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} вече приема {STRING} и {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Ориентация на автогара
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Ориент. товарна гара
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Посока на пътнически трамвай
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Посока на товарен трамвай
STR_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Посока на пътнически трамвай
STR_CARGO_TRAM_STATION_ORIENT :{WHITE}Посока на товарен трамвай
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Първо разрушете автогарата
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Първо разрушете товарната гара
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Пътническата трамвайна гара трябва да бъде унищожена първо
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Товарната трамвайна гара трябва да бъде унищожена първо
STR_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Пътническата трамвайна гара трябва да бъде унищожена първо
STR_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Товарната трамвайна гара трябва да бъде унищожена първо
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Станци{P я и}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Николко -
@@ -1883,8 +1886,8 @@ STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Брой
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Дължина на ЖП гарата
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Ориентация на автогарата
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Ориентация на товарната гара
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Избери посоката на пътническата трамвайна гара
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Избери посоката на товарната трамвайна гара
STR_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Избери посоката на пътническата трамвайна гара
STR_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Избери посоката на товарната трамвайна гара
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Центриране на главния прозорец върху станцията
STR_3054_SHOW_STATION_RATINGS :{BLACK}Покажи нивото на обслужване
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Промяна името на станцията
@@ -1906,7 +1909,7 @@ STR_3068_DOCK :{WHITE}Док
STR_3069_BUOY :Шамандура
STR_306A_BUOY_IN_THE_WAY :{WHITE}...шамандура на пътя
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...станцията е прекалено разпръсната
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...неправилните станции са изключени
STR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...неправилните станции са изключени
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Задържете CTRL за да изберете повече от един обект
STR_UNDEFINED :(неопределен текст)
@@ -1947,7 +1950,7 @@ STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Запа
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Избери нов тип игра
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Избери на сценарии (зелено), предварително настроена игра (синьо), или произволна нова игра
STR_4010_GENERATE_RANDOM_NEW_GAME :Генерирай произволна нова игра
STR_4011_LOAD_HEIGHTMAP :{WHITE}Зареди височинна карта
STR_LOAD_HEIGHTMAP :{WHITE}Зареди височинна карта
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} пречи
@@ -2151,10 +2154,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Кол
STR_6813_ECONOMY :{LTBLUE}Икономика: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Обръщане на влаковете: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Бедствия: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Отношение на градските власти към промяна на земята: {ORANGE}{STRING}
STR_CITY_APPROVAL :{LTBLUE}Отношение на градските власти към промяна на земята: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Николко
STR_NONE :Николко
STR_NUM_VERY_LOW :Много ниско
STR_6816_LOW :малко
STR_6817_NORMAL :нормално
@@ -2192,9 +2195,9 @@ STR_6835_AT_END_OF_LINE_ONLY :само в к
STR_6836_OFF :изключено
STR_6837_ON :включено
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Покажи класирането
STR_6839_PERMISSIVE :разрешаващи
STR_683A_TOLERANT :толерантни
STR_683B_HOSTILE :враждебни
STR_PERMISSIVE :разрешаващи
STR_TOLERANT :толерантни
STR_HOSTILE :враждебни
##id 0x7000
STR_7000 :
@@ -2331,7 +2334,7 @@ STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Не м
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Не може да продадеш 25% от акциите на тази компания...
STR_707D_OWNED_BY :{WHITE}({COMMA}% е притежание на {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} бе закупена от {COMPANY}!
STR_7080_PROTECTED :{WHITE}Тази компания все още не е достатъчно стара да предлага акции...
STR_PROTECTED :{WHITE}Тази компания все още не е достатъчно стара да предлага акции...
STR_LIVERY_DEFAULT :Стандартен Ливъри
STR_LIVERY_STEAM :Парен локомотив
@@ -2344,6 +2347,8 @@ STR_LIVERY_EMU :EMU
STR_LIVERY_PASSENGER_WAGON_STEAM :Пътнически вагон (Парен)
STR_LIVERY_PASSENGER_WAGON_DIESEL :Пътнически вагон (Дизел)
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пътнически вагон (Електрически)
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пътнически вагон (Monorail - еднорелсова железопътна линия)
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пътнически вагон (Maglev - магнетично издигнат влак)
STR_LIVERY_FREIGHT_WAGON :Товарен вагон
STR_LIVERY_BUS :Автобус
STR_LIVERY_TRUCK :Камион
@@ -2638,17 +2643,17 @@ STR_8803_TRAIN_IN_THE_WAY :{WHITE}Влак
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Отиди на {STATION}
STR_8807_GO_TO_TRANSFER :Отиди на {STATION} (Обмени и вземи товар)
STR_8808_GO_TO_UNLOAD :Отиди на {STATION} (Разтовари)
STR_8809_GO_TO_TRANSFER_UNLOAD :Отиди на {STATION} (Обмени и не взимай нов товар)
STR_880A_GO_TO_LOAD :Отиди на {STATION} (Товари)
STR_880B_GO_TO_TRANSFER_LOAD :Отиди на {STATION} (Обмени и изчакай до пълен товар)
STR_880C_GO_NON_STOP_TO :Отиди без да спираш на {STATION}
STR_880D_GO_TO_NON_STOP_TRANSFER :Отиди без да спираш на {STATION} (Обмени и вземи товар)
STR_880E_GO_NON_STOP_TO_UNLOAD :отиди без да спираш на {STATION} (Разтовари)
STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Отиди без да спираш на {STATION} (Обмени и не товари)
STR_8810_GO_NON_STOP_TO_LOAD :Отиди без да спираш на {STATION} (Товари)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Отиди без да спираш на {STATION} (Обмени и изчакай до пълен товар)
STR_GO_TO_TRANSFER :Отиди на {STATION} (Обмени и вземи товар)
STR_8807_GO_TO_UNLOAD :Отиди на {STATION} (Разтовари)
STR_GO_TO_TRANSFER_UNLOAD :Отиди на {STATION} (Обмени и не взимай нов товар)
STR_8808_GO_TO_LOAD :Отиди на {STATION} (Товари)
STR_GO_TO_TRANSFER_LOAD :Отиди на {STATION} (Обмени и изчакай до пълен товар)
STR_880A_GO_NON_STOP_TO :Отиди без да спираш на {STATION}
STR_GO_TO_NON_STOP_TRANSFER :Отиди без да спираш на {STATION} (Обмени и вземи товар)
STR_880B_GO_NON_STOP_TO_UNLOAD :отиди без да спираш на {STATION} (Разтовари)
STR_GO_TO_NON_STOP_TRANSFER_UNLOAD :Отиди без да спираш на {STATION} (Обмени и не товари)
STR_880C_GO_NON_STOP_TO_LOAD :Отиди без да спираш на {STATION} (Товари)
STR_GO_TO_NON_STOP_TRANSFER_LOAD :Отиди без да спираш на {STATION} (Обмени и изчакай до пълен товар)
STR_GO_TO_TRAIN_DEPOT :Отиди до Влаковото депо на {TOWN}
STR_SERVICE_AT_TRAIN_DEPOT :Ремонт в {TOWN} влаково депо
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Отиди без да спираш на {TOWN} Влаково депо
@@ -2752,7 +2757,7 @@ STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Нама
STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Информация за превозвания товар
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Информация за влаковата композиция
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Капацитет на влаковата композиция
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Общ капацитет на влака, разбит по типове товар
STR_SHOW_TOTAL_CARGO :{BLACK}Общ капацитет на влака, разбит по типове товар
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Пътен лист - натиснете върху назначение за маркиране. CTRL + натискане - центрира върху станцията
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Прескачане на настоящата заповед и започване на цледващата. CTRL + клик прескача до избраната заповед
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Изтриване на избраното назначение
@@ -2783,8 +2788,8 @@ STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Не може да обърне посоката на влак...
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Преименуване на влак
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Не може да се преименува влак...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Изхвърляне на товара при достигане на избраното назначение
STR_886F_TRANSFER :{BLACK}Транфер
STR_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Изхвърляне на товара при достигане на избраното назначение
STR_TRANSFER :{BLACK}Транфер
STR_CLEAR_TIME :{BLACK}Изчисти времето
STR_RESET_LATENESS :{BLACK}Преправи закъснялата бройка
@@ -2862,8 +2867,8 @@ STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Не м
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_CITIZENS_CELEBRATE_FIRST_PASSENGER_TRAM :{BLACK}{BIGFONT}Гражданите празнуват . . .{}Първиат пътнически трамвай пристига на {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_CARGO_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}Не може да обърнеш МПС-то...
@@ -2872,7 +2877,7 @@ STR_9034_RENAME :{BLACK}Преи
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Преименувай МПС-то
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Преименувай МПС-то
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Не може да преименуваш МПС-то...
STR_9038_GO_TO_ROADVEH_DEPOT :Отиди в {TOWN} МПС-депото
STR_GO_TO_ROADVEH_DEPOT :Отиди в {TOWN} МПС-депото
STR_SERVICE_AT_ROADVEH_DEPOT :Ремонт в {TOWN} гараж
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Преоборудване автомобила за друг товар
@@ -3246,6 +3251,12 @@ STR_PURCHASE_INFO_ALL_TYPES :Всички в
STR_PURCHASE_INFO_ALL_BUT :Всички освен {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. теглеща сила: {GOLD}{FORCE}
########### For showing numbers in widgets
STR_NUM_1 :{BLACK}{SKIP}{NUM}
STR_NUM_2 :{BLACK}{SKIP}{SKIP}{NUM}
STR_NUM_3 :{BLACK}{SKIP}{SKIP}{SKIP}{NUM}
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Генериране
@@ -3273,7 +3284,6 @@ STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Маща
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Прекаленото оразмеряване не е препорачително. Продължаване с генерацията?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Грацки план предупреждение
STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Грацкиа план "няма повече пътища" не е препоръчан. Продължи със създаването?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Име на височинна карта:
STR_HEIGHTMAP_SIZE :{BLACK}Размер: {ORANGE}{NUM} x {NUM}
STR_GENERATION_WORLD :{WHITE}Създаване на свят...
@@ -3299,7 +3309,6 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Свал
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Повишаване височината на плоска земя
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Промяна височината на плоска земя
STR_FLAT_WORLD_HEIGHT :{BLACK}Височина на плоска земя:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
STR_SMALLMAP_CENTER :{BLACK}Центриране на малката карта на текущата позиция
STR_SMALLMAP_INDUSTRY :{TINYFONT}{STRING} ({NUM})

View File

@@ -15,8 +15,7 @@ STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Es necessita un terreny pla
STR_0008_WAITING :{BLACK}Esperant: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (en ruta des de
STR_000B :{YELLOW}{STATION})
STR_EN_ROUTE_FROM :{YELLOW}({SHORTCARGO} en ruta des de {STATION})
STR_000C_ACCEPTS :{BLACK}Accepta: {WHITE}
STR_000D_ACCEPTS :{BLACK}Accepta: {GOLD}
STR_000E :
@@ -274,9 +273,9 @@ STR_0130_RENAME :{BLACK}Reanomen
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Massa noms definits
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Aquest nom ja es fa servir
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
@@ -287,11 +286,11 @@ STR_013B_OWNED_BY :{WHITE}...propi
STR_013C_CARGO :{BLACK}Càrrega
STR_013D_INFORMATION :{BLACK}Informació
STR_013E_CAPACITIES :{BLACK}Capacitats
STR_013E_TOTAL_CARGO :{BLACK}Càrrega Total
STR_TOTAL_CARGO :{BLACK}Càrrega Total
STR_013F_CAPACITY :{BLACK}Capacitats: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Capacitat: {LTBLUE}{CARGO} (x{NUM})
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Càrrega total (capacitat) d'aquest tren:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_TEXT :{BLACK}Càrrega total (capacitat) d'aquest tren:
STR_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Joc Nou
STR_0141_LOAD_GAME :{BLACK}Carrega un Joc
@@ -299,12 +298,6 @@ STR_SINGLE_PLAYER :{BLACK}Jugador
STR_MULTIPLAYER :{BLACK}Multijugador
STR_SCENARIO_EDITOR :{BLACK}Editor d'Escenaris
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_MAPSIZE :{BLACK}Tamany del mapa:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Opcions del Joc
@@ -732,11 +725,12 @@ STR_028D_PLACE_LIGHTHOUSE :{BLACK}Situa un
STR_028E_PLACE_TRANSMITTER :{BLACK}Situa un repetidor
STR_028F_DEFINE_DESERT_AREA :{BLACK}Defineix àrea de desert.{}Prem i mantingues la tecla CTRL per treure'l
STR_CREATE_LAKE :{BLACK}Defineix l'area d'aigua.{}Fa un canal, excepte si CTRL està apretat al nivell del mar, llavors s'inundaran els voltants
STR_CREATE_RIVER :{BLACK}Posa rius.
STR_0290_DELETE :{BLACK}Esborra
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Esborra totalment aquesta població
STR_0292_SAVE_SCENARIO :Desa l'escenari
STR_0293_LOAD_SCENARIO :Carrega un escenari
STR_LOAD_HEIGHTMAP :Carrega Mapa d'alçades
STR_MENU_LOAD_HEIGHTMAP :Carrega Mapa d'alçades
STR_0294_QUIT_EDITOR :Surt de l'editor
STR_0295 :
STR_0296_QUIT :Surt
@@ -776,9 +770,9 @@ STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Desa els
STR_CHECKMARK :{CHECKMARK}
############ range for menu starts
STR_02C3_GAME_OPTIONS :Opcions del Joc
STR_02C5_DIFFICULTY_SETTINGS :Paràmetres de dificultat
STR_02C7_CONFIG_PATCHES :Configura pedaços
STR_02C4_GAME_OPTIONS :Opcions del Joc
STR_02C6_DIFFICULTY_SETTINGS :Paràmetres de dificultat
STR_MENU_CONFIG_PATCHES :Configura pedaços
STR_NEWGRF_SETTINGS :Extensions NewGRF
STR_TRANSPARENCY_OPTIONS :Opcions de transparència
STR_GAMEOPTMENU_0A :
@@ -878,8 +872,8 @@ STR_SAVING_GAME :{RED}* * DESA
STR_SAVE_STILL_IN_PROGRESS :{WHITE}S'està desant el joc,{}espera a que acabi l'operació!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Selecciona el programa 'Ezy Street style music'
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
STR_6 :{BLACK}6
STR_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ORIGINAL_ENGLISH :Anglès
@@ -1055,7 +1049,6 @@ STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Permet
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}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Permet situar parades en carreteres que són propietat del poble: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Permet construir estacions annexes: {ORANGE}{STRING}
@@ -1210,9 +1203,19 @@ STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Canvia el valor de l'adjustament
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Alguns o tots els intervals de manteniment següents són incompatibles amb el valor triat! 5-90% i 30-800 dies són els vàlids
STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}Utilitza YAPF pels vaixells: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}Utilitza YAPF pels automòvils: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}Utilitza YAPF pels trens: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS :{LTBLUE}Cerca de rutes per trens: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NTP :NTP {RED}(No recomanat)
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(Recomanat)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH :{LTBLUE}Cerca de rutes per vehicles: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_OPF :Original {RED}(No recomanat)
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_ROADVEH_YAPF :YAPF {BLUE}(Recomanat)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS :{LTBLUE}Cerca de rutes per vaixells: {ORANGE}{STRING}
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_OPF :Original {BLUE}(Recomanat)
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_NPF :NPF
STR_CONFIG_PATCHES_PATHFINDER_FOR_SHIPS_YAPF :YAPF {RED}(Not recomanat)
STR_TEMPERATE_LANDSCAPE :paisatge temperat
STR_SUB_ARCTIC_LANDSCAPE :paisatge subàrtic
@@ -1654,42 +1657,42 @@ STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Primer h
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}S'ha de treure la carretera primer
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obres en progrés
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construcció de Carreteres
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construcció de Tramvies
STR_WHITE_TRAMWAY_CONSTRUCTION :{WHITE}Construcció de Tramvies
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Selecciona un Pont per Carretera
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... les carreteres de sentit únic no poden tenir encreuaments
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Aquí no es pot construir una carretera...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}No puc construir la via de tramvia aquí...
STR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}No puc construir la via de tramvia aquí...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Aquí no es pot treure una carretera...
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí...
STR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Cotxeres
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Orientació de les cotxeres de tramvies
STR_TRAM_DEPOT_ORIENTATION :{WHITE}Orientació de les cotxeres de tramvies
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Aquí no es pot construir una cotxera...
STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Aquí no puc construir les cotxeres de tramvies...
STR_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Aquí no puc construir les cotxeres de tramvies...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}No es pot construir una parada d'autobús...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}No es pot construir estació de mercaderies...
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de passatgers
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de càrrega
STR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de passatgers
STR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de càrrega
STR_180A_ROAD_CONSTRUCTION :Construcció de Carreteres
STR_180A_TRAMWAY_CONSTRUCTION :Construcció de Tramvies
STR_TRAMWAY_CONSTRUCTION :Construcció de Tramvies
STR_180B_BUILD_ROAD_SECTION :{BLACK}Construeix una secció de carretera
STR_BUILD_AUTOROAD_TIP :{BLACK}Construeix secció de carretera utilitzant el mode Autocarretera
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construeix una secció de via de tramvia
STR_BUILD_TRAMWAY_SECTION :{BLACK}Construeix una secció de via de tramvia
STR_BUILD_AUTOTRAM_TIP :{BLACK}Construeix secció de tramvia utilitzant el mode Autotramvia
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construeix una cotxera (per construir i mantenir vehicles)
STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construeix cotxeres de tramvies (per construir i revisar tramvies)
STR_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construeix cotxeres de tramvies (per construir i revisar tramvies)
STR_180D_BUILD_BUS_STATION :{BLACK}Constueix una parada d'autobús
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Construeix un moll de càrrega
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construeix una estació de tramvies de passatgers
STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Construeix una estació de tramvies de mercaderies
STR_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construeix una estació de tramvies de passatgers
STR_BUILD_CARGO_TRAM_STATION :{BLACK}Construeix una estació de tramvies de mercaderies
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Construeix un pont per carretera
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Construeix pont per tramvies
STR_BUILD_TRAMWAY_BRIDGE :{BLACK}Construeix pont per tramvies
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Construeix un túnel per carretera
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Construeix túnel per tramvies
STR_BUILD_TRAMWAY_TUNNEL :{BLACK}Construeix túnel per tramvies
STR_TOGGLE_ONE_WAY_ROAD :{BLACK}Activa/Desactiva les carreteres d'un sentit
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Intercanvia funció construeix/treu per la construcció de carreteres
STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Canvia construeix/treu de la construcció de vies de tramvia
STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Canvia construeix/treu de la construcció de vies de tramvia
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Selecciona la orientació de les Cotxeres
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Selecciona l'orientació de les cotxeres de tramvies
STR_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Selecciona l'orientació de les cotxeres de tramvies
STR_1814_ROAD :Carretera
STR_1815_ROAD_WITH_STREETLIGHTS :Carretera amb fanals
STR_1816_TREE_LINED_ROAD :Carretera de tres carrils
@@ -1832,8 +1835,8 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Massa a
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Fusiona més d'una estació/àrea de càrrega existent
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Hi ha massa estacions/àrees de càrrega en aquesta població
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Massa estacions/àrees de càrrega
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Massa parades d'autobús
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Masses estacions de càrrega
STR_TOO_MANY_BUS_STOPS :{WHITE}Massa parades d'autobús
STR_TOO_MANY_TRUCK_STOPS :{WHITE}Masses estacions de càrrega
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Massa a prop d'una altra estació/àrea de càrrega
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Primer has d'enderrocar l'estació de tren
@@ -1864,12 +1867,12 @@ STR_3040_NOW_ACCEPTS :{WHITE}{STATION
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} ara accepta {STRING} i {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Parada d'autobús
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Estació de Mercaderies
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientació estació passatgers
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientació estació mercaderies
STR_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientació estació passatgers
STR_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientació estació mercaderies
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Primer has d'enderrocar la parada d'autobús
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Primer has d'enderrocar l'estació de mercaderies
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Primer has de demolir l'estació de tramvies de passatgers
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Primer has de demolir l'estació de tramvies de mercaderies
STR_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Primer has de demolir l'estació de tramvies de passatgers
STR_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Primer has de demolir l'estació de tramvies de mercaderies
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Estacions/Parades
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Cap -
@@ -1881,8 +1884,8 @@ STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Seleccio
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Selecciona la mida de les andanes de l'estació de tren
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Selecciona l'orientació de la parada d'autobús
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Selecciona l'orientació del moll de càrrega de camions
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Selecciona l'orientació de l'estació de tramvies de passatgers
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Selecciona l'orientació de l'estació de tramvies de mercaderies
STR_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Selecciona l'orientació de l'estació de tramvies de passatgers
STR_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Selecciona l'orientació de l'estació de tramvies de mercaderies
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centra la pantalla principal al lloc de l'estació
STR_3054_SHOW_STATION_RATINGS :{BLACK}Mostra els ratis de l'estació
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Canvia el nom de l'estació
@@ -1904,7 +1907,7 @@ STR_3068_DOCK :{WHITE}Moll
STR_3069_BUOY :Boia
STR_306A_BUOY_IN_THE_WAY :{WHITE}...boia en el camí
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...estació massa extesa
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...estacions no uniformes desactivades
STR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...estacions no uniformes desactivades
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Mantin apretat CTRL per a seleccionar més de un item
STR_UNDEFINED :(cadena sense definir)
@@ -1945,7 +1948,7 @@ STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Desa el
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Selecciona el Nou Tipus de Joc
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Selecciona l'escenari (verd), joc pre-programat (blau), o el nou joc aleatori
STR_4010_GENERATE_RANDOM_NEW_GAME :Genera un nou joc aleatori
STR_4011_LOAD_HEIGHTMAP :{WHITE}Carrega un Mapa d'alçades
STR_LOAD_HEIGHTMAP :{WHITE}Carrega un Mapa d'alçades
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} en el camí
@@ -2149,10 +2152,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Quantit
STR_6813_ECONOMY :{LTBLUE}Economia: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Canvi de sentit dels trens: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Desastres: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Actitud de l'Ajuntament sobre reestructuracions d'àrees: {ORANGE}{STRING}
STR_CITY_APPROVAL :{LTBLUE}Actitud de l'Ajuntament sobre reestructuracions d'àrees: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Cap
STR_NONE :Cap
STR_NUM_VERY_LOW :Molt baix
STR_6816_LOW :Baix
STR_6817_NORMAL :Normal
@@ -2190,9 +2193,9 @@ STR_6835_AT_END_OF_LINE_ONLY :Només al final
STR_6836_OFF :Desactivat
STR_6837_ON :Activat
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Veure la taula de les majors puntuacions
STR_6839_PERMISSIVE :Permisiu
STR_683A_TOLERANT :Tolerant
STR_683B_HOSTILE :Hostil
STR_PERMISSIVE :Permisiu
STR_TOLERANT :Tolerant
STR_HOSTILE :Hostil
##id 0x7000
STR_7000 :
@@ -2329,7 +2332,7 @@ STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}No pots
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}No pots vendre el 25% de participació en aquesta empresa...
STR_707D_OWNED_BY :{WHITE}({COMMA}% propietat de {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} ha estat absorbida per {COMPANY}!
STR_7080_PROTECTED :{WHITE}Aquesta empresa ja no negocia participacions...
STR_PROTECTED :{WHITE}Aquesta empresa ja no negocia participacions...
STR_LIVERY_DEFAULT :Decoració estandard
STR_LIVERY_STEAM :Motor de vapor
@@ -2342,6 +2345,8 @@ STR_LIVERY_EMU :EMU
STR_LIVERY_PASSENGER_WAGON_STEAM :Vagó de passatgers (Vapor)
STR_LIVERY_PASSENGER_WAGON_DIESEL :Vagó de passatgers (Diesel)
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Vagó de passatgers (Elèctric)
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Vagó de Passatgers (Monorail)
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Vagó de Passatgers (Maglev)
STR_LIVERY_FREIGHT_WAGON :Vagó de càrrega
STR_LIVERY_BUS :Autobús
STR_LIVERY_TRUCK :Camió
@@ -2636,17 +2641,17 @@ STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tren en
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Ves a {STATION}
STR_8807_GO_TO_TRANSFER :Ves a {STATION} (Transfereix i agafa càrrega)
STR_8808_GO_TO_UNLOAD :Ves a {STATION} (Descarrega)
STR_8809_GO_TO_TRANSFER_UNLOAD :Ves a {STATION} (Transfereix i deixa buit)
STR_880A_GO_TO_LOAD :Ves a {STATION} (Carrega)
STR_880B_GO_TO_TRANSFER_LOAD :Ves a {STATION} (Transfereix i espera càrrega completa)
STR_880C_GO_NON_STOP_TO :Ves sense parar a {STATION}
STR_880D_GO_TO_NON_STOP_TRANSFER :Ves sense parar a {STATION} (Transfereix i agafa càrrega)
STR_880E_GO_NON_STOP_TO_UNLOAD :Ves sense parar a {STATION} (Descarrega)
STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Ves sense parar a {STATION} (Transfereix i deixa buit)
STR_8810_GO_NON_STOP_TO_LOAD :Ves sense parar a {STATION} (Carrega)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Ves sense parar a {STATION} (Transfereix i espera càrrega completa)
STR_GO_TO_TRANSFER :Ves a {STATION} (Transfereix i agafa càrrega)
STR_8807_GO_TO_UNLOAD :Ves a {STATION} (Descarrega)
STR_GO_TO_TRANSFER_UNLOAD :Ves a {STATION} (Transfereix i deixa buit)
STR_8808_GO_TO_LOAD :Ves a {STATION} (Carrega)
STR_GO_TO_TRANSFER_LOAD :Ves a {STATION} (Transfereix i espera càrrega completa)
STR_880A_GO_NON_STOP_TO :Ves sense parar a {STATION}
STR_GO_TO_NON_STOP_TRANSFER :Ves sense parar a {STATION} (Transfereix i agafa càrrega)
STR_880B_GO_NON_STOP_TO_UNLOAD :Ves sense parar a {STATION} (Descarrega)
STR_GO_TO_NON_STOP_TRANSFER_UNLOAD :Ves sense parar a {STATION} (Transfereix i deixa buit)
STR_880C_GO_NON_STOP_TO_LOAD :Ves sense parar a {STATION} (Carrega)
STR_GO_TO_NON_STOP_TRANSFER_LOAD :Ves sense parar a {STATION} (Transfereix i espera càrrega completa)
STR_GO_TO_TRAIN_DEPOT :Ves al Diposit {TOWN} de Tren
STR_SERVICE_AT_TRAIN_DEPOT :Manteniment a cotxeres de {TOWN}.
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ves sense parar a les cotxeres de {TOWN}.
@@ -2750,7 +2755,7 @@ STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Disminue
STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Mostra els detalls de càrrega transportada
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Mostra els detalls d'elements del tren
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Mostra les capacitats de cada element
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Mostra la capacitat total del tren, separat per tipus de càrrega
STR_SHOW_TOTAL_CARGO :{BLACK}Mostra la capacitat total del tren, separat per tipus de càrrega
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Llista d'ordres - clica en una per seleccionar-la
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Salta l'ordre actual, i comença la següent. CTRL + clic salta l'ordre seleccionada
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Esborra l'ordre seleccionada
@@ -2781,8 +2786,8 @@ STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}No es pot invertir la direcció del tren...
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Reanomena el tipus d'element del tren
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}No es pot reanomenar el tipus d'element del tren...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fer que l'ordre marcada forci al vehicle a volcar la càrrega
STR_886F_TRANSFER :{BLACK}Transf.
STR_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fer que l'ordre marcada forci al vehicle a volcar la càrrega
STR_TRANSFER :{BLACK}Transf.
STR_CLEAR_TIME :{BLACK}Esborra Temps
STR_RESET_LATENESS :{BLACK}Reset. control de retràs
@@ -2860,8 +2865,8 @@ STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}No es po
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Anomena automòbil
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Celebració popular . . .{}Primer autobús arriba a {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Celebració popular . . .{}Primer camió arriba a {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Els ciutadans celebren . . .{}El primer tramvia de passatgers arriba a {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Els ciutadans celebren . . .{}El primer tramvia de mercaderies arriba a {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_PASSENGER_TRAM :{BLACK}{BIGFONT}Els ciutadans celebren . . .{}El primer tramvia de passatgers arriba a {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_CARGO_TRAM :{BLACK}{BIGFONT}Els ciutadans celebren . . .{}El primer tramvia de mercaderies arriba a {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Accident de Vehicle!{}El conductor mor en una bola de foc després de la colisió amb un tren
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Accident de Vehicle!{}{COMMA} moren en una bola de foc després d'una colisió amb un tren
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}No es pot fer que el vehicle torni...
@@ -2870,7 +2875,7 @@ STR_9034_RENAME :{BLACK}Reanomen
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Reanomena tipus d'automòbil
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Reanomena tipus d'automòbil
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}No es pot reanomenar tipus d'automòbil
STR_9038_GO_TO_ROADVEH_DEPOT :Ves a la cotxera de {TOWN}.
STR_GO_TO_ROADVEH_DEPOT :Ves a la cotxera de {TOWN}.
STR_SERVICE_AT_ROADVEH_DEPOT :Manteniment a la cotxera de {TOWN}.
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Remodela vehicle de carretera per dur un tipus diferent de càrrega
@@ -3244,6 +3249,12 @@ STR_PURCHASE_INFO_ALL_TYPES :Totes les càrr
STR_PURCHASE_INFO_ALL_BUT :Tots menys {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Esforç de Tracció: {GOLD}{FORCE}
########### For showing numbers in widgets
STR_NUM_1 :{BLACK}{SKIP}{NUM}
STR_NUM_2 :{BLACK}{SKIP}{SKIP}{NUM}
STR_NUM_3 :{BLACK}{SKIP}{SKIP}{SKIP}{NUM}
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Genera
@@ -3271,7 +3282,6 @@ STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Alerta d
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}No es recomana redimensionar massa el mapa d'origen. Vols continuar amb la generació?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Alerta de format de poble
STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}El format de poble "no més carreteres" no està recomanat. Continuar amb la generació?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Nom del mapa d'alçades:
STR_HEIGHTMAP_SIZE :{BLACK}Mida: {ORANGE}{NUM} x {NUM}
STR_GENERATION_WORLD :{WHITE}Generant món...
@@ -3297,7 +3307,6 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mou l'al
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Mou l'alçada del terreny pla un pas amunt
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Canvia alçada del terreny pla
STR_FLAT_WORLD_HEIGHT :{BLACK}Alçada del terreny pla:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
STR_SMALLMAP_CENTER :{BLACK}Centrar el mapa petit a la posició actual
STR_SMALLMAP_INDUSTRY :{TINYFONT}{STRING} ({NUM})
@@ -3344,6 +3353,7 @@ STR_TRANSPARENT_INDUSTRIES_DESC :{BLACK}Activa/D
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Activa/Desactiva transparència dels edificis com ara estacions, cotxeres, punts de trobada i catenàries
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Activa/Desactiva transparència dels ponts
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Activa/Desactiva transparència de les estructures com ara fars i antenes
STR_TRANSPARENT_CATENARY_DESC :{BLACK}Commuta la transparència de la catenària. CTRL+clic per bloquejar.
STR_TRANSPARENT_LOADING_DESC :{BLACK}Activa/Desactiva la transparència pels indicadors de carregament
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}

View File

@@ -17,14 +17,12 @@ STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebna ravna površina
STR_0008_WAITING :{BLACK}Čekanje: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (na putu od
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Prihvaća: {WHITE}
STR_000D_ACCEPTS :{BLACK}Prihvaća: {GOLD}
STR_000E :
STR_000F_PASSENGERS :putnici
STR_0010_COAL :ugljen
STR_0011_MAIL :pošta
STR_000F_PASSENGERS :Putnici
STR_0010_COAL :Ugljen
STR_0011_MAIL :Pošta
STR_0012_OIL :nafta
STR_0013_LIVESTOCK :domaće životinje
STR_0014_GOODS :robe
@@ -276,9 +274,9 @@ STR_0130_RENAME :{BLACK}Preimenu
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Previše definiranih imena
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Odabrano ime već se koristi
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_WINDOWS :Windows
STR_OSNAME_UNIX :Unix
STR_OSNAME_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
@@ -289,11 +287,11 @@ STR_013B_OWNED_BY :{WHITE}...u vla
STR_013C_CARGO :{BLACK}Teret
STR_013D_INFORMATION :{BLACK}Informacije
STR_013E_CAPACITIES :{BLACK}Nosivosti
STR_013E_TOTAL_CARGO :{BLACK}Ukupni teret
STR_TOTAL_CARGO :{BLACK}Ukupni teret
STR_013F_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Nosivost: {LTBLUE}{CARGO} (x{NUM})
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Ukupna nosivost tereta ovog vlaka:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_TEXT :{BLACK}Ukupna nosivost tereta ovog vlaka:
STR_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Nova igra
STR_0141_LOAD_GAME :{BLACK}Učitaj igru
@@ -301,12 +299,6 @@ STR_SINGLE_PLAYER :{BLACK}Jedan ig
STR_MULTIPLAYER :{BLACK}Više igrača
STR_SCENARIO_EDITOR :{BLACK}Editor scenarija
STR_64 :64
STR_128 :128
STR_256 :256
STR_512 :512
STR_1024 :1024
STR_2048 :2048
STR_MAPSIZE :{BLACK}Veličina karte:
STR_BY :{BLACK}*
STR_0148_GAME_OPTIONS :{BLACK}Postavke igre
@@ -738,7 +730,7 @@ STR_0290_DELETE :{BLACK}Obriši
STR_0291_DELETE_THIS_TOWN_COMPLETELY :{BLACK}Obriši ovaj grad u cjelosti
STR_0292_SAVE_SCENARIO :Spremi scenarij
STR_0293_LOAD_SCENARIO :Učitaj secenarij
STR_LOAD_HEIGHTMAP :Učitaj visinsku kartu
STR_MENU_LOAD_HEIGHTMAP :Učitaj visinsku kartu
STR_0294_QUIT_EDITOR :Završi s uređivanjem
STR_0295 :
STR_0296_QUIT :Završi
@@ -778,9 +770,9 @@ STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Spremi p
STR_CHECKMARK :{CHECKMARK}
############ range for menu starts
STR_02C3_GAME_OPTIONS :Postavke igre
STR_02C5_DIFFICULTY_SETTINGS :Postavke težine
STR_02C7_CONFIG_PATCHES :Konfiguriraj zakrpe
STR_02C4_GAME_OPTIONS :Postavke igre
STR_02C6_DIFFICULTY_SETTINGS :Postavke težine
STR_MENU_CONFIG_PATCHES :Konfiguriraj zakrpe
STR_NEWGRF_SETTINGS :Postavke NewGRF-a
STR_TRANSPARENCY_OPTIONS :Postavke prozirnosti
STR_GAMEOPTMENU_0A :
@@ -880,8 +872,8 @@ STR_SAVING_GAME :{RED}* * SPRE
STR_SAVE_STILL_IN_PROGRESS :{WHITE}Spremanje još u tijeku,{}molimo pričekajte dok se ne završi!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Odaberi glazbeni program 'Ezy Street style'
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
STR_6 :{BLACK}6
STR_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ORIGINAL_ENGLISH :Engleski (original)
@@ -1057,7 +1049,6 @@ STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Dopusti
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}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Dopusti prolazne stanice na cestama u vlasti grada: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Dopusti izgradnju pridruženih stanica: {ORANGE}{STRING}
@@ -1212,9 +1203,6 @@ STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Promijeni vrijednost postavke
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Neki ili svi od zadanih servisnih intervala ispod nisu kompatibilni s odabranim postavkama! Valjane vrijednosti su 5-90% ili 30-800 dana.
STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}Koristi YAPF za brodove: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}Koristi YAPF za cestovna vozila: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}Koristi YAPF za vlakove: {ORANGE}{STRING}
STR_TEMPERATE_LANDSCAPE :Blagi krajolik
STR_SUB_ARCTIC_LANDSCAPE :Pod-arktički krajolik
@@ -1656,42 +1644,42 @@ STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Najprije
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Najprije moraš ukloniti cestu
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Cestovni radovi u tijeku
STR_1802_ROAD_CONSTRUCTION :{WHITE}Izgradnja ceste
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Izgradnja tramvaja
STR_WHITE_TRAMWAY_CONSTRUCTION :{WHITE}Izgradnja tramvaja
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Odaberi cestovni most
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}...jednosmjerne ceste ne mogu imati raskrižja
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Ovdje nije moguće izgraditi cestu...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Ovdje nije moguće izgraditi tramvaj...
STR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Ovdje nije moguće izgraditi tramvaj...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nije moguće ukloniti cestu odavdje...
STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nije moguće ukloniti tramvaj odavdje...
STR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nije moguće ukloniti tramvaj odavdje...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Smjer cestovnog spremišta
STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Smjer tramvajskog spremišta
STR_TRAM_DEPOT_ORIENTATION :{WHITE}Smjer tramvajskog spremišta
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Ovdje nije moguće izgraditi spremište cestovnih vozila...
STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Ovdje nije moguće izgraditi tramvajsko spremište...
STR_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Ovdje nije moguće izgraditi tramvajsko spremište...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Nije moguće izgraditi autobusnu stanicu...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nije moguće izgraditi kamionski terminal...
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nije moguće izgraditi tramvajsku stanicu za putnike...
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nije moguće izgraditi teretnu tramvajsku stanicu...
STR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nije moguće izgraditi tramvajsku stanicu za putnike...
STR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nije moguće izgraditi teretnu tramvajsku stanicu...
STR_180A_ROAD_CONSTRUCTION :Izgradnja ceste
STR_180A_TRAMWAY_CONSTRUCTION :Izgradnja tramvaja
STR_TRAMWAY_CONSTRUCTION :Izgradnja tramvaja
STR_180B_BUILD_ROAD_SECTION :{BLACK}Izgradi dio ceste
STR_BUILD_AUTOROAD_TIP :{BLACK}Izgradi cestu koristeći Autoroad način gradnje
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Izgradi tramvajski dio
STR_BUILD_TRAMWAY_SECTION :{BLACK}Izgradi tramvajski dio
STR_BUILD_AUTOTRAM_TIP :{BLACK}Izgradi tramvajsku prugu koristeći Autotram način gradnje
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Izgradi spremište cestovnih vozila (za izgradnju i servisiranje vozila)
STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Izgradi spremište tramvajskih vozila (za izgradnju i servisiranje vozila)
STR_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Izgradi spremište tramvajskih vozila (za izgradnju i servisiranje vozila)
STR_180D_BUILD_BUS_STATION :{BLACK}Izgradi autobusnu stanicu
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Izgradi pretovarni kamionski terminal
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Izgradi putničku tramvajsku stanicu
STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Izgradi teretnu tramvajsku stanicu
STR_BUILD_PASSENGER_TRAM_STATION :{BLACK}Izgradi putničku tramvajsku stanicu
STR_BUILD_CARGO_TRAM_STATION :{BLACK}Izgradi teretnu tramvajsku stanicu
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Izgradi cestovni most
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Izgradi tramvajski most
STR_BUILD_TRAMWAY_BRIDGE :{BLACK}Izgradi tramvajski most
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Izgradi cestovni tunel
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Izgradi tramvajski tunel
STR_BUILD_TRAMWAY_TUNNEL :{BLACK}Izgradi tramvajski tunel
STR_TOGGLE_ONE_WAY_ROAD :{BLACK}Aktiviraj/deaktiviraj jednosmjerne ceste
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Aktiviraj izgradnju/uklanjanje ceste
STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktiviraj izgradnju/brisanje za izgradnju tramvaja
STR_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktiviraj izgradnju/brisanje za izgradnju tramvaja
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Odaberi smjer spremišta cestovnih vozila
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Odaberi smjer tramvajskog spremišta
STR_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Odaberi smjer tramvajskog spremišta
STR_1814_ROAD :Cesta
STR_1815_ROAD_WITH_STREETLIGHTS :Cesta sa semaforima
STR_1816_TREE_LINED_ROAD :Cesta s tri trake
@@ -1834,8 +1822,8 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Preblizu
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Spaja više od jedne postojeće stanice/terminala
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}U ovom gradu ima previše stanica/terminala
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Previše stanica/terminala
STR_3008A_TOO_MANY_BUS_STOPS :{WHITE}Previše autobusnih stanica
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Previše kamionskih stanica
STR_TOO_MANY_BUS_STOPS :{WHITE}Previše autobusnih stanica
STR_TOO_MANY_TRUCK_STOPS :{WHITE}Previše kamionskih stanica
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Preblizu drugoj stanici/terminalu
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Najprije moraš srušiti željezničku stanicu
@@ -1866,12 +1854,12 @@ STR_3040_NOW_ACCEPTS :{WHITE}{STATION
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} od sada prihvaća {STRING} i {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Smjer autobusne stanice
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Smjer kamionskog terminala
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orijentacija putničkog tramvaja
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orijentacija teretnog tramvaja
STR_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orijentacija putničkog tramvaja
STR_CARGO_TRAM_STATION_ORIENT :{WHITE}Orijentacija teretnog tramvaja
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Najprije moraš srušiti autobusnu stanicu
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Najprije moraš srušiti kamionski terminal
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Najprije moraš srušiti putničku tramvajsku stanicu
STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Najprije moraš srušiti teretnu tramvajsku stanicu
STR_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Najprije moraš srušiti putničku tramvajsku stanicu
STR_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Najprije moraš srušiti teretnu tramvajsku stanicu
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} stanic{P a e a}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ništa -
@@ -1883,8 +1871,8 @@ STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Odaberi
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Odaberi dužinu željezničke stanice
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Odaberi smjer autobusne stanice
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Odaberi smjer kamionskog terminala
STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer putničke tramvajske stanice
STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer teretne tramvajske stanice
STR_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer putničke tramvajske stanice
STR_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer teretne tramvajske stanice
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centriraj glavni pogled na lokaciju stanice
STR_3054_SHOW_STATION_RATINGS :{BLACK}Pokaži ocjene stanice
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Promijeni ime stanice
@@ -1906,7 +1894,7 @@ STR_3068_DOCK :{WHITE}Pristani
STR_3069_BUOY :Plutača
STR_306A_BUOY_IN_THE_WAY :{WHITE}...plutača na putu
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...stanica previše proširena
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...neujednačene stanice onemogućene
STR_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...neujednačene stanice onemogućene
STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Drži CTRL kako bi odabrao više od jedne stavke
STR_UNDEFINED :(neodređen znakovni niz)
@@ -1947,7 +1935,7 @@ STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Spremi t
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Odaberi vrstu nove igre
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Odaberi scenarij (zeleno), namještenu igru (plavo), ili nasumičnu novu igru
STR_4010_GENERATE_RANDOM_NEW_GAME :Stvori nasumičnu novu igru
STR_4011_LOAD_HEIGHTMAP :{WHITE}Učitaj visinsku kartu
STR_LOAD_HEIGHTMAP :{WHITE}Učitaj visinsku kartu
##id 0x4800
STR_4800_IN_THE_WAY :{WHITE}{STRING} na putu
@@ -2151,10 +2139,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Količi
STR_6813_ECONOMY :{LTBLUE}Ekonomija: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Promjena smjera vlaka: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Prirodne katastrofe: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Stav gradsko vijeća prema restrukturiranju područja: {ORANGE}{STRING}
STR_CITY_APPROVAL :{LTBLUE}Stav gradsko vijeća prema restrukturiranju područja: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Ništa
STR_NONE :Ništa
STR_NUM_VERY_LOW :Vrlo nisko
STR_6816_LOW :Nisko
STR_6817_NORMAL :Normalno
@@ -2192,9 +2180,9 @@ STR_6835_AT_END_OF_LINE_ONLY :Isključivo na
STR_6836_OFF :Isključeno
STR_6837_ON :Uključeno
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Pokaži tablice najboljih rezultata
STR_6839_PERMISSIVE :Dopustiv
STR_683A_TOLERANT :Tolerantan
STR_683B_HOSTILE :Agresivan
STR_PERMISSIVE :Dopustiv
STR_TOLERANT :Tolerantan
STR_HOSTILE :Agresivan
##id 0x7000
STR_7000 :
@@ -2331,7 +2319,7 @@ STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nije mog
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Nije moguće prodati 25% udjela u ovoj tvrtci...
STR_707D_OWNED_BY :{WHITE}({COMMA}% u vlasništvu {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} je preuzeta od strane tvrtke {COMPANY}!
STR_7080_PROTECTED :{WHITE}Ova tvrka još nije dovoljno stara da bi trgovala udjelima...
STR_PROTECTED :{WHITE}Ova tvrka još nije dovoljno stara da bi trgovala udjelima...
STR_LIVERY_DEFAULT :Standardna boja
STR_LIVERY_STEAM :Parna lokomotiva
@@ -2638,17 +2626,17 @@ STR_8803_TRAIN_IN_THE_WAY :{WHITE}Vlak na
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Idi do {STATION}
STR_8807_GO_TO_TRANSFER :Idi do {STATION} (Transferiraj i preuzmi teret)
STR_8808_GO_TO_UNLOAD :Idi do {STATION} (Istovar)
STR_8809_GO_TO_TRANSFER_UNLOAD :Go to {STATION} (Transferiraj i otiđi prazan)
STR_880A_GO_TO_LOAD :Idi do{STATION} (Utovar)
STR_880B_GO_TO_TRANSFER_LOAD :Idi do {STATION} (Transferiraj i pričekaj puni utovar)
STR_880C_GO_NON_STOP_TO :Idi neprekidno do {STATION}
STR_880D_GO_TO_NON_STOP_TRANSFER :Idi neprekidno do {STATION} (Transferiraj i preuzmi teret)
STR_880E_GO_NON_STOP_TO_UNLOAD :Idi neprekidno do {STATION} (Istovar)
STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idi neprekidno do {STATION} (Transferiraj i otiđi prazan)
STR_8810_GO_NON_STOP_TO_LOAD :Idi neprekidno do {STATION} (Utovar)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Idi neprekidno do {STATION} (Transferiraj i pričekaj puni utovar)
STR_GO_TO_TRANSFER :Idi do {STATION} (Transferiraj i preuzmi teret)
STR_8807_GO_TO_UNLOAD :Idi do {STATION} (Istovar)
STR_GO_TO_TRANSFER_UNLOAD :Go to {STATION} (Transferiraj i otiđi prazan)
STR_8808_GO_TO_LOAD :Idi do{STATION} (Utovar)
STR_GO_TO_TRANSFER_LOAD :Idi do {STATION} (Transferiraj i pričekaj puni utovar)
STR_880A_GO_NON_STOP_TO :Idi neprekidno do {STATION}
STR_GO_TO_NON_STOP_TRANSFER :Idi neprekidno do {STATION} (Transferiraj i preuzmi teret)
STR_880B_GO_NON_STOP_TO_UNLOAD :Idi neprekidno do {STATION} (Istovar)
STR_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idi neprekidno do {STATION} (Transferiraj i otiđi prazan)
STR_880C_GO_NON_STOP_TO_LOAD :Idi neprekidno do {STATION} (Utovar)
STR_GO_TO_NON_STOP_TRANSFER_LOAD :Idi neprekidno do {STATION} (Transferiraj i pričekaj puni utovar)
STR_GO_TO_TRAIN_DEPOT :Idi u spremište vlakova grada {TOWN}
STR_SERVICE_AT_TRAIN_DEPOT :Servisiranje u spremištu vlakova grada {TOWN}
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Idi neprekidno do spremišta vlakova grada {TOWN}
@@ -2734,7 +2722,7 @@ STR_SERVICING_INTERVAL_PERCENT :{BLACK}Servisni
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlakovi - klikni na vlak za informacije
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Izgradi/kupi nove vlakove (zahtijeva spremište vlakova)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlakovi - klikni na vlak za informacije., vuci vozilo kako bi dodao/oduzeo od vlaka
STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Izgradi novi vlak
STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Kupi novo željezničko vozilo
STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Ovdje povuci vlak kako bi ga prodao
STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centriraj glavni pogled na lokaciju željezničkog spremišta
STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Popis izabranih vlakova - klikni na vlak za informacije
@@ -2752,7 +2740,7 @@ STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Smanji s
STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Pokaži detalje tereta koji se prevozi
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Pokaži detalje vagona
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Pokaži nosivosti svakog vagona
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Pokaži ukupnu nosivost vlaka podijeljenu prema vrsti tereta
STR_SHOW_TOTAL_CARGO :{BLACK}Pokaži ukupnu nosivost vlaka podijeljenu prema vrsti tereta
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Popis naredbi - klikni na naredbu kako bi ju označio. CTRL + klik klizi na stanicu
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Preskoči trenutnu naredbu i pokreni slijedeću. CTRL + klik preskače na odabranu naredbu
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Obriši označenu naredbu
@@ -2783,8 +2771,8 @@ STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Nije moguće promijeniti smjer vlaka...
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Preimenuj vrstu vagona
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Nije moguće preimenovati vrstu vagona...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Napravi da označena naredba prisili vozilo da izbaci teret
STR_886F_TRANSFER :{BLACK}Transfer
STR_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Napravi da označena naredba prisili vozilo da izbaci teret
STR_TRANSFER :{BLACK}Transfer
STR_CLEAR_TIME :{BLACK}Obriši vrijeme
STR_RESET_LATENESS :{BLACK}Poništi Brojač Kašnjenja
@@ -2862,8 +2850,8 @@ STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Nije mog
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Imenuj cestovno vozilo
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi bus je stigao na {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi kamion je stigao na {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi putnički tramvaj je stigao na {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi teretni tramvaj je stigao na {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_PASSENGER_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi putnički tramvaj je stigao na {STATION}!
STR_CITIZENS_CELEBRATE_FIRST_CARGO_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi teretni tramvaj je stigao na {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}Vozač poginuo u eksploziji nakon sudara s vlakom
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}{COMMA} poginulih u eksploziji nakon sudara s vlakom
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Nije moguće natjerati vozilo da se okrene...
@@ -2872,7 +2860,7 @@ STR_9034_RENAME :{BLACK}Preimenu
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Preimenuj vrstu cestovnog vozila
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Preimenuj vrstu cestovnog vozila
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Nije moguće preimenovati vrstu cestovnog vozila...
STR_9038_GO_TO_ROADVEH_DEPOT :Idi prema spremištu cestovnih vozila grada {TOWN}
STR_GO_TO_ROADVEH_DEPOT :Idi prema spremištu cestovnih vozila grada {TOWN}
STR_SERVICE_AT_ROADVEH_DEPOT :Servisiranje u spremištu cestovnih vozila grada {TOWN}
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Prenamijeni cestovno vozilo za prijevoz neke druge vrste tereta
@@ -3246,6 +3234,9 @@ STR_PURCHASE_INFO_ALL_TYPES :Sve vrste teret
STR_PURCHASE_INFO_ALL_BUT :Sve osim {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK} Maks. vučni napor: {GOLD}{FORCE}
########### For showing numbers in widgets
########### String for New Landscape Generator
STR_GENERATE :{WHITE}Izradi
@@ -3273,7 +3264,6 @@ STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Upozoren
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Prekomjerna promjena veličine mape nije preporučena. Nastaviti sa kreiranjem?
STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Upozorenje na raspored grada
STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Raspored grada s opcijom "nema više cesti" nije preporučen. Nastaviti s generiranjem?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Ime heightmape:
STR_HEIGHTMAP_SIZE :{BLACK}Veličina: {ORANGE}{NUM} x {NUM}
STR_GENERATION_WORLD :{WHITE}Izrada svijeta u toku...
@@ -3299,7 +3289,6 @@ STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Snizi ra
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Povisi ravnu površinu za jedan korak
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Promijeni visinu ravne površine
STR_FLAT_WORLD_HEIGHT :{BLACK}Visina ravne površine:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
STR_SMALLMAP_CENTER :{BLACK}Centriraj malu mapu na trenutni položaj
STR_SMALLMAP_INDUSTRY :{TINYFONT}{STRING} ({NUM})

Some files were not shown because too many files have changed in this diff Show More