1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-19 20:49:11 +00:00

Compare commits

..

1 Commits

Author SHA1 Message Date
planetmaker
11460560f5 (svn r21681) -Release: 1.1.0-beta2 2010-12-31 16:36:08 +00:00
511 changed files with 10241 additions and 13954 deletions

View File

@@ -319,5 +319,3 @@ AIIndustry.IsCargoAccepted <- function(industry_id, cargo_id)
AIAbstractList <- AIList; AIAbstractList <- AIList;
AIList.ChangeItem <- AIList.SetValue; AIList.ChangeItem <- AIList.SetValue;
AIRail.ERR_NONUNIFORM_STATIONS_DISABLED <- 0xFFFF;

View File

@@ -70,5 +70,3 @@ AIIndustry.IsCargoAccepted <- function(industry_id, cargo_id)
AIAbstractList <- AIList; AIAbstractList <- AIList;
AIList.ChangeItem <- AIList.SetValue; AIList.ChangeItem <- AIList.SetValue;
AIRail.ERR_NONUNIFORM_STATIONS_DISABLED <- 0xFFFF;

View File

@@ -15,6 +15,3 @@ regression =
[vehicle] [vehicle]
road_side = right road_side = right
plane_speed = 2 plane_speed = 2
[construction]
max_bridge_length = 100

View File

@@ -7108,7 +7108,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): true IsBuoyTile(): true
IsLockTile(): true IsLockTile(): true
IsCanalTile(): true IsCanalTile(): true
GetBankBalance(): 465257 GetBankBalance(): 461507
--AIWaypointList(BUOY)-- --AIWaypointList(BUOY)--
Count(): 1 Count(): 1
@@ -7127,7 +7127,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsBuoyTile(): false IsBuoyTile(): false
IsLockTile(): false IsLockTile(): false
IsCanalTile(): false IsCanalTile(): false
GetBankBalance(): 459862 GetBankBalance(): 456112
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true

Binary file not shown.

Binary file not shown.

View File

@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2 OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2 OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -55,7 +55,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2 OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
[origin] [origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM. default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -1,241 +1,3 @@
1.1.1-RC1 (2011-05-15)
------------------------------------------------------------------------
- Feature: [NewGRF] Allow to filter by town of the current industry when using industry variable 0x68 [FS#4591] (r22434)
- Change: Improve the speed of YAPF by tweaking hash tables size (r22351, r22350, r22348)
- Change: Show one digit of the fractional train length in the depot (r22336, r22305, r22304, r22303)
- Fix: When determining the executable path failed, the working directory was used instead, circumventing the not-home-directory check [FS#4613] (r22465)
- Fix: [Windows] Prevent a crash when launching OpenTTD with -d from a MSYS console [FS#4587] (r22464)
- Fix: Update the saveload window immediatelly after scanning a new directory, so queued events reach the window when already updated [FS#4615] (r22463)
- Fix: [NewGRF] The c and p parts of station vars 40, 41 and 49 were incorrect for large stations (r22455, r22286)
- Fix: [NewGRF] Zero register 0x100 as specified before resolving custom station foundations (r22452)
- Fix: Do not 'log' the NewGRFs in the screenshot when in the menu [FS#4610] (r22450)
- Fix: [NewGRF] When GRFs are disabled via Action E or due to GRM failure, also display an error in the GUI (r22444, r22443)
- Fix: [NewGRF] Do not popup fatal NewGRF error messages in the intro screen. The GRFs are not going to be activated there anyway and the GRF settings GUI will not display the errors either (r22442)
- Fix: Catenary was drawn incorrectly next to level crossings with foundations (r22437)
- Fix: [NewGRF] Apply railtype property 12 (station graphics) also to station groundsprites from action 1 (r22436)
- Fix: Git revision detection would return too much when tags are involved (r22435)
- Fix: [NewGRF] When action14 specified different values for the palette, the values were OR-ed. Use the last set value instead (r22416)
- Fix: [Network] Kicking yourself via remote console crashes the server [FS#4606] (r22414)
- Fix: [NewGRF] Make sure the action2 ID of a generic feature callback is valid (r22409)
- Fix: Check the availability year of all houses, not just the NewGRF houses, when making sure that at least one is available onwards from year 0 [FS#4581] (r22389, r22300, r22299)
- Fix: When a game uses a lot of NewGRFs the buffer for storing that information in the PNG is too small (r22388)
- Fix: Windows' recv seems to return 'graceful closed' before having passed the remaining buffer which causes OpenTTD to think all connections are 'incorrectly' terminated, i.e. without the 'I am leaving' packet from the client. So let the client wait a tiny bit after sending the 'I am leaving' packet and before gracefully closing the connection [FS#4601] (r22387)
- Fix: When the last AI company gets removed, the 'dead' state was not reset in the AI debug window [FS#4602] (r22386)
- Fix: No client error packet was sent to the admin bots [FS#4585] (r22384)
- Fix: Recolouring of silicon bridge was done incorrectly (r22380, r22379, r22378)
- Fix: Crash when clicking a removed company in the vehicle list dropdowns [FS#4592] (r22373)
- Fix: Keep better accounting of the order in which clients joined; client cannot be starved from joining and they get shown the amount of clients waiting in front of them (r22372, r22370, r22369, r22368, r22367, r22366, r22365, r22364, r22363, r22362, r22361)
- Fix: Make sure saving has completely and utterly finished before starting a new one. Otherwise you could start a save, which would be marked as done by the previous save stopping and then yet another save could be started... and that could create a deadlock [FS#4596] (r22371)
- Fix: Delete the client list popup when the client got removed (instead of previously selecting some other client) (r22360, r22359, r22358)
- Fix: When inserting automatic orders, do not create consecutive duplicate orders (r22333, r22332, r22331, r22330, r22329, r22328, r22327)
- Fix: Destinations of conditional orders were update incorrectly when deleting orders in front of the conditional orders, if the target order was the order just before of the conditional order (r22326)
- Fix: Vehicles skipped orders when inserting automatic orders failed (r22324)
- Fix: [NewGRF] When determining refittability use the cargo translation table of the GRF setting the refitmask instead of the GRF defining the action 3 (r22316)
- Fix: Make road vehicles, ships and aircraft skip orders if they are leaving a depot and heading to the same one again; just like trains (r22309)
- Fix: Waiting on a server could kick the client, or rather the client would kick itself due to an unexpected packet [FS#4574] (r22308)
- Fix: When drawing the town authority window, check whether the availability of the actions changed, and force a complete redraw in that case (r22307)
- Fix: The 'freeform edges' setting could be enabled when there were buoys on the northern border [FS#4580] (r22297)
- Fix: Reset Window::scrolling_scrollbar when raising scrollbar buttons [FS#4571] (r22294)
1.1.0 (2011-04-01)
------------------------------------------------------------------------
- Fix: In the scenario editor you could build a ship depot using the appropriate hotkey. Removing that depot causes an assertion to trigger [FS#4558] (r22266)
1.1.0-RC3 (2011-03-18)
------------------------------------------------------------------------
- Fix: New game settings were applied too early when starting a game via a heightmap [FS#4557] (r22259)
- Fix: Do not resort town, industry and signs list directly in OnInvalidateData(). There might be a scheduled rebuild which needs execution first. So, only set a trigger for resorting [FS#4546] (r22249, r22248, r22247, r22246, r22245, r22244, r22243, r22242, r22241, r22236, r22228, r22227, r22226)
- Fix: [NewGRF] Object variable 0x48 was not available in callback 0x15C (r22231)
- Fix: Compilation when compiling with --disable-ai (r22222)
- Fix: When downloading a file via HTTP failed mid-way and OpenTTD fell back to the old system the partial downloaded amount would be counted twice [FS#4543] (r22208)
- Fix: The 'center' (for movement) of vehicles is (currently still) always at 4/8th original vehicle length from the front, so trains should stop at the same location regardless of the length of the front engine [FS#4545] (r22206)
- Fix: Make the base costs for building and demolishing NewObjects also local to the individual NewGRFs (r22204)
- Fix: Removing a station order could stop when removing first automatic order (r22200)
- Fix: Invalidate the object build window when using the date cheat (r22193)
1.1.0-RC2 (2011-03-04)
------------------------------------------------------------------------
- Fix: Following a vehicle with a very high VehicleID was impossible (r22181)
- Fix: [NewGRF] Memory leak if an industry NewGRF had more than one prop A or 15, or a station NewGRF had more than one prop 09 (r22175, r22165)
- Fix: [NewGRF] Disable a station NewGRF when it contains an unterminated spritelayout in action0 prop 08 instead of crashing (r22164)
- Fix: Building a station part adjacent to both an existing station and a rail waypoint failed [FS#4541] (r22163)
- Fix: No update of NewGRF window when unknown GRF name becomes available [FS#4533] (r22162)
- Fix: [NewGRF] Industry prop 0x11 is 4-bytes long, not 3 bytes (r22157)
- Fix: Stations/infrastructure were not properly sold on some clients during bankruptcy [FS#4529] (r22154)
- Fix: The Greek translation did not work as it breached the 200.000 bytes 'limit' for loading language files [FS#4536] (r22153)
- Fix: Windows video driver crashed when it could not go to full screen at the resolution of the configuration file when starting OpenTTD [FS#4521] (r22149)
- Fix: Do not run savegame conversion during SlNullPointers; the pointer might not be converted or be NULL at that point (r22146)
- Fix: Some valid keycodes were ignored along with the invalid ones (r22142)
- Fix: When commands need to invalidate windows, process these events asynchronously before the next redraw. Calling window code directly from command scope uses wrong _current_company and might issue nested DoCommands() which interfer with the running command [FS#4523] (r22141, r22140, r22135, r22134)
- Fix: [NewGRF] Skipping only the invalid part of an action14 failed, the rest of the action was skipped instead (r22138)
- Fix: Spectators had crashes when closing buoy windows (r22131)
- Fix: Build-station-window showed wrong selection when reopening [FS#4530] (r22128)
- Fix: Canals would get drawn as land in the smallmap when using the owner window (r22127)
- Fix: The animation-ness of two goldmine tiles were swapped, causing the wheeltower to not work properly, and the bottom corner to show the wrong sprite [FS#4528] (r22125)
- Fix: CommandQueue::Pop() did not update 'last'; popping the last item caused the queue to disconnect unless there was only one item [FS#4522] (r22123)
- Fix: When a NOT_REACHED in saveload can be reached due to an invalid savegame, use SlErrorCorrupt instead. In other words, do not crash but show an error message (r22122)
- Fix: In case of high frame_freq one could get commands executed after a new network game was started (r22121)
- Fix: [NoAI] Prevent AIs from getting consistently over their allowed amount of operations by subtracting the amount they went over 'budget' from the budget for the next 'tick' (r22120)
- Fix: The refit window was not correctly updated after selecting with Ctrl+Click [FS#4525] (r22118)
- Fix: CanRemoveRoadWithStop() failed for _current_company = OWNER_TOWN, and for OWNER_NONE-owned road (r22117)
1.1.0-RC1 (2011-02-18)
------------------------------------------------------------------------
- Feature: [NewGRF] Test all possible industry layouts during construction and prospecting [FS#4131] (r22012, r22010)
- Feature: Wheel scrolling in the console (r21982)
- Feature: Console command to reset the engine pool. It removes the traces of engines which are no longer associated to a NewGRF, and can be used to e.g. 'fix' scenarios which were screwed up by the author. You can only use it when there are no vehicles in the game though (r21975)
- Feature: Add a setting to enable/disable funding local road reconstruction (r21974)
- Feature: Introduce 'minimal' number of industries as a replacment for the old 'none' setting in the new game window (r21969)
- Change: When loading old savegames with long trains set the maximum train length to the length of the longest train (r22061)
- Change: Always report mammoth trains are disabled to NewGRFs, and allow the maximum train length to be modified in multiplayer as well [FS#4471] (r22004)
- Fix: Remove invalid keycodes when reading hotkeys.cfg [FS#4510] (r22094)
- Fix: The server list did not get sorted with one item in it, so the 'position in the list' variable was never updated causing problems when using the keyboard shortcuts for scrolling [FS#4514] (r22093)
- Fix: When deleting towns, only relocate objects during DC_EXEC (r22087)
- Fix: [Windows] If fullscreen fails with current resolution, use desktop resolution [FS#4489] (r22081)
- Fix: The owner view of the smallmap was not updated after a company colour change (r22079)
- Fix: Maximum train length interfered with wagon replacement when wagon removal was turned on [FS#4499] (r22078)
- Fix: NewGRFs with invalid multi-tile houses could cause a valid 1x1 house following it to be seen as multi-tile, causing crashes [FS#4501] (r22075)
- Fix: Immediately update the train weight when you change the multiplier for train cargo weight (r22073)
- Fix: Some hotkey names in hotkey.cfg for the scenario editor toolbar were completely bogus (r22071)
- Fix: Crashes when disconnecting after requesting the map [FS#4503] (r22070)
- Fix: Delete all savegame packets, not just the first one (r22069)
- Fix: Return 'connection lost' instead of 'okay' when SendPackets closed the connection, so we do not try to do anything else with the closed socket (r22068)
- Fix: Do not hold a mutex when sending packets and thus possibly closing the connection as that wants to acquire the mutex again (r22067)
- Fix: Verify we can allocate an Order, OrderList, CargoPacket, CargoPayment, and others before we actually try to do so (all corner cases) [FS#4468] (r22066, r22057, r22047, r22042, r22040, r22033, r22031, r22026, r22025, r22024, r22023, r22022)
- Fix: Crash when disconnecting and reconnecting while the server is still saving the savegame [FS#4497] (r22064)
- Fix: Memory leak when saving with LZMA or zlib fails mid-way (r22062)
- Fix: Make the send chat message window follow the position of the status bar (r22059)
- Fix: Metric and imperial HP are not the same. As imperial HP are used internally, set a conversion rate for metric HP [FS#4408] (r22056)
- Fix: [Squirrel] Some invalid squirrel code caused the squirrel compiler to crash [FS#4490] (r22055)
- Fix: The land area information window was not updated after a language change (r22053)
- Fix: Roads under road stops would get a wrong owner after overbuilding (r22051)
- Fix: In ancient savegames, e.g. TTO savegames, non primary vehicles (wagons and such) could have unitnumbers or even orders. However, these orders would not be updated when a station is removed. As such some savegames have wagons with current orders to invalid stations which triggers trouble in the load conversion. So, trash any orders/unitnumbers a non-primary vehicle has [FS#4496] (r22050)
- Fix: [NewGRF] Company 0 does not always exist, so put temporary vehicles in a valid company (r22048)
- Fix: Make sure order indices stay in range when copying, sharing, unsharing or deleting all orders [FS#4487] (r22046)
- Fix: Update the consist cache when a part of a train is flipped in the depot [FS#4493] (r22044)
- Fix: Invalidate the right windows when a part of a train is flipped in the depot (r22043)
- Fix: Tab completion in chat did not cycle through all possible options (r22038)
- Fix: Crash when watching the vehicle view of a vehicle that has multiple sequential nearest depot orders (or consists of a single nearest depot order) when there is no depot with index 0 [FS#4488] (r22034)
- Fix: The server list got not resorted/redrawn after NewGRFs were downloaded [FS#4482] (r22029)
- Fix: When paused and having the allowed actions while paused setting on 'no actions' cheating money would fail [FS#4479] (r22016)
- Fix: Only show one AI per unique ID instead of all versions in the output of 'openttd -h' (r22007)
- Fix: Smoke/sparks of trains would be shown under bridges, or rather through bridges [FS#4480] (r22006)
- Fix: When the difference between force and resistance is smaller than the mass(*4) there would be no acceleration anymore, even when at higher (or lower) speed the force and resistance balance out better [FS#4473] (r21997)
- Fix: [YAPF] Under some circumstances vehicles could be lost [FS#4472] (r21996)
- Fix: [NewGRF] Make computations of closest-land/water-distances handle waterish tiles more correctly (r21994)
- Fix: When building a lock on dry land costs for clearing water were deducted rather than for building canals (r21993)
- Fix: AIs trying to change the AIOF_GOTO_NEAREST_DEPOT flag for existing orders triggered an assert. Explicitly forbid this as precondition for SetOrderFlags [FS#4467] (r21992)
- Fix: The share/copy-orders-cursor was not updated to refer to the new vehicle when it got autoreplaced/-renewed [FS#4466] (r21991)
- Fix: Vehicle status bar glitches on speed changes (r21989)
- Fix: Scrolling of the console in pages used wrong line height and scrolled too much (r21979)
- Fix: Redraw the town authority window after modifying town authority settings (r21973)
- Fix: Crash when a multiplayer company goes bankrupt with 'you' in it [FS#4464] (r21970)
1.1.0-beta5 (2011-02-04)
------------------------------------------------------------------------
- Feature: GUI setting to disable reversing at signals (r21962)
- Feature: Not loading and not unloading is now possible (r21961)
- Change: [NewGRF] Disable the flipping of train engines/wagons in the depot by default for NewGRFs [FS#4462] (r21966)
- Change: Show the length of vehicles in tiles, instead of half tiles in the depot (r21960)
- Change: Replace longbridges settings with custom maximum bridge and tunnel length setting (r21959)
- Change: Randomize the vehicle a small UFO targets, do not use the one with lowest index (r21949)
- Fix: Do not count the number of vehicles but the length of vehicles to (configurably) limit train length [FS#4461] (r21960)
- Fix: [NewGRF] Reset the carry flag every 4 bytes in Action 6 when adding more than one variable (r21951)
- Fix: Road vehicle was moved under the bridge when it was destroyed by an UFO while on a bridge (r21948)
- Fix: Crash when converting a savegame with vehicles crashed in a tunnel entry, or with vehicles reversing there (r21947)
- Fix: Funny behaviour when a road vehicle reverses while overtaking, so abort the overtake attempt when reversing the road vehicle [FS#4447] (r21946)
- Fix: Not all vehicles should be tested to be inside a tunnel upon savegame load [FS#4460] (r21940)
- Fix: Do not remove existing road/tram bits when overbuilding stops of the opposite road type [FS#4457] (r21936)
- Fix: Allow to overbuild road stops which are built over trams (r21935)
- Fix: Automatic orders behave now stable wrt. service orders and are not added or removed depending on the need of servicing [FS#4440] (r21933)
- Fix: The town window would not be invalidated in the scenario editor if the ground changed and thus the required cargos for town growth [FS#4554] (r21929)
- Fix: Converting an expensive rail type to a cheap one could give more money than removing and rebuilding cost (r21919)
- Fix: Languages improperly sorted in the 'start server' window [FS#4443] (r21918)
- Fix: The minimum speed needed for (realistic) acceleration to work properly can sometimes be more than the (temporary) maximum speed causing Clamp to 'fail'. Make sure that the minimum speed always overrules the maximum speed [FS#4442] (r21916)
- Fix: Include the capacity of non-refittable vehicles in the refitted-capacity, if their cargo matches (r21904)
- Fix: Do not count articulated parts when passing the number of vehicles to refit to the command. That may exceed 8 bits (r21902)
- Fix: [NoAI] Hide automatic orders from AIs as they have no way of dealing with them (r21900)
- Fix: Do not show a vehicle selection in the RefitWindow for refit orders. You cannot select anything anyway (r21899)
- Fix: Using a pointer-iterator and adding things (thus reallocating) to the iterated array caused OpenTTD to crash on invalid pointers [FS#4438] (r21898)
- Fix: Only some scenarios from the main scenario folder and no heightmaps could be started in the 'start server' window [FS#4421] (r21892)
- Fix: Crash when scrolling outside of the main window (with some video backends) [FS#4434] (r21889)
- Fix: [NewGRF] String codes 0x80 and 0x81 were broken since the typechecking of string parameters [FS#4422] (r21885)
- Fix: When a train after reversing ended at the last bit of a bridge ramp and directed outside the bridge, it could still have track set to TRACK_BIT_WORMHOLE (r21880)
- Fix: When a single-vehicle train was reversed while on a slope, its GOINGUP/DOWN were not swapped (r21874)
- Remove: Settings for vehicle speed in the vehicle view, long date in status bar, drawing of bridge pillars, support for depot orders, time tabling and joining of stations upon building (r21958, r21957, r21956, r21955, r21954)
- Remove: The non-uniform stations setting; it has been broken for over a year, and thus not used [FS#4456] (r21953)
1.1.0-beta4 (2011-01-21)
------------------------------------------------------------------------
- Feature: [NewGRF] Rail type property to influence sorting of rail types in the drop down list [FS#4394] (r21866)
- Feature: [Network] Console command to change the password of other companies for servers [FS#4368] (r21855)
- Feature: [NewGRF] Introduction dates/required types for rail types; e.g. introduce a particular rail type in 1960 (or when a vehicle using it is introduced), but also allow limiting its introduction to only happen when the required railtypes are available [FS#4393] (r21842)
- Feature: Limit vehicle lateness to the length of a full timetable cycle, e.g. when a cycle takes 50 days and the vehicle is 65 days later reduce the lateness to 15 days (r21832)
- Feature: After building a road or tram bridge/tunnel, connect it to any existing road or tram (r21778, r21777)
- Feature: Display NewGRF object sprites during object picking (r21772)
- Feature: Display NewGRF station sprites during station picking (r21755)
- Change: Allow LMB scrolling with the mouse outside of the extra viewport instead of canceling scrolling when going slightly over the edge (r21838)
- Change: Only show rail/road types that will eventually be available in-game. For example do not show trams when there is no tram NewGRF loaded (r21817)
- Change: Keep aqueducts and road/tram tunnels and bridges after removing a company (r21780)
- Fix: Distant-join station would build at the wrong location when having persistent building turned on and selecting a 'second' location for the station tile [FS#4430] (r21864)
- Fix: Slowing down of trains was done by reducing the speed by 10%, but also when you are just 1% too fast, so limit the slowdown till the new maximum speed [FS#4423] (r21847)
- Fix: Left-mouse-button dragging would switch over to other viewports instead of staying locked to the viewport you started on [FS#4419] (r21837)
- Fix: When a train was reversed while inside a tunnel/bridge, it would not have (re)set the GOINGUP/DOWN bits after leaving the tunnel/bridge (r21836)
- Fix: Desync debug savegames might not be actually saved in case threading is enabled, which is enabled by default [FS#4427] (r21833)
- Fix: Service orders for trains/aircraft would (sometimes) not get a time when autofilling [FS#4414] (r21831)
- Fix: Crash with the small map window on big endian platforms [FS#4417] (r21830)
- Fix: The expectations from the 'always build infrastructure' setting name/description did not match the behaviour [FS#4007] (r21826)
- Fix: Allow dragging of combo signals (again) [FS#4378] (r21816)
- Fix: [YAPF] Apply a pathfinder penalty for back of one-way path signals so those arenot preferred over other possibilities [FS#3908] (r21815)
- Fix: Check GRF version from action 8, and disallow usage of GRFs with versions above 7 (r21814)
- Fix: Crash when displaying the owner view [FS#4411] (r21813)
- Fix: Do not create automatic orders when there are no manual orders, and remove unreached automatic orders when reaching an ordered waypoint or depot [FS#4404] (r21809, r21808)
- Fix: Loading a TTO savegame failed after loading a TTDP savegame (r21799, r21798)
- Fix: The size (in characters) of the string inputs was too small for loading some TTD savegames (r21797)
- Fix: Drive through road stop state was not properly converted from TTDPatch savegames [FS#4398] (r21796)
- Fix: Broken usage of GetTileOwner() caused wrong conversion of old savegames (r21793)
- Fix: Terraforming limit was off-by-one when terraforming a single tile height [FS#4407] (r21791)
- Fix: TTDPatch savegames can have train waypoints encoded as buoys [FS#4398] (r21790)
- Fix: When the font misses the fallback character '?', use the sprite font's '?' instead [FS#4405] (r21789)
- Fix: Crash due to invalid rail station width and height data stored in TTDPatch savegames [FS#4398] (r21786)
- Fix: Crash when converting savegame with custom waypoint name (r21784)
- Fix: Diagonal tile iterator failed for A * 0 selections [FS#4396] (r21768)
- Fix: Do not limit tile clearing during bankruptcy [FS#4397] (r21767)
- Fix: PBS reservation was not shown on road crossings with NewGRF railtypes [FS#4369] (r21765)
- Remove: The 'stopall' console command, as its functionality was broken. Group start/stop commands can be used instead [FS#4409] (r21804)
1.1.0-beta3 (2011-01-09)
------------------------------------------------------------------------
- Feature: Configurable limit amount of tiles that can be cleared/terraformed by a company [FS#4331] (r21728)
- Feature: Show a list of companies in the owner legend and allow them to be toggled for visibility (r21720, r21718)
- Feature: Console command 'list_ai_libs' to get a list of recognized AI libraries [FS#4372] (r21703)
- Feature: Allow changing the AI configuration in the scenario editor / in game [FS#4362] (r21696)
- Change: Tune 'realistic' acceleration even more to make more trains reach their top speed, and make it behave more like TTDPatch (r21712)
- Change: Display the minimum height of the tile in the LandInfo window instead of the height of the northern corner. So it is more useful for NewGRF and AI developers, and maybe more transparent for players (r21711)
- Fix: The diagonal iterator would iterate twice over some tiles [FS#4395] (r21747)
- Fix: [NewGRF] Canal variable 83 accessed water random bits also for non-water tiles (e.g. watery industries or objects) (r21746)
- Fix: [NewGRF] Canal variable 80 shall return consistent heights within a lock (r21745)
- Fix: Allow Ctrl+Clicking automatic orders for scrolling to their destination (r21744)
- Fix: Coast tiles were not drawn under bridges [FS#4386] (r21743)
- Fix: Make clearing refit orders work again [FS#4388] (r21739)
- Fix: Start loading when cur_order_index points to the destination station, i.e. after deleting not-reached automatic orders [FS#4384] (r21738)
- Fix: A loading order was also marked as 'not part of orders' when the order before the current order was deleted (r21737)
- Fix: Admin bots were not always notified of password changes [FS#4377] (r21727)
- Fix: Vehicle sprite was cached into a 16 bit variable, causing incorrect sprites to be displayed (r21709)
- Fix: [NewGRF] Report TTDPatch flag 4A (newobjects) as set (r21708)
- Fix: The old ship pathfinder is too stupid to provide 'lost' notices; it would even get lost while following its own path [FS#4370] (r21706)
- Fix: Do not perform any more checks after the connection is closed [FS#4374] (r21704)
- Fix: Changing AI settings ingame was impossible when the difficulty level was other than custom (r21694)
- Fix: Due to an error in the Debian changelog building of Debian/Ubuntu packages failed (r21682)
1.1.0-beta2 (2010-12-31) 1.1.0-beta2 (2010-12-31)
------------------------------------------------------------------------ ------------------------------------------------------------------------
- Feature: Command logging using the admin interface (r21668) - Feature: Command logging using the admin interface (r21668)
@@ -364,7 +126,7 @@
- Change: Limit the number of exceptions in the refittable cargo list to 7 (r21083) - Change: Limit the number of exceptions in the refittable cargo list to 7 (r21083)
- Change: Reduce the chances to accidentally break savegames with NewGRFs by limiting loading of savegames that miss NewGRFs or change NewGRF settings in-game [FS#3012] (r21116) - Change: Reduce the chances to accidentally break savegames with NewGRFs by limiting loading of savegames that miss NewGRFs or change NewGRF settings in-game [FS#3012] (r21116)
- Change: Tuned realistic acceleration to be a bit more realistic in order to make acceleration 'slower', which highlights the differences between vehicle types more (r21106) - Change: Tuned realistic acceleration to be a bit more realistic in order to make acceleration 'slower', which highlights the differences between vehicle types more (r21106)
- Change: Do not make client reconnect waiting time depend on the company; in coop games that does not spread clients at all, and most companies have a low number causing it not to be spread out either. Use the ClientID instead (r21008) - Change: Do not make client reconnect waiting time depend on the company; in coop games that does not spread clients at all, and most companies have a low number causing it not to be spread out either. Use the ClientID instead. (r21008)
- Change: Add installing options or rather options to not install certain documentation, in a similar way to GRFCodec/catcodec (r20999) - Change: Add installing options or rather options to not install certain documentation, in a similar way to GRFCodec/catcodec (r20999)
- Change: Only display liveries in the livery window if they are used by some vehicle somewhen (r20849) - Change: Only display liveries in the livery window if they are used by some vehicle somewhen (r20849)
- Change: [NoAI] Rename AIAbstractList to AIList (r20563) - Change: [NoAI] Rename AIAbstractList to AIList (r20563)
@@ -798,7 +560,7 @@
- Fix: Report a more useful error when failing to build a bubble generator (r19137) - Fix: Report a more useful error when failing to build a bubble generator (r19137)
- Fix: Resize station cargo widget when needed to display all accepted cargo types [FS#3617] (r19123) - Fix: Resize station cargo widget when needed to display all accepted cargo types [FS#3617] (r19123)
- Fix: [NewGRF] Industry property 0x17 was interpreted incorrectly and in some cases circumvented the density difficulty setting (r19120) - Fix: [NewGRF] Industry property 0x17 was interpreted incorrectly and in some cases circumvented the density difficulty setting (r19120)
- Fix: Removing towns (in the scenario editor) that had stations/depots refer to them or vehicles were on the town's road could cause a crash [FS#3616] (r19119) - Fix: removing towns (in the scenario editor) that had stations/depots refer to them or vehicles were on the town's road could cause a crash [FS#3616] (r19119)
- Fix: In the order window the Non-stop dropdown was not enabled for depot and waypoint orders and some buttons were raised too soon [FS#3593] (r19118, r19117) - Fix: In the order window the Non-stop dropdown was not enabled for depot and waypoint orders and some buttons were raised too soon [FS#3593] (r19118, r19117)
- Fix: Do not crash on broken lng file and prevent it from happening again [FS#3611] (r19113, r19112) - Fix: Do not crash on broken lng file and prevent it from happening again [FS#3611] (r19113, r19112)
- Fix: Not all news data was properly freed when starting a new game [FS#3614] (r19105) - Fix: Not all news data was properly freed when starting a new game [FS#3614] (r19105)
@@ -2559,7 +2321,7 @@
- Fix: Several desync fixes (incorrect roadstop update of old games, autoreplace bugs) [FS#551] (r8137, r8147, r8157) - Fix: Several desync fixes (incorrect roadstop update of old games, autoreplace bugs) [FS#551] (r8137, r8147, r8157)
- Fix: Some disaster-events fixed: combat chopper shoots from right position, submarine once again moves around (r8140, r8158) - Fix: Some disaster-events fixed: combat chopper shoots from right position, submarine once again moves around (r8140, r8158)
- Fix: 'out of sprite memory' warning messages due to incorrect assumption of requested memory for sprites (r8133) - Fix: 'out of sprite memory' warning messages due to incorrect assumption of requested memory for sprites (r8133)
- Fix: Buoys are now built and numbered 1..9 not 9..1 [FS#538] (r8123) - Fix: Bouys are now built and numbered 1..9 not 9..1 [FS#538] (r8123)
- Fix: Clicking for more news properly cycles through the news history backwards, and does not show the first item doubly if it's already open (r8049) - Fix: Clicking for more news properly cycles through the news history backwards, and does not show the first item doubly if it's already open (r8049)
- Fix: Crash when removing a town in the scenario editor while the query window is open for one of the town's tiles (r8030) - Fix: Crash when removing a town in the scenario editor while the query window is open for one of the town's tiles (r8030)
- Fix: Overflow of system-ticks was not handled properly, resulting in a possibly unresponsive server/client (r8028) - Fix: Overflow of system-ticks was not handled properly, resulting in a possibly unresponsive server/client (r8028)
@@ -2954,7 +2716,7 @@
- Fix: Certain resolutions caused a crash when minimap was partly dragged outside the game window (r2424) - Fix: Certain resolutions caused a crash when minimap was partly dragged outside the game window (r2424)
- Fix: Deleting canals under bridges removed bridges first in certain configurations (r2436) - Fix: Deleting canals under bridges removed bridges first in certain configurations (r2436)
- Fix: [NPF] Vehicles try to drive into a tunnel entrance from above (r2471) - Fix: [NPF] Vehicles try to drive into a tunnel entrance from above (r2471)
- Fix: [NewGRF] Some road vehicle action 0 properties were loaded as the wrong type (int8, int16, int32) causing undefined results, like cargo types being wrong (r2474) - Fix: [NewGRF] Some road vehicle action 0 properties were loaded as the wrong type (int8,int16,int32) causing undefined results. (like cargo types being wrong) (r2474)
- Fix: The console variable autoclean_unprotected was linked to the variable _network_autoclean_protected (r2498) - Fix: The console variable autoclean_unprotected was linked to the variable _network_autoclean_protected (r2498)
- Fix: Old bug in the PCX writer: The first pixel column contained garbage, the picture was shifted one to the right, and the last column was dropped (r2512) - Fix: Old bug in the PCX writer: The first pixel column contained garbage, the picture was shifted one to the right, and the last column was dropped (r2512)
- Fix: Using the mouse wheel could lead to a crash if mouse was not over a widget (r2530) - Fix: Using the mouse wheel could lead to a crash if mouse was not over a widget (r2530)
@@ -3020,9 +2782,9 @@
- Fix: Disallow building an oil rig above sea level (r3416) - Fix: Disallow building an oil rig above sea level (r3416)
- Fix: When removing a town-owned tunnel the player's rating was not reduced (r3418) - Fix: When removing a town-owned tunnel the player's rating was not reduced (r3418)
- Fix: (Possible) game crash on removing track/road under bridge if a vehicle was on the track/road under the bridge and the track/road sloped (r3419) - Fix: (Possible) game crash on removing track/road under bridge if a vehicle was on the track/road under the bridge and the track/road sloped (r3419)
- Fix: [NewGRF] Only power should decide whether a rail vehicle is an engine or a wagon (r3424) - Fix: [NewGRF] Only power should decide whether a rail vehicle is an engine or a wagon. (fixes SHIKI 810 in jpsetw.grf) (r3424)
- Fix: Incorrect validating of tree-planting command which can allow a buffer-overflow (r3446) - Fix: Incorrect validating of tree-planting command which can allow a buffer-overflow (r3446)
- Fix: [NewGRF] When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index (r3449) - Fix: [NewGRF] When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf) (r3449)
- Fix: You could not remove an item from a list-type of config ingame from the configuration file (r3475) - Fix: You could not remove an item from a list-type of config ingame from the configuration file (r3475)
- Fix: [NewGRF] Always reinitialize the TTDPatch flags as patch settings may have changed (r3486) - Fix: [NewGRF] Always reinitialize the TTDPatch flags as patch settings may have changed (r3486)
- Fix: Price for demolishing a bridge was dependent on orientation and map size (r3487) - Fix: Price for demolishing a bridge was dependent on orientation and map size (r3487)
@@ -3206,7 +2968,7 @@
- Fix: Destroyed train locks crossings [SF#1105112] - Fix: Destroyed train locks crossings [SF#1105112]
- Fix: Upgrade rail fails when train under bridge [SF#1105281] - Fix: Upgrade rail fails when train under bridge [SF#1105281]
- Fix: Trains do not think they're on a slope any more while they drive around in a tunnel [SF#1105959] - Fix: Trains do not think they're on a slope any more while they drive around in a tunnel [SF#1105959]
- Fix: Buoys can now only be removed if no ship has it in their schedule. This makes buoys more useable in multiplayer games again, as buoys cannot be deleted by other players if they are used [SF#1105963] - Fix: Buoys can now only be removed if no ship has it in their schedule. (This makes buoys more useable in multiplayer games again, as buoys cannot be deleted by other players if they are used.) [SF#1105963]
- Fix: Graph's keys get confused [SF#1106354] - Fix: Graph's keys get confused [SF#1106354]
- Fix: Placing signals with 2x1 drags is treated as placing a single signal [SF#1106930] - Fix: Placing signals with 2x1 drags is treated as placing a single signal [SF#1106930]
- Fix: Console ignoring return character occasionally [SF#1107350] - Fix: Console ignoring return character occasionally [SF#1107350]
@@ -3306,7 +3068,7 @@
- Fix: Vehicles slow down under bridge if the track is on a foundation - Fix: Vehicles slow down under bridge if the track is on a foundation
- Fix: You can no longer change name of waypoints whom are owned by somebody else - Fix: You can no longer change name of waypoints whom are owned by somebody else
- Fix: Shares are now also sold when a company goes bankrupt [SF#1090313] - Fix: Shares are now also sold when a company goes bankrupt [SF#1090313]
- Fix: It is no longer possible to crash trains of other companies by building a depot close to a station; trains do no longer enter tiles that do not belong to his owner [SF#1087701] - Fix: It is no longer possible to crash trains of other companies by building a depot close to a station. (even more: trains do no longer enter tiles that do not belong to his owner) [SF#1087701]
- Fix: Crashed trains are not reported to have too few orders any more [SF#1087403] - Fix: Crashed trains are not reported to have too few orders any more [SF#1087403]
- Fix: Backup-order-list was not closed with an OT_NOTHING, [SF#1086375] - Fix: Backup-order-list was not closed with an OT_NOTHING, [SF#1086375]
- Fix: Docks now have a button to display the catchment area [SF#1085255] - Fix: Docks now have a button to display the catchment area [SF#1085255]

View File

@@ -6,13 +6,8 @@
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. # See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
log() { log() {
if [ $1 = "1" ]; then if [ $1 = "1" ]; then echo "$2"; fi
shift echo "$2" >> $config_log
echo "$@"
else
shift
fi
echo "$@" >> $config_log
} }
set_default() { set_default() {
@@ -460,7 +455,6 @@ detect_params() {
# Clean the logfile # Clean the logfile
echo "" > $config_log echo "" > $config_log
log 2 "Invocation: $0 $*"
} }
save_params() { save_params() {
@@ -537,7 +531,7 @@ check_params() {
check_build check_build
check_host check_host
# Check for universal builds; they only make sense for OSX, so fail if enabled for another OS # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS
if [ "$enable_universal" = "0" ]; then if [ "$enable_universal" = "0" ]; then
log 1 "checking universal build... no" log 1 "checking universal build... no"
else else
@@ -2271,12 +2265,6 @@ detect_sdl() {
return 0 return 0
fi fi
if [ "$os" = "OSX" ]; then
log 1 "WARNING: sdl is known to fail on some versions of Mac OS X"
log 1 "WARNING: with some hardware configurations. Use at own risk!"
sleep 5
fi
if [ "$with_sdl" = "1" ] || [ "$with_sdl" = "" ] || [ "$with_sdl" = "2" ]; then if [ "$with_sdl" = "1" ] || [ "$with_sdl" = "" ] || [ "$with_sdl" = "2" ]; then
sdl_config="sdl-config" sdl_config="sdl-config"
else else

View File

@@ -1,24 +1,15 @@
32bpp and OpenTTD 32bpp and OpenTTD
Last updated: 2007-06-13 =================
------------------------------------------------------------------------
Table of contents
-----------------
1.0) About
2.0) The format
1.0) About
---- -----
OpenTTD has 32bpp support. This means: OpenTTD still is 8bpp, but it has the OpenTTD has 32bpp support. This means: OpenTTD still is 8bpp, but it has the
posibility to override the graphics with 32bpp. This means that it isn't a posibility to override the graphics with 32bpp. This means that it isn't a
replacement of grf or newgrf, but simply an addition. If you want to use 32bpp replacement of grf or newgrf, but simply an addition. If you want to use 32bpp
graphics of a newgrf, you do need the newgrf itself too (with 8bpp graphics). graphics of a newgrf, you do need the newgrf itself too (with 8bpp graphics).
2.0) The format The Format
---- ---------- ----------
32bpp images are stored in PNG. They should go in: 32bpp images are stored in PNG. They should go in:
data/sprites/<grfname>/<SpriteID>.png data/sprites/<grfname>/<SpriteID>.png
@@ -42,3 +33,4 @@ to add this information. Sadly enough most graphical editors trashes those
chunks upon save, so you have to readd it every time you save your image. chunks upon save, so you have to readd it every time you save your image.
Your images should be the same as the grf, in size. Your images should be the same as the grf, in size.

View File

@@ -1,17 +1,5 @@
OpenTTD and strgen STRGEN USAGE
Last updated: 2009-06-30 ------------
------------------------------------------------------------------------
Table of contents
-----------------
1.0) strgen usage
* 1.1) Examples
* 1.2) strgen command switches
1.0) strgen usage
---- ------------
This guide is only interesting for people who want to alter something This guide is only interesting for people who want to alter something
themselves without access to translator.openttd.org. Please note that themselves without access to translator.openttd.org. Please note that
your compiled language file will only be compatible with the OpenTTD version your compiled language file will only be compatible with the OpenTTD version
@@ -26,8 +14,8 @@ strgen takes as argument a txt file and translates it to a lng file, allowing
it to be used inside OpenTTD. strgen needs the master language file it to be used inside OpenTTD. strgen needs the master language file
english.txt to work. Below are some examples of strgen usage. english.txt to work. Below are some examples of strgen usage.
1.1) Examples EXAMPLES
---- -------- --------
Example 1: Example 1:
if you are in the root of your working copy (svn code), you should type if you are in the root of your working copy (svn code), you should type
strgen/strgen -s lang lang/english.txt strgen/strgen -s lang lang/english.txt
@@ -47,8 +35,8 @@ resulting language file to go to /tmp. Use
You can interchange english.txt to whichever language you want to generate a You can interchange english.txt to whichever language you want to generate a
.lng file for. .lng file for.
1.2) strgen command switches STRGEN COMMAND SWITCHES
---- ----------------------- -----------------------
-v | --version -v | --version
strgen will tell what svn revision it was last modified strgen will tell what svn revision it was last modified

View File

@@ -1,23 +1,19 @@
OpenTTD's admin network Admin Network
Last updated: 2011-01-20
------------------------------------------------------------------------ Preface
1. Joining the network
2. Asking for updates
3. Polling manually
4. Sending rcon commands
5. Sending chat
6. Receiving chat
7. Disconnecting
8. Certain packet information
Table of contents Preface
----------------- ----------
1.0) Preface
2.0) Joining the network
3.0) Asking for updates
* 3.1) Polling manually
4.0) Sending rcon commands
5.0) Sending chat
* 5.1) Receiving chat
6.0) Disconnecting
7.0) Certain packet information
1.0) Preface
---- -------
The admin network provides a dedicated network protocol designed for other The admin network provides a dedicated network protocol designed for other
applications to communicate with OpenTTD. Connected applications can execute applications to communicate with OpenTTD. Connected applications can execute
console commands remotely (rcon commands) with no further authentication. console commands remotely (rcon commands) with no further authentication.
@@ -37,14 +33,12 @@ Table of contents
removed from packets in later versions, except the possibility that complete removed from packets in later versions, except the possibility that complete
packets are dropped in favour of a new packet. packets are dropped in favour of a new packet.
This though will be reflected in the protocol version as announced in the This though will be reflected in the protocol version as announced in the
ADMIN_PACKET_SERVER_PROTOCOL in section 2.0). ADMIN_PACKET_SERVER_PROTOCOL in section 1.
A reference implementation in Java for a client connecting to the admin interface
can be found at: http://dev.openttdcoop.org/projects/joan
2.0) Joining the network 1. Joining the network
---- ------------------- ----------------------
Create a TCP connection to the server on port 3977. The application is Create a TCP connection to the server on port 3977. The application is
expected to authenticate within 10 seconds. expected to authenticate within 10 seconds.
@@ -74,8 +68,9 @@ Table of contents
However, ADMIN_PACKET_SERVER_WELCOME only after a ADMIN_PACKET_SERVER_NEWGAME However, ADMIN_PACKET_SERVER_WELCOME only after a ADMIN_PACKET_SERVER_NEWGAME
3.0) Asking for updates 2. Asking for updates
---- ------------------ ---------------------
Asking for updates is done with ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY. Asking for updates is done with ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY.
With this packet you define which update you wish to receive at which With this packet you define which update you wish to receive at which
frequency. frequency.
@@ -121,8 +116,9 @@ Table of contents
ADMIN_UPDATE_CMD_LOGGING results in the server sending: ADMIN_UPDATE_CMD_LOGGING results in the server sending:
- ADMIN_PACKET_SERVER_CMD_LOGGING - ADMIN_PACKET_SERVER_CMD_LOGGING
3.1) Polling manually 3. Polling manually
---- ---------------- -------------------
Certain AdminUpdateTypes can also be polled: Certain AdminUpdateTypes can also be polled:
- ADMIN_UPDATE_DATE - ADMIN_UPDATE_DATE
- ADMIN_UPDATE_CLIENT_INFO - ADMIN_UPDATE_CLIENT_INFO
@@ -142,8 +138,9 @@ Table of contents
Additional debug information can be found with a debug level of net=3. Additional debug information can be found with a debug level of net=3.
4.0) Sending rcon commands 4. Sending rcon commands
---- --------------------- ------------------------
Rcon runs separate from the ADMIN_UPDATE_CONSOLE AdminUpdateType. Requesting Rcon runs separate from the ADMIN_UPDATE_CONSOLE AdminUpdateType. Requesting
the execution of a remote console command is done with the packet the execution of a remote console command is done with the packet
ADMIN_PACKET_ADMIN_RCON. ADMIN_PACKET_ADMIN_RCON.
@@ -161,8 +158,9 @@ Table of contents
was not sent from the admin network. was not sent from the admin network.
5.0) Sending chat 5. Sending Chat
---- ------------ ---------------
Sending a ADMIN_PACKET_ADMIN_CHAT results in chat originating from the server. Sending a ADMIN_PACKET_ADMIN_CHAT results in chat originating from the server.
Currently four types of chat are supported: Currently four types of chat are supported:
@@ -175,8 +173,10 @@ Table of contents
using the respective DestType and ID. using the respective DestType and ID.
This is a message prefixed with the 3 stars, e.g. *** foo has joined the game This is a message prefixed with the 3 stars, e.g. *** foo has joined the game
5.1) Receiving chat
---- ------------- 6. Receiving chat
-----------------
Register ADMIN_UPDATE_CHAT at ADMIN_FREQUENCY_AUTOMATIC to receive chat. Register ADMIN_UPDATE_CHAT at ADMIN_FREQUENCY_AUTOMATIC to receive chat.
The application will be able to receive all chat the server can see. The application will be able to receive all chat the server can see.
@@ -184,14 +184,16 @@ Table of contents
private chat for to the server is distributed into the admin network. private chat for to the server is distributed into the admin network.
6.0) Disconnecting 7. Disconnecting
---- ------------- ----------------
It is a kind thing to say good bye before leaving. Do this by sending the It is a kind thing to say good bye before leaving. Do this by sending the
ADMIN_PACKET_ADMIN_QUIT packet. ADMIN_PACKET_ADMIN_QUIT packet.
7.0) Certain packet information 8. Certain packet information
---- -------------------------- -----------------------------
All ADMIN_PACKET_SERVER_* packets have an enum value greater 100. All ADMIN_PACKET_SERVER_* packets have an enum value greater 100.
ADMIN_PACKET_SERVER_WELCOME ADMIN_PACKET_SERVER_WELCOME
@@ -209,3 +211,4 @@ Table of contents
treated as such. Do not rely on IDs or names to be constant treated as such. Do not rely on IDs or names to be constant
across different versions / revisions of OpenTTD. across different versions / revisions of OpenTTD.
Data provided in this packet is for logging purposes only. Data provided in this packet is for logging purposes only.

View File

@@ -1,28 +1,9 @@
Multiplayer manual for OpenTTD Multiplayer Manual for OpenTTD
Last updated: 2011-02-16 ==============================
------------------------------------------------------------------------
1. Starting a Server
---------------------
Table of contents
-----------------
1.0) Starting a server
2.0) Connecting to a server
* 2.1) Connecting to a server over the console
3.0) Playing internet games
4.0) Tips for servers
* 4.1) Imposing landscaping limits
5.0) Some useful things
6.0) Troubleshooting
1.0) Starting a server
---- -----------------
- Make sure that you have your firewall of the computer as well as possible
routers or modems of the server configured such that:
* port 3979 is free for both UDP and TCP connections in- and outgoing
* port 3978 is free outbound for UDP in order to advertise with the master
server (if desired). Otherwise you'll have to tell players your IP.
* port 3977 if use of the admin interface is desired (see admin_network.txt)
- Click "multiplayer" on the startup screen - Click "multiplayer" on the startup screen
- Click "start server" - Click "start server"
- Type in a game name - Type in a game name
@@ -33,8 +14,9 @@ Table of contents
- Start playing - Start playing
2.0) Connecting to a server 2. Connecting to a Server
---- ---------------------- --------------------------
- Click "multiplayer" on the startup screen - Click "multiplayer" on the startup screen
- If you want to connect to any network game in your LAN click on 'LAN', then - If you want to connect to any network game in your LAN click on 'LAN', then
@@ -61,14 +43,17 @@ Table of contents
- Happy playing - Happy playing
2.1) Connecting to a server over the console
---- --------------------------------------- 3. Connecting to a Server over the Console
-------------------------------------------
- Open the console and type in the following command: - Open the console and type in the following command:
connect <ip/host>:<port>#<company-no> connect <ip/host>:<port>#<company-no>
3.0) Playing internet games 4. Playing Internet-Games
---- ---------------------- --------------------------
- Servers with a red dot behind it have a different version then you have. You - Servers with a red dot behind it have a different version then you have. You
will not be able to join those servers. will not be able to join those servers.
@@ -98,8 +83,9 @@ Table of contents
NB: changing frame_freq has more effect on the bandwidth then sync_freq. NB: changing frame_freq has more effect on the bandwidth then sync_freq.
4.0) Tips for servers 5. Tips for servers
---- ---------------- --------------------
- You can launch a dedicated server by adding -D as parameter. - You can launch a dedicated server by adding -D as parameter.
- In UNIX like systems, you can fork your dedicated server by adding -f as - In UNIX like systems, you can fork your dedicated server by adding -f as
parameter. parameter.
@@ -155,49 +141,10 @@ Table of contents
maximum memory usage for packets is: maximum memory usage for packets is:
#max_clients * #max_clients * bytes_per_frame * 10 KiB. #max_clients * #max_clients * bytes_per_frame * 10 KiB.
4.1) Imposing landscaping limits
---- ---------------------------
- You can impose limits on companies by the following 4 settings:
- terraform_per_64k_frames
- terraform_frame_burst
- clear_per_64k_frames
- clear_frame_burst
- Explaining 'per_64K_frames' and 'burst' 6. Some useful things
- 'burst' defines 3 things, the maximum limit, the limit of a single action, ----------------------
and the initial value for the limit assigned to a new company.
This setting is fairly simple and requires no math.
A value of 1 means a single tile can be affected by a single action.
This results in having to click 400 times when wanting to cover an area
of 20 x 20 tiles.
The default value 4096 covers an area of 64 x 64 tiles.
- 'per_64k_frames' defines the number of tiles added to each companies limit
per frame (however not past the possible maximum value,the 'burst').
64k rather resembles the exact number of 65536 frames. So setting this
variable to 65536 means: 65536 / 65536 = 1 tile per frame.
As a day consists of 74 frames, a company's limit is increased by 74
tiles during the course of a single day (2.22 seconds).
To achieve a 1 tile per day increase the following calculation is needed:
1 / 74 (frames per day) * 65536 (per_64k_frames) = 885.62...
after rounding: a value of 886 means adding a bit over 1 tile per day.
There is still enough space to scale this value downwards:
decreasing this value to 127 results in a bit over 1 tile added to the
allowance per week (7 days).
To create a setup in which a company gets an initial allowance only,
set the value to 0 - no increase of the allowance per frame.
- Even though construction actions include a clear tile action, they are not
affected by the above settings.
5.0) Some useful things
---- ------------------
- You can protect your company so nobody else can join uninvited. To do this, - You can protect your company so nobody else can join uninvited. To do this,
set a password in your Company Screen set a password in your Company Screen
@@ -209,11 +156,11 @@ Table of contents
- Servers can now kick players, so don't make them use it! - Servers can now kick players, so don't make them use it!
6.0) Troubleshooting 7. Troubleshooting
---- --------------- ------------------
- My advertising server does not show up in list at servers.openttd.org - My advertising server does not show up in list at servers.openttd.org
Run openttd with the '-d net=2' parameter. That will show which incoming Run openttd with the '-d net=2' parameter, as this will show whether it
communication is received, whether the replies from the master server or receives replies from the master server. If it does not receive replies it
communication from an admin tool reach the programme. See section 1 is most likely that you need to configure your router to forward ports
'Starting a server' further up for the ports and protocols used by OpenTTD. 3979 (both TCP and UDP) to the computer that is hosting the game.
The ports can be configured in the config file.

View File

@@ -93,17 +93,12 @@ elif [ -d "$ROOT_DIR/.git" ]; then
fi fi
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
REV="g`echo $HASH | cut -c1-8`" REV="g`echo $HASH | cut -c1-8`"
BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@;s@^master$@@'`" BRANCH=`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@;s@^master$@@'`
REV_NR=`LC_ALL=C git log --pretty=format:%s --grep="^(svn r[0-9]*)" -1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"` REV_NR=`LC_ALL=C git log --pretty=format:%s --grep="^(svn r[0-9]*)" -1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
if [ -z "$REV_NR" ]; then if [ -z "$REV_NR" ]; then
# No rev? Maybe it is a custom git-svn clone # No rev? Maybe it is a custom git-svn clone
REV_NR=`LC_ALL=C git log --pretty=format:%b --grep="git-svn-id:.*@[0-9]*" -1 | sed "s@.*\@\([0-9]*\).*@\1@"` REV_NR=`LC_ALL=C git log --pretty=format:%b --grep="git-svn-id:.*@[0-9]*" -1 | sed "s@.*\@\([0-9]*\).*@\1@"`
fi fi
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"
fi
elif [ -d "$ROOT_DIR/.hg" ]; then elif [ -d "$ROOT_DIR/.hg" ]; then
# We are a hg checkout # We are a hg checkout
if [ -n "`hg status | grep -v '^?'`" ]; then if [ -n "`hg status | grep -v '^?'`" ]; then
@@ -111,17 +106,8 @@ elif [ -d "$ROOT_DIR/.hg" ]; then
fi fi
HASH=`LC_ALL=C hg id -i | cut -c1-12` HASH=`LC_ALL=C hg id -i | cut -c1-12`
REV="h`echo $HASH | cut -c1-8`" REV="h`echo $HASH | cut -c1-8`"
BRANCH="`hg branch | sed 's@^default$@@'`" BRANCH=`hg branch | sed 's@^default$@@'`
TAG="`hg id -t | grep -v 'tip$'`" REV_NR=`LC_ALL=C hg log -f -k "(svn r" -l 1 --template "{desc}\n" | head -n 1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"
fi
REV_NR=`LC_ALL=C hg log -f -k "(svn r" -l 1 --template "{desc|firstline}\n" | grep "^(svn r[0-9]*)" | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
if [ -z "$REV_NR" ]; then
# No rev? Maybe it is a custom hgsubversion clone
REV_NR=`LC_ALL=C hg parent --template="{svnrev}"`
fi
elif [ -f "$ROOT_DIR/.ottdrev" ]; then elif [ -f "$ROOT_DIR/.ottdrev" ]; then
# We are an exported source bundle # We are an exported source bundle
cat $ROOT_DIR/.ottdrev cat $ROOT_DIR/.ottdrev

View File

@@ -1,18 +1,18 @@
OpenTTD's known bugs OpenTTD's known bugs
Last updated: 2011-05-15 Last updated: 2010-12-31
Release version: 1.1.1-RC1 Release version: 1.1.0-beta2
------------------------------------------------------------------------ ------------------------------------------------------------------------
Table of contents Table of Contents:
----------------- ------------------
1.0) About 1) About
2.0) Known bugs in this release 2) Known bugs in the this stable release
* 2.1) Known bugs that will not be solved 3) Known bugs that will not be solved
1.0) About 1) About:
---- ----- -- ------
All bugs listed below are marked as known. Please do not submit any bugs All bugs listed below are marked as known. Please do not submit any bugs
that are the same as these. If you do, do not act surprised, because that are the same as these. If you do, do not act surprised, because
we WILL flame you!! we WILL flame you!!
@@ -22,12 +22,12 @@ specifics, we welcome you to report them. React to the given bug indicated
by the number below on http://bugs.openttd.org. by the number below on http://bugs.openttd.org.
2.0) Known bugs in this release 2) Known bugs in this stable release:
---- -------------------------- -- ----------------------------------
The following bugs are known to exist in this release and we intend to The following bugs are known to exist in this stable release and
fix them. Some bugs are known but are not fixable or fixing them would we intend to fix them. Some bugs are known but are not fixable or
cause further problems. Those bugs can be found in the "Known bugs that fixing them would cause further problems. Those bugs can be found
will not be solved" section. in the "Known bugs that will not be solved" section.
The bugs in this section all refer to a ticket in our bug tracking system The bugs in this section all refer to a ticket in our bug tracking system
that you can find at: http://bugs.openttd.org that you can find at: http://bugs.openttd.org
@@ -39,13 +39,13 @@ officially supporting Mac OS X again. For now it remains unsupported and
we only apply bug fixes provided by the community but we are unable to fix we only apply bug fixes provided by the community but we are unable to fix
these bugs ourselves. these bugs ourselves.
- 4594 [Windows] Minimizing the windows when a modal error message is - 3569 Location of wagons can be outside of the wagon
shown makes it difficult to exit the game - 3447 [OSX] SDL port is unuseable
- 4420 [OSX] OS' mouse pointer still shows - 2484 [OSX] Cannot enter CJK characters
- 2484 [OSX] Cannot enter CJK characters
2.1) Known bugs that will not be solved
---- ---------------------------------- 3) Known bugs that will not be solved:
-- -----------------------------------
This section lists all known bugs that we do not intend to fix and the This section lists all known bugs that we do not intend to fix and the
reasons why we think that fixing them is infeasible. We might make some reasons why we think that fixing them is infeasible. We might make some
minor improvements that reduce the scope of these bugs, but we will not minor improvements that reduce the scope of these bugs, but we will not
@@ -214,15 +214,6 @@ OpenTTD not properly resizing with SDL on X [FS#3305]
and GNOME's. With the XFCE's and LXDE's window managers the resize and GNOME's. With the XFCE's and LXDE's window managers the resize
event is sent when the user releases the mouse. event is sent when the user releases the mouse.
Incorrect colours, crashes upon exit, debug warnings and smears upon
window resizing with SDL on Mac OS X [FS#3447]
Video handling with (lib)SDL under Mac OS X is known to fail on some
versions of Mac OS X with some hardware configurations. Some of the
problems happen only under some circumstances whereas others are
always present.
We suggest that the SDL video/sound backend is not used for OpenTTD
in combinations with Mac OS X.
Train crashes entering same junction from block and path signals [FS#3928] Train crashes entering same junction from block and path signals [FS#3928]
When a train has reserved a path from a path signal to a two way When a train has reserved a path from a path signal to a two way
block signal and the reservation passes a path signal through the block signal and the reservation passes a path signal through the
@@ -268,36 +259,3 @@ OpenTTD hangs when started on 32 bits Windows [FS#4083]
The reason we do not use the "win32" music driver as default are The reason we do not use the "win32" music driver as default are
described in the "Long delay between switching music/song" section described in the "Long delay between switching music/song" section
of this document. of this document.
Pre- and exit signals are not dragged [FS#4378]
Unlike all other signal types, the entry- and exit signals are not
dragged but instead normal signals are placed on subsequent track
sections. This is done on purpose as this is the usually more con-
venient solution. There are little to no occasions where more than
one entry or exit signal in a row are useful. This is different
for all other signal types where several in a row can serve one
purpose or another.
Station build date is incorrect [FS#4415]
The tile query tool will show the date of the last (re)construction
at the station and not the date of the first construction. This is
due to compatability reasons with NewGRFs and the fact that it is
wrong to say that the station is built in a particular year when it
was completely destroyed/rebuilt later on.
The tile query tool can be fixed by changing the "Build date" text
to "Date at which the last (re)construction took place" but this is
deemed too specific and long for that window.
Can't change volume inside OpenTTD [FS#4416]
Some backends do not provide a means to change the volume of sound
effects or music. The mixing of music and sound is left to external
libraries/the operating system we can't handle the volume control
in OpenTTD. As a result you can't change the volume inside OpenTTD
for backends such as SDL; just use the volume control provided by
your operating system.
Can't run OpenTTD with the -d option from a MSYS console [FS#4587]
The MSYS console does not allow OpenTTD to open an extra console for
debugging output. Compiling OpenTTD with the --enable-console
configure option prevents this issue and allows the -d option to use
the MSYS console for its output.

View File

@@ -8,13 +8,13 @@
// //
-1 * 0 0C "Fixing (alignment) bugs in the orignal graphics. By Addi." -1 * 0 0C "Fixing (alignment) bugs in the orignal graphics. By Addi."
-1 * 6 07 83 01 \7= 03 69 -1 * 6 07 83 01 \7= 03 69
// Different graphics for same wood truck // Different grahpics for same wood truck
-1 * 14 0A 04 01 87 0C 01 89 0C 01 07 0E 01 09 0E -1 * 14 0A 04 01 87 0C 01 89 0C 01 07 0E 01 09 0E
-1 sprites/fix_graphics.png 82 8 09 16 22 -6 -7 -1 sprites/fix_graphics.png 82 8 09 16 22 -6 -7
-1 sprites/fix_graphics.png 114 8 09 16 22 -14 -7 -1 sprites/fix_graphics.png 114 8 09 16 22 -14 -7
-1 sprites/fix_graphics.png 146 8 09 16 22 -6 -7 -1 sprites/fix_graphics.png 146 8 09 16 22 -6 -7
-1 sprites/fix_graphics.png 178 8 09 16 22 -14 -7 -1 sprites/fix_graphics.png 178 8 09 16 22 -14 -7
// Different graphics for lots of trucks // Different grahpics for lots of trucks
-1 * 5 0A 01 28 C4 0D -1 * 5 0A 01 28 C4 0D
-1 sprites/fix_graphics.png 226 8 01 18 8 -3 -10 -1 sprites/fix_graphics.png 226 8 01 18 8 -3 -10
-1 sprites/fix_graphics.png 242 8 09 16 20 -14 -7 -1 sprites/fix_graphics.png 242 8 09 16 20 -14 -7
@@ -56,19 +56,19 @@
-1 sprites/fix_graphics.png 610 40 09 16 20 -14 -7 -1 sprites/fix_graphics.png 610 40 09 16 20 -14 -7
-1 sprites/fix_graphics.png 642 40 01 12 28 -14 -6 -1 sprites/fix_graphics.png 642 40 01 12 28 -14 -6
-1 sprites/fix_graphics.png 690 40 09 16 20 -6 -7 -1 sprites/fix_graphics.png 690 40 09 16 20 -6 -7
// Different graphics for same truck // Different grahpics for same truck
-1 * 14 0A 04 01 9D 0C 01 9F 0C 01 A1 0C 01 A3 0C -1 * 14 0A 04 01 9D 0C 01 9F 0C 01 A1 0C 01 A3 0C
-1 sprites/fix_graphics.png 738 40 09 16 22 -14 -7 -1 sprites/fix_graphics.png 738 40 09 16 22 -14 -7
-1 sprites/fix_graphics.png 770 40 09 16 22 -6 -7 -1 sprites/fix_graphics.png 770 40 09 16 22 -6 -7
-1 sprites/fix_graphics.png 2 72 09 16 22 -14 -7 -1 sprites/fix_graphics.png 2 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 34 72 09 16 22 -6 -7 -1 sprites/fix_graphics.png 34 72 09 16 22 -6 -7
// Different graphics for same paper truck // Different grahpics for same paper truck
-1 * 14 0A 04 01 5D 0D 01 5F 0D 01 61 0D 01 63 0D -1 * 14 0A 04 01 5D 0D 01 5F 0D 01 61 0D 01 63 0D
-1 sprites/fix_graphics.png 82 72 09 16 22 -14 -7 -1 sprites/fix_graphics.png 82 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 114 72 09 17 22 -5 -7 -1 sprites/fix_graphics.png 114 72 09 17 22 -5 -7
-1 sprites/fix_graphics.png 146 72 09 17 22 -14 -8 -1 sprites/fix_graphics.png 146 72 09 17 22 -14 -8
-1 sprites/fix_graphics.png 178 72 09 16 22 -6 -7 -1 sprites/fix_graphics.png 178 72 09 16 22 -6 -7
// Different graphics for same paper truck (truck #2) // Different grahpics for same paper truck (truck #2)
-1 * 14 0A 04 01 1D 0E 01 1F 0E 01 21 0E 01 23 0E -1 * 14 0A 04 01 1D 0E 01 1F 0E 01 21 0E 01 23 0E
-1 sprites/fix_graphics.png 226 72 09 16 22 -14 -7 -1 sprites/fix_graphics.png 226 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 258 72 09 16 22 -6 -7 -1 sprites/fix_graphics.png 258 72 09 16 22 -6 -7
@@ -135,13 +135,13 @@
// Non-toyland specific // Non-toyland specific
-1 * 6 07 83 01 \7= 03 0A -1 * 6 07 83 01 \7= 03 0A
// graphics for the tubular bridge pillars had incorrect offsets // Grahpics for the tubular bridge pillars had incorrect offsets
-1 * 5 0A 01 04 05 0A -1 * 5 0A 01 04 05 0A
-1 sprites/fix_graphics.png 98 296 09 9 4 2 -1 -1 sprites/fix_graphics.png 98 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 114 296 09 9 4 2 -1 -1 sprites/fix_graphics.png 114 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 130 296 09 9 4 -4 0 -1 sprites/fix_graphics.png 130 296 09 9 4 -4 0
-1 sprites/fix_graphics.png 146 296 09 9 4 -4 0 -1 sprites/fix_graphics.png 146 296 09 9 4 -4 0
// graphics for the cantilever bridge pillars had incorrect offsets // Grahpics for the cantilever bridge pillars had incorrect offsets
-1 * 5 0A 01 04 DD 09 -1 * 5 0A 01 04 DD 09
-1 sprites/fix_graphics.png 178 296 09 11 10 2 -3 -1 sprites/fix_graphics.png 178 296 09 11 10 2 -3
-1 sprites/fix_graphics.png 194 296 09 12 10 2 -2 -1 sprites/fix_graphics.png 194 296 09 12 10 2 -2
@@ -150,51 +150,15 @@
// Toyland specific // Toyland specific
-1 * 6 07 83 01 \7! 03 0A -1 * 6 07 83 01 \7! 03 0A
// Graphics for the toyland tubular bridge pillars had incorrect offsets // Grahpics for the toyland tubular bridge pillars had incorrect offsets
-1 * 5 0A 01 04 05 0A -1 * 5 0A 01 04 05 0A
-1 sprites/fix_graphics.png 248 296 09 9 4 2 -1 -1 sprites/fix_graphics.png 248 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 264 296 09 9 4 2 -1 -1 sprites/fix_graphics.png 264 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 280 296 09 9 4 -4 0 -1 sprites/fix_graphics.png 280 296 09 9 4 -4 0
-1 sprites/fix_graphics.png 296 296 09 9 4 -4 0 -1 sprites/fix_graphics.png 296 296 09 9 4 -4 0
// Graphics for the toyland cantilever bridge pillars had incorrect offsets // Grahpics for the toyland cantilever bridge pillars had incorrect offsets
-1 * 5 0A 01 04 DD 09 -1 * 5 0A 01 04 DD 09
-1 sprites/fix_graphics.png 328 296 09 11 10 2 -3 -1 sprites/fix_graphics.png 328 296 09 11 10 2 -3
-1 sprites/fix_graphics.png 344 296 09 12 10 2 -2 -1 sprites/fix_graphics.png 344 296 09 12 10 2 -2
-1 sprites/fix_graphics.png 360 296 09 11 10 -10 -1 -1 sprites/fix_graphics.png 360 296 09 11 10 -10 -1
-1 sprites/fix_graphics.png 376 296 09 11 10 -10 -1 -1 sprites/fix_graphics.png 376 296 09 11 10 -10 -1
// Wrong, non-translated colours in tubular bridge in 'normal' climates
// Toyland has separate sprites which are not colour translated, thus
// this does not apply there;
// Pillars are changed for all climates further up
-1 * 6 07 83 01 \7= 03 \b22
// Main tubular bridge sprites
-1 * 5 0A 01 \b6 \w2559
-1 sprites/fix_graphics.png 2 330 09 40 32 -30 -26
-1 sprites/fix_graphics.png 52 330 09 50 44 -42 -26
-1 sprites/fix_graphics.png 116 330 09 45 46 -42 -21
-1 sprites/fix_graphics.png 180 330 09 45 46 -2 -20
-1 sprites/fix_graphics.png 244 330 09 50 44 0 -25
-1 sprites/fix_graphics.png 308 330 09 41 32 0 -25
// start rail bridge
-1 * 5 0A 01 01 \w2569
-1 sprites/fix_graphics.png 350 330 09 29 52 -25 -4
// start rail + road bridge
-1 * 5 0A 01 02 \w2574
-1 sprites/fix_graphics.png 420 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 489 330 09 29 52 -25 -4
// start road + monorail bridge
-1 * 5 0A 01 02 \w2580
-1 sprites/fix_graphics.png 559 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 629 330 09 29 52 -25 -4
// start monrail + maglev bridge
-1 * 5 0A 01 02 \w2586
-1 sprites/fix_graphics.png 699 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 489 283 09 29 52 -25 -4
// start maglev bridge
-1 * 5 0A 01 01 \w2592
-1 sprites/fix_graphics.png 559 283 09 29 50 -25 -4
// GUI sprite
-1 * 5 0A 01 01 \w2600
-1 sprites/fix_graphics.png 433 298 09 15 40 0 5

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,58 +1,10 @@
openttd (1.1.1~RC1) unstable; urgency=low openttd (1.1.0~beta2); urgency=low
* New upstream release 1.1.1-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 15 May 2011 21:00:00 +0200
openttd (1.1.0) unstable; urgency=low
* New upstream release 1.1.0
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 01 Apr 2011 00:00:00 +0100
openttd (1.1.0~RC3) unstable; urgency=low
* New upstream release 1.1.0-RC3
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 18 Mar 2011 22:00:00 +0100
openttd (1.1.0~RC2) unstable; urgency=low
* New upstream release 1.1.0-RC2
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 04 Mar 2011 22:00:00 +0100
openttd (1.1.0~RC1) unstable; urgency=low
* New upstream release 1.1.0-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 18 Feb 2011 22:00:00 +0100
openttd (1.1.0~beta5) unstable; urgency=low
* New upstream release 1.1.0-beta5
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 04 Feb 2011 22:00:00 +0100
openttd (1.1.0~beta4) unstable; urgency=low
* New upstream release 1.1.0-beta4
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 21 Jan 2011 00:00:00 +0100
openttd (1.1.0~beta3) unstable; urgency=low
* New upstream release 1.1.0-beta3
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 09 Jan 2011 18:00:00 +0100
openttd (1.1.0~beta2) unstable; urgency=low
* New upstream release 1.1.0-beta2 * New upstream release 1.1.0-beta2
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 31 Dec 2010 18:00:00 +0100 -- Matthijs Kooijman <matthijs@stdin.nl> Fri, 31 Dec 2010 18:00:00 +0100
openttd (1.1.0~beta1) unstable; urgency=low openttd (1.1.0~beta1); urgency=low
* New upstream release 1.1.0-beta1 * New upstream release 1.1.0-beta1

View File

@@ -1,6 +1,6 @@
@echo off @echo off
set OPENTTD_VERSION=1.1.1-RC1 set OPENTTD_VERSION=1.1.0-beta2
set OPENSFX_VERSION=0.8.0 set OPENSFX_VERSION=0.8.0
set NOSOUND_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0
set OPENGFX_VERSION=0.7.0 set OPENGFX_VERSION=0.7.0

View File

@@ -1,6 +0,0 @@
# the man page is in the subpackage data
addFilter("openttd.*: W: no-manual-page-for-binary openttd")
# no other package depends on this package, so this should not matter
addFilter("openttd.*: W: file-contains-date-and-time /usr/bin/openttd")
addFilter("openttd.*: W: file-contains-current-date /usr/bin/openttd")

View File

@@ -1,100 +0,0 @@
-------------------------------------------------------------------
Sun Mar 6 09:36:55 UTC 2011 - ammler@openttdcoop.org
- upstream update 1.1.0-RC2
* Feature: XZ/LZMA2 savegame support. New default reduces
savegame size by 10 to 30% with slightly more CPU usage.
(requires xz-devel)
* Feature: Remote administration
* Feature: a lot improvements with GUI
* Feature: Customizable hotkeys
* Sources for openttd.grf are pngs (requires grfcodec >= 5.1)
-------------------------------------------------------------------
Sun Nov 21 11:11:38 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.5
* Fix: Reading (very) recently freed memory [CVE-2010-4168]
-------------------------------------------------------------------
Sun Oct 31 17:53:41 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.4
* build openttd.grf from source
-------------------------------------------------------------------
Tue Aug 10 20:16:03 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.3
-------------------------------------------------------------------
Wed Jun 23 11:42:59 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.2
* Feature: Translated desktop shortcut comments (r19884)
* many minor Bugfixes
-------------------------------------------------------------------
Sat May 1 15:59:32 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.1
* Fix: Leaking a file descriptor
* Fix a lot small bugs, like minor desync issues on Mulitplayer
- no strip on make
-------------------------------------------------------------------
Thu Apr 1 08:53:54 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.0 (finally!)
* completely independend game but still working also
with ttd original gaphics, sounds and music
- Add: Recommends openmsx
- requires lzo2
-------------------------------------------------------------------
Fri Dec 18 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.4
- support for differen branches
- easy support for dedicated branch
- let openttd build system make the dektop file
- split the package to data and gui
- disable requires
-------------------------------------------------------------------
Thu Oct 01 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.3
- disable libicu for RHEL4
-------------------------------------------------------------------
Sat Sep 26 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.2
- no subfolder games for datadir
- cleanup: no post and postun anymore
- Recommends: opengfx (for suse and mandriva)
- add SUSE support
-------------------------------------------------------------------
Mon Oct 20 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Added libicu dependency
-------------------------------------------------------------------
Thu Sep 23 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Merged both versions of the spec file
-------------------------------------------------------------------
Fri Aug 29 2008 Jonathan Coome <maedhros@openttd.org>
- Rewrite spec file from scratch.
-------------------------------------------------------------------
Sat Aug 02 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Updated spec file
-------------------------------------------------------------------
Thu Mar 27 2008 Denis Burlaka <burlaka@yandex.ru>
- Universal spec file

View File

@@ -1,199 +1,202 @@
%define dedicated 0 # $Id$
#-------------------------------------------------------------------------------
# spec file for the openttd rpm package
#
# Copyright (c) 2007-2010 The OpenTTD developers
#
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself
#
# Note: for (at least) CentOS '#' comments end '\' continue command on new line.
# So place all '#' commented parameters of e.g. configure to the end.
#
#-------------------------------------------------------------------------------
%define binname openttd Name: openttd
Version: 1.1.0
Release: 1%{?dist}
%define srcver 1.1.1 Group: Amusements/Games
License: GPLv2
URL: http://www.openttd.org
Summary: OpenTTD is an Open Source clone of Chris Sawyer's Transport Tycoon Deluxe
%if %{dedicated} Source: %{name}-%{version}-source.tar.bz2
Name: %{binname}-dedicated
%else
Name: %{binname}
%endif
Version: %{srcver}
Release: 1%{?dist}
Group: Amusements/Games/Strategy/Other
License: GPLv2
URL: http://www.openttd.org
Summary: An open source clone of Chris Sawyer's Transport Tycoon Deluxe
Source: openttd%{?branch:-%{branch}}-%{srcver}-source.tar.bz2
# the main package works with the exact same data package version only
Requires: %{binname}-data = %{version}
BuildRequires: gcc-c++
BuildRequires: libpng-devel
BuildRequires: zlib-devel
%if 0%{?mdkversion}
BuildRequires: liblzo-devel
BuildRequires: liblzma-devel
%else
BuildRequires: lzo-devel
BuildRequires: xz-devel
%endif
#needed by libdrm
%if 0%{?rhel_version} >= 600
BuildRequires: kernel
%endif
# for lzma detection
%if 0%{?suse_version}
BuildRequires: pkg-config
%endif
# Desktop specific tags, not needed for dedicated
%if !%{dedicated}
BuildRequires: fontconfig-devel
BuildRequires: SDL-devel
BuildRequires: grfcodec
Requires: fontconfig
Requires: SDL
Requires: zlib
Requires: xz-devel
BuildRequires: gcc-c++
BuildRequires: fontconfig-devel
BuildRequires: libpng-devel
BuildRequires: libicu-devel
BuildRequires: SDL-devel
BuildRequires: zlib-devel
# vendor specific dependencies # vendor specific dependencies
%if !0%{?rhel_version} %if %{_vendor}=="alt"
BuildRequires: libicu-devel Requires: freetype
%endif BuildRequires: freetype-devel
%if 0%{?rhel_version} || 0%{?fedora} %endif
BuildRequires: freetype-devel %if %{_vendor}=="redhat" || %{_vendor}=="fedora"
%endif Requires: freetype
%if 0%{?suse_version} || 0%{?mdkversion} BuildRequires: freetype-devel
BuildRequires: freetype2-devel BuildRequires: desktop-file-utils
%endif %endif
%if 0%{?suse_version} %if %{_vendor}=="suse" || %{_vendor}=="mandriva"
BuildRequires: update-desktop-files Requires: freetype2
%endif BuildRequires: freetype2-devel
%endif
%if %{_vendor}=="suse"
BuildRequires: update-desktop-files
%endif %endif
%if %{dedicated}
Conflicts: %{binname} %{binname}-gui
%else
Provides: %{binname}-gui
Conflicts: %{binname}-dedicated
Requires: openttd-opensfx
# recommends works for suse (not sles9) and mandriva, only # recommends works for suse (not sles9) and mandriva, only
%if 0%{?suse_version} || 0%{?mdkversion} %if 0%{?suse_version} > 910 || %{_vendor}=="mandriva"
# require timidity is part of openmsx Recommends: opengfx
Recommends: openttd-openmsx # for 0.8.0
%endif #Recommends: opensfx
%endif %endif
# Recommends would fit better but not well supported...
Requires: openttd-opengfx >= 0.3.2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
%description %description
OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe"
with lots of new features and enhancements. To play the game you need either with lots of new features and enhancements. To play the game you need either
the original data from the game or install the recommend subackages OpenGFX for the original data from the game or install the recommend package OpenGFX.
free graphics, OpenSFX for free sounds and OpenMSX for free music.
OpenTTD is licensed under the GNU General Public License version 2.0. For more OpenTTD is licensed under the GNU General Public License version 2.0. For more
information, see the file 'COPYING' included with every release and source information, see the file 'COPYING' included with every release and source
download of the game. download of the game.
# the subpackage data needs only to build once, the dedicated version
# can reuse the data package of the gui package
%if !%{dedicated}
%package data
Summary: Data package for OpenTTD
Group: Amusements/Games/Strategy/Other
%if 0%{?suse_version} >= 1120 || 0%{?fedora} || 0%{?mdkversion}
BuildArch: noarch
%endif
BuildRequires: grfcodec
%description data
OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe"
with lots of new features and enhancements. To play the game you need either
the original data from the game or the required package OpenGFX and OpenSFX.
This package is required by openttd gui and openttd dedicated package. This
way it is possible to install a openttd version without SDL requirement.
%endif
%prep %prep
%setup -qn openttd%{?branch:-%{branch}}-%{srcver} %setup -q
# we build the grfs from sources but validate the result with the existing data
md5sum bin/data/* > validate.data
%build %build
# suse sle <10 has no support for makedepend
%if 0%{?sles_version} == 9 || 0%{?sles_version} == 10
%define do_makedepend 0
%else
%define do_makedepend 1
%endif
./configure \ ./configure \
--prefix-dir="%{_prefix}" \ --prefix-dir="%{_prefix}" \
--binary-name="%{binname}" \ --binary-name="%{name}" \
--binary-dir="bin" \ --enable-strip \
--data-dir="share/%{binname}" \ --binary-dir="bin" \
--doc-dir="share/doc/%{binname}" \ --data-dir="share/%{name}" \
--menu-name="OpenTTD%{?branch: %{branch}}" \ --with-makedepend="%{do_makedepend}" \
--menu-group="Game;StrategyGame;" \ # --revision="%{ver}%{?prever:-%{prever}}" \
--enable-dedicated="%{dedicated}" \ # --enable-debug=0 \
# --with-sdl \
# --with-zlib \
# --with-png \
# --with-freetype \
# --with-fontconfig \
# --with-icu \
# --menu_group="Game;" \
# --menu-name="OpenTTD" \
# --doc-dir="share\doc\%{name}" \
# --icon-dir="share/pixmaps" \
# --icon-theme-dir="share/icons/hicolor" \
# --man-dir="share/man/man6" \
# --menu-dir="share/applications"
make %{?_smp_mflags} make %{?_smp_mflags}
%install %install
%if %{dedicated}
# dedicated package needs binary only
install -D -m0755 bin/openttd %{buildroot}/%{_bindir}/%{binname}
%else
make install INSTALL_DIR="%{buildroot}" make install INSTALL_DIR="%{buildroot}"
%if 0%{?suse_version}
%suse_update_desktop_file -r %{binname} Game StrategyGame # Validate menu entrys (vendor specific)
%endif %if %{_vendor} == "redhat" || %{_vendor}=="fedora"
desktop-file-install \
--vendor="%{_vendor}" \
--remove-key Version \
--dir="%{buildroot}/%{_datadir}/applications/" \
"%{buildroot}/%{_datadir}/applications/%{name}.desktop" \
# --delete-original
%endif
%if %{_vendor}=="suse"
%__cat > %{name}.desktop << EOF
[Desktop Entry]
Encoding=UTF-8
Name=OpenTTD
Comment=OpenTTD - A clone of the Microprose game 'Transport Tycoon Deluxe'
GenericName=OpenTTD
Type=Application
Terminal=false
Exec=%{name}
Icon=%{name}
Categories=Game;StrategyGame;
EOF
%suse_update_desktop_file -i %{name} Game StrategyGame
%endif %endif
%clean %clean
rm -rf "%{buildroot}" #rm -rf "%{buildroot}"
%check %post
md5sum -c validate.data # Update the icon cache (vendor specific)
%if %{_vendor}=="mandriva"
%files %update_icon_cache hicolor
%attr(755, root, root) %{_bindir}/%{binname}
# all other files are for the gui version only, also no
# subpackage needed for the dedicated version
%if !%{dedicated}
%defattr(-, root, root)
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/16x16
%dir %{_datadir}/icons/hicolor/16x16/apps
%dir %{_datadir}/icons/hicolor/32x32
%dir %{_datadir}/icons/hicolor/32x32/apps
%dir %{_datadir}/icons/hicolor/48x48
%dir %{_datadir}/icons/hicolor/48x48/apps
%dir %{_datadir}/icons/hicolor/64x64
%dir %{_datadir}/icons/hicolor/64x64/apps
%dir %{_datadir}/icons/hicolor/128x128
%dir %{_datadir}/icons/hicolor/128x128/apps
%dir %{_datadir}/icons/hicolor/256x256
%dir %{_datadir}/icons/hicolor/256x256/apps
%{_datadir}/applications/%{binname}.desktop
%{_datadir}/icons/hicolor/16x16/apps/%{binname}.png
%{_datadir}/icons/hicolor/32x32/apps/%{binname}.png
%{_datadir}/icons/hicolor/48x48/apps/%{binname}.png
%{_datadir}/icons/hicolor/64x64/apps/%{binname}.png
%{_datadir}/icons/hicolor/128x128/apps/%{binname}.png
%{_datadir}/icons/hicolor/256x256/apps/%{binname}.png
%{_datadir}/pixmaps/%{binname}.32.xpm
%files data
%defattr(-, root, root)
%dir %{_datadir}/doc/%{binname}
%dir %{_datadir}/%{binname}
%dir %{_datadir}/%{binname}/lang
%dir %{_datadir}/%{binname}/data
%dir %{_datadir}/%{binname}/gm
%dir %{_datadir}/%{binname}/scripts
%dir %{_datadir}/%{binname}/ai
%{_datadir}/doc/%{binname}/*
%{_datadir}/%{binname}/lang/*
%{_datadir}/%{binname}/data/*
%{_datadir}/%{binname}/scripts/*
%{_datadir}/%{binname}/ai/*
%{_datadir}/%{binname}/gm/*
%doc %{_mandir}/man6/%{binname}.6.*
%endif %endif
%if %{_vendor} == "redhat" || %{_vendor}=="fedora"
touch --no-create %{_datadir}/icons/hicolor
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%endif
%postun
# Update the icon cache (vendor specific)
%if %{_vendor}=="mandriva"
%update_icon_cache hicolor
%endif
%if %{_vendor} == "redhat" || %{_vendor}=="fedora"
touch --no-create %{_datadir}/icons/hicolor
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%endif
%files
%defattr(-, root, games, -)
%dir %{_datadir}/doc/%{name}
%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/lang
%dir %{_datadir}/%{name}/data
%dir %{_datadir}/%{name}/gm
%dir %{_datadir}/%{name}/scripts
%attr(755, root, games) %{_bindir}/%{name}
%{_datadir}/doc/%{name}/*
%{_datadir}/%{name}/lang/*
%{_datadir}/%{name}/data/*
%{_datadir}/%{name}/scripts/*
%{_datadir}/applications/*%{name}.desktop
%{_datadir}/pixmaps/*
%{_datadir}/icons/*
%doc %{_mandir}/man6/%{name}.6.*
%changelog %changelog
* Sat Sep 26 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.2
- no subfolder games for datadir
- cleanup: no post and postun anymore
- Recommends: opengfx (for suse and mandriva)
- add SUSE support
* Mon Oct 20 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Added libicu dependency
* Thu Sep 23 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Merged both versions of the spec file
* Fri Aug 29 2008 Jonathan Coome <maedhros@openttd.org>
- Rewrite spec file from scratch.
* Sat Aug 02 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Updated spec file
* Thu Mar 27 2008 Denis Burlaka <burlaka@yandex.ru>
- Universal spec file

View File

@@ -1,9 +1,9 @@
# Version numbers to update # Version numbers to update
!define APPV_MAJOR 1 !define APPV_MAJOR 1
!define APPV_MINOR 1 !define APPV_MINOR 1
!define APPV_MAINT 1 !define APPV_MAINT 0
!define APPV_BUILD 0 !define APPV_BUILD 1
!define APPV_EXTRA "-RC1" !define APPV_EXTRA "-beta2"
!define APPNAME "OpenTTD" ; Define application name !define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version

View File

@@ -201,7 +201,7 @@ Function DetermineSVNVersion()
End If ' line <> "master" End If ' line <> "master"
End If ' Err.Number = 0 End If ' Err.Number = 0
Set oExec = WshShell.Exec("git log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1") Set oExec = WshShell.Exec("git log --pretty=format:%s --grep=" & Chr(34) & "^(svn r[0-9]*)" & Chr(34) & " -1 ../")
if Err.Number = 0 Then if Err.Number = 0 Then
revision = Mid(oExec.StdOut.ReadLine(), 7) revision = Mid(oExec.StdOut.ReadLine(), 7)
revision = Mid(revision, 1, InStr(revision, ")") - 1) revision = Mid(revision, 1, InStr(revision, ")") - 1)
@@ -210,29 +210,13 @@ Function DetermineSVNVersion()
' No revision? Maybe it is a custom git-svn clone ' No revision? Maybe it is a custom git-svn clone
' Reset error number as WshShell.Exec will not do that on success ' Reset error number as WshShell.Exec will not do that on success
Err.Clear Err.Clear
Set oExec = WshShell.Exec("git log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1") Set oExec = WshShell.Exec("git log --pretty=format:%b --grep=" & Chr(34) & "git-svn-id:.*@[0-9]*" & Chr(34) & " -1 ../")
If Err.Number = 0 Then If Err.Number = 0 Then
revision = oExec.StdOut.ReadLine() revision = oExec.StdOut.ReadLine()
revision = Mid(revision, InStr(revision, "@") + 1) revision = Mid(revision, InStr(revision, "@") + 1)
revision = Mid(revision, 1, InStr(revision, " ") - 1) revision = Mid(revision, 1, InStr(revision, " ") - 1)
End If ' Err.Number = 0 End If ' Err.Number = 0
End If ' revision = "" End If ' revision = ""
' Check if a tag is currently checked out
Err.Clear
Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD")
If Err.Number = 0 Then
' Wait till the application is finished ...
Do While oExec.Status = 0
Loop
If oExec.ExitCode = 0 Then
version = oExec.StdOut.ReadLine()
If Right(version, 2) = "^0" Then
version = Left(version, Len(version) - 2)
End If
branch = ""
End If ' oExec.ExitCode = 0
End If ' Err.Number = 0
End If ' Err.Number = 0 End If ' Err.Number = 0
End If ' oExec.ExitCode = 0 End If ' oExec.ExitCode = 0
End If ' Err.Number = 0 End If ' Err.Number = 0
@@ -240,7 +224,7 @@ Function DetermineSVNVersion()
If version = "norev000" Then If version = "norev000" Then
' git detection failed, reset error and try mercurial (hg) ' git detection failed, reset error and try mercurial (hg)
Err.Clear Err.Clear
Set oExec = WshShell.Exec("hg id -i") Set oExec = WshShell.Exec("hg parents")
If Err.Number = 0 Then If Err.Number = 0 Then
' Wait till the application is finished ... ' Wait till the application is finished ...
Do While oExec.Status = 0 Do While oExec.Status = 0
@@ -248,21 +232,8 @@ Function DetermineSVNVersion()
If oExec.ExitCode = 0 Then If oExec.ExitCode = 0 Then
line = OExec.StdOut.ReadLine() line = OExec.StdOut.ReadLine()
hash = Left(line, 12) hash = Mid(line, InStrRev(line, ":") + 1)
version = "h" & Mid(hash, 1, 8) version = "h" & Mid(hash, 1, 8)
' Check if a tag is currently checked out
Err.Clear
Set oExec = WshShell.Exec("hg id -t")
If Err.Number = 0 Then
line = oExec.StdOut.ReadLine()
If Len(line) > 0 And Right(line, 3) <> "tip" Then
version = line
branch = ""
End If ' Len(line) > 0 And Right(line, 3) <> "tip"
End If ' Err.Number = 0
Err.Clear
Set oExec = WshShell.Exec("hg status ../") Set oExec = WshShell.Exec("hg status ../")
If Err.Number = 0 Then If Err.Number = 0 Then
Do Do
@@ -281,23 +252,11 @@ Function DetermineSVNVersion()
End If ' line <> "default" End If ' line <> "default"
End If ' Err.Number = 0 End If ' Err.Number = 0
Set oExec = WshShell.Exec("hg log -f -k " & Chr(34) & "(svn r" & Chr(34) & " -l 1 --template " & Chr(34) & "{desc|firstline}\n" & Chr(34) & " --cwd ../") Set oExec = WshShell.Exec("hg log -f -k " & Chr(34) & "(svn r" & Chr(34) & " -l 1 --template " & Chr(34) & "{desc}\n" & Chr(34) & " --cwd ../")
If Err.Number = 0 Then If Err.Number = 0 Then
line = oExec.StdOut.ReadLine() revision = Mid(OExec.StdOut.ReadLine(), 7)
If Left(line, 6) = "(svn r" Then revision = Mid(revision, 1, InStr(revision, ")") - 1)
revision = Mid(line, 7)
revision = Mid(revision, 1, InStr(revision, ")") - 1)
End If 'Left(line, 6) = "(svn r"
End If ' Err.Number = 0 End If ' Err.Number = 0
If revision = "" Then
' No rev? Maybe it is a custom hgsubversion clone
Err.Clear
Set oExec = WshShell.Exec("hg parent --template=" & Chr(34) & "{svnrev}" & Chr(34))
If Err.Number = 0 Then
revision = oExec.StdOut.ReadLine()
End If ' Err.Number = 0
End If ' revision = ""
End If ' Err.Number = 0 End If ' Err.Number = 0
End If ' oExec.ExitCode = 0 End If ' oExec.ExitCode = 0
End If ' Err.Number = 0 End If ' Err.Number = 0

View File

@@ -388,7 +388,6 @@
<ClInclude Include="..\src\cargotype.h" /> <ClInclude Include="..\src\cargotype.h" />
<ClInclude Include="..\src\cheat_func.h" /> <ClInclude Include="..\src\cheat_func.h" />
<ClInclude Include="..\src\cheat_type.h" /> <ClInclude Include="..\src\cheat_type.h" />
<ClInclude Include="..\src\clear_func.h" />
<ClInclude Include="..\src\cmd_helper.h" /> <ClInclude Include="..\src\cmd_helper.h" />
<ClInclude Include="..\src\command_func.h" /> <ClInclude Include="..\src\command_func.h" />
<ClInclude Include="..\src\command_type.h" /> <ClInclude Include="..\src\command_type.h" />
@@ -430,6 +429,7 @@
<ClInclude Include="..\src\fileio_type.h" /> <ClInclude Include="..\src\fileio_type.h" />
<ClInclude Include="..\src\fios.h" /> <ClInclude Include="..\src\fios.h" />
<ClInclude Include="..\src\fontcache.h" /> <ClInclude Include="..\src\fontcache.h" />
<ClInclude Include="..\src\functions.h" />
<ClInclude Include="..\src\gamelog.h" /> <ClInclude Include="..\src\gamelog.h" />
<ClInclude Include="..\src\gamelog_internal.h" /> <ClInclude Include="..\src\gamelog_internal.h" />
<ClInclude Include="..\src\genworld.h" /> <ClInclude Include="..\src\genworld.h" />
@@ -1074,7 +1074,6 @@
<ClInclude Include="..\src\pathfinder\yapf\yapf_node.hpp" /> <ClInclude Include="..\src\pathfinder\yapf\yapf_node.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_rail.hpp" /> <ClInclude Include="..\src\pathfinder\yapf\yapf_node_rail.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp" /> <ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_ship.hpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp" /> <ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_road.cpp" /> <ClCompile Include="..\src\pathfinder\yapf\yapf_road.cpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_ship.cpp" /> <ClCompile Include="..\src\pathfinder\yapf\yapf_ship.cpp" />

View File

@@ -384,9 +384,6 @@
<ClInclude Include="..\src\cheat_type.h"> <ClInclude Include="..\src\cheat_type.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\src\clear_func.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\cmd_helper.h"> <ClInclude Include="..\src\cmd_helper.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
@@ -510,6 +507,9 @@
<ClInclude Include="..\src\fontcache.h"> <ClInclude Include="..\src\fontcache.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\src\functions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\gamelog.h"> <ClInclude Include="..\src\gamelog.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
@@ -2442,9 +2442,6 @@
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp"> <ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp">
<Filter>YAPF</Filter> <Filter>YAPF</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_ship.hpp">
<Filter>YAPF</Filter>
</ClInclude>
<ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp"> <ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp">
<Filter>YAPF</Filter> <Filter>YAPF</Filter>
</ClCompile> </ClCompile>

View File

@@ -826,10 +826,6 @@
RelativePath=".\..\src\cheat_type.h" RelativePath=".\..\src\cheat_type.h"
> >
</File> </File>
<File
RelativePath=".\..\src\clear_func.h"
>
</File>
<File <File
RelativePath=".\..\src\cmd_helper.h" RelativePath=".\..\src\cmd_helper.h"
> >
@@ -994,6 +990,10 @@
RelativePath=".\..\src\fontcache.h" RelativePath=".\..\src\fontcache.h"
> >
</File> </File>
<File
RelativePath=".\..\src\functions.h"
>
</File>
<File <File
RelativePath=".\..\src\gamelog.h" RelativePath=".\..\src\gamelog.h"
> >
@@ -3662,10 +3662,6 @@
RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp" RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp"
> >
</File> </File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_node_ship.hpp"
>
</File>
<File <File
RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp" RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp"
> >

View File

@@ -823,10 +823,6 @@
RelativePath=".\..\src\cheat_type.h" RelativePath=".\..\src\cheat_type.h"
> >
</File> </File>
<File
RelativePath=".\..\src\clear_func.h"
>
</File>
<File <File
RelativePath=".\..\src\cmd_helper.h" RelativePath=".\..\src\cmd_helper.h"
> >
@@ -991,6 +987,10 @@
RelativePath=".\..\src\fontcache.h" RelativePath=".\..\src\fontcache.h"
> >
</File> </File>
<File
RelativePath=".\..\src\functions.h"
>
</File>
<File <File
RelativePath=".\..\src\gamelog.h" RelativePath=".\..\src\gamelog.h"
> >
@@ -3659,10 +3659,6 @@
RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp" RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp"
> >
</File> </File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_node_ship.hpp"
>
</File>
<File <File
RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp" RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp"
> >

View File

@@ -1,35 +1,34 @@
OpenTTD readme OpenTTD README
Last updated: 2011-05-15 Last updated: 2010-12-31
Release version: 1.1.1-RC1 Release version: 1.1.0-beta2
------------------------------------------------------------------------ ------------------------------------------------------------------------
Table of contents Table of Contents:
----------------- ------------------
1.0) About 1.0) About
2.0) Contacting 2.0) Contacting
* 2.1) Reporting bugs * 2.1 Reporting Bugs
* 2.2) Reporting desyncs * 2.2 Reporting Desyncs
3.0) Supported platforms 3.0) Supported Platforms
4.0) Installing and running OpenTTD 4.0) Installing and running OpenTTD
* 4.1) (Required) 3rd party files * 4.1 (Required) 3rd party files
* 4.2) OpenTTD directories * 4.2 OpenTTD directories
* 4.3) Portable installations (portable media) * 4.3 Portable Installations (External Media)
5.0) OpenTTD features 5.0) OpenTTD features
* 5.1) Logging of potentially dangerous actions 6.0) Configuration File
6.0) Configuration file
7.0) Compiling 7.0) Compiling
* 7.1) Required/optional libraries * 7.1) Required/optional libraries
* 7.2) Supported compilers * 7.2) Supported compilers
8.0) Translating 8.0) Translating
* 8.1) Translation * 8.1 Translation
* 8.2) Previewing * 8.2 Previewing
9.0) Troubleshooting 9.0) Troubleshooting
X.X) Credits X.X) Credits
1.0) About 1.0) About:
---- ----- ---- ------
OpenTTD is a transport simulation game based upon the popular game Transport OpenTTD is a transport simulation game based upon the popular game Transport
Tycoon Deluxe, written by Chris Sawyer. It attempts to mimic the original Tycoon Deluxe, written by Chris Sawyer. It attempts to mimic the original
game as closely as possible while extending it with new features. game as closely as possible while extending it with new features.
@@ -37,8 +36,7 @@ game as closely as possible while extending it with new features.
OpenTTD is licensed under the GNU General Public License version 2.0. For OpenTTD is licensed under the GNU General Public License version 2.0. For
more information, see the file 'COPYING'. more information, see the file 'COPYING'.
2.0) Contacting:
2.0) Contacting
---- ---------- ---- ----------
The easiest way to contact the OpenTTD team is by submitting bug reports or The easiest way to contact the OpenTTD team is by submitting bug reports or
posting comments in our forums. You can also chat with us on IRC (#openttd posting comments in our forums. You can also chat with us on IRC (#openttd
@@ -49,8 +47,9 @@ The OpenTTD homepage is http://www.openttd.org/.
You can also find the OpenTTD forums at You can also find the OpenTTD forums at
http://forum.openttd.org/ http://forum.openttd.org/
2.1) Reporting bugs
---- -------------- 2.1) Reporting Bugs:
---- ---------------
First of all, check whether the bug is not already known. Do this by looking First of all, check whether the bug is not already known. Do this by looking
through the file called 'known-bugs.txt' which is distributed with OpenTTD through the file called 'known-bugs.txt' which is distributed with OpenTTD
like this readme. like this readme.
@@ -88,8 +87,8 @@ following information in your bug report:
* Attach crash.dmp, crash.log and crash.sav. These files are usually created * Attach crash.dmp, crash.log and crash.sav. These files are usually created
next to your openttd.cfg. The crash handler will tell you the location. next to your openttd.cfg. The crash handler will tell you the location.
2.2) Reporting desyncs 2.2) Reporting Desyncs:
---- ----------------- ---- ------------------
As desyncs are hard to make reproducible OpenTTD has the ability to log all As desyncs are hard to make reproducible OpenTTD has the ability to log all
actions done by clients so we can replay the whole game in an effort to make actions done by clients so we can replay the whole game in an effort to make
desyncs better reproducible. You need to turn this ability on. When turned desyncs better reproducible. You need to turn this ability on. When turned
@@ -141,9 +140,8 @@ Do NOT remove the dmp_cmds savegames of a desync you have reported until the
desync has been fixed; if you, by accident, send us the wrong savegames we desync has been fixed; if you, by accident, send us the wrong savegames we
will not be able to reproduce the desync and thus will be unable to fix it. will not be able to reproduce the desync and thus will be unable to fix it.
3.0) Supported Platforms:
3.0) Supported platforms ---- --------------------
---- -------------------
OpenTTD has been ported to several platforms and operating systems. It shouldn't OpenTTD has been ported to several platforms and operating systems. It shouldn't
be very difficult to port it to a new platform. The currently working platforms be very difficult to port it to a new platform. The currently working platforms
are: are:
@@ -159,8 +157,9 @@ are:
Windows - Win32 GDI (faster) or SDL or Allegro Windows - Win32 GDI (faster) or SDL or Allegro
4.0) Installing and running OpenTTD 4.0) Installing and running OpenTTD:
---- ------------------------------ ---- -------------------------------
Installing OpenTTD is fairly straightforward. Either you have downloaded an Installing OpenTTD is fairly straightforward. Either you have downloaded an
archive which you have to extract to a directory where you want OpenTTD to 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 be installed, or you have downloaded an installer, which will automatically
@@ -187,8 +186,9 @@ automatically selected (and downloaded) if you get the AIs via the "Check
Online Content". If you do not have an AI but have configured OpenTTD to start Online Content". If you do not have an AI but have configured OpenTTD to start
an AI a message will be shown that the 'dummy' AI has been started. an AI a message will be shown that the 'dummy' AI has been started.
4.1) (Required) 3rd party files 4.1) (Required) 3rd party files:
---- -------------------------- ---- ---------------------------
Before you run OpenTTD, you need to put the game's data files into a data/ Before you run OpenTTD, you need to put the game's data files into a data/
directory which can be located in various places addressed in the following directory which can be located in various places addressed in the following
section. section.
@@ -248,7 +248,8 @@ wait for an error message to pop up. The error message will tell you
"couldn't find library 'lib-name'". Download that library and try again. "couldn't find library 'lib-name'". Download that library and try again.
4.2) OpenTTD directories 4.2) OpenTTD directories
---- ------------------- ---- -------------------------------
The required 3rd party files listed in the section 4.1 "(Required) 3rd party files" The required 3rd party files listed in the section 4.1 "(Required) 3rd party files"
as well as other non-compulsory extensions (NewGRFs, AI, heightmaps, scenarios) can be as well as other non-compulsory extensions (NewGRFs, AI, heightmaps, scenarios) can be
placed in a few different locations: placed in a few different locations:
@@ -288,8 +289,10 @@ 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 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). personal directory (where the game will then also place savegames and screenshots).
4.3) Portable installations (portable media)
---- --------------------------------------- 4.3) Portable Installations (External Media):
---- ----------------------------------------
You can install OpenTTD on external media so you can take it with you, i.e. 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. using a USB key, or a USB HDD, etc.
Create a directory where you shall store the game in (i.e. OpenTTD/). Create a directory where you shall store the game in (i.e. OpenTTD/).
@@ -302,8 +305,9 @@ As always - additional grf files are stored in the data/ dir (for details,
again, see section 4.1). again, see section 4.1).
5.0) OpenTTD features 5.0) OpenTTD features:
---- ---------------- ---- -----------------
OpenTTD has a lot of features going beyond the original Transport Tycoon Deluxe OpenTTD has a lot of features going beyond the original Transport Tycoon Deluxe
emulation. Unfortunately, there is currently no comprehensive list of features, emulation. Unfortunately, there is currently no comprehensive list of features,
but there is a basic features list on the web, and some optional features can be but there is a basic features list on the web, and some optional features can be
@@ -322,8 +326,10 @@ Several important non-standard controls:
* Hovering over a GUI element shows tooltips. This can be changed to right click * Hovering over a GUI element shows tooltips. This can be changed to right click
via the advanced settings. via the advanced settings.
5.1) Logging of potentially dangerous actions
5.1) Logging of potentially dangerous actions:
---- ---------------------------------------- ---- ----------------------------------------
OpenTTD is a complex program, and together with NewGRF, it may show a buggy OpenTTD is a complex program, and together with NewGRF, it may show a buggy
behaviour. But not only bugs in code can cause problems. There are several behaviour. But not only bugs in code can cause problems. There are several
ways to affect game state possibly resulting in program crash or multiplayer ways to affect game state possibly resulting in program crash or multiplayer
@@ -352,8 +358,8 @@ You can show the game log by typing 'gamelog' in the console or by running
OpenTTD in debug mode. OpenTTD in debug mode.
6.0) Configuration file 6.0) Configuration File:
---- ------------------ ---- -------------------
The configuration file for OpenTTD (openttd.cfg) is in a simple Windows-like The configuration file for OpenTTD (openttd.cfg) is in a simple Windows-like
.INI format. It's mostly undocumented. Almost all settings can be changed .INI format. It's mostly undocumented. Almost all settings can be changed
ingame by using the 'Advanced Settings' window. ingame by using the 'Advanced Settings' window.
@@ -362,8 +368,8 @@ described in section 4.2. If you do not have an openttd.cfg OpenTTD will
create one after closing. create one after closing.
7.0) Compiling 7.0) Compiling:
---- --------- ---- ----------
Windows: Windows:
You need Microsoft Visual Studio .NET. Open the project file You need Microsoft Visual Studio .NET. Open the project file
and it should build automatically. In case you want to build with SDL support and it should build automatically. In case you want to build with SDL support
@@ -415,8 +421,8 @@ DOS:
will be generated that does not need cwsdpmi.exe by adding the cswdstub.exe will be generated that does not need cwsdpmi.exe by adding the cswdstub.exe
to the created OpenTTD binary. to the created OpenTTD binary.
7.1) Required/optional libraries 7.1) Required/optional libraries:
---- --------------------------- ---- -------------------
The following libraries are used by OpenTTD for: The following libraries are used by OpenTTD for:
- libSDL/liballegro: hardware access (video, sound, mouse) - libSDL/liballegro: hardware access (video, sound, mouse)
- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, heightmaps - zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, heightmaps
@@ -440,14 +446,14 @@ GRFCodec can be found at: http://www.openttd.org/download-grfcodec
The compilation of these extra graphics does generally not happen, unless The compilation of these extra graphics does generally not happen, unless
you remove the graphics file using "make maintainer-clean". you remove the graphics file using "make maintainer-clean".
7.2) Supported compilers 7.2) Supported compilers:
---- ------------------- ---- -------------------
The following compilers are known to compile OpenTTD: The following compilers are known to compile OpenTTD:
- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010. - Microsoft Visual C++ (MSVC) 2005, 2008 and 2010.
Version 2005 gives bogus warnings about scoping issues. Version 2005 gives bogus warnings about scoping issues.
- GNU Compiler Collection (GCC) 3.3 - 4.7. - GNU Compiler Collection (GCC) 3.3 - 4.6.
Versions 4.1 and earlier give bogus warnings about uninitialised variables. Versions 4.1 and earlier give bogus warnings about uninitialised variables.
Versions 4.4 and later give bogus warnings about freeing non-heap objects. Versions 4.4 and later give bogus warnings about freeing heap objects.
- Intel C++ Compiler (ICC) 12.0. - Intel C++ Compiler (ICC) 12.0.
The following compilers are known not to compile OpenTTD: The following compilers are known not to compile OpenTTD:
@@ -464,9 +470,8 @@ The following compilers are known not to compile OpenTTD:
If any of these compilers can compile OpenTTD again, please let us know. If any of these compilers can compile OpenTTD again, please let us know.
Patches to support more compilers are welcome. Patches to support more compilers are welcome.
8.0) Translating:
8.0) Translating ---- -------------------
---- -----------
See http://www.openttd.org/development for up-to-date information. See http://www.openttd.org/development for up-to-date information.
The use of the online Translator service, located at The use of the online Translator service, located at
@@ -480,8 +485,8 @@ Please contact the translations manager (http://www.openttd.org/contact)
before beginning the translation process! This avoids double work, as before beginning the translation process! This avoids double work, as
someone else may have already started translating to the same language. someone else may have already started translating to the same language.
8.1) Translation 8.1) Translation:
---- ----------- ---- -------------------
So, now that you've notified the development team about your intention to So, now that you've notified the development team about your intention to
translate (You did, right? Of course you did.) you can pick up english.txt translate (You did, right? Of course you did.) you can pick up english.txt
(found in the SVN repository under /src/lang) and translate. (found in the SVN repository under /src/lang) and translate.
@@ -498,8 +503,8 @@ Note: Do not alter the following parts of the file:
* Lines beginning with ## (such as ##id), other than the first two lines of * Lines beginning with ## (such as ##id), other than the first two lines of
the file the file
8.2) Previewing 8.2) Previewing:
---- ---------- ---- -------------------
In order to view the translation in the game, you need to compile your language In order to view the translation in the game, you need to compile your language
file with the strgen utility. You can download the precompiled strgen from: file with the strgen utility. You can download the precompiled strgen from:
http://www.openttd.org/download-strgen http://www.openttd.org/download-strgen
@@ -518,9 +523,9 @@ should also be.
That's all! You should now be able to select the language in the game options. That's all! You should now be able to select the language in the game options.
9.0) Troubleshooting 9.0) Troubleshooting
---- --------------- ---- ---------------
To see all startup options available to you, start OpenTTD with the To see all startup options available to you, start OpenTTD with the
"./openttd -h" option. This might help you tweak some of the settings. "./openttd -h" option. This might help you tweak some of the settings.
@@ -534,9 +539,9 @@ look at http://wiki.openttd.org/index.php/Command_line.
The most frequent problem is missing data files. Please install OpenGFX and The most frequent problem is missing data files. Please install OpenGFX and
possibly OpenSFX and OpenMSX. See section 4.1.1 for more information. possibly OpenSFX and OpenMSX. See section 4.1.1 for more information.
Under certain circumstance, especially on Ubuntu OpenTTD can be extremely slow Under, especially, Ubuntu OpenTTD can be extremely slow and freeze/hand under
and/or freeze. See known-bugs.txt for more information and how to solve this certain circumstance. See known-bugs.txt for more information and how to
problem on your computer. solve this problem on your computer.
Under Windows 98 and lower it is impossible to use a dedicated server; it will Under Windows 98 and lower it is impossible to use a dedicated server; it will
fail to start. Perhaps this is for the better because those OSes are not known fail to start. Perhaps this is for the better because those OSes are not known
@@ -553,9 +558,8 @@ will be output to the console at the moment, so use the '-d' flag (on windows)
to see this list. You just have to find the files (http://grfcrawler.tt-forums.net/) to see this list. You just have to find the files (http://grfcrawler.tt-forums.net/)
put them in the data/ folder and you're set to go. put them in the data/ folder and you're set to go.
X.X) Credits:
X.X) Credits ---- --------
---- -------
The OpenTTD team (in alphabetical order): The OpenTTD team (in alphabetical order):
Albert Hofkamp (Alberth) - GUI expert Albert Hofkamp (Alberth) - GUI expert
Jean-François Claeys (Belugas) - GUI, newindustries and more Jean-François Claeys (Belugas) - GUI, newindustries and more

View File

@@ -121,7 +121,6 @@ cargopacket.h
cargotype.h cargotype.h
cheat_func.h cheat_func.h
cheat_type.h cheat_type.h
clear_func.h
cmd_helper.h cmd_helper.h
command_func.h command_func.h
command_type.h command_type.h
@@ -163,6 +162,7 @@ fileio_func.h
fileio_type.h fileio_type.h
fios.h fios.h
fontcache.h fontcache.h
functions.h
gamelog.h gamelog.h
gamelog_internal.h gamelog_internal.h
genworld.h genworld.h
@@ -875,7 +875,6 @@ pathfinder/yapf/yapf_destrail.hpp
pathfinder/yapf/yapf_node.hpp pathfinder/yapf/yapf_node.hpp
pathfinder/yapf/yapf_node_rail.hpp pathfinder/yapf/yapf_node_rail.hpp
pathfinder/yapf/yapf_node_road.hpp pathfinder/yapf/yapf_node_road.hpp
pathfinder/yapf/yapf_node_ship.hpp
pathfinder/yapf/yapf_rail.cpp pathfinder/yapf/yapf_rail.cpp
pathfinder/yapf/yapf_road.cpp pathfinder/yapf/yapf_road.cpp
pathfinder/yapf/yapf_ship.cpp pathfinder/yapf/yapf_ship.cpp

View File

@@ -597,7 +597,6 @@ public:
} }
SQInteger Factor() SQInteger Factor()
{ {
_exst._deref = DEREF_NO_DEREF;
switch(_token) switch(_token)
{ {
case TK_STRING_LITERAL: { case TK_STRING_LITERAL: {

View File

@@ -125,9 +125,7 @@ public:
static int GetStartNextTime(); static int GetStartNextTime();
/** Wrapper function for AIScanner::GetAIConsoleList */ /** Wrapper function for AIScanner::GetAIConsoleList */
static char *GetConsoleList(char *p, const char *last, bool newest_only = false); static char *GetConsoleList(char *p, const char *last);
/** Wrapper function for AIScanner::GetAIConsoleLibraryList */
static char *GetConsoleLibraryList(char *p, const char *last);
/** Wrapper function for AIScanner::GetAIInfoList */ /** Wrapper function for AIScanner::GetAIInfoList */
static const AIInfoList *GetInfoList(); static const AIInfoList *GetInfoList();
/** Wrapper function for AIScanner::GetUniqueAIInfoList */ /** Wrapper function for AIScanner::GetUniqueAIInfoList */
@@ -168,7 +166,7 @@ public:
static void GameLoop() {} static void GameLoop() {}
static bool HasAI(const struct ContentInfo *ci, bool md5sum) { return false; } static bool HasAI(const struct ContentInfo *ci, bool md5sum) { return false; }
static void Rescan() {} static void Rescan() {}
static char *GetConsoleList(char *p, const char *last, bool newest_only = false) { return p; } static char *GetConsoleList(char *p, const char *last) { return p; }
static void nop() { } static void nop() { }
}; };

View File

@@ -10,6 +10,7 @@
/** @file ai_config.cpp Implementation of AIConfig. */ /** @file ai_config.cpp Implementation of AIConfig. */
#include "../stdafx.h" #include "../stdafx.h"
#include "../openttd.h"
#include "../settings_type.h" #include "../settings_type.h"
#include "../core/random_func.hpp" #include "../core/random_func.hpp"
#include "ai.hpp" #include "ai.hpp"
@@ -107,10 +108,10 @@ int AIConfig::GetSetting(const char *name) const
{ {
SettingValueList::const_iterator it = this->settings.find(name); SettingValueList::const_iterator it = this->settings.find(name);
/* Return the default value if the setting is not set, or if we are in a not-custom difficult level */ /* Return the default value if the setting is not set, or if we are in a not-custom difficult level */
if (it == this->settings.end() || GetGameSettings().difficulty.diff_level != 3) { if (it == this->settings.end() || ((_game_mode == GM_MENU) ? _settings_newgame.difficulty.diff_level : _settings_game.difficulty.diff_level) != 3) {
if (this->info == NULL) { if (this->info == NULL) {
assert(strcmp("start_date", name) == 0); assert(strcmp("start_date", name) == 0);
switch (GetGameSettings().difficulty.diff_level) { switch ((_game_mode == GM_MENU) ? _settings_newgame.difficulty.diff_level : _settings_game.difficulty.diff_level) {
case 0: return AI::START_NEXT_EASY; case 0: return AI::START_NEXT_EASY;
case 1: return AI::START_NEXT_MEDIUM; case 1: return AI::START_NEXT_MEDIUM;
case 2: return AI::START_NEXT_HARD; case 2: return AI::START_NEXT_HARD;

View File

@@ -289,14 +289,9 @@ void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
return DAYS_IN_YEAR; return DAYS_IN_YEAR;
} }
/* static */ char *AI::GetConsoleList(char *p, const char *last, bool newest_only) /* static */ char *AI::GetConsoleList(char *p, const char *last)
{ {
return AI::ai_scanner->GetAIConsoleList(p, last, newest_only); return AI::ai_scanner->GetAIConsoleList(p, last);
}
/* static */ char *AI::GetConsoleLibraryList(char *p, const char *last)
{
return AI::ai_scanner->GetAIConsoleLibraryList(p, last);
} }
/* static */ const AIInfoList *AI::GetInfoList() /* static */ const AIInfoList *AI::GetInfoList()

View File

@@ -10,6 +10,7 @@
/** @file ai_gui.cpp Window for configuring the AIs */ /** @file ai_gui.cpp Window for configuring the AIs */
#include "../stdafx.h" #include "../stdafx.h"
#include "../openttd.h"
#include "../table/sprites.h" #include "../table/sprites.h"
#include "../gui.h" #include "../gui.h"
#include "../querystring_gui.h" #include "../querystring_gui.h"
@@ -182,20 +183,8 @@ struct AIListWindow : public Window {
nwi->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START); nwi->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
} }
/** virtual void OnInvalidateData(int data)
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{ {
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) {
delete this;
return;
}
if (!gui_scope) return;
this->vscroll->SetCount((int)this->ai_info_list->size() + 1); this->vscroll->SetCount((int)this->ai_info_list->size() + 1);
/* selected goes from -1 .. length of ai list - 1. */ /* selected goes from -1 .. length of ai list - 1. */
@@ -274,7 +263,7 @@ struct AISettingsWindow : public Window {
this->vscroll = this->GetScrollbar(AIS_WIDGET_SCROLLBAR); this->vscroll = this->GetScrollbar(AIS_WIDGET_SCROLLBAR);
this->FinishInitNested(desc, slot); // Initializes 'this->line_height' as side effect. this->FinishInitNested(desc, slot); // Initializes 'this->line_height' as side effect.
this->SetWidgetDisabledState(AIS_WIDGET_RESET, _game_mode != GM_MENU && Company::IsValidID(this->slot)); this->SetWidgetDisabledState(AIS_WIDGET_RESET, _game_mode != GM_MENU);
this->vscroll->SetCount((int)this->ai_config->GetConfigList()->size()); this->vscroll->SetCount((int)this->ai_config->GetConfigList()->size());
} }
@@ -308,7 +297,7 @@ struct AISettingsWindow : public Window {
int y = r.top; int y = r.top;
for (; this->vscroll->IsVisible(i) && it != config->GetConfigList()->end(); i++, it++) { for (; this->vscroll->IsVisible(i) && it != config->GetConfigList()->end(); i++, it++) {
int current_value = config->GetSetting((*it).name); int current_value = config->GetSetting((*it).name);
bool editable = _game_mode == GM_MENU || !Company::IsValidID(this->slot) || (it->flags & AICONFIG_INGAME) != 0; bool editable = (_game_mode == GM_MENU) || ((it->flags & AICONFIG_INGAME) != 0);
StringID str; StringID str;
TextColour colour; TextColour colour;
@@ -364,7 +353,7 @@ struct AISettingsWindow : public Window {
AIConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin(); AIConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
for (int i = 0; i < num; i++) it++; for (int i = 0; i < num; i++) it++;
AIConfigItem config_item = *it; AIConfigItem config_item = *it;
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot) && (config_item.flags & AICONFIG_INGAME) == 0) return; if (_game_mode != GM_MENU && (config_item.flags & AICONFIG_INGAME) == 0) return;
bool bool_item = (config_item.flags & AICONFIG_BOOLEAN) != 0; bool bool_item = (config_item.flags & AICONFIG_BOOLEAN) != 0;
@@ -409,10 +398,8 @@ struct AISettingsWindow : public Window {
break; break;
case AIS_WIDGET_RESET: case AIS_WIDGET_RESET:
if (_game_mode == GM_MENU || !Company::IsValidID(this->slot)) { this->ai_config->ResetSettings();
this->ai_config->ResetSettings(); this->SetDirty();
this->SetDirty();
}
break; break;
} }
} }
@@ -422,7 +409,6 @@ struct AISettingsWindow : public Window {
if (StrEmpty(str)) return; if (StrEmpty(str)) return;
AIConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin(); AIConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin();
for (int i = 0; i < this->clicked_row; i++) it++; for (int i = 0; i < this->clicked_row; i++) it++;
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot) && (it->flags & AICONFIG_INGAME) == 0) return;
int32 value = atoi(str); int32 value = atoi(str);
this->ai_config->SetSetting((*it).name, value); this->ai_config->SetSetting((*it).name, value);
this->CheckDifficultyLevel(); this->CheckDifficultyLevel();
@@ -443,16 +429,6 @@ struct AISettingsWindow : public Window {
this->SetDirty(); this->SetDirty();
} }
} }
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) delete this;
}
}; };
/** Widgets for the AI settings window. */ /** Widgets for the AI settings window. */
@@ -580,7 +556,7 @@ struct AIConfigWindow : public Window {
{ {
switch (widget) { switch (widget) {
case AIC_WIDGET_NUMBER: case AIC_WIDGET_NUMBER:
SetDParam(0, GetGameSettings().difficulty.max_no_competitors); SetDParam(0, _settings_newgame.difficulty.max_no_competitors);
break; break;
} }
} }
@@ -595,25 +571,6 @@ struct AIConfigWindow : public Window {
} }
} }
/**
* Can the AI config in the given company slot be edited?
* @param slot The slot to query.
* @return True if and only if the given AI Config slot can e edited.
*/
static bool IsEditable(CompanyID slot)
{
if (_game_mode != GM_NORMAL) {
return slot > 0 && slot <= GetGameSettings().difficulty.max_no_competitors;
}
if (Company::IsValidID(slot) || slot < 0) return false;
int max_slot = GetGameSettings().difficulty.max_no_competitors;
for (CompanyID cid = COMPANY_FIRST; cid < (CompanyID)max_slot && cid < MAX_COMPANIES; cid++) {
if (Company::IsValidHumanID(cid)) max_slot++;
}
return slot < max_slot;
}
virtual void DrawWidget(const Rect &r, int widget) const virtual void DrawWidget(const Rect &r, int widget) const
{ {
switch (widget) { switch (widget) {
@@ -622,16 +579,16 @@ struct AIConfigWindow : public Window {
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < MAX_COMPANIES; i++) { for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < MAX_COMPANIES; i++) {
StringID text; StringID text;
if ((_game_mode != GM_NORMAL && i == 0) || (_game_mode == GM_NORMAL && Company::IsValidHumanID(i))) { if (AIConfig::GetConfig((CompanyID)i)->GetInfo() != NULL) {
text = STR_AI_CONFIG_HUMAN_PLAYER;
} else if (AIConfig::GetConfig((CompanyID)i)->GetInfo() != NULL) {
SetDParamStr(0, AIConfig::GetConfig((CompanyID)i)->GetInfo()->GetName()); SetDParamStr(0, AIConfig::GetConfig((CompanyID)i)->GetInfo()->GetName());
text = STR_JUST_RAW_STRING; text = STR_JUST_RAW_STRING;
} else if (i == 0) {
text = STR_AI_CONFIG_HUMAN_PLAYER;
} else { } else {
text = STR_AI_CONFIG_RANDOM_AI; text = STR_AI_CONFIG_RANDOM_AI;
} }
DrawString(r.left + 10, r.right - 10, y + WD_MATRIX_TOP, text, DrawString(r.left + 10, r.right - 10, y + WD_MATRIX_TOP, text,
(this->selected_slot == i) ? TC_WHITE : (IsEditable((CompanyID)i) ? TC_ORANGE : TC_SILVER)); (this->selected_slot == i) ? TC_WHITE : ((i > _settings_newgame.difficulty.max_no_competitors || i == 0) ? TC_SILVER : TC_ORANGE));
y += this->line_height; y += this->line_height;
} }
break; break;
@@ -646,9 +603,9 @@ struct AIConfigWindow : public Window {
case AIC_WIDGET_INCREASE: { case AIC_WIDGET_INCREASE: {
int new_value; int new_value;
if (widget == AIC_WIDGET_DECREASE) { if (widget == AIC_WIDGET_DECREASE) {
new_value = max(0, GetGameSettings().difficulty.max_no_competitors - 1); new_value = max(0, _settings_newgame.difficulty.max_no_competitors - 1);
} else { } else {
new_value = min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); new_value = min(MAX_COMPANIES - 1, _settings_newgame.difficulty.max_no_competitors + 1);
} }
IConsoleSetSetting("difficulty.max_no_competitors", new_value); IConsoleSetSetting("difficulty.max_no_competitors", new_value);
this->InvalidateData(); this->InvalidateData();
@@ -663,8 +620,8 @@ struct AIConfigWindow : public Window {
} }
case AIC_WIDGET_MOVE_UP: case AIC_WIDGET_MOVE_UP:
if (IsEditable(this->selected_slot) && IsEditable((CompanyID)(this->selected_slot - 1))) { if (this->selected_slot > 1) {
Swap(GetGameSettings().ai_config[this->selected_slot], GetGameSettings().ai_config[this->selected_slot - 1]); Swap(_settings_newgame.ai_config[this->selected_slot], _settings_newgame.ai_config[this->selected_slot - 1]);
this->selected_slot--; this->selected_slot--;
this->vscroll->ScrollTowards(this->selected_slot); this->vscroll->ScrollTowards(this->selected_slot);
this->InvalidateData(); this->InvalidateData();
@@ -672,8 +629,8 @@ struct AIConfigWindow : public Window {
break; break;
case AIC_WIDGET_MOVE_DOWN: case AIC_WIDGET_MOVE_DOWN:
if (IsEditable(this->selected_slot) && IsEditable((CompanyID)(this->selected_slot + 1))) { if (this->selected_slot < _settings_newgame.difficulty.max_no_competitors) {
Swap(GetGameSettings().ai_config[this->selected_slot], GetGameSettings().ai_config[this->selected_slot + 1]); Swap(_settings_newgame.ai_config[this->selected_slot], _settings_newgame.ai_config[this->selected_slot + 1]);
this->selected_slot++; this->selected_slot++;
this->vscroll->ScrollTowards(this->selected_slot); this->vscroll->ScrollTowards(this->selected_slot);
this->InvalidateData(); this->InvalidateData();
@@ -704,25 +661,18 @@ struct AIConfigWindow : public Window {
} }
} }
/** virtual void OnInvalidateData(int data)
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{ {
if (!IsEditable(this->selected_slot)) { if (this->selected_slot == 0 || this->selected_slot > _settings_newgame.difficulty.max_no_competitors) {
this->selected_slot = INVALID_COMPANY; this->selected_slot = INVALID_COMPANY;
} }
if (!gui_scope) return; this->SetWidgetDisabledState(AIC_WIDGET_DECREASE, _settings_newgame.difficulty.max_no_competitors == 0);
this->SetWidgetDisabledState(AIC_WIDGET_INCREASE, _settings_newgame.difficulty.max_no_competitors == MAX_COMPANIES - 1);
this->SetWidgetDisabledState(AIC_WIDGET_DECREASE, GetGameSettings().difficulty.max_no_competitors == 0);
this->SetWidgetDisabledState(AIC_WIDGET_INCREASE, GetGameSettings().difficulty.max_no_competitors == MAX_COMPANIES - 1);
this->SetWidgetDisabledState(AIC_WIDGET_CHANGE, this->selected_slot == INVALID_COMPANY); this->SetWidgetDisabledState(AIC_WIDGET_CHANGE, this->selected_slot == INVALID_COMPANY);
this->SetWidgetDisabledState(AIC_WIDGET_CONFIGURE, this->selected_slot == INVALID_COMPANY); this->SetWidgetDisabledState(AIC_WIDGET_CONFIGURE, this->selected_slot == INVALID_COMPANY);
this->SetWidgetDisabledState(AIC_WIDGET_MOVE_UP, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot - 1))); this->SetWidgetDisabledState(AIC_WIDGET_MOVE_UP, this->selected_slot == INVALID_COMPANY || this->selected_slot == 1);
this->SetWidgetDisabledState(AIC_WIDGET_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot + 1))); this->SetWidgetDisabledState(AIC_WIDGET_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || this->selected_slot == _settings_newgame.difficulty.max_no_competitors);
} }
}; };
@@ -816,8 +766,9 @@ struct AIDebugWindow : public QueryStringBaseWindow {
/* Check if the currently selected company is still active. */ /* Check if the currently selected company is still active. */
if (ai_debug_company == INVALID_COMPANY || !Company::IsValidAiID(ai_debug_company)) { if (ai_debug_company == INVALID_COMPANY || !Company::IsValidAiID(ai_debug_company)) {
if (ai_debug_company != INVALID_COMPANY) { if (ai_debug_company != INVALID_COMPANY) {
/* Raise the widget for the previous selection. */ /* Raise and disable the widget for the previous selection. */
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
this->DisableWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
ai_debug_company = INVALID_COMPANY; ai_debug_company = INVALID_COMPANY;
} }
@@ -847,6 +798,9 @@ struct AIDebugWindow : public QueryStringBaseWindow {
if (this->show_break_box) this->DrawEditBox(AID_WIDGET_BREAK_STR_EDIT_BOX); if (this->show_break_box) this->DrawEditBox(AID_WIDGET_BREAK_STR_EDIT_BOX);
/* If there are no active companies, don't display anything else. */
if (ai_debug_company == INVALID_COMPANY) return;
/* Paint the company icons */ /* Paint the company icons */
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
NWidgetCore *button = this->GetWidget<NWidgetCore>(i + AID_WIDGET_COMPANY_BUTTON_START); NWidgetCore *button = this->GetWidget<NWidgetCore>(i + AID_WIDGET_COMPANY_BUTTON_START);
@@ -877,9 +831,6 @@ struct AIDebugWindow : public QueryStringBaseWindow {
DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget<NWidgetBase>(AID_WIDGET_COMPANY_BUTTON_START + i)->pos_y + 2 + offset); DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget<NWidgetBase>(AID_WIDGET_COMPANY_BUTTON_START + i)->pos_y + 2 + offset);
} }
/* If there are no active companies, don't display anything else. */
if (ai_debug_company == INVALID_COMPANY) return;
Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE); Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE);
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer(); AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();
cur_company.Restore(); cur_company.Restore();
@@ -1050,16 +1001,11 @@ struct AIDebugWindow : public QueryStringBaseWindow {
return state; return state;
} }
/** virtual void OnInvalidateData(int data = 0)
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{ {
if (data == -1 || ai_debug_company == data) this->SetDirty(); if (data == -1 || ai_debug_company == data) this->SetDirty();
if (gui_scope && data == -2) { if (data == -2) {
/* The continue button should be disabled when the game is unpaused and /* The continue button should be disabled when the game is unpaused and
* it was previously paused by the break string ( = a line in the log * it was previously paused by the break string ( = a line in the log
* was highlighted )*/ * was highlighted )*/
@@ -1071,9 +1017,8 @@ struct AIDebugWindow : public QueryStringBaseWindow {
} }
} }
/* If the log message is related to the active company tab, check the break string. /* If the log message is related to the active company tab, check the break string */
* This needs to be done in gameloop-scope, so the AI is suspended immediately. */ if (data == ai_debug_company && this->break_check_enabled && !StrEmpty(this->edit_str_buf)) {
if (!gui_scope && data == ai_debug_company && this->break_check_enabled && !StrEmpty(this->edit_str_buf)) {
/* Get the log instance of the active company */ /* Get the log instance of the active company */
Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE); Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE);
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer(); AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();

View File

@@ -15,6 +15,7 @@
#include "ai_info.hpp" #include "ai_info.hpp"
#include "ai_scanner.hpp" #include "ai_scanner.hpp"
#include "../settings_type.h" #include "../settings_type.h"
#include "../openttd.h"
#include "../debug.h" #include "../debug.h"
#include "../rev.h" #include "../rev.h"
@@ -337,7 +338,7 @@ int AIInfo::GetSettingDefaultValue(const char *name) const
for (AIConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { for (AIConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) {
if (strcmp((*it).name, name) != 0) continue; if (strcmp((*it).name, name) != 0) continue;
/* The default value depends on the difficulty level */ /* The default value depends on the difficulty level */
switch (GetGameSettings().difficulty.diff_level) { switch ((_game_mode == GM_MENU) ? _settings_newgame.difficulty.diff_level : _settings_game.difficulty.diff_level) {
case 0: return (*it).easy_value; case 0: return (*it).easy_value;
case 1: return (*it).medium_value; case 1: return (*it).medium_value;
case 2: return (*it).hard_value; case 2: return (*it).hard_value;

View File

@@ -74,7 +74,6 @@
#include "api/ai_waypointlist.hpp.sq" #include "api/ai_waypointlist.hpp.sq"
#include "../company_base.h" #include "../company_base.h"
#include "../company_func.h"
#include "../fileio_func.h" #include "../fileio_func.h"
/** The maximum number of operations for saving or loading the data of an AI. */ /** The maximum number of operations for saving or loading the data of an AI. */

View File

@@ -330,12 +330,11 @@ AIInfo *AIScanner::FindInfo(const char *nameParam, int versionParam, bool force_
return info; return info;
} }
char *AIScanner::GetAIConsoleList(char *p, const char *last, bool newest_only) const char *AIScanner::GetAIConsoleList(char *p, const char *last) const
{ {
p += seprintf(p, last, "List of AIs:\n"); p += seprintf(p, last, "List of AIs:\n");
const AIInfoList &list = newest_only ? this->info_single_list : this->info_list; AIInfoList::const_iterator it = this->info_list.begin();
AIInfoList::const_iterator it = list.begin(); for (; it != this->info_list.end(); it++) {
for (; it != list.end(); it++) {
AIInfo *i = (*it).second; AIInfo *i = (*it).second;
p += seprintf(p, last, "%10s (v%d): %s\n", i->GetName(), i->GetVersion(), i->GetDescription()); p += seprintf(p, last, "%10s (v%d): %s\n", i->GetName(), i->GetVersion(), i->GetDescription());
} }
@@ -344,19 +343,6 @@ char *AIScanner::GetAIConsoleList(char *p, const char *last, bool newest_only) c
return p; return p;
} }
char *AIScanner::GetAIConsoleLibraryList(char *p, const char *last) const
{
p += seprintf(p, last, "List of AI Libraries:\n");
AILibraryList::const_iterator it = this->library_list.begin();
for (; it != this->library_list.end(); it++) {
AILibrary *i = (*it).second;
p += seprintf(p, last, "%10s (v%d): %s\n", i->GetName(), i->GetVersion(), i->GetDescription());
}
p += seprintf(p, last, "\n");
return p;
}
#if defined(ENABLE_NETWORK) #if defined(ENABLE_NETWORK)
#include "../network/network_content.h" #include "../network/network_content.h"
#include "../3rdparty/md5/md5.h" #include "../3rdparty/md5/md5.h"

View File

@@ -12,8 +12,11 @@
#ifndef AI_SCANNER_HPP #ifndef AI_SCANNER_HPP
#define AI_SCANNER_HPP #define AI_SCANNER_HPP
#include <squirrel.h>
#include "../script/script_scanner.hpp" #include "../script/script_scanner.hpp"
#include "../core/string_compare_type.hpp"
#include "ai.hpp" #include "ai.hpp"
#include <map>
/** /**
* Class that scans for available AIs. * Class that scans for available AIs.
@@ -53,12 +56,7 @@ public:
/** /**
* Get the list of available AIs for the console. * Get the list of available AIs for the console.
*/ */
char *GetAIConsoleList(char *p, const char *last, bool newest_only) const; char *GetAIConsoleList(char *p, const char *last) const;
/**
* Get the list of available AI Libraries for the console.
*/
char *GetAIConsoleLibraryList(char *p, const char *last) const;
/** /**
* Get the list of all registered AIs. * Get the list of all registered AIs.

View File

@@ -12,7 +12,12 @@
#ifndef AI_STORAGE_HPP #ifndef AI_STORAGE_HPP
#define AI_STORAGE_HPP #define AI_STORAGE_HPP
#include "../command_func.h"
#include "../map_func.h"
#include "../network/network.h"
#include "../company_func.h"
#include "../signs_func.h" #include "../signs_func.h"
#include "../tunnelbridge.h"
#include "../vehicle_func.h" #include "../vehicle_func.h"
#include "../road_type.h" #include "../road_type.h"
#include "../group.h" #include "../group.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_accounting.cpp Implementation of AIAccounting. */ /** @file ai_accounting.cpp Implementation of AIAccounting. */
#include "../../stdafx.h"
#include "ai_accounting.hpp" #include "ai_accounting.hpp"
Money AIAccounting::GetCosts() Money AIAccounting::GetCosts()

View File

@@ -9,7 +9,6 @@
/** @file ai_airport.cpp Implementation of AIAirport. */ /** @file ai_airport.cpp Implementation of AIAirport. */
#include "../../stdafx.h"
#include "ai_airport.hpp" #include "ai_airport.hpp"
#include "ai_station.hpp" #include "ai_station.hpp"
#include "../../station_base.h" #include "../../station_base.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_base.cpp Implementation of AIBase. */ /** @file ai_base.cpp Implementation of AIBase. */
#include "../../stdafx.h"
#include "ai_base.hpp" #include "ai_base.hpp"
#include "../../network/network.h" #include "../../network/network.h"
#include "../../core/random_func.hpp" #include "../../core/random_func.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_basestation.cpp Implementation of AIBaseStation. */ /** @file ai_basestation.cpp Implementation of AIBaseStation. */
#include "../../stdafx.h"
#include "ai_basestation.hpp" #include "ai_basestation.hpp"
#include "../../station_base.h" #include "../../station_base.h"
#include "../../string_func.h" #include "../../string_func.h"

View File

@@ -12,6 +12,7 @@
#ifndef AI_BASESTATION_HPP #ifndef AI_BASESTATION_HPP
#define AI_BASESTATION_HPP #define AI_BASESTATION_HPP
#include "ai_object.hpp"
#include "ai_error.hpp" #include "ai_error.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_bridge.cpp Implementation of AIBridge. */ /** @file ai_bridge.cpp Implementation of AIBridge. */
#include "../../stdafx.h"
#include "ai_bridge.hpp" #include "ai_bridge.hpp"
#include "ai_rail.hpp" #include "ai_rail.hpp"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"
@@ -152,7 +151,9 @@ static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
{ {
if (!IsValidBridge(bridge_id)) return -1; if (!IsValidBridge(bridge_id)) return -1;
return min(::GetBridgeSpec(bridge_id)->max_length, _settings_game.construction.max_bridge_length) + 2; uint max = ::GetBridgeSpec(bridge_id)->max_length;
if (max >= MAX_BRIDGE_LENGTH && _settings_game.construction.longbridges) max = MAX_BRIDGE_LENGTH_LONGBRIDGES;
return max + 2;
} }
/* static */ int32 AIBridge::GetMinLength(BridgeID bridge_id) /* static */ int32 AIBridge::GetMinLength(BridgeID bridge_id)

View File

@@ -12,7 +12,9 @@
#ifndef AI_BRIDGE_HPP #ifndef AI_BRIDGE_HPP
#define AI_BRIDGE_HPP #define AI_BRIDGE_HPP
#include "ai_object.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
#include "ai_error.hpp"
/** /**
* Class that handles all bridge related functions. * Class that handles all bridge related functions.

View File

@@ -9,7 +9,6 @@
/** @file ai_bridgelist.cpp Implementation of AIBridgeList and friends. */ /** @file ai_bridgelist.cpp Implementation of AIBridgeList and friends. */
#include "../../stdafx.h"
#include "ai_bridgelist.hpp" #include "ai_bridgelist.hpp"
#include "ai_bridge.hpp" #include "ai_bridge.hpp"
#include "../../bridge.h" #include "../../bridge.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_cargo.cpp Implementation of AICargo. */ /** @file ai_cargo.cpp Implementation of AICargo. */
#include "../../stdafx.h"
#include "ai_cargo.hpp" #include "ai_cargo.hpp"
#include "../../cargotype.h" #include "../../cargotype.h"
#include "../../economy_func.h" #include "../../economy_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_cargolist.cpp Implementation of AICargoList and friends. */ /** @file ai_cargolist.cpp Implementation of AICargoList and friends. */
#include "../../stdafx.h"
#include "ai_cargolist.hpp" #include "ai_cargolist.hpp"
#include "ai_industry.hpp" #include "ai_industry.hpp"
#include "../../cargotype.h" #include "../../cargotype.h"

View File

@@ -15,12 +15,10 @@
* functions may still be available if you return an older API version * functions may still be available if you return an older API version
* in GetAPIVersion() in info.nut. * in GetAPIVersion() in info.nut.
* *
* \b 1.1.1
*
* No changes
*
* \b 1.1.0 * \b 1.1.0
* *
* 1.1.0 is not yet released. The following changes are not set in stone yet.
*
* API additions: * API additions:
* \li IsEnd for all lists. * \li IsEnd for all lists.
* \li AIEventTownFounded * \li AIEventTownFounded
@@ -35,7 +33,6 @@
* \li HasNext for all lists. * \li HasNext for all lists.
* \li AIAbstractList, use AIList instead. * \li AIAbstractList, use AIList instead.
* \li AIList::ChangeItem, use AIList::SetValue instead. * \li AIList::ChangeItem, use AIList::SetValue instead.
* \li AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, that error is never returned anymore.
* *
* Other changes: * Other changes:
* \li AIEngine::GetMaxTractiveEffort can be used for road vehicles. * \li AIEngine::GetMaxTractiveEffort can be used for road vehicles.

View File

@@ -9,7 +9,6 @@
/** @file ai_company.cpp Implementation of AICompany. */ /** @file ai_company.cpp Implementation of AICompany. */
#include "../../stdafx.h"
#include "ai_company.hpp" #include "ai_company.hpp"
#include "ai_error.hpp" #include "ai_error.hpp"
#include "../../command_func.h" #include "../../command_func.h"

View File

@@ -12,10 +12,10 @@
#include "../../stdafx.h" #include "../../stdafx.h"
#include "../../string_func.h" #include "../../string_func.h"
#include "../../company_base.h" #include "../../company_base.h"
#include "../../company_func.h"
#include "../../rev.h" #include "../../rev.h"
#include "ai_controller.hpp" #include "ai_controller.hpp"
#include "../ai_storage.hpp"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"
#include "../ai_config.hpp" #include "../ai_config.hpp"
#include "ai_log.hpp" #include "ai_log.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_date.cpp Implementation of AIDate. */ /** @file ai_date.cpp Implementation of AIDate. */
#include "../../stdafx.h"
#include "ai_date.hpp" #include "ai_date.hpp"
#include "../../date_func.h" #include "../../date_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_depotlist.cpp Implementation of AIDepotList and friends. */ /** @file ai_depotlist.cpp Implementation of AIDepotList and friends. */
#include "../../stdafx.h"
#include "ai_depotlist.hpp" #include "ai_depotlist.hpp"
#include "../../company_func.h" #include "../../company_func.h"
#include "../../depot_base.h" #include "../../depot_base.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_engine.cpp Implementation of AIEngine. */ /** @file ai_engine.cpp Implementation of AIEngine. */
#include "../../stdafx.h"
#include "ai_engine.hpp" #include "ai_engine.hpp"
#include "ai_cargo.hpp" #include "ai_cargo.hpp"
#include "../../company_func.h" #include "../../company_func.h"

View File

@@ -12,7 +12,9 @@
#ifndef AI_ENGINE_HPP #ifndef AI_ENGINE_HPP
#define AI_ENGINE_HPP #define AI_ENGINE_HPP
#include "ai_object.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
#include "ai_road.hpp"
#include "ai_rail.hpp" #include "ai_rail.hpp"
#include "ai_airport.hpp" #include "ai_airport.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_enginelist.cpp Implementation of AIEngineList and friends. */ /** @file ai_enginelist.cpp Implementation of AIEngineList and friends. */
#include "../../stdafx.h"
#include "ai_enginelist.hpp" #include "ai_enginelist.hpp"
#include "../../company_func.h" #include "../../company_func.h"
#include "../../engine_base.h" #include "../../engine_base.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_error.cpp Implementation of AIError. */ /** @file ai_error.cpp Implementation of AIError. */
#include "../../stdafx.h"
#include "ai_error.hpp" #include "ai_error.hpp"
#include "../../core/bitmath_func.hpp" #include "../../core/bitmath_func.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_event.cpp Implementation of AIEvent. */ /** @file ai_event.cpp Implementation of AIEvent. */
#include "../../stdafx.h"
#include "ai_event_types.hpp" #include "ai_event_types.hpp"
#include <queue> #include <queue>

View File

@@ -9,7 +9,6 @@
/** @file ai_event_types.cpp Implementation of all EventTypes. */ /** @file ai_event_types.cpp Implementation of all EventTypes. */
#include "../../stdafx.h"
#include "ai_event_types.hpp" #include "ai_event_types.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
#include "../../command_type.h" #include "../../command_type.h"
@@ -19,15 +18,8 @@
#include "../../articulated_vehicles.h" #include "../../articulated_vehicles.h"
#include "table/strings.h" #include "table/strings.h"
bool AIEventEnginePreview::IsEngineValid() const
{
const Engine *e = ::Engine::GetIfValid(this->engine);
return e != NULL && e->IsEnabled();
}
char *AIEventEnginePreview::GetName() char *AIEventEnginePreview::GetName()
{ {
if (!this->IsEngineValid()) return NULL;
static const int len = 64; static const int len = 64;
char *engine_name = MallocT<char>(len); char *engine_name = MallocT<char>(len);
@@ -38,7 +30,6 @@ char *AIEventEnginePreview::GetName()
CargoID AIEventEnginePreview::GetCargoType() CargoID AIEventEnginePreview::GetCargoType()
{ {
if (!this->IsEngineValid()) return CT_INVALID;
CargoArray cap = ::GetCapacityOfArticulatedParts(this->engine); CargoArray cap = ::GetCapacityOfArticulatedParts(this->engine);
CargoID most_cargo = CT_INVALID; CargoID most_cargo = CT_INVALID;
@@ -55,7 +46,6 @@ CargoID AIEventEnginePreview::GetCargoType()
int32 AIEventEnginePreview::GetCapacity() int32 AIEventEnginePreview::GetCapacity()
{ {
if (!this->IsEngineValid()) return -1;
const Engine *e = ::Engine::Get(this->engine); const Engine *e = ::Engine::Get(this->engine);
switch (e->type) { switch (e->type) {
case VEH_ROAD: case VEH_ROAD:
@@ -78,7 +68,6 @@ int32 AIEventEnginePreview::GetCapacity()
int32 AIEventEnginePreview::GetMaxSpeed() int32 AIEventEnginePreview::GetMaxSpeed()
{ {
if (!this->IsEngineValid()) return -1;
const Engine *e = ::Engine::Get(this->engine); const Engine *e = ::Engine::Get(this->engine);
int32 max_speed = e->GetDisplayMaxSpeed(); // km-ish/h int32 max_speed = e->GetDisplayMaxSpeed(); // km-ish/h
if (e->type == VEH_AIRCRAFT) max_speed /= _settings_game.vehicle.plane_speed; if (e->type == VEH_AIRCRAFT) max_speed /= _settings_game.vehicle.plane_speed;
@@ -87,19 +76,16 @@ int32 AIEventEnginePreview::GetMaxSpeed()
Money AIEventEnginePreview::GetPrice() Money AIEventEnginePreview::GetPrice()
{ {
if (!this->IsEngineValid()) return -1;
return ::Engine::Get(this->engine)->GetCost(); return ::Engine::Get(this->engine)->GetCost();
} }
Money AIEventEnginePreview::GetRunningCost() Money AIEventEnginePreview::GetRunningCost()
{ {
if (!this->IsEngineValid()) return -1;
return ::Engine::Get(this->engine)->GetRunningCost(); return ::Engine::Get(this->engine)->GetRunningCost();
} }
int32 AIEventEnginePreview::GetVehicleType() int32 AIEventEnginePreview::GetVehicleType()
{ {
if (!this->IsEngineValid()) return AIVehicle::VT_INVALID;
switch (::Engine::Get(this->engine)->type) { switch (::Engine::Get(this->engine)->type) {
case VEH_ROAD: return AIVehicle::VT_ROAD; case VEH_ROAD: return AIVehicle::VT_ROAD;
case VEH_TRAIN: return AIVehicle::VT_RAIL; case VEH_TRAIN: return AIVehicle::VT_RAIL;
@@ -111,7 +97,6 @@ int32 AIEventEnginePreview::GetVehicleType()
bool AIEventEnginePreview::AcceptPreview() bool AIEventEnginePreview::AcceptPreview()
{ {
if (!this->IsEngineValid()) return false;
return AIObject::DoCommand(0, this->engine, 0, CMD_WANT_ENGINE_PREVIEW); return AIObject::DoCommand(0, this->engine, 0, CMD_WANT_ENGINE_PREVIEW);
} }

View File

@@ -12,6 +12,7 @@
#ifndef AI_EVENT_TYPES_HPP #ifndef AI_EVENT_TYPES_HPP
#define AI_EVENT_TYPES_HPP #define AI_EVENT_TYPES_HPP
#include "ai_object.hpp"
#include "ai_event.hpp" #include "ai_event.hpp"
#include "ai_company.hpp" #include "ai_company.hpp"
@@ -296,7 +297,6 @@ public:
private: private:
EngineID engine; EngineID engine;
bool IsEngineValid() const;
}; };
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_execmode.cpp Implementation of AIExecMode. */ /** @file ai_execmode.cpp Implementation of AIExecMode. */
#include "../../stdafx.h"
#include "ai_execmode.hpp" #include "ai_execmode.hpp"
#include "../../company_base.h" #include "../../company_base.h"
#include "../../company_func.h" #include "../../company_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_gamesettings.cpp Implementation of AIGameSettings. */ /** @file ai_gamesettings.cpp Implementation of AIGameSettings. */
#include "../../stdafx.h"
#include "ai_gamesettings.hpp" #include "ai_gamesettings.hpp"
#include "../../settings_internal.h" #include "../../settings_internal.h"

View File

@@ -12,6 +12,7 @@
#ifndef AI_GAMESETTINGS_HPP #ifndef AI_GAMESETTINGS_HPP
#define AI_GAMESETTINGS_HPP #define AI_GAMESETTINGS_HPP
#include "ai_object.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_group.cpp Implementation of AIGroup. */ /** @file ai_group.cpp Implementation of AIGroup. */
#include "../../stdafx.h"
#include "ai_group.hpp" #include "ai_group.hpp"
#include "ai_engine.hpp" #include "ai_engine.hpp"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"

View File

@@ -12,6 +12,7 @@
#ifndef AI_GROUP_HPP #ifndef AI_GROUP_HPP
#define AI_GROUP_HPP #define AI_GROUP_HPP
#include "ai_object.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_grouplist.cpp Implementation of AIGroupList and friends. */ /** @file ai_grouplist.cpp Implementation of AIGroupList and friends. */
#include "../../stdafx.h"
#include "ai_grouplist.hpp" #include "ai_grouplist.hpp"
#include "../../company_func.h" #include "../../company_func.h"
#include "../../group.h" #include "../../group.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_industry.cpp Implementation of AIIndustry. */ /** @file ai_industry.cpp Implementation of AIIndustry. */
#include "../../stdafx.h"
#include "ai_industry.hpp" #include "ai_industry.hpp"
#include "ai_cargo.hpp" #include "ai_cargo.hpp"
#include "ai_map.hpp" #include "ai_map.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_industrylist.cpp Implementation of AIIndustryList and friends. */ /** @file ai_industrylist.cpp Implementation of AIIndustryList and friends. */
#include "../../stdafx.h"
#include "ai_industrylist.hpp" #include "ai_industrylist.hpp"
#include "../../industry.h" #include "../../industry.h"

View File

@@ -9,10 +9,8 @@
/** @file ai_industrytype.cpp Implementation of AIIndustryType. */ /** @file ai_industrytype.cpp Implementation of AIIndustryType. */
#include "../../stdafx.h"
#include "ai_industrytype.hpp" #include "ai_industrytype.hpp"
#include "ai_map.hpp" #include "ai_map.hpp"
#include "ai_error.hpp"
#include "../../strings_func.h" #include "../../strings_func.h"
#include "../../industry.h" #include "../../industry.h"
#include "../../newgrf_industries.h" #include "../../newgrf_industries.h"

View File

@@ -12,6 +12,8 @@
#ifndef AI_INDUSTRYTYPE_HPP #ifndef AI_INDUSTRYTYPE_HPP
#define AI_INDUSTRYTYPE_HPP #define AI_INDUSTRYTYPE_HPP
#include "ai_object.hpp"
#include "ai_error.hpp"
#include "ai_list.hpp" #include "ai_list.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_industrytypelist.cpp Implementation of AIIndustryTypeList. */ /** @file ai_industrytypelist.cpp Implementation of AIIndustryTypeList. */
#include "../../stdafx.h"
#include "ai_industrytypelist.hpp" #include "ai_industrytypelist.hpp"
#include "../../industry.h" #include "../../industry.h"

View File

@@ -12,6 +12,7 @@
#ifndef AI_INDUSTRYTYPELIST_HPP #ifndef AI_INDUSTRYTYPELIST_HPP
#define AI_INDUSTRYTYPELIST_HPP #define AI_INDUSTRYTYPELIST_HPP
#include "ai_list.hpp"
#include "ai_industrytype.hpp" #include "ai_industrytype.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_list.cpp Implementation of AIList. */ /** @file ai_list.cpp Implementation of AIList. */
#include "../../stdafx.h"
#include "ai_list.hpp" #include "ai_list.hpp"
#include "../../debug.h" #include "../../debug.h"
#include "../../script/squirrel.hpp" #include "../../script/squirrel.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_log.cpp Implementation of AILog. */ /** @file ai_log.cpp Implementation of AILog. */
#include "../../stdafx.h"
#include "ai_log.hpp" #include "ai_log.hpp"
#include "../../core/alloc_func.hpp" #include "../../core/alloc_func.hpp"
#include "../../company_func.h" #include "../../company_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_map.cpp Implementation of AIMap. */ /** @file ai_map.cpp Implementation of AIMap. */
#include "../../stdafx.h"
#include "ai_map.hpp" #include "ai_map.hpp"
#include "../../tile_map.h" #include "../../tile_map.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_marine.cpp Implementation of AIMarine. */ /** @file ai_marine.cpp Implementation of AIMarine. */
#include "../../stdafx.h"
#include "ai_marine.hpp" #include "ai_marine.hpp"
#include "ai_station.hpp" #include "ai_station.hpp"
#include "../../station_base.h" #include "../../station_base.h"

View File

@@ -12,6 +12,7 @@
#ifndef AI_MARINE_HPP #ifndef AI_MARINE_HPP
#define AI_MARINE_HPP #define AI_MARINE_HPP
#include "ai_object.hpp"
#include "ai_error.hpp" #include "ai_error.hpp"
/** /**

View File

@@ -11,11 +11,7 @@
#include "../../stdafx.h" #include "../../stdafx.h"
#include "../../script/squirrel.hpp" #include "../../script/squirrel.hpp"
#include "../../command_func.h"
#include "../../company_base.h" #include "../../company_base.h"
#include "../../company_func.h"
#include "../../network/network.h"
#include "../../tunnelbridge.h"
#include "../ai_storage.hpp" #include "../ai_storage.hpp"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"

View File

@@ -12,6 +12,7 @@
#ifndef AI_OBJECT_HPP #ifndef AI_OBJECT_HPP
#define AI_OBJECT_HPP #define AI_OBJECT_HPP
#include "../../stdafx.h"
#include "../../misc/countedptr.hpp" #include "../../misc/countedptr.hpp"
#include "../../road_type.h" #include "../../road_type.h"
#include "../../rail_type.h" #include "../../rail_type.h"

View File

@@ -9,8 +9,6 @@
/** @file ai_order.cpp Implementation of AIOrder. */ /** @file ai_order.cpp Implementation of AIOrder. */
#include "../../stdafx.h"
#include "ai_order.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"
#include "../../debug.h" #include "../../debug.h"
@@ -48,7 +46,7 @@ static OrderType GetOrderTypeByTile(TileIndex t)
/* static */ bool AIOrder::IsValidVehicleOrder(VehicleID vehicle_id, OrderPosition order_position) /* static */ bool AIOrder::IsValidVehicleOrder(VehicleID vehicle_id, OrderPosition order_position)
{ {
return AIVehicle::IsValidVehicle(vehicle_id) && order_position >= 0 && (order_position < ::Vehicle::Get(vehicle_id)->GetNumManualOrders() || order_position == ORDER_CURRENT); return AIVehicle::IsValidVehicle(vehicle_id) && order_position >= 0 && (order_position < ::Vehicle::Get(vehicle_id)->GetNumOrders() || order_position == ORDER_CURRENT);
} }
/** /**
@@ -65,14 +63,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position); order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
if (order_position == AIOrder::ORDER_INVALID) return NULL; if (order_position == AIOrder::ORDER_INVALID) return NULL;
} }
const Order *order = v->orders.list->GetFirstOrder(); return v->GetOrder(order_position);
while (order->GetType() == OT_AUTOMATIC) order = order->next;
while (order_position > 0) {
order_position = (AIOrder::OrderPosition)(order_position - 1);
order = order->next;
while (order->GetType() == OT_AUTOMATIC) order = order->next;
}
return order;
} }
/* static */ bool AIOrder::IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position) /* static */ bool AIOrder::IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position)
@@ -131,18 +122,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
{ {
if (!AIVehicle::IsValidVehicle(vehicle_id)) return ORDER_INVALID; if (!AIVehicle::IsValidVehicle(vehicle_id)) return ORDER_INVALID;
if (order_position == ORDER_CURRENT) { if (order_position == ORDER_CURRENT) return (AIOrder::OrderPosition)::Vehicle::Get(vehicle_id)->cur_order_index;
int cur_order_pos = ::Vehicle::Get(vehicle_id)->cur_real_order_index; return (order_position >= 0 && order_position < ::Vehicle::Get(vehicle_id)->GetNumOrders()) ? order_position : ORDER_INVALID;
const Order *order = ::Vehicle::Get(vehicle_id)->GetOrder(0);
if (order == NULL) return ORDER_INVALID;
int num_automatic_orders = 0;
for (int i = 0; i < cur_order_pos; i++) {
if (order->GetType() == OT_AUTOMATIC) num_automatic_orders++;
order = order->next;
}
return (AIOrder::OrderPosition)(cur_order_pos - num_automatic_orders);
}
return (order_position >= 0 && order_position < ::Vehicle::Get(vehicle_id)->GetNumManualOrders()) ? order_position : ORDER_INVALID;
} }
@@ -279,7 +260,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (!IsValidVehicleOrder(vehicle_id, order_position)) return ORDER_INVALID; if (!IsValidVehicleOrder(vehicle_id, order_position)) return ORDER_INVALID;
if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return ORDER_INVALID; if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return ORDER_INVALID;
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
return (OrderPosition)order->GetConditionSkipToOrder(); return (OrderPosition)order->GetConditionSkipToOrder();
} }
@@ -288,7 +269,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (!IsValidVehicleOrder(vehicle_id, order_position)) return OC_INVALID; if (!IsValidVehicleOrder(vehicle_id, order_position)) return OC_INVALID;
if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return OC_INVALID; if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return OC_INVALID;
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
return (OrderCondition)order->GetConditionVariable(); return (OrderCondition)order->GetConditionVariable();
} }
@@ -297,7 +278,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (!IsValidVehicleOrder(vehicle_id, order_position)) return CF_INVALID; if (!IsValidVehicleOrder(vehicle_id, order_position)) return CF_INVALID;
if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return CF_INVALID; if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return CF_INVALID;
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
return (CompareFunction)order->GetConditionComparator(); return (CompareFunction)order->GetConditionComparator();
} }
@@ -306,7 +287,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (!IsValidVehicleOrder(vehicle_id, order_position)) return -1; if (!IsValidVehicleOrder(vehicle_id, order_position)) return -1;
if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return -1; if (order_position == ORDER_CURRENT || !IsConditionalOrder(vehicle_id, order_position)) return -1;
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
int32 value = order->GetConditionValue(); int32 value = order->GetConditionValue();
if (order->GetConditionVariable() == OCV_MAX_SPEED) value = value * 16 / 10; if (order->GetConditionVariable() == OCV_MAX_SPEED) value = value * 16 / 10;
return value; return value;
@@ -318,7 +299,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (AIVehicle::GetVehicleType(vehicle_id) != AIVehicle::VT_RAIL) return STOPLOCATION_INVALID; if (AIVehicle::GetVehicleType(vehicle_id) != AIVehicle::VT_RAIL) return STOPLOCATION_INVALID;
if (!IsGotoStationOrder(vehicle_id, order_position)) return STOPLOCATION_INVALID; if (!IsGotoStationOrder(vehicle_id, order_position)) return STOPLOCATION_INVALID;
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
return (AIOrder::StopLocation)order->GetStopLocation(); return (AIOrder::StopLocation)order->GetStopLocation();
} }
@@ -505,12 +486,10 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position)); EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position));
EnforcePrecondition(false, AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags)); EnforcePrecondition(false, AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags));
const Order *order = ::ResolveOrder(vehicle_id, order_position); const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
AIOrderFlags current = GetOrderFlags(vehicle_id, order_position); AIOrderFlags current = GetOrderFlags(vehicle_id, order_position);
EnforcePrecondition(false, (order_flags & AIOF_GOTO_NEAREST_DEPOT) == (current & AIOF_GOTO_NEAREST_DEPOT));
if ((current & AIOF_NON_STOP_FLAGS) != (order_flags & AIOF_NON_STOP_FLAGS)) { if ((current & AIOF_NON_STOP_FLAGS) != (order_flags & AIOF_NON_STOP_FLAGS)) {
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (order_flags & AIOF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags); return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (order_flags & AIOF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
} }

View File

@@ -12,6 +12,7 @@
#ifndef AI_ORDER_HPP #ifndef AI_ORDER_HPP
#define AI_ORDER_HPP #define AI_ORDER_HPP
#include "ai_object.hpp"
#include "ai_error.hpp" #include "ai_error.hpp"
/** /**
@@ -112,13 +113,7 @@ public:
CF_INVALID = -1, ///< Invalid compare function, do not use. CF_INVALID = -1, ///< Invalid compare function, do not use.
}; };
/** /** Different constants related to the OrderPosition */
* Index in the list of orders for a vehicle. The first order has index 0, the second
* order index 1, etc. The current order can be queried by using ORDER_CURRENT. Do not
* use ORDER_INVALID yourself, it's used as return value by for example ResolveOrderPosition.
* @note Automatic orders are hidden from AIs, so OrderPosition 0 will always be the first
* manual order.
*/
enum OrderPosition { enum OrderPosition {
ORDER_CURRENT = 0xFF, ///< Constant that gets resolved to the current order. ORDER_CURRENT = 0xFF, ///< Constant that gets resolved to the current order.
ORDER_INVALID = -1, ///< An invalid order. ORDER_INVALID = -1, ///< An invalid order.
@@ -457,7 +452,6 @@ public:
* @param order_flags The new flags given to the order. * @param order_flags The new flags given to the order.
* @pre IsValidVehicleOrder(vehicle_id, order_position). * @pre IsValidVehicleOrder(vehicle_id, order_position).
* @pre AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags). * @pre AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags).
* @pre (order_flags & AIOF_GOTO_NEAREST_DEPOT) == (GetOrderFlags(vehicle_id, order_position) & AIOF_GOTO_NEAREST_DEPOT).
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY * @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
* @return True if and only if the order was changed. * @return True if and only if the order was changed.
*/ */

View File

@@ -9,7 +9,6 @@
/** @file ai_rail.cpp Implementation of AIRail. */ /** @file ai_rail.cpp Implementation of AIRail. */
#include "../../stdafx.h"
#include "ai_rail.hpp" #include "ai_rail.hpp"
#include "ai_map.hpp" #include "ai_map.hpp"
#include "ai_station.hpp" #include "ai_station.hpp"

View File

@@ -12,6 +12,8 @@
#ifndef AI_RAIL_HPP #ifndef AI_RAIL_HPP
#define AI_RAIL_HPP #define AI_RAIL_HPP
#include "ai_object.hpp"
#include "ai_error.hpp"
#include "ai_tile.hpp" #include "ai_tile.hpp"
/** /**
@@ -35,6 +37,9 @@ public:
/** Track not suitable for signals */ /** Track not suitable for signals */
ERR_UNSUITABLE_TRACK, // [STR_ERROR_NO_SUITABLE_RAILROAD_TRACK] ERR_UNSUITABLE_TRACK, // [STR_ERROR_NO_SUITABLE_RAILROAD_TRACK]
/** Non-uniform stations is diabled */
ERR_NONUNIFORM_STATIONS_DISABLED, // [STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED]
/** This railtype cannot have crossings */ /** This railtype cannot have crossings */
ERR_RAILTYPE_DISALLOWS_CROSSING, // [STR_ERROR_CROSSING_DISALLOWED] ERR_RAILTYPE_DISALLOWS_CROSSING, // [STR_ERROR_CROSSING_DISALLOWED]
}; };

View File

@@ -38,43 +38,46 @@ void SQAIRail_Register(Squirrel *engine)
SQAIRail.PreRegister(engine); SQAIRail.PreRegister(engine);
SQAIRail.AddConstructor<void (AIRail::*)(), 1>(engine, "x"); SQAIRail.AddConstructor<void (AIRail::*)(), 1>(engine, "x");
SQAIRail.DefSQConst(engine, AIRail::ERR_RAIL_BASE, "ERR_RAIL_BASE"); SQAIRail.DefSQConst(engine, AIRail::ERR_RAIL_BASE, "ERR_RAIL_BASE");
SQAIRail.DefSQConst(engine, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); SQAIRail.DefSQConst(engine, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD");
SQAIRail.DefSQConst(engine, AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); SQAIRail.DefSQConst(engine, AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK");
SQAIRail.DefSQConst(engine, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); SQAIRail.DefSQConst(engine, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
SQAIRail.DefSQConst(engine, AIRail::RAILTYPE_INVALID, "RAILTYPE_INVALID"); SQAIRail.DefSQConst(engine, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SW, "RAILTRACK_NE_SW"); SQAIRail.DefSQConst(engine, AIRail::RAILTYPE_INVALID, "RAILTYPE_INVALID");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SE, "RAILTRACK_NW_SE"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SW, "RAILTRACK_NE_SW");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_NE, "RAILTRACK_NW_NE"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SE, "RAILTRACK_NW_SE");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_SW_SE, "RAILTRACK_SW_SE"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_NE, "RAILTRACK_NW_NE");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SW, "RAILTRACK_NW_SW"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_SW_SE, "RAILTRACK_SW_SE");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SE, "RAILTRACK_NE_SE"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NW_SW, "RAILTRACK_NW_SW");
SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_INVALID, "RAILTRACK_INVALID"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_NE_SE, "RAILTRACK_NE_SE");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NORMAL, "SIGNALTYPE_NORMAL"); SQAIRail.DefSQConst(engine, AIRail::RAILTRACK_INVALID, "RAILTRACK_INVALID");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_ENTRY, "SIGNALTYPE_ENTRY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NORMAL, "SIGNALTYPE_NORMAL");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_EXIT, "SIGNALTYPE_EXIT"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_ENTRY, "SIGNALTYPE_ENTRY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_COMBO, "SIGNALTYPE_COMBO"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_EXIT, "SIGNALTYPE_EXIT");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_PBS, "SIGNALTYPE_PBS"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_COMBO, "SIGNALTYPE_COMBO");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_PBS_ONEWAY, "SIGNALTYPE_PBS_ONEWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_PBS, "SIGNALTYPE_PBS");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_TWOWAY, "SIGNALTYPE_TWOWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_PBS_ONEWAY, "SIGNALTYPE_PBS_ONEWAY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NORMAL_TWOWAY, "SIGNALTYPE_NORMAL_TWOWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_TWOWAY, "SIGNALTYPE_TWOWAY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_ENTRY_TWOWAY, "SIGNALTYPE_ENTRY_TWOWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NORMAL_TWOWAY, "SIGNALTYPE_NORMAL_TWOWAY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_EXIT_TWOWAY, "SIGNALTYPE_EXIT_TWOWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_ENTRY_TWOWAY, "SIGNALTYPE_ENTRY_TWOWAY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_COMBO_TWOWAY, "SIGNALTYPE_COMBO_TWOWAY"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_EXIT_TWOWAY, "SIGNALTYPE_EXIT_TWOWAY");
SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NONE, "SIGNALTYPE_NONE"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_COMBO_TWOWAY, "SIGNALTYPE_COMBO_TWOWAY");
SQAIRail.DefSQConst(engine, AIRail::BT_TRACK, "BT_TRACK"); SQAIRail.DefSQConst(engine, AIRail::SIGNALTYPE_NONE, "SIGNALTYPE_NONE");
SQAIRail.DefSQConst(engine, AIRail::BT_SIGNAL, "BT_SIGNAL"); SQAIRail.DefSQConst(engine, AIRail::BT_TRACK, "BT_TRACK");
SQAIRail.DefSQConst(engine, AIRail::BT_DEPOT, "BT_DEPOT"); SQAIRail.DefSQConst(engine, AIRail::BT_SIGNAL, "BT_SIGNAL");
SQAIRail.DefSQConst(engine, AIRail::BT_STATION, "BT_STATION"); SQAIRail.DefSQConst(engine, AIRail::BT_DEPOT, "BT_DEPOT");
SQAIRail.DefSQConst(engine, AIRail::BT_WAYPOINT, "BT_WAYPOINT"); SQAIRail.DefSQConst(engine, AIRail::BT_STATION, "BT_STATION");
SQAIRail.DefSQConst(engine, AIRail::BT_WAYPOINT, "BT_WAYPOINT");
AIError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD); AIError::RegisterErrorMap(STR_ERROR_CROSSING_ON_ONEWAY_ROAD, AIRail::ERR_CROSSING_ON_ONEWAY_ROAD);
AIError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK, AIRail::ERR_UNSUITABLE_TRACK); AIError::RegisterErrorMap(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK, AIRail::ERR_UNSUITABLE_TRACK);
AIError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING); AIError::RegisterErrorMap(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED, AIRail::ERR_NONUNIFORM_STATIONS_DISABLED);
AIError::RegisterErrorMap(STR_ERROR_CROSSING_DISALLOWED, AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING);
AIError::RegisterErrorMapString(AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD"); AIError::RegisterErrorMapString(AIRail::ERR_CROSSING_ON_ONEWAY_ROAD, "ERR_CROSSING_ON_ONEWAY_ROAD");
AIError::RegisterErrorMapString(AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK"); AIError::RegisterErrorMapString(AIRail::ERR_UNSUITABLE_TRACK, "ERR_UNSUITABLE_TRACK");
AIError::RegisterErrorMapString(AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); AIError::RegisterErrorMapString(AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED");
AIError::RegisterErrorMapString(AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING");
SQAIRail.DefSQStaticMethod(engine, &AIRail::GetName, "GetName", 2, ".i"); SQAIRail.DefSQStaticMethod(engine, &AIRail::GetName, "GetName", 2, ".i");
SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailTile, "IsRailTile", 2, ".i"); SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailTile, "IsRailTile", 2, ".i");

View File

@@ -9,7 +9,6 @@
/** @file ai_railtypelist.cpp Implementation of AIRailTypeList and friends. */ /** @file ai_railtypelist.cpp Implementation of AIRailTypeList and friends. */
#include "../../stdafx.h"
#include "ai_railtypelist.hpp" #include "ai_railtypelist.hpp"
#include "../../rail.h" #include "../../rail.h"
#include "../../company_func.h" #include "../../company_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_road.cpp Implementation of AIRoad. */ /** @file ai_road.cpp Implementation of AIRoad. */
#include "../../stdafx.h"
#include "ai_map.hpp" #include "ai_map.hpp"
#include "ai_station.hpp" #include "ai_station.hpp"
#include "ai_cargo.hpp" #include "ai_cargo.hpp"

View File

@@ -12,6 +12,8 @@
#ifndef AI_ROAD_HPP #ifndef AI_ROAD_HPP
#define AI_ROAD_HPP #define AI_ROAD_HPP
#include "ai_object.hpp"
#include "ai_error.hpp"
#include "ai_tile.hpp" #include "ai_tile.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_sign.cpp Implementation of AISign. */ /** @file ai_sign.cpp Implementation of AISign. */
#include "../../stdafx.h"
#include "ai_sign.hpp" #include "ai_sign.hpp"
#include "table/strings.h" #include "table/strings.h"
#include "../ai_instance.hpp" #include "../ai_instance.hpp"

View File

@@ -12,7 +12,9 @@
#ifndef AI_SIGN_HPP #ifndef AI_SIGN_HPP
#define AI_SIGN_HPP #define AI_SIGN_HPP
#include "ai_object.hpp"
#include "ai_error.hpp" #include "ai_error.hpp"
#include "ai_company.hpp"
/** /**
* Class that handles all sign related functions. * Class that handles all sign related functions.

View File

@@ -9,7 +9,6 @@
/** @file ai_signlist.cpp Implementation of AISignList and friends. */ /** @file ai_signlist.cpp Implementation of AISignList and friends. */
#include "../../stdafx.h"
#include "ai_signlist.hpp" #include "ai_signlist.hpp"
#include "ai_sign.hpp" #include "ai_sign.hpp"
#include "../../signs_base.h" #include "../../signs_base.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_station.cpp Implementation of AIStation. */ /** @file ai_station.cpp Implementation of AIStation. */
#include "../../stdafx.h"
#include "ai_station.hpp" #include "ai_station.hpp"
#include "ai_cargo.hpp" #include "ai_cargo.hpp"
#include "ai_map.hpp" #include "ai_map.hpp"

View File

@@ -12,6 +12,8 @@
#ifndef AI_STATION_HPP #ifndef AI_STATION_HPP
#define AI_STATION_HPP #define AI_STATION_HPP
#include "ai_object.hpp"
#include "ai_error.hpp"
#include "ai_road.hpp" #include "ai_road.hpp"
#include "ai_basestation.hpp" #include "ai_basestation.hpp"

View File

@@ -9,7 +9,6 @@
/** @file ai_stationlist.cpp Implementation of AIStationList and friends. */ /** @file ai_stationlist.cpp Implementation of AIStationList and friends. */
#include "../../stdafx.h"
#include "ai_stationlist.hpp" #include "ai_stationlist.hpp"
#include "ai_vehicle.hpp" #include "ai_vehicle.hpp"
#include "../../company_func.h" #include "../../company_func.h"

View File

@@ -9,7 +9,6 @@
/** @file ai_subsidy.cpp Implementation of AISubsidy. */ /** @file ai_subsidy.cpp Implementation of AISubsidy. */
#include "../../stdafx.h"
#include "ai_subsidy.hpp" #include "ai_subsidy.hpp"
#include "ai_date.hpp" #include "ai_date.hpp"
#include "../../subsidy_base.h" #include "../../subsidy_base.h"

View File

@@ -12,6 +12,7 @@
#ifndef AI_SUBSIDY_HPP #ifndef AI_SUBSIDY_HPP
#define AI_SUBSIDY_HPP #define AI_SUBSIDY_HPP
#include "ai_object.hpp"
#include "ai_company.hpp" #include "ai_company.hpp"
/** /**

View File

@@ -9,7 +9,6 @@
/** @file ai_subsidylist.cpp Implementation of AISubsidyList. */ /** @file ai_subsidylist.cpp Implementation of AISubsidyList. */
#include "../../stdafx.h"
#include "ai_subsidylist.hpp" #include "ai_subsidylist.hpp"
#include "../../subsidy_base.h" #include "../../subsidy_base.h"

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