
Steam news
Full Steam announcements and update articles for this title.
Game will retry connecting to the server if it becomes disconnected.
Game now connect asynchronously, reducing startup/network stalls.
If the server version/protocol doesn't match, the game stops retrying that session, resulting in clearer behavior and fewer unnecessary connection attempts.
Fixed a bug where if trains merged such that the second train was closer than the follow distance, it would not slow down and would crash into the train in front of it. There was actually a second related bug where it would come to a complete stop instead of crashing into the train in front of it. This was exposed by fixing the first bug. Now train merges are detected correctly and trains will gently slow down until they reach their ideal follow distance.
Fixed bug where trains following another could match the speed of the leader even if they should not be able to due to track curvature.
Fixed bug where the train car display didn't accurately show the amount of cargo in a car when unloading cargo.
Added more digits of precision to balance and config files to reproduce the binary value accurately.
Fixed bug where depots directly touch a block with platforms that load were not handled properly. This could lead to priority stealing, and non-determinism in multi-threading. This was a rare and subtle simulation problem, but required some rethinking of simulation internals. Added internal signal type start as part of the code refactor.
Fix a bug where if there are multiple paths in a block where one of the paths is invalid and touching a vertex that has a valid path traveling in the opposite direction that it could sometimes incorrectly generate a path with the train reversing in an impossible way. This happened because I was just storing a shortest distance per segment, whereas I should have been storing a shortest distance per segment per direction.
Fixed a bug where the number of signals counted for cost was incorrect because it counted implicit signals (terminal, start), which are not placed by the player or drawn.
Fixed healing tracks sometimes flipping signals.
Fixed bug where colors of signals could sometimes switch when being moved if they had started off as bidirectional.
Made signals, behave consistently in terms of blocking behavior. Now, trains can block themselves. Also, chain signals behave consistently with other signals.
Fixed a bug where free signals at the end of a chain signal would sometimes block, when a free signal should never block. Now, if a chain signal sees a free signal it will always allow the train to proceed.
Added option to display block information. This is displayed in the following format 1\:4(5,6) where 1 is the block cluster id, \ is the priority queue of trains for the cluster, 4 is the block id and (5,6) is the list of trains that are claiming occupancy of the block. This can be helpful to debug your signal setups, especially when using chain signals.
Fixed that cost related text overlay was drawn red when using custom balance.
Added signal dialog that opens when clicking on a signal a second time. You can set the load orders from here, and is the only way to configure cargo specific orders.
Added support for resource-specific loading and unloading orders. This makes it much more feasible to use multi-cargo trains if you want to.
Updated the load and unload icons to be clearer. Now they are real icons instead of text with < > ? and | characters overlaid.
Fixed ordering of regions in scores dialog to make more sense in terms of unlock order.
Changed recipes for workshop to use leather instead of steel to boost production of farm tools. This was needed because steel was also used to produce mechanisms. Having the same input used for two different outputs caused problems.
Changed various farm locations to use farming tools to massively boost production. Previously farming tools had no effect. This was an oversight because they used to be used, but I simplified the recipes to use leather instead, but that left farming tools with no utility.
Fix issue with silos at industries that produce the same good as in the silo. If a train arrives with nothing to unload, don't add unloading as a possible action for the train. The problem was that if a train car had conflicting load vs unload orders, one of the orders was removed. This meant that trains would not pick up from the industry.
Don't draw highlights for track ends that are close to platforms. This confuses new players where to place depots.
Added button to remove all routes from the selected set, indicated by a nuclear mushroom cloud icon.
Added button to heal track, removing a "cut". This replaces 3 connected tracks with a single track.
Fixed bug where deleting a route from an unset signal didn't populate all the other routes at that signal like it should have. This was a regression from how it worked before.
Fixed bug with track highlighting going past one way signals that face the wrong direction. Calculate and store route highlighting on a per segment basis instead of per track.
Made route highlighting calculations use a bitmask for a bit better efficiency.
Made route destinations always show, even when the source signal isn't selected, but in a more muted color. I made the selection color bright white to compensate to be more visible.
Better sanitization of strings to have a filename-safe encoding. I now allow spaces and other weird characters in player names and files. I also fixed a silent failure to save files with invalid characters. Also, I use this sanitization server-side now, which should close some security holes.
Made 'Escape', or whatever the hotkey is bound to, close save/load menus.
Made depot colors actually be random, and avoid reusing color combos as best as possible. Also made the color selection buttons in the depot dialog make it more clear which colors are actually selected for the route.
Draw small numbers over cars so that you know the length of the train and locations of cars, which may be useful for mixed cargo trains.
Fixed some minor UI scale issues: Incorrect window hit detection. Incorrect option checkbox shown.
Added translations of key binding descriptions.
Made it an error for track vertices to be on other tracks. This was a bug to have been allowed in the first place. Unfortunately, there were some submitted solutions that became invalid due to this change.
Fixed bug where routes from a signal were added multiple times and required removing all the dumplicates via UI to remove a path.
Fixed bug where terminal signals weren't being correctly removed from route highlighting mode.
Fixed buggy rendering where culling lagged behind for fast camera movement when following a train.
Worker changes
Added worker walking speed penalty that applies after 30 tiles and ramps up slowly over distance. This is a very lax restriction on worker effectiveness over distance that is intended to prevent cheesing by using workers to move goods between industries instead of using trains. The values may need to be tweaked in the future, but I'm starting with a minimal penalty to avoid breaking many solutions. Values are exposed in balance settings.
Fixed bug in worker pathfinding that would cause them to sometimes not take the shortest path.
Multi-Threading
Made setting thread priorities to be higher than normal an option that is disabled by default. This may account for the stuttering issues that people have reported, especially while streaming. It's generally not recommeded to raise thread priorities, but I thought that since I was only doing so for a subset of processors that it would not interfere with other programs, but this may not have been correct. I still set thread affinities, which is also not generally recommended but is more necessary for correctness due to my using spin locks.
Graphics
Made track rendering nicer by making bridges have thickness and an under-side and the gravel mounds under tracks to also have a rounded thickness appearance.
Added pillars under footbridges and ensure that footbridges remain above water.
Made the selection in track drawing mode work better. It's no longer possible to accidentally try to connect to curves when not intended. Thi is something Master Hellish struggled with, so I tried to make it more intuitive.
Circular arc curve extension for track drawing preview.
Made better error message for trains that get stuck in dead ends.
Removed any possiblity of disabling vsync via config. Also, fastest sim rate used to disable vsync. If, for some reason, the framerate goes too fast despite vsync being enabled, it will be limited by a busy wait to have a min frame time of 6.5 ms (153.8 fps).
Updated button toggle states in draw function so that they are always up to date with the actual editing mode.
Made foot bridges slightly darker so they are more visible, and now they have thickness and railings.
Make pillars of track bridges not intersect tracks below.
* Fixed highly related, but technically separate bugs where trains didn't handle reversing at track terminations correctly when there were no valid exits. In the simulation, the train was allowed to reverse, and would go somewhere, but with the bug fix it prints a run-time error. Similarly, the route highlighting was incorrectly allowing invalid paths through one-way signals to be highlighted. However, the incorrect train path and high-lit routes were different, so it was extra buggy. This change required a game version bump because it is changing the simulation results, although I really hope people weren't depending on incorrect behavior of track terminations.
* Draw circles where depots can be placed.
* When both the track and signal on it were selected, pressing Delete wouldn't delete the track. Thus pressing Control+A then delete would not delete everything.
* Fixed simulation determinism issues by adding and adjusting sort conditions.
Key Bindings
Added menu to change key bindings available via button in options menu. These are saved to the bindings.cfg file.
Only one key per key action now. Got rid of x to delete (use del instead). Got rid of pgup pgdn to zoom (use + -) instead now. Short keyboards or laptops may not have pgup and pgdn, so it is more accessible to not rely on them by default.
The escape button was overloaded to be able to do lots of things. I preserve that functionality with a binding for a multipurpose cancel. However, you can now independently bind some of the different actions that Escape was doing. These include closing all dialogues, stopping the simulation, bringing up the main menu, and cancelling edit modes.
Keys should now match the keyboard layout of different languages in tooltips.
Scores
Made time reporting in score breakdown follow the same format as everything else showing where the cost comes from. Namely $1 per tick.
Added sentence explaining there is no upkeep for trains and industry.
Misc
Adjust font kerning. Still isn't perfect, but fixed some particularly bad letters offsets.
Changed useless workshop in Lyon to textile factory. This allows boosting the cheese factory by delivering textiles.
Added textile factory to Naples, to allow boosting cheese.
Added cheese requirement and cheese factory to Madrid.
Added cheese requirement and cheese factory to Malaga.
Fixed bugs with incorrect d3d fence waits.
Fixed bug where invalid timing queries could be read during resize or fullscreen transition. On startup, if fullscreen is saved as the option in the config, it does that by first creating a window then transitioning to fullscreen. This could potentially lead to a crash on startup.
Enumerate devices in order from high to low performance.
Maybe fix error about state of MSAA resource creation.
Added some more diagnostic info when a D3D error is encountered.
Make UI scales 0.75, 1.0, 1.25, 1.5 instead of 0.75, 1.0, 1.5, 2.0
Server won't allow requests from clients that haven't validated their version to be correct.
Crashes
Fixed crash during startup while querying the monitor refresh rate.
Better asserts that don't just crash. Now, popups message will give some diagnostic info.
If the level of MSAA requested is too high, reduce the levels until it works.
Camera
When focus on the window is lost, reset key states and synthesize mouse release events.
Clamp camera to always be within bounds / valid ranges so you can't get lost in the black outside of the level.
Reject mouse movements that are unreasonably large (more than 200 px) when translating or rotating the view. Maybe causing camera to go wonky. These could maybe happen due to weirdness from entering and exiting a window / changing focus.
Added support for emulating the middle mouse button to rotate the view by pressing the left and right mouse buttons at the same time.
Minor
Reduced sound volume of trains.
Made a tooltip to press escape to close all windows when hovering the close button of dialogs.
Draw text right justified and with commas in scores for leaderboard.
Sometimes I refered to depots as schedules. Changed some, hopefully resulting in more consistent terminology.
Make sure only one error message about straight tracks at vertices shows.
Add some clarification in tutorial about things that seem to sometimes cause confusion. How to refuel trains and how to place depots.
"Enter level" button is incorrectly shown on locked levels.
Added message for locked industries that the player needs to enter a level and unlock.
Icons for medals are displayed next to the names of the top five scores.
The number of histogram bins now scales with the number of players.
Info about the number of players and range of a histogram bin is shown when hovered.
Fixed: Text in schedules list overwrites the up/down buttons. Make up/down buttons draw over the text.
Fixed: Pressing up/down changes the global ID of the route, but if not all are shown then may have no apparent effect. Make pressing up and down in the schedule list skip multiple IDs so it actually changes the order in the local trimmed list view by one each time.
Changed: Histograms are now calculated on the logarithm of the score values. This is because some of the changes are inherently logarithmic. For example, if you have a bad solution and double the number of trains, that will significantly impact your score. Adding a new industry will again significantly impact your score. These multiplicative improvements compound. This creates major differences in score that are not in line with the effort needed to achieve them.
Added: Added total track length in top right overlay.
Added: Press Ctrl+A to select everything.
Added: If something is selected, pressing Escape clears the selection.
Fixed: Track drawing preview state isn't properly being reset. This makes a cost appear when entering track mode and you haven't started drawing any track yet.
Fixed: Crop text to window in schedule list and schedule for exceedingly long names of schedules. This also happens for save game names. Slightly extended the size of file dialogs a bit so that things can fit more easily.
Display a cost breakdown of the selected objects in the top-right corner. The cost of track that's being drawn is still drawn close to the cursor.
Fixed that you could no longer switch/remove signals by clicking them with the signal tool and had to click and press 'X'.
Fixed that if no depots were built and you opened the route list for the first time the dialog window for routes wouldn't draw.
Fixed that in route editing mode, it was showing the cost of the selected track instead of just the cost of the routes.
Added a costs button that shows the infrastructure cost for the level. This can be displayed without running the simulation, so you don't need to have a completed solution.
Added an overlay near to the cursor that shows the cost of the the current selected infrastructure. It also shows the cost of any track that is being drawn.
Show ticks under graph. This allows you to know at what time things happen in the graph, such as at what time a peak or trough occurred at.
Shift clicking tracks in route mode will do multi select. If you click on a track that doesn't have all routes selected yet, it will add those routes. Otherwise it will remove the routes on that track from the selection.
Added ability to show graph for storage silos. This required having a generalized graph dialog instead of being part of the industry. Now clicking the graph button will pop up a new dialog with the graph. This comes with a minor slowdown at the simulation speed at all times. This is because now I need to generate the graph data for the silos also. But this should be quite cheap.
I was incorrectly generating errors for tracks that were straight in 2D but had high curvature up or down as having too high of a curvature. Instead I should have been checking the 2D curvature instead of the 3D curvature.
I was also failing to detect when slopes were too steep. This is because I used to have only the absolute value of the slope. However, I changed the physics to use signed slopes, but didn't update my error checking code.
Fixed quest text that was incorrectly referring to the player's gender when it should be gender neutral.
Lots of internal refactoring that doesn't affect the player (Hopefully, unless I introduced bugs).
Fixed a bug where failed movement commits were not properly resetting the fuel and timing.
Fixed a bug where silos were rounding down the fuel amount when determining if fuel could be picked up. If a silo had half of fuel, a train would not pick it up.
Added buttons to change schedule order in schedule list. They appear when hovering a list entry.
Improved icons for playing pausing and speeding up the simulation.
It was a little difficult to determine what industries were unlocked by what cities. I made capital of a region pulse if an industry is unlocked. I made locked industries pulse when the capital of a region is hovered.
Indent train "Acceleration" text to make it clearer it is the limit on acceleration.
Made randomness in worker path positions not affect the time for workers to travel their paths.
Added an error if two train cars try to load or unload at the same platform tile. This should also be less likely to happen now due to other worker positioning changes.
Made loading a saved game close error dialog as well as some other dialogs. I don't close the level completion dialogue because it can be used to compare against different solutions.
Fixed that trains don't always stop exactly at signals. Now they will move up all the way to the end of the signal.
Changed the location the workers load a car from so that it will be perpendicular path from the platform tile if the train stops a signal that is at an integer location.
Fixed that box drag select onto a dialog title bar caused the dialog to move.
Prevent storage dialog from going off screen with UI scale greater than one hundred percent.
Exposed price balance settings. These are integers and the track cost is therefore a bit hard to fine-tune. Therefore, I also added a track length scale to allow finer tuning with floating point values.
New:
Added acceleration percentage to the train dialog.
Fixed:
Now creates "%USERPROFILE%/Saved Games" if it doesn't exist (previously assumed it did).
Improved handling of screenshot mode: hidden dialogs no longer block panning, rotation, or other camera controls. UI interaction is disabled; press Esc to exit.
Following is disabled while dragging to pan the view, preventing the camera from feeling stuck to the train.
Fixed a bug where dragging multiple objects caused the clicked object to move unexpectedly.
Signal placement now properly prevents placing signals too close to the ends of tracks.
Fixed a bug where the track-drawing state wasn't reset properly, sometimes preventing connecting to curves.
New:
Train Info Window: Added a dedicated train info window that shows current speed, maximum speed (including the different limiters along the track), cargo fullness, and a detailed fuel readout.
Follow Train: You can now follow a train in the world view for easier tracking.
Quick Depot & Schedule Selection: Added shortcuts in the train UI to quickly select the train’s depot and open its schedule.
Fixed:
Graph time scale bug: The graph time-per-tick no longer grows when run to very high tick counts and now resets correctly when the simulation is restarted.
Fixed a crash that could occur when certain track configurations collapsed to zero length.
Fixed an issue where signals could end up in an invalid position after dragging a nearby track vertex, which could cause further errors.
Saves affected by these issues will now be automatically cleaned up on load.
I've released the full version of the game at no cost. The demo was primarily intended as a beta test to gather feedback and to showcase at Steam Next Fest before the full release.
Now that the full game is out and free to play, there's no need for the demo, and I will remove it in a week to give players time to transition. Saves are seamlessly usable between versions, so no progress will be lost. Please switch to the full version at your convenience.
I've been trying to get the balance to be in a good, stable place before releasing the game. This last patch mostly contains fixes to the behavior of trains on slopes.
One problem in the previous patch is that bridges worked opposite of how one would expect. Shorter bridges with steeper slopes were actually faster for trains to go over than bridges with longer shallower slopes. This didn't make physical sense, nor did it make gameplay sense, where a more expensive construction that was harder to find space to fit into the map was also slower. The problem was that trains are often longer than the bridge itself, and because I was allowing downward slopes to cancel the effect of upward slopes, the net effect of the bridge was no slowdown once the train crested the bridge. The fix for this was to only consider positive slopes.
Another problem was that nearly flat terrain would slow trains, but it was really finicky and hard to see. Especially frustratingly, when trying to construct a flat bridge over a river, it's not possible to make the bridge perfectly flat, so you would get uncontrolled bits of slowdown depending on the exact terrain positions. The fix for this was to give a small threshold for what is considered flat. This threshold is more lenient for speed calculations than for acceleration.
The balance of acceleration and max speed limits of slopes have been tweaked somewhat. The biggest difference is that acceleration penalties have been reduced. Thus you should consider slopes during track placement, but can ignore them in relatively flat areas.
I also fixed a bug where worker pathing was not correctly accounting for reduced stair speed.
* Fixed: Misplaced things inside of industries are not selectable. Make industry selection lowest priority.
* Fixed: Tracks can't be joined/connected in the air over buildings.
* Fixed: Smoke uses global z offset instead of local.
* Added discord button to tutorial screens. Although people have found this discord it is a bit hidden and I think it might be helpful to people who are stuck to have an easy way to access direct help.
Based on feedback, I've changed how platform loading works. It is now possible to load and unload train cars from gray curved sections of track as long as those curves are perfectly straight. Previously it was only possible to load from brown straight tracks, but this was unclear as a mechanic and caused confusion. Note that it is not possible to load at track vertices where sections of track join, so avoid mixing curves and straight sections within a station platform.
Previously, using a chain signal to select open platforms performed worse than a simple round-robin setup, because round robin didn't wait to determine if a platform was open and so had less waiting time before sending trains. The chain signal could theoretically perform better if the optimal train distribution was not uniform, but the different platforms were close enough in loading times that it didn't matter and the chain signal would still send the trains round robin, but with a larger delay.
Stairs now cause workers to slow down more to penalize distant platforms and make round-robin not always the optimal signal choice when entering a station. My hope is that this will lead to more interesting and varied station designs.
I discovered that although things were rendering correctly on AMD and NVIDIA graphics chips, that Intel chips rendered the game incorrectly. As of the most recent patch, the game is known to render correctly on Intel, AMD chips and in both Windows and Linux. I don't have an NVIDIA chip to easily test, but expect that it should remain working correctly on those.
About
This page aggregates Steam news feeds, patch notes, and developer announcements for Steam Revolution: The Age of Rail, sourced from official Steam community posts.
Major updates, balance changes, and seasonal events often correlate with player-count spikes — cross-reference announcements here with the live charts on the main Steam Revolution: The Age of Rail statistics page.
Articles link back to Steam for full changelogs. SteamScope refreshes news entries as new posts are published to the game's Steam hub.