FSRail - the model railway for your computer
Version 1.15
Disclaimer
You use this software at your own risk. I can assure you that I tested it for months under Windows 98, Windows NT4.0 and Windows 2000 and it never did any harm to my systems nor to those of friends who used it. To my limited understanding I cannot imagine any risk related to the use of this software but I cannot guarantee it will not harm your setup, your data, or to work free of any errors under all environments. I tested the software with several scenery add-ons to FS95 and FS98 (like Global Upgrade, Europe 1), several free sceneries, and commercial and free planes. However I assume it to be likely that there are upgrades and setups that do not work properly with this software.
I cordially trust your setup will not to be affected.
You may use the full version and commercial version of FSRail to produce railway scenery for your own use, for freeware scenery, and for shareware or payware scenery provided you have a version of SCASM that allows such use. A commercial version of the SCASM compiler can be obtained from www.scasm.com .
In an effort to avoid the possible conflict between father and son (or daughter) as to who gets to play with the model railway, all members of one family that live in the same household may use one licensed copy provided no copy leaves the house.
Contents
The model railway is one of the most popular leisure activities. Planing, construction, playing, and ever lasting improvement guarantees hundreds or even thousands of hours of recreation in a small, fine, self made world.
Software can never replace the feeling of a well made heavy metal engine in your hand. But the design of model railways always has to compromise on two things. The amount of material is limited by costs and the available space is always too small. You can be happy if you find a space under the roof or in the cellar with a length of 5m, most railways have to be done on 3 m or less. Often these small railways are real pieces of art.
Here is where model railway software has an advantage. Material is available unlimited and the virtual space is also unlimited. So virtual railway and real model do not exclude each other. Isn't it a nice idea to have a big area modeled in software and to choose a small detail of this to build as a real model with a level of detail not available to software today?
So this software is not intended as competition for the big model railway producers. It is more intended to extend this hobby and, maybe, to motive you to reactivate it. Have you never dreamed of building a H0 scale railway on a sphere of 472 km circumference and a well known shape with 70% sea?
I had the idea of creating a virtual model railway many years ago and collected material, books, maps, pictures, catalogs for it. But the size of this task prevented any start. Before laying any rail into a landscape you need software that has a 3-dimensional model of it and allows relative movement of the train and the observer. Support for modern hardware like a graphics adapter keeps many programmers busy.
So I had to find another way by using some software that solves many of the problems and lets me concentrate on the railway. The ideal software for railway design should already have a concept of terrain with sea, land, lakes, rivers, roads, hills, mountains, cities and many other things. It must allow modification and expansion of this landscape. There should be free and commercial tools available for it and a good choice of accessories. It should not be too expensive, be obtainable in every shop and be good value for the money. Even better if it has already been sold million times. Future development and innovative use of new features of future hardware would be guaranteed.
This was the theoretical list. I was not sure I'd ever find that software until I came across the Microsoft® Flight Simulator.
Of course the approach of using 'foreign' software has the disadvantage that it may give you some limitations. The biggest limitation is the amount of memory available for the scenery. This is 256K for FS95 and 512K for FS98. In FS2000 this limitation is gone. You can equate this with the thickness of the table you build the railway on. If the railway gets too complex and heavy the table breaks. So FS95 is only suitable for a light first design and FS2000 is best suited for a very dense detailed design.
The second big limitation is that, while you can fly a plane or helicopter and watch many trains moving, there is no way to place yourself into a train to move it along the rails. This is a model railway box of almost infinite size - not a railway simulator. No way around.
To use the examples in FS2000 the following have to be fulfilled: The first patch (or second) should be installed and the area of the example must be flattened. Moving trains only run properly if you achieve at least 3 frames per second. With these conditions the macros work with FS2000 as well as with FS98; only the size limitation is removed. More specialties and a way to build railways in the 3-dimensional landscape of FS2000 will be explained later. Be patient, Rome wasn't built in one day, and no model railway was either.
The four examples in this text have been made in FS98 with the standard scenery and no additions. This is important to know since other versions, or add-ons, may have details like rivers and roads slightly displaced. So if you use another version, or scenery, don't wonder why bridges are not exactly above the rivers and barriers not exactly on the roads.
How does a railway come to the flight simulator landscape? The complete landscape (and other objects like navigation aids) are described by a binary language called BGL. This language sends commands to the graphics systems like 'Draw a road from a point with coordinates (x1,y1) to the point with coordinates (x2,y2)' or 'Fill the polygon defined by the following point list with a blue color'. Did you see that the second example is a lake? Then you can start to write SCASM yourself. The graphics system checks all files in specific directories for such instructions. So we only have to add a file with railway building instructions and the railway is in the landscape.
If I now suggested to you to write the railway directly in BGL you would be completely right to want your money back. It was a monumental work of several authors who decoded this language long before Microsoft published any documentation. Manfred Moldenhauer developed from this a language which formulates the BGL commands in readable instruction. He called this programming language SCASM. Then he wrote a compiler that translates SCASM commands to BGL and we will use this compiler for our designs.
If I now suggest that you write your railways in SCASM you would again want your money back - and send a few Euro to Manfred. Here is where my contribution starts and it consists of two parts. The first contribution is the so-called 'macros'. SCASM provides a way to build macros from a series of commands and to use them as objects . My objects are all those things that you need for railway design: rails, curves, switches, crossings, stations, bridges, barriers, bumps and more. I offer you a choice of more than 1500 different railway objects and most of them can change their shape widely by supplying parameters. For example the overhead wires, pylons, and lamps on the pylons can be switched on and off for each rail. About half of the macros support moving trains; the remainder are static. By the end of this manual you will know how to make your own rail macros and use them in FSRail.
Now you will probably ask "Where is the rolling stock?" The only way to fix trains to the rails in Flight Simulator was to make them part of the rails. So the rolling stock is also a parameter of all the rails that support trains.
These macros can be used with a scenery design tool, like Airport 2.10, which supplies a graphical user interface and makes scenery design a nice, easy hobby.
The second contribution is FSRail, a program specialized for the design of railways. This program knows the properties of all rails and is able to attach them properly to each other. It is just like in a normal model railway where you can attach rail after rail until you have finished your design. FSRail supports you in giving the macros the shape you want. In addition FSRail allows you to place 3-dimensional objects or ground objects.
The design for a railway goes like this: First you need a concept. Search a good map, photos, or visit the real railway and make drawings. I prefer working with maps in scale 1:50000 which are now available for Germany in digital form. Map software has the advantage compared to paper maps that it can give you the coordinates of every object and you will need them to place the rail objects. From map software it is also easy to estimate the length of straight rails and radii of curves.
Do you want to use moving trains? Moving trains need more memory and are less detailed than static rails. But the trains move. Most good designs will mix moving and static trains.
Next you check the area in the flight simulator to see how it is realized there. Fly over it, land at critical places. Is there a mountain somewhere in the way? Are the roads placed correctly? What do you want to do with the existing roads? Use them, ignore them, cut them away?
If you now start to train as a helicopter pilot I've got you busy and you will not ask for your money back.
After getting all this together you can start FSRail to design the landscape. Lay down a central object to the precise position obtained from the map and with precise orientation. Now compile the landscape (that is one menu item) and check in the flight simulator. Is it where and as you want? Now you can attach rail after rail, compile, and check again. This process is repeated again and again, and slowly your railway is growing.
Like an advanced model railway builder, who produces his own material, at some stage you will start to build your own macros. It is relatively easy to change existing macros (like adapting to a new length). FSRail helps you with them in that it can support more than 1400 additional user rails. But before you've started to write your own macros you'll also know how to fly a helicopter.
A tool that I recommend to you is VOD from Rafael Sanchez. VOD allows the designing of houses, churches and bridges, it is an easy to use architectural program for the flight simulator. While not every house can be made with VOD it is a very good start to produce those add-ons that you need in addition to my rail macros. Rafael has announced a new program, Nova2000, I cannot await to see and use it.
FSRail was tested with the three versions FS95, FS98 and FS2000 and is compatible with all of them. There are some smaller differences in the nature of the three simulators. The most important are:
FS95 (also sold as FS classic): The scenery buffer is only 256 KB. For moving trains only the simple trains with train numbers below 100 can be used. For static trains the more complex ones can be used if the density is not too high. Edit the FSRail file ..\includes\00user.inc. Make sure that the variable $FS2000 has the value of 0, and set $arvis to 1, or use ..\includes\00user95.inc.
FS98: FSRail was originally developed under this version. Moving scenery can contain complex trains if the density is not too high. Edit the FSRail file ..\includes\00user.inc. Set $FS2000 to 0, set $arvis to 3, or use ..\includes\00user98.inc.
For FS95 and FS98 all macros are always called with the parameter height=0. FS95 and FS98 can be viewed as a flat table where you place your rails. Height=0 means: Place on table.
FS2000: A very big step forward, maybe too big. No limitation of scenery density if your computer can manage it. Real 3-dimensionality makes design much easier. Edit the FSRail file ..\includes\00user.inc. Check the variable $FS2000 is set to 1, set $arvis to 5, or use ..\includes\00user2K.inc. A small negative: In FS2000 there is no currently known way to make a trench into the terrain. Macros that make such a trench (like RoTu2050, a road tunnel below a rail) no longer work in FS2000. This is proper since FS2000 is real 3-dimensional. It is not a table but a 3-dimensional grid onto which you can hang your railway.
The biggest difference between FS95/98 on one hand and FS2000 on the other is with bridges. The old bridges still work but the FS2000 3D bridges are so much simpler that you change to them very quickly.
Those macros that are specially designed for the 3D scenery of FS2000 (ramps) make no sense in the other versions. In FSRail they often carry the description 3D.
When you create a new railway in FSRail you can tell FSRail that it should assume the railway to be 3-dimensional. This allows FSRail to help you by suggesting height parameters.
FS2000 makes another consideration necessary. It is strongly recommended to install Patch1. Patch2b removes some bugs and installs shadows but the price for this is high. The drawn surface was lowered to allow the shadows drawn by the z-buffering. In the English version the ground is lowered by about 1m. With my German version and Patch2b this lowering of the terrain is dependent on the observers position - I observed lowering of the sea surface by 100m and more. I traced the effect and found it to be induced by the new version of terrain3d.dll. So in my version I replaced the terrain.dll of patch2b with the original version. This seems to work and is stable.
For the setup of Flight Simulator please refer to its documentation. The following examples assume the Flight Simulator to be installed to the same disk as FSRail in \FS or \FS2000. The default path \Program Files\Microsoft Games\Flight Simulator does not make writing any easier.
If you install from CD or Internet distribution you can use the Install.exe program. You will get the following screen:
You have to make the four mandatory installations that require around 40 MB. To save disk space you can omit the optional installations and read the documentation, train catalog, or bitmaps directly from CD.
All install buttons call a self extracting archive. You should make installations to the same drive and the top directory.
FSRail is installed to a directory, typically \Airport. If you have installed Airport 2.10 install it to \Airport\APT210. The directory structure after installation looks like this:
\Airport Main directory
\Airport\APT210 - Airport and the SCASM compiler delivered with Airport
\Airport\Bitmaps - bitmaps
\Airport\Program - the program and the current scenery sources
\Airport\Bridges - static bridges
\Airport\Details - other static macros and roads
\Airport\Documentation - the English documentation
\Airport\Dokumentation - the German documentation
\Airport\Includes - include file, all trains
\Airport\Moving - other moving macros
\Airport\Movrail - moving rails
\Airport\Movroad - moving roads and highways
\Airport\Movstat - moving stations
\Airport\Rails - static rails
\Airport\Scenery - finished scenery
\Airport\Stations - static stations
\Airport\Texture - textures.
\Airport\Tools - useful tools
\Airport\VOD3 - if you installed it
The above list is a typical example. Important: The directories that contain all macros must be on the same level as the \Includes and the \Program compiler directory. This is the only way to ensure that the relative path ..\includes always leads to the include files (these are more than 800 very important files, some of them are used by all macros).
After ordering you will have received a personal license file. Please copy this to the ..\Program directory to enable the full features of FSRail and keep a backup of this in a safe place.
Another small installation step is necessary. The directory \FSRail contains a small procedure BRailMaker.txt. We edit this:
scasm newrails.scm newrails.bgl
Pause
copy newrails.bgl \fs2000\scenery\rail\scenery\newrails.bgl
Pause
This template compiles the source newrails.scm and copies the resulting newrails.bgl. to the Flight Simulator directory. We check the paths and change them if necessary. Is SCASM.EXE in the correct path? Is the path of Flight Simulator correct? FSRail uses this template to compile your source files, FSRail replaces the names newrails.scm and newrails.bgl with your names. If your path name contains a blank character, the copy command has to follow the DOS - conventions for this:
copy newrails.bgl "D|Program Files\Microsoft Games\Flight Simulator\scenery\rail\scenery\newrails.bgl"
If we now start the FSRail program we can perform the following steps from the menu "Dialogs" "Change macro settings" to configure the scenery directory and to register it (for FS2000 only), but I will explain how to do it manually in case you do not know how to perform such an operation...
Next we create a \Rail directory in the \Scenery directory of FS, open it, and copy the directories \Scenery and \Texture from \Airport directory there. If we find a /Scenery98 and /Scenery2K in the distribution we take the one that fits to our simulator and make it the \Scenery directory.
This step creates \FS\Scenery\Rail\Scenery and \FS\Scenery\Rail\Texture.
Now we start FS. We have to convince it to use the new directory. From the menu "World" we choose "Scenery Library". Click OK to the warning. We choose File, Add, and fill out the dialog as below. In FS2000 the design of the dialog is different and we can browse for the directory. But there a trap is waiting for us: Do use the scenery directly, without using the buffering. Otherwise you will sometimes see your changes, sometimes not - and wonder what is going on.
Now we can activate the scenery. The sequence "World", "Scenery Library ", "Files", OK, OK is the command to FS98 to reload the scenery if we changed it in between. In FS2000 it is enough to choose the "Scenery library" and check the green ok.
Now we have to bring our aircraft to the correct position. In FS98 we choose "World", "Go To" "exact position" and fill out the next screen. In FS2000 we choose the Map view.
A few seconds later you'll see the Frankfurt Main Station with incoming and outgoing trains (not in the demo version). Now we have finished the Preparation and Start. I will now show you how to make four first designs, step by step, so you can learn how to do it. You are, of course, free to start directly but it will become difficult without the tips you get in here...
One more tip for all versions of Flight Simulator. By default the coordinates are written in the form ddd.mm.xxx, where ddd means degrees, mm minutes, xxxx fractions of minutes. All the map programs I have use the form ddd.mm.ss.xxxx, where ss means seconds. This format is used by FSRail and Airport. If you edit fltsim98.cfg (respectively FS2000.cfg) and add the line
Display_Fractional_Minutes=0
To the [Main] part, FS will use the same form. If you do not do this you will have to calculate by hand and change later so you might as well change it now.
Another small preparation necessary since FS2000. Edit the FSRail file ..\include\00user.inc. If you use FS2000 the variable $FS2000 must be set to 1, and 0 for FS95/98. If your template copies ..\include\00user...inc, this should be ok.
Users of FS2000 should next do the following:
To make a part of the scenery flat we have to edit Scenery.cfg in the main directory of FS2000. There we will find near the end some lines similar to the following:
[Area.073]
Title=Railways
Local=SCENERY\Rail\Scenery
Active=TRUE
Layer=73
Add to this the following line:
Flatten.0=400,N49,E9,N49,E11,N51,E11,N51, E9
Save the file, start FS2000, and the region where we will make our first examples is as flat as a stamp. Now we can program our first examples and gain experience - we still have a long way to go before we start 3D design on the elevated mesh.
Now we've had far too much theory so now we'll start with our first design.
User interface
I hope you will like the user interface of FSRail after getting used to it. I did not try to copy the typical design steps of Airport or similar programs. My user interface is orientated along the steps performed when building a model railway.
Typically you would compile and look at the result now. If the result is good you would continue the same steps for the next rail. If not you can remove it to start again. Or you can modify it by clicking to the center of the object with the right mouse button - or do more modifications with a Shift+click of the right mouse. Right click and shift+right click also works on non-Rail objects in FSRail.
Some testers asked for the possibility of putting a bitmap behind the railway map. I thought about this but it does not work with the current computer technology. The typical distances of two rails in a station are 8m so a resolution of 1pixel/2m is the absolute minimum that makes sense (FSRail places rails to a position of better than 25cm). This is 250KB per square km and since a typical FSRail scenery is 50x50 km the minimum bitmap would be 625MB. Indeed even in compressed format every useful map of a 100x100 km area fills up a CD. FSRail would get extremely slow and memory hungry long before any background map gets useful. Nevertheless I added a tool for bitmaps and markers that you can learn about later.
Another philosophical question is how to access files. I decided that only FSRail.exe is allowed to read from and write to its own directory for safety reasons. FSRail can overwrite files in its own directory but nowhere else and it never touches C:\windows. My personal contribution to clean software. Without directory browsing, input file browsing is a waste of effort.
Some Information about navigation on the screen. Scale = 1 means that the total railway as defined in the header plus a border of 20 seconds fits on your full screen. When the header is changed, like when an attached rail leaves the header's range, the relative scale changes and you will see small jumps. As long as you are running FSRail in a Window smaller than your screen you can use the scroll bar or arrow keys to display a portion of the full screen. With a zoom factor greater than 1 this always shows only a fraction of the complete railway. You can shift this fraction around with the right menus or by pressing the appropriate keys, like < for shift visible part left, u for up, plus (+) or minus (-) for changing the zoom factor.
FSRail disables Menus when they make no sense in the current context. If the context is exited unexpectedly it may mean that most menus are still disabled. If this happens I recommend that you save your work, exit the program, and start it again. You can also force all menus to become accessible again by pressing the ESC Button - but then the security checks inside the program may no longer keep everything safe.
FSRail can not only place rails but also other elementary objects like polygons and roads of airport macros. These capabilities are limited. For bigger work I recommend using the specialized programs for this like AIRPORT, SCCreate, or ASD. These features in FSRail are intended for small operations like fitting roads to barriers, harbor docks to rails, and cranes to the rails in cargo stations.
At the end of this documentation you can see more detailed documentation of the menus and other technical details - but I recommend that you go through the lessons first to learn how FSRail works.
Our first railway will be an oval with a station like those found in the starter packs of all major model railways. We choose starting coordinates N50:00:00 and E10:00:00 which is in the middle of Franken between Würzburg and Schweinsfurt. Of course we could also start at any other point that is flattened, has no difficulties like rivers or roads in the way, and no complex object nearby. It is not clever to start in the middle of Chicago O'Hare. We start FSRail and get the following picture:
In the center there is a graphics window that is still empty, we can enlarge it. Going through the menus we see that there are only two interesting operations possible - 'Create a new' or 'Read an existing' railway. We decide to create a new one.
Now some information is needed. First the exact position of the railway. The northern and southern entries are correct by chance, we have to change the longitude. Later the program will extend the limits automatically so at the moment the central point is ok. Note that the initial coordinates that FSRail proposes have a negative longitude - they are at 15 degrees west in the middle of the Atlantic Ocean and a good place to do tests.
We do not check the fields for moving trains, 3D-design for this railway, nor the one to exclude standard scenery objects.
Now that we have all the necessary information together press OK and we now find many more menu items are available. We can lay down a rail first by using the menu "Railway" "Lay down a rail" or by clicking on the map. We are asked to define some default parameters:
The shape of many objects can be changed by parameters; the naming convention has been taken from SCASM and Airport. We note the following (%6): If this is 0 the rail gets no overhead wire. A 1 switches on the wire, a 2 simple pylons, a 3 massive pylons, a 4 massive pylons with lamps and active night illumination for FS2000. Most macros allow for values between 5-7 and also for active night illumination for FS2000 without pylons or wires.
We choose a 1 for the height parameters %7 and %8. Now the rails are 25 cm above ground. The parameter for %3 remains 0.00, until we make 3-dimensional designs for FS2000. The parameter for the embankment chooses its color, 0 omits the color completely. The value 18 is a mid green and suitable for our purpose. Values above 100 give a textured embankment, 105 is the seasonal grass texture.
The default for the range is also good. As the standard train we choose 109, a local German train (users of the demo version choose a value between 1 and 6). One remark on the parameter range: I use the last digit to choose the texture of the rails. 0 - 5 are used for the textures supplied with this distribution, 6 - 9 are for your use if you want to design your own set of rail textures. We press OK with these defaults. The next question concerns the exact position and orientation of the macro.
The proposed values are ok for now. If you want to change the position or orientation you should do it now. A heading of 0.00 means that the rail goes exactly from north to south, 90.00 from west to east. We can select the orientation to 1/100th of a degree and can enter any number between 0.00 and 359.99. Press OK.
After fixing the place where the macro is supposed to be we next have to select which macro to take. The first illustrated dialog helps us to choose the type. In our case we want a station so we press "station".
Now we get a choice of all static stations. There are stations with inner and outer platforms, and dead end stations. We choose a dual-railed station, named Stat2500, 500m long, with two outer platforms. A detailed description of all rails of this type can be found in the online catalog by pressing the "Docu" button.
FSRail now makes a proposal on how to call the object. We leave the list on the left side untouched until we really know what we are doing. We just check again that %3 has the value of 0.00; any other value would most probably hide the station deep in the ground. %4 should have a value of 0.250. So we look at the list on the right to see what is near to what we want. We have to replace the train # %7 by 109 (1 for the demo version) and %9 by 0, because we do not want to use the naming option. Looking into the documentation of the station we can see that %8 is a two digit number; the first digit describes the left western platform, the second the eastern. We set the value to 33. You should get used to entering all numbers left bound otherwise a number with too many leading blanks may get truncated. We press "OK" and the dialog disappears.
The map window reappears. You may have to scroll to see the station as a green line. The middle is shown by a small green circle. Both ends have little light blue circles, the endpoints. Endpoints are the most important objects in FSRail since the next rails will always be attached to endpoints.
Now we want to look at our work in Flight Simulator. We select in the File menu "Save and compile" and get asked for the filename.
We enter "newrails.scm" or any other name that follows the DOS 8.3 naming convention.
The compiler starts and seconds later the scenery is finished. If we get an error message we either made a wrong input or the installation wasn't correct. Refer to the end of this document for solving potential problems.
We set our aircraft to the position N50:00:01 E10, reload the scenery, and from an observers position we get the following picture (with another train, the picture shows train #1):
The train is ready to depart from the platform where some passengers stand. Next I'd suggest that you start to modify some parameters of the station to get a feeling for its possibilities. This can be done simply by right-clicking to the center of the station:
Modify the values of %6, %7 and %8, recompile, and see how things in the Flight Simulator change. You will see quite quickly that the shape of this simple single macro can be changed widely. You will also learn that altering the shape by entering numbers is not as complicated as one could assume at first glance. Again when entering the numbers enter them left bounded or at the same position as in the output but do not make longer strings that might get truncated.
The mouse can be used in the map window to give four basic commands:
Right click to an object allows you to modify it.
Shift+right click gives an extended dialog that allows you to modify the previous or next rail.
Left click to an endpoint attaches a rail.
Shift+left click to an endpoint shows all properties of an end point and allows you to modify it.
Our next task is to add a left curve to the northern end. With a left mouse click to the northern endpoint we get asked for the type of the next object with the well known dialog. We select a curve. FSRail knows that this has to have a dual width and lets us select among all static dual curves.
These curves differ in radius and angle. We select a radius of 1000m and an angle of 45 degrees and press Cu245R10.
Now we have a curved rail in our hand. Depending on the end we select it is either a left or a right curve. We want it left. Sometimes it is necessary to change the heading of the new rail slightly which can also be done in this dialog but for our example we leave the value of 0.00 as it is and press "left curve".
FSRail makes us a proposal that we can accept as it is. Heights, wires, and embankment are as defined in the defaults a few minutes ago. We compile again and look at the result in the Flight Simulator.
If for some reason we made a wrong input we can always delete the last rail via the "Railway dialog". Deletion of an intermediate rail is not as simple but is possible. Now we can add three more identical Cu245R10 curves, a 500 m straight rail, 4 more curves, and the oval is ready. But we want to make it more complicated: The back straight will be a big 500m bridge 7 m above ground. In the 25cm units of FSRail this height is 28 as 4 x 7 = 28. That's why the next curve will climb from 1 to 10, the second to 19 and the third to 28.
We attach again a Cu245R10 with second end to get a left curve. The free end, from which the ramp climbs, consequently is end 1. For this we enter the new height value of 10:
For the third rail we'll see that FSRail already gives the correct value of 10 for the second end so for the first end we enter 19, and let the last rail of this big bow climb up to 28. We can see that as long as we are doing our design on a flat area %3 always remains 0, and the parameters %7 and %8 can be used to create 3-dimensional effects.
Now we look at the result. We got a climb of 7 m on a 2250m length. That is a climb of 0.35% - suitable even for heavy cargo trains.
We now see the end of the curved ramp, in the background we will see the station at a distance of 2 km. Now we come to the bridge. Our model is Bri2500, dual railed and 500m long.
Probably FSRail has already calculated the height correctly (28) if we attached end 2. Now we have to select a train to place on the bridge and which shape we want for the bridge. On a bridge a train is visible from a distance so I prefer 401 (the ICE 1). So we set %7 to 401. For parameter %9, which describes the shape of the bridge, take 213, without thinking about it too long now you can experiment with this parameter and see how the bridge changes shape. We look at the result after compilation:
We obtained a bridge with blue bridge rails and the ICE standing on it. Now we have learned how we can cross roads, rivers, and small lakes.
Now if we attach four more left curves Cu245R10 and let them climb down to 1 slowly the oval is closed. But we still have two open endpoints at the junction. If we zoom into the map (Menu "Map commands", "Zoom to mouse" and click to the position in question) to the maximum we will see that both end points are very near, the width is exact, and the length good. There is a reason for this: We first went 1 km north, then 2 km west, 2 km south, two km east and one km north. On a sphere this will only close exactly at the equator. To work more with the end point we Shift+left click to it.
A new dialog waits for us. With "Distance" we can measure the distance of the two end points, it is 0 m. The experienced user can modify the details of an end point here but we are happy that FSRail solved the mathematics on a flattened sphere's surface for us and press Cancel. In the menu "End points" we select "Cleanup". FSRail will recognize that two end points are very near and remove them from the list of free end points. We have finished our first lesson.
A Second Design: An 8 with a Bridge
Our second task is again a static railway but now we want to lead a railway on a bridge over another and join them with curves so that the result has the form of an 8. This time we choose a small radius of 500m. So we create again a new railway at the same position and place the bridge as the first rail. Bridge22 is suitable for our purpose, a dual rail above another dual rail. Remember that FS2000 allows a much freer form of bridges but this one is valid for all versions.
Next we can select the angle between the upper and lower rail and select 90 degrees to have it as simple as possible.
The lower rail gets wires only; it is not necessary to draw pylons below a bridge. The embankment is green (18) and for the shape of the bridge rail we select 0.
Now the central point of the railway is done, FSRail always shows bridges on the map in blue.
The length of the two rails of the bridge is 50m. Given a radius of 500m we need 475m of straight rails before the curve begins. This not available in one piece so, starting from the bridge, you attach first 50, then 125 and then 300m. Now we want to start with the end point heading east. We can click to it but we can also go to the menu "Railway" "Attach a rail". We see 4 end points, two of them are high (height 28 = 7m).
One of the high endpoints points west (270 degrees), the other east (90 degrees). We take the east one and attach a straight dual rail of 50m with end 2. The parameters of Rail2050 look like this
We only had to make one change: FSRail wanted to make the complete height difference on the 50m but we remain at 28. We go down to height 27 and with Rail2300 down to 22. We attach 3 rails to the west in the same manner.
The result is a cleanly shaped ramp at the bridge. To each of the two upper end we now attach 6 right curves, Cu245R05. We use four of them to slowly climb down to 1. Remember that you should not use 0 for rails with embankment. Now we take the two lower ends of the bridge and attach again 50, 125, and 300m. The 8 is ready.
Now you still need an explanation. Why did we add the 50, 125 and then 300m and not the long piece first? This time owners of FS2000 can skip the explanation because for them there is no need for it. The reason is the way FS95 and FS98 presents graphics. All 3D objects are sorted on the distance of their middle (Reference Point) to the observer and the nearest is drawn last. If a long rail is attached to an upper rail of a bridge there are many observer positions where the bridge is nearer than the long rail and the lower rail of the bridge will show through the long rail. This is known as bleed-through. I'm certain this effect will never happen if you attach first a 50m and then 100-150m. After that you are too far away to see the effect.
This effect is very pronounced with Bridges with a small angle (30 degrees or 150 degrees). Therefore it is not recommended to place buildings close to long rails if you do not want this bleed-through effect. The only way to solve the problem forever is to upgrade to FS2000, unfortunately I don't get paid for this recommendation.
A Third design: a free static railway
Up to now we've made simple geometrical forms that can also be found on simple model railways. Complex model railways and modeling of the original demand a free design oriented to the landscape. We will learn how to do this with a static railway in this part.
The task of this lesson is as follows: We will build a station at 50N 10E. A dual electrified main line goes south on a bridge over the nearby river into another station. A single lane non-electrified local railway will curve back to the first main station.
We start with the first station and the main line. For all design work it is simpler to start with the main lines, place the switches ready, and place the static small lines last. First we again create the railway with the well known coordinates. As default we choose 3 for the wires (%6), 1 for the heights and 100 (grass) for the embankment. We lay down "station0" with parameters (%6=3, %7=1,%8=4,%9=0). At the southern end we attach a right switch. This will connect three lines, a dual one going straight and a single to the right. So S221R050 is our candidate. We have selected the shorter one because there is a street nearby to cross. The common end of all switches is end 2. The recommendations of FSRail are ok so we look at the result.
A switch has been attached to the station. The distance from the end of the switch is 65m. So we attach (to the main dual end) two 20m rails Rail2020 (3,1,1,100) and then the barrier Barr2050 (1,60,4,100).
The width of the barrier is 30m. It has to be this broad because the roads of the default scenery are also broad. This junction of road and rail is not bad, is it?
FSRail also produced end points for the road. If we want we can remove them with a Shift+click.
Next we attach 2 rails of 1 km length (Rail2A00 ) and use a 600m rail (Rail2600) to climb to a height of 28. Bri2500 follows with parameters 2,220,28,233.
We are happy with this crossing of a river. A further 600m rails brings us down to level 1 again, we make a left curve 30 degrees with 2000m radius (Cu230R20), and attach Stat2500 with (3,2,33,0). Now we enlarge this station. We attach the switch Pal222st with end 1 which opens a parallel rail at the right distance.
To its third end, which points backwards at 330 degrees, we attach another "Stat2500" with its southern end (3,5,30,0).
The main line is finished so now we start the local line. We need a switch that attaches the dual end of the last station to a single line. FSRail calls this sort of switch an adapter. We decide on Par12050 and attach its northern end. For all adapters the northern end is broader than its southern. Now both ends of the single line are finished. If you want you can export the dual ends or do you want to add a bump to the two open dual ends? Since the single line is not expected to be electrified we change the parameter for the default of %6 now to 0 (Menu Railway, Define defaults).
We start now with the single end we did last (heading 330 Grad) and attach, one after another, Cu145R05 (left), Rail1500, Cu145R05(right), Rail1400 then Stat1200 (0,0,4,0).
The new line makes a bow and ends in a small station with a small station building. A right curve Cu145R05 brings us to 15 degrees, and Rail1400 climbs up to height 28. Bridgen1 (0,170,22,100) crosses the small river Wern.
A left curve Cu130R05 brings us down again, it follows Par12050 (southern end), Stat2200 (0,0,53,0) and Par12050 northern end to build a small station where two trains can meet.
Now the free end of the station gets attached to the free end of the switch that we laid down at the beginning.
Now we need two help tools. We can change the viewing mode from observer to map function (view? In FS2000) to get an overview.
FSRail allows you to measure distances. We right click to the endpoint and get an overview of its properties :
We choose distance and now either select the other endpoint or click on "Use map" and select the endpoint in the north by clicking.
The result of this measurement is (you may get slightly different results due to very late improvements in the geometry but I'm confident that you will succeed in solving this yourself) :
We have more than two km, that should be enough. We see that we have to change our current direction (345 degrees ) by approximately 45 Grad and attach a right curve Cu145R05. A new measurement gives 2149m at 30.61 Grad, so the heading is correct.
We go back to the first single free end (direction 190 degrees). First we have to attach a barrier again, we choose Barr1200 (0,70,4,100). A right curve Cu120R05 brings us to the correct direction. The measurement gives 1795m at 213.97 degrees, almost 4 Grad more than the actual direction of the ends. Now we need the ability to adjust the rails by hand. To the end with heading 210 we attach a rail Rail1100. In the dialog "Attach a straight rail" we change the heading from 210.00 to 211.00:
We turn the rail around the attachment point by one degree. Next we attach another Rail1100 with heading 212.00 . It is very important to know that this is the place to rotate the rail around the attachment point. If we use the next dialog we would rotate the rail around its middle and loose the attachment.
Now we do the same at the 30 degree end to come to 32 degrees. A new measurement gives us 1396m at 34.55 degrees. So two more Rail1100, rotated by one more degree each to both sides. Next measurement: 996 m at 34.97 Grad. Since rails may overlap slightly we can lay down the 1000 m Rail Rail1A00 now at 34.97.
Even if your geometry gives another distance you will eventually succeed in closing the gap properly yourself - it is an excellent training since this is one of the complicated tasks for 2D static designs.
Now you have learned everything you need to design static 2D railways but here are some hints:
Documentation of Static Macros:
One general remark:
Throughout all manuals the ends of rails or roads are called "northern" and "southern" ends. These are the orientations of the ends if the rail is laid without rotation, with %5=0. If the rail is rotated the ends are rotated too. So for %5=90 (degrees), the "northern" end points towards east.
This chapter will list the most important static macros and the meaning of the parameters (%6 to %9 ). The macros not mentioned here follow the parameter convention as close as possible You can go from here to the more detailed documentation following the hyperlinks. I use the following abbreviations:
n = 1-4 width, one to four lanes,
lll = rail length in m, 100 means 100m,
rr = radius of a curve in 100m, 07 means 750m radius,
ww = angle of a curve in degrees
b=a, b, c, d, e, f, g, h, i angle between upper and lower rail of a bridge 30, 45,...,150 Grad.
y = r, l, y switch opening to the right, left, symmetric
L = Length of rail in 100m
Type | Name | Height | Meaning of %6 | Meaning of %7 | Meaning of %8 | Meaning of %9 |
Straight | Railnlll | Overhead wires | Height North | Height South | Embankment | |
Curves | CuwwRrr | Overhead wires | Height North | Height South | Embankment | |
Train macros | TrainnL | Overhead wires | Train | Height | Embankment | |
Barriers | Barrnlll | 1 | Overhead wires | Width in 50cm | Shape | Embankment |
Stations | Statnlll | 1 | Overhead wires | Train | Shape | Name |
Stationx | 1 | Overhead wires | Train | Shape | Name | |
Bridges (big) | Brinlll | Overhead wires | Train | Height | Shape and Bridge rail | |
Bridges (small) | Bridgenn | 28 | Overhead wires | Opening in 50 cm | Bridge rail | Embankment |
Bridges (Rail over rail) | Bridgknn | 1/28 | Overhead wires lower rail | Overhead wires upper rail | Bridge rail | Embankment |
Adapter | Paynnlll | Overhead wires | Height North | Height South | Embankment | |
Bumps | Bumpnlll | Overhead wires | Height North | Height South | Embankment | |
Wire ends | Endnlll | Overhead wires | Height North | Height South | Embankment | |
Road tunnel (not FS2000 ) | RoTunlll | Overhead wires | Surface Color | Height | Embankment | |
Highway tunnel (not FS2000) | HwTunlll | Overhead wires | Surface Color | Height | Embankment | |
Crossing | Crosnn50 | Overhead wires | Height North | Height South | Embankment | |
Crotnn50 | Overhead wires | Height North | Height South | Embankment | ||
Switches | Snnnylll | Overhead wires | Height North | Height South | Embankment |
The following rules apply:
Overhead wires: 0 = no wires, 1 = wires only, 2 = wires and line pylons, 3 = wires and massive pylons. 4 = wires, massive pylons and lamps. The values 5-7 have special meaning for night illumination effects in FS2000.
All heights in %7 or %8 are given in 25cm units.
For embankments the hexadecimal number between 00 and FF selects the corresponding number from the currently used palette. 0 suppresses the embankments and saves a few bytes per macro, especially in curves. The values 100 to 105 select different textures (eg. 100 selects the texture grass.r8). If you want to have your own texture selection add it to the file ..\includes\banktex.inc. The parameters for shape and bridge rail usually have several digits; you can take the meaning from the specific documentation.
Now you should know enough to start big projects with static railways. Get some experience before you start with moving trains which are obviously much more complicated and need more parameters. But even for static railways I can present something that makes life much more complicated, this complication has the name Flight Simulator 2000.
Static railways in Flight Simulator 2000
We've made the examples up to now in FS95/98 or with FS2000 and a flattened scenery. If you tried the examples with FS2000 without the flatten switch you will have seen that many details do not fit. Sometimes the rails do not fit to each other, sometimes the ground is showing through the rails. Here is the basic reason: while the landscape was flat from FS1 to FS98, with some mountains on top of it, the terrain in FS2000 is 3-dimensional, with hills, valleys etc. Each time the terrain is higher than the rail it will cover it. What to do?
You have two choices: Either you make the landscape flat or you build a 3 dimensional railway. If you have ever built a railway you'll know that the first is much simpler and the second is a much nicer solution. Since we already have experience with the first solution we will try the second now. It is a good idea to start with making the complicated areas (like the big main stations) flat at a suitable height and the connecting rails 3-dimensional.
FSRail supports you in this. Select from the menu "Map commands" "Create flatten area" and click clockwise or counterclockwise to the four edges of the rectangle you want to flatten. You'll see that the gray lines do not end exactly where you wanted. The flatten switch only works on degrees and minutes so FSRail rounds up. The height now must be entered in feet. Now go to the "Menu Dialogs" "Edit railway" and press "Flatten switch FS2000". A flatten.txt is created that contains the graphically created flatten commands. You now can edit Scenery.cfg and include these lines.
Now you start to build the overland lines through the terrain. This is possible but it takes much more time than the design on a flat table. You should follow the following rules:
In FS2000 it is impossible to build a trench into the ground so all rails have to be placed on a small embankment. In flat areas it should be enough to use values of %7 and %8 like 3 or 4 to stay above ground. If you enable the embankment (%9 > 0) the waves of the ground partially cover the embankment making the three dimensional effect much more pronounced. The steeper the terrain, the higher the embankment, and the shorter the rails have to be.
Look at each rail. Most of the time they will not fit since the height of the middle points is different. Now you right click on the rail and raise or lower the ends until they fit. If you set $FS2000 to 1 you can use any value (but the 0) for the height of the ends. After changing this several times you will have enough experience to get it correct on the first try. If you have a constant slope it may be a good idea to lay a rail without embankment as near to the ground as possible. You will learn after the chapter on moving trains how to make real 3D design by using the 3D option of FSRail and the parameter %3 explicitly - by now I assume you forgot to learn to fly the helicopter due to many other new plans and ideas.
You didn't succeed with this approach? Read more in the chapter on
.
Like with Airport, SCCreate, or ASD most testers wanted to use a background image to create a railway in front off. Without such an image, only navigating via coordinates, they missed the orientation.
Such background images can come from many sources:
I experimented a lot with this. There are some problems that do not appear with other software. The first is the size of the bitmaps. A FSRail scenery can easily cover 50x50 km, the precision of FSRail is a few cm - the distance of rails in stations is 8m, a useful bitmap with 1m/pixel leads to bitmaps of GB size. The second problem is the number of potential bitmaps. The third is that FSRail adapts the scale dynamically to the size of the railway making the conversion from pixel to coordinates a complicated and consuming operation. The biggest problem is the dynamic range. The Factor between the scale used for an overview often differs by a factor of 128 with the one used to attach rails. So a nice bitmap would show up as big blocks of pixels without giving you help when you need it most.
In addition for all parts of the scenery the same scale is not optimal. For overland railways in simple regions 1 : 200.000 may be sufficient, in inner cities you may want to use 1 : 25.000. Usually only a small fraction of a scenery is covered with railways so you do not need bitmaps for most of the area.
For the following example I used a screen shot of a map 1 : 200.000 of the Rhine river near Boppard. For my tastes 1 : 200.000 is to big but this image only covers 6 x 9 km with 989 x 616 pixel.
The map software tells me that the western border of the map is at 7:30:47, the eastern at 7:41:09, the southern at 50:11:20 and the northern at 50:15:28. This information can also be obtained from satellite photos and other design programs. We will learn now how to use this map in FSRail. Note that the maximum allowed size for a bitmap is your current screen size.
First we create a new railway with the following coordinates:
We select from "Map commands" "Load bitmap" and get the following dialog:
We can select the file via browse, if we do not know its name or location, and have to modify this to change the properties of the bitmap:
If we do not know width and height we enter a 0 for both. FSRail tries to obtain these numbers from reading the bitmap. If it fails we can enter these numbers the next time we load this bitmap.
We press OK and get a screen with the bitmap loaded.
FSRail will store these coordinates in your scenery and for this particular scenery you can call it again as often as you want. Looking into the available menus we see that most are greyed out. We only find under "Map commands" "Color of marker".
Markers are simple FSRail objects; small flags which have three properties: two coordinates and one color. We start with choosing the color blue and set a row of blue flags along the river by simply clicking with the mouse. To the stations we set purple markers and green along the rails. If you want to remove the last marker hold down Shift and click with the left mouse button. If you hold down Ctrl and click with the left mouse button the last marker will be removed and a new one placed to the current position thus correcting the previous action.
With a right click we leave the bitmap..
Now all known commands are available again and, in addition, all important points got flagged. You will not always need as many flags as in the above example. Let us make a right click to the station of Boppard, that is the purple flag to left of the middle near to the place where the two lines come together.
Now we see all properties of the marker and can change them if we want. It is as if you were at the station with your GPS receiver. If we choose "inactive", the flag will disappear. With "Map commands" "Reset marker" all inactive markers of the current marker color become visible again. Another useful tool is hidden below the distance button. Select the marker to the right of the station with the right mouse button. Press "distance" and click on the button left of the station with any mouse button and you get the distance information:
This not only allows you to estimate distances but also tells you at which angle to place the station.
Next we want to use a second bitmap of this region and I'll use the FSRail file that I used to repair the Rhine valley some minutes ago. A screen shot of 839 x 527 pixels. The coordinates of the borders are obtained from FSRail:
As result we see the elevation polygons of Rhein1.scm and in the foreground the markers of the river and railways. Let us put light blue markers to the corners of the polygons.
Now we've got input from a second source, FSRail allows using up to 50 bitmaps per scenery and to place more than 2000 markers. Now the orientation should not be too difficult.
Selecting "Load bitmap" again we see that FSRail remembers both bitmaps.
We only have to select the bitmap we want next, or choose a new one via browse, and immediately we see the bitmap and the scaled FSRail scenery. The name of the bitmaps can be up to 100 characters long and contain directories. This allows selecting a new railway by browsing or entering the name and entering the borders coordinates.
You can choose any bitmap.
If the list gets longer we can scroll it.
I hope this add-on makes the usage of FSRail simpler without imposing any new restriction.
Exclusion of objects from the standard scenery.
The standard scenery contains visible objects like rivers, roads, and some buildings. Up to now we've placed our scenery into this and this is a valid approach. But if we find these objects to be wrongly placed, or if we want to use the 3D roads of FSRail, we may want check the appropriate box to exclude those objects when creating the new scenery. We should change the template procedure as follows:
What happens? FSRail includes in the scenery header a command that generates an additional small file EX0001.bgl. This contains the command to ignore all visible scenery objects with reference points in the range of the header. Since roads and rivers may be several km long it may still happen that they come into the area. If you want to use FSRail to generate several exclusion rectangles (eg. to keep an airport in the middle) I recommend generating several dedicated new sceneries with appropriate headers and to copy the resulting EX0001.bgl to different filenames. You can do this also if you decide later to exclude the MS objects.
For FS2000 the mesh, including the ground textures like cities, is not affected.
Introduction to moving trains.
You have enough experience with static rails? Good. Now some theory to begin with.
Those of you who have already some experience with Flight Simulator will have met "dynamic scenery" somewhere. This is used to move planes on an airport, start, and fly them. My first attempt was to try this with trains too but I found some difficulties that I could not solve. The most difficult was the elementary fact that trains always have to be on rails. The user (or the program) would have to enter thousands of coordinates and exhaust the capacity very quickly. For FS2000 no way exists to avoid the bleed-through of dynamic trains through 3D objects like platform roofs. And no expert had any idea how to close and open a barrier for a moving train.
The way I have chosen does not pack the train into the dynamic scenery but into the static scenery that changes shape with time. As a consequence the train is always a part of the supporting rail as with the static rails. So the moving train rails consist of 3 parts: The visible rail, the train(s) and the motor that moves the train.
The big advantage is that the same train code can be used for static and moving trains - the 'motor' is in the rails. Only those trains that bend in a curve have to load a bit of additional code.
Having these three parts in every rail is the reason why they use so much buffer. To keep this within acceptable limits the macros were simplified and the number of trains is limited to two in both directions for most of the rails.
Nevertheless memory usage is high and almost independent of length. That is why this concept needs long objects to make efficient usage of the limited buffer of FS95 and FS98 and lengths of a km or more are necessary.
To avoid effects where rails shine through the trains moving rails have to start at ground level in FS95 and FS98. These three facts (Transition at ground, simpler design, great length) make the moving rails much less handy than the static ones. A good design will always use both; the long moving ones for the trains on the main lines and static ones for detailed stations, connections and local lines.
A central coordination is needed to move the trains from one rail to the other. This is hidden in switch towers, tiny buildings which are mandatory for any movement. As long as one switch tower is within the range of the observer everything runs smoothly. With two switch towers the movement becomes jumpy but a small overlap causes no problem. The map function of FSRail draws the ranges of the switch towers as white ovals. If these overlap slightly and have no big holes the traffic runs optimally. A switch tower in one scenery file can control the train of another file.
Since the trains are part of the rail their timing properties are also a parameter of the rail. The schedule is part of the design and free driving is impossible. With the hundreds of trains a big railway contains this would be impossible.
To keep the trains running the movement is repeated after some time. The time after which everything starts from new is called a cycle. The elementary time that is accessible to the user is called Slot and is approximately 6 seconds long. The variable $mir in 00user.inc fixes how many slots a cycle has. The FS98 - scenery I created used $mir=50 which means that trains run every 5 minutes. For the original outside of Tokyo this is a dream. For a model railway and for the programmer waiting for a train it is an eternity . For the newer FS2000 scenery a value of 56 has been used. For scenery with single moving rails a bigger value will be useful. The maximum is 99.
The designer fixes when (Slot #) a train enters a rail in a south-north direction and when in north-south. For some macros the duration of the train is fixed but for others (stations, curves) it can be variable. All moving rails get this information with variable %8 and it is the task of the inner motor to move the train in time from one end to another. FSRail stores when a train crosses every end point so it can calculate timing correctly for each attached rail.
Another consequence: If the length of the rail, and the time the train needs to pass it, is fixed then so is the speed of the train. A good design will try not to change the speed too much between two rails - but now we are already too far into the details and will start immediately with our first design.
A first railway with moving trains
Enough of theory. We create again a new railway and this time we check for moving trains.
Now we are asked for the cycle time. Look into the include file and ensure that both values are identical otherwise the movement will be uncoordinated. We leave it as proposed at 56 and want to lay down our first rail. I will explain later why I recommend 56 for middle Europe and Japan and 96 for the rest of the world. First we chose a station that is able to start and end moving trains. We set the defaults and then "moving station". A suitable model is M2st250e. This station has trains entering from the south, stopping, takes them from the rail, turns them, sets them to the opposite rail in time, and starts them back southwards. This station has no traffic to the north so you always have to turn it. To explain the cryptic name: all macros with moving trains start with M (moving). Then, if fixed times are available, a timing information follows. The 2 means that two slots are used for the turn to enter and two to leave. The letters st stand for station, Followed by the width and length in m. The last 0 of the length is replaced by a modifier e (end). Now we are asked for the timing of the trains and the train #. To be exact this is the time when the train will pass the southern end.
If we don't have special needs (the local train misses the express train by one Slot) we can accept the proposed values and get a new dialog:
This means that this station has programmable timing (the time the train stops) we choose 6 slots = 36 seconds. Now we get the proposal for the macro call that we want to look at more closely.
Most of the parameters are known to us like %6 and %7. The third parameter %8 is a composite variable that has all timing information for one pair of trains. The first digit programs the duration, the next two the south direction, the last two the north direction.
We chose the last parameter %9 as proposed, 653. The last digit describes the eastern platform, the second parameter the western platform (>3 switches on a station building). I introduced the first digit after getting angry that most stations in FS are standing in the middle of a green field. Please use this add-on as a means of enabling you to form the typical villages and cities of your region.
We see also that more parameters (%13 and %14) can be used to plan a second train but we let this go and accept "OK". Before we can admire our work we have to add a switch tower. We choose "Railway" "Switch tower" and click near to the endpoints of the station. We get a proposal to place the switch tower.
Now we compile the scenery. The following picture can not represent what you will see because you'll have moving trains.
The Interregio enters, stops, gets removed, and is replaced 3 minutes later to start southbound.
Southwards we have the first difficulty - a road 110m away from the end of the station. We attach the moving barrier M2ba2200 slightly rotated (178 degrees) and choose a width of 60. The position of the barrier is not optimal but the longer piece (250m) fits pretty well. You will learn later how to modify the rails to get an exact fitting.
Now you will observe some rather complex behavior, the barrier opens and closes for the trains. You also see the tiny switch tower that controls the trains and the barrier, and of course you have already seen the switched signals and the passengers appearing on the platform shortly before the train arrives.
Now we follow in the same direction and need to cross the river Wern 3 km south. First we attach a 2 km straight rail, M8ra2k00 suits best. The 8 tells us that the train is kept for 8 slots on the rail. The letter k describes a length, I use the following extended notation:
a00 | 1000 m |
c00 | 1200 m |
f00 | 1500 m |
g00 | 1600 m |
i00 | 1800 m |
k00 | 2000 m |
o00 | 2400 m |
This artificial naming became necessary to keep a consistent use of filenames. Since I did not want to make use of older tools that only support DOS-type filenames I decided to keep this. Not that I like it but, 5 years ago, there had already been good software written.
The moving bridge M6Br2F00 follows with %9=211.
We see the Interregio climbing up to the bridge.
With 5 macros only we have created a station, a barrier, a bridge, a village, and 4.2 km of rails in a 28KB buffer. Using range = 7000m and $arvis=3 already 20 km of a straight line are in the buffer. With the current density this makes 140KB. We see that we have already come close to the 256 KB limit of FS95; for FS98 we still have some space.
Since the connection of moving rails always has to be at ground level the moving train bridges are very long. In the real railways often rails will climb in curves up to bridges. This is not possible unless you use static bridges or upgrade to FS2000 - sorry, again no percentage.
Next we attach a right curve 30 degrees with 3000m radius. For long fast trains big radii are natural. The curve MC230R30 is found easily. A dialog informs us that this rail allows different speeds.
6 Slots are suitable. We attach a straight rail M4Ra2800 to slow down the train.
We see that the Interregio is one of the trains that bend in a curve.
Attachment of a local railway.
Next we want to build a station with a local train (Diesel train #117). The local train will arrive shortly before and leave after the Interregio, the first idealization of FSRail. .
We attach the parallel switch MPr222st with end 2. This is a straight rail 300m with a static parallel end 3. We've got two endpoints in direction 148. The first is the moving straight with the Interregio and the second is the static end. To the first we attach the southern end of the station M2st2500 and stop the Interregio for 6 Slots and use (%9=653). To the other static end point 148 we attach the northern static end M2st250e with duration 8 and (%7=117,%9=30).
We can now observe what is going on: A comfortable regional train comes before the express train and leaves after it. It is the problem of all simulators to have an ideal picture of reality. To the last end we attach the adapter M1adap12, to make the local rail single, and a right curve MC145R07 for three slots without overhead wire you can continue here later.
To the dual end we attach the straight rails M8Ra2g00, M8Ra2k00, M8Ra2k00 and the bridge M6Br2F00 (to cross the highway). On the map we see the following picture.
You may need some help to read the map. Rails are red, bridges blue, stations green. The single rails are hatched. The white bow is part of an oval that shows the range of the switch tower. We left its range shortly after the last station so we have to insert a new one. We use the railway menu to include a new one near to the last endpoint. The map shows a minimal overlap that we keep.
If the overlap is too big, or there is a gap, we can change the coordinates of the switch tower until it is optimized by right clicking to the switch tower.
Dual train movement.
Most macros allow using two trains (the same or different) in one cycle. We do this by joining our rail with a moving one with regional train 109 from the left. We need the switch that joins two dual moving lines, M2swi222. We attach the right end and the dialog tells us that this is end 1. One restriction applies to moving trains when used double: they must be of different type. When you use two repaints of the same type in a moving curve you will encounter "duplicate label" errors. If you want the same train to run twice per cycle use a 0 for the secondary train #.
Now we have to include the second train. We let the regional train run 11 slots before the Interregio and run out 11 slots after. So we modify the two fields %13 and %14 as follows:
The 0154 has been calculated as follows: The Interregio runs north - south in Slot 12, the regional train 11 Slots before 01. The Interregio runs south - north Slot 43, the regional train is 11 slots later. We have no problem on the switch and the trains are properly separated .
To the new end at 324 degrees we attach a left curve MC245R07 with 4 slots and to the southern (146) a straight M4Ra2800. We see that FSRail offers us the timing of the second train properly - on this switch the primary train always runs right and the secondary left..
Now we've got a line with double density. Do not forget to secure the end at 279 degrees with a barrier M1ba2100 with %9=70 against the road.
Now we continue with the southern end (146 degrees) and attach a station M2st2500 with 5 slots and %9=663 with its northern end.
Both trains stop in this station so they keep their distance. We continue with right curve MC230R15 (4 slots) and M8Ra2g00. Now a small city follows where we want the regional train to stop and the Interregio to pass through called M1st220d. For this station the primary train stops and the secondary passes through. In our situation the primary train is the Interregio and the secondary is the local train so we must exchange them. We make a shift left click to the end point and press exchange.
Here we have all the information together and an experienced user can modify an endpoint manually. We only have a standard task left which can be done with one click. Now we attach station M1st220d with southern end, 6 Slots and %9=172. M8Ra2800 follows and we look at the result.
The distance between regional and express train has become small at the next station the Regional express will stop and the Interregio overtake it. An easy solution for this would be M2St450d. We want to do it the hard way. We use M2swi222, a longer version of the switch we know already, and attach its southern end. We get asked where to send the primary train which, since the exchange, is the regional train. Send it to the left.
Now we have 5 end points, from the lane 176 degrees a lane to the left (174) and to the right (178) were created. To the east we attach a station M1St2200 with southern end, turning manually back to 176 degrees. As duration we choose 9, %9 = 283.
As expected train 109 stops in the station. To the end at 178 degrees we attach at 176 degrees M1Ra2200.
Now the station and the overtake rail is finished but we have got a new problem. Up to now we always attached a rail to one end - now we have to attach the two northern ends to two end points. The geometry is identical but we want to get the timing from both attachments. Now we need a piece of paper and a pencil, the Notepad, the Clipboard, or a good memory. We attach, as a test, the end 3 of M2swi222 to the last endpoint (the one with train 222) and get the timing variable for train 222; in our case 5203. We write this down/remember it/copy to the clipboard and press cancel. If you were too quick and attached the railn then remove it again. Now we attach under (under 178 degrees) end 1 of M2swi222 and enter the timing and number of train 222 manually.
Done. We clean up the end points. I admit that this was not a simple task but you learned a lot and for a real model railway, including control, you would need much longer. We attach a M8Ra2g00 before looking at our work.
If you want very short stations the switch M1S222s can be of help together with the 62.5m rails.
Did you get the same timing as I did through all those rails?
Bang! Help! An accident! The Interregio hits the regional train! I leave it to you to clean up the area and care for the insurance questions and experiment with avoiding the next scheduled accident .
Now we know almost all the elements to form complex stations. The macros M1br2nxx are intended to have a static bridge over a moving rail in FS95/FS98. Attach M1Br2220 with end 2 to the southern end of our railway, %9 = 3 switches on the upper overhead wire. To cross two moving rails I recommend using the big bridges. I tried a symmetric macro that leads one rail over the other but this turned out to be too unwieldy. Bleed-through effects are unavoidable under FS95 and FS98 but I found no better solution. These effects have disappeared in FS2000 where we have many more possibilities with bridges.
Three more rails M8Ra2g00 lead us further south and we have to insert the next switch tower. The optimal width is at N49:45:40.
We have come to the end of the lectures but need to learn about macros that are used to design really big stations. We'll end the railway in a big dead end station.
Macro M2Pa2xx3 is the most complex of all my macros, it is a dual double crossing with control of the trains. This macro supports two different trains running at two different times each in both directions - so eight trains per cycle. Parameter %9 chooses if the trains run always parallel (%9=0), always cross over (%9=1), or the primary parallel and the secondary crossed (%9=2). For %9=2, the northern ends 1 and three contain the same trains running twice, the southern ends 2 and 4 contain both trains. We use the last solution to separate the trains.
We chose M2Pa2xx3 from the moving switches menu and have the choice between 4 endpoints.
End point 2 and 4 can be mixed, we choose end point 2.
The values for %9 and the second train have to be entered by hand as FSRail cannot know what we intended to do. The timing information was proposed correctly, only in another field. The experienced user will read the macro as follow: Train 109 is the primary train and goes straight forward between end 1 and end 2, it only appears once since %13=0. Train 220 appears also once in its secondary Slot. So it always crosses over (since %9=2) between end 3 and end 2. In %13 and %15 more timings can be entered for the secondary appearance of train 109 (running cross over from 1 to 4 now) and train 220 running straight from 3 to 4. Further experiments with this are left to you.
To the northern free end (356 degrees) we attach a right curve MC230R15 (4 intervals).
We compile the scenery and look at the busy traffic on the crossing. We observe the sorting function: at the southern end 1 we only have a regional train, at end 2 only Interregios. We can attach another double crossing with end 1 or end 3 to the free end to get the trains unsorted again. This way allows building really big stations where many rails come together and leading the trains to many different platforms.
At the end of our railway we come to another highlight. The big dead end station with two dual rails. Each rail can carry the same train twice so the sorting function came just in time. We have got two southern endpoints, the eastern one with train 109 and the western with train 222. We start with the first and attach Mkopfb10. From the dialog we see end 1 to be the first and we decide for a stay of 9 slots and set %9 to 3. We see train 109 set and, if we want, we can add another train to the other rail. One manual change is still missing: If FSRail proposed a 0 for %8 we have to change it to 90000 since the first digit of %8 contains the value of how long the train is standing on the rail. If we add a second train we must not forget the 9 to be the fifth digit of %8 when counted from the right..
To the other southern end of the crossing we attach end 2 of a further Mkopfb10 with 9 slots and %9=3.
Now the station is already rather busy and if we put trains to the unused rails, and attach more crossings and dead end stations, we can build really big major stations.
Now I hope you have had much enjoyment from the continuation. You have learned enough now on how to build railways in FS95/FS98 and how to flatten FS2000 scenery.
If you want to have a moving train crossing on a bridge over another rail or train then look at the chapter on free bridges and at the hints on highway design. If you want to make a design in the elevated mesh wait a bit and learn the flat design first.
My trains are not stand-alone objects, they always are part of the supporting rail, station, or bridge. Each rail can carry each train although some short static rails are restricted to short trains. Variable %7 fixes for all macros that support trains the train that it carries and, for the macros that can carry two trains, %14 fixes the second train. The following classes of trains exist:
Description | Include file | Train number |
Short simple local trains | Trainsim.inc | 1-99 |
Local trains | Trainloc.inc | 100-199 |
Express trains | Trainexp.inc | 200-499 |
Cargo trains | Traincar.inc | 500-999 |
Wagons without locomotive | Waggons.inc | 1000-1999 |
Single locomotives | Loks.inc | 10000- |
Each train has a file that describes it. Sometimes a file is the source for two trains that only differ in the colors of the locomotive. The file for train # 222 is, for example, ..\includes\Train222.inc.
Choice of parameter %7 (or %14) includes the appropriate file into the macro.
For the different train classes this is done via the include files in the above table. It should be easy to read even if you do not know anything about any programming language. The files also contain a short description of all trains. If for example you want to build a railway in France you'd search the above files for SNCF.
While FSRail supplies you currently with more than 300 trains from around 30 railway companies you will probably want more. The concept of FSRail makes it simple to add self defined trains. While creating a new form may be rather complicated, and requires knowledge of SCASM, the changing of colors is much easier. First select a train with a suitable form - let us assume that train109 fits. Edit the corresponding .inc file (Train109.inc), and save it under a free name (train199.inc). You will find one or a number of appearances of the command Bitmap( BRvsnnn.pat 0 0 0 0 ) in our case BRVS423.PAT. Open the corresponding BRvsnnn.bmp in the directory Bitmaps - for example you see BRVS423.BMP.
These bitmaps can be converted to textures (.pat) with small converter utilities that you can find on the internet. Martin Wright gave me such a utility and you can find it on the CD version. You can easily find the side and front parts of the train. Save the bitmaps under a new name and change the bitmap( ) instruction of train199.inc to point to the new one. Now change the bitmaps according to your wishes (make it orange for example), save them, and convert them to textures. (If you used PAINT you'll have to turn them upside down before conversion). To the control file (in our example Trainloc.inc) attach the call to the new train by copying the old entry to the clipboard, pasting it to the end, and change it to point to the new file with the new number:
; Regiotrain double deck orange train
mif( [ $train == 199 ] )
include( ..\includes\train199.inc )
mifend
Now all macros, by using number 199, can call your train. The introduction of new trains, new forms, and new railway companies is now possible for you. If you have designed a good new train it is not a bad idea to exchange it with others.
More than 1500 macros are still not enough you will start to design your own at some stage. This is not difficult and FSRail can support more than 1000 additional user macros. The most common reason is that you may need a special length for the moving rails to connect two lines. It does not matter if a rail is a bit too long but too short or much too long does matter. Scenery size makes attachment of many short rails to connect two lines unattractive. Let us go back, for instance, to the beginning of our moving rail example. The second rail M2ba2200 was too short and M2ba2250 was too long. You will now learn how to make a 220m barrier M2ba2220 and how to use it in FSRail.
We start with M2ba2200.api and copy it to M2ba2220.api. Now we edit M2ba2220.api. All FSRail macros are used with scale 0.25, 200m in nature therefore correspond to 800 units ranging from +400 to 400 in z direction.. (Some go from +401 to 401 to gain a little). To stretch the macro we have to replace every appearance of 400 as z-coordinate or length by 440, the 401 by 441.
Example (there are several appearances of the 400):
Points( 4
-16 $level -400 ; 4
16 $level -400 ; 5
16 $level 0 ; 6
-16 $level 0 ; 7
-16 $level 400 ; 8
16 $level 400 ; 9
)
Also in the definition of the length variable $len we replace 400 by 440 and in the macro description 200 by 220. Save it and the 220m barrier is finished.
How to use it with FSRail?
First we'll use a part of FSRail that is new to us to place an entry for the new rail in the geometry database. We start FSRail and chose "Dialogs" "Modify geometry database".
A new dialog lets us select the rail that we want to modify and, since we want to add one, we chose the first free one. Now we enter the name (remember the case) and press "Change this".
Next we can chose the type of the object. For our example we check the support for moving trains and press "Barrier". Now FSRail wants to know how many ends our macro has so we chose 2 and forget the roads for the moment. Next we have to enter the geometrical properties of each end. For the first we enter:
We can read this as follows: The end is 440 units = 110m north of the middle and points north (0 degrees), is at height 1 and is a dual rail. The analog entries for the second end are
Pay attention to the sign of the coordinate and ensure it points southwards (180 degrees).
Moving macros also need information about the timing. Every macro can have three phases: An entry, a middle, and an exit phase. For our example we enter 0,2,0. The duration of the second phase is dependant on the first digit of %8 which is coded by a -1. The correct entry for M2st2500 for example is 2, -1, 2.
We leave the geometry editor and the rail is now known to the database. It is a good idea to backup the database Rail.geo before and after this operation.
To use the new rail - in the colored dialog "Type of rail" we select "User defined rail" and enter the name (without extension) with correct case in the field. The rail can be used like this like any other rail and will be treated analogous to its type.
Another task common to 3D designs will be to develop a ramp that has a climb rate different to the existing ones. As an example I'll show you how, from the dual 200 m station M1st2200.api, a tilted version M1st22c0 was derived to climb over the 200m by 2m. Starting with the trigonometry: a 2 m climb over 200 m results from an angle atan(2/200), this is 0,5279 or 359.4721 degrees depending on orientation.
In the file M1st2200.api we find two adjacent lines that have to do with the orientation of the rail (:A) and the 3-dimensional part including train (:B)
RotatedCall( :A 0 0 %5 )
RotatedCall( :B 0 0 %5 )
Comparing this with M1st22c0, we find:
RotatedCall( :A 359.4271 0 %5 )
RotatedCall( :B 359.4271 0 %5 ),
We can understand this from the above calculations.
Now only the geometry has to be changed. All parameters except the height of the ends remains identical. The height of both ends of M1st2200 equals 1, it is horizontal. For M1st22c0 the northern end is 1m = 4 units above, the southern end 4 units below ground (1). So the correct height for the database are 5 and -3. One warning here: Avoid designing macros that contain a 0 or a -1 as height of the ends since these values have special meaning.
Now I've shown you how to use existing objects, how to design your own trains or rails, and how to use them with FSRail. Still a lot of things are missing that make up a model railway. The only area where implementation in Flight Simulator has a bigger choice is airports. There are houses and similar objects available on the Internet but the choice is not very large. I recommend the program VOD, from Rafael Sanchez, so you can design your own houses and other three dimensional objects. For landscape design AIRPORT 2.10 is a good starting point but unfortunately this program is discontinued. ASD from Abacus is currently the state of the art.
Up to now we have met two types of bridges: Bridges with one rail crossing above another, and bridges that only have one high rail. Sometimes you may want to lead the second type above a rail. This is possible but under some observer angles bleed-through effects will appear with FS95 and FS98. Users of FS2000 can relax and skip the rest of this chapter but remember that you still have a hard way before you. FSRail supports you in avoiding these effects which are excluded if the rail and the bridge are at exactly the same position. Then the objects are drawn dependent on which is first in the source. So attach the lower rail first. Then immediately select "Lay down a rail". The coordinates FSRail proposes are the same as the last rail but rotated by 90 degrees. You may rotate the upper bridge now. If you lay down a bridge using this trick you'll avoid the bleed-through effects. The coordinates are only available immediately after the previous rail was laid. As an example you see a moving highway crossing a moving curve with train 402 - and it refers to the next chapter.
To use this trick the lower rail always has to be placed before the bridge. If the design makes it necessary to attach a bridge to an existing end point the operation is modified as follows: First we attach the bridge and then remove it again - once we've got the coordinates. Now we lay down the transverse lower rail and then attach the bridge again. Now the sequence fits.
As a small add-on to FSRail I wrote a set of highway and road macros that use the technique of FSRail to produce moving traffic. The moving traffic is controlled by the same switch towers as the railways.
Some basic questions had to be solved first. While typical rail traffic has only a few trains that the designer wants to program typical highway traffic density cannot be set by programming individual cars. The only way is to produce a global traffic. The solution that I'll show you now has a cycle time of 8 slots and the sequence of cars is repeated after this time. Shorter times make the repetition too obvious. Longer times make the macros too big, too slow, and too complicated to program. That is why all highway macros have a name M8H... and all Road macros M8R... .
This is the reason why the variable $slots in file ..\includes\00user.inc file must be divisible by 8 if moving highways or roads are used. I recommend you use a value of 56 for countries with high rail traffic density like middle Europe or Japan, and 96 for all other countries. The first value means a bit more than 5 minutes and on average there is one train of vehicles per direction within visibility. The second value means almost 10 minutes and often no train of vehicles is visible.
To distinguish roads from rails FSRail treats roads as rails with width -1 and highways with width -2. If there is a future version it will have three-lane highways and these will have -3.
To start we create a new moving railway at the known position. As first rail we lay down the highway M8HW4000, a piece of highway 4 km long. As parameters we select (11, 1, 0, 0). The first parameter switches on the central lamps and small bushes on the embankment, the second controls the traffic flow. We attach a switch tower near to one end point.
How is it possible that one parameter controls this complex traffic pattern? As always when something becomes too complicated in FSRail I introduced an include file. All consecutive highway macros get the same sequence of cars that is defined in a car list. Parameter 7 fixes which car list ..\includes\carlistn.inc is used. Currently 9 different lists with different sequences and densities exist and it is not too complicated to make more. Highways can easily be attached: FSRail propagates the car list to the next macro. The highway crossing knows 2 lists, one for above and one for below. So the traffic density and sequence can be different for two highways that cross.
The size of the highway macros is almost independent of the length but strongly dependent on the traffic density. For FS95 and FS98 the use of very long highway pieces is mandatory.
To design in the elevated mesh scenery of FS2000 smaller moving highway pieces seemed desirable. Since the speed of a highway cannot be dropped too low this is only possible when the number of time slots is lower than 8. This appeared impossible if no timing information is handled but I found the following solution for this:
I created a set of macros for 2 time slots only, with length of 100 to 250m, a 200m bridge and a 200m ramp climbing or descending two meters.
These macros must always to be used in groups of four to get the complete 8 slots before you can attach another M8HW... macro. If you look carefully you will see that each of the macros exists in 4 versions, like M2HW200a, M2HW200b, M2HW200c, M2HW200d, which differ in the timing properties. FSRail will automatically attach the correct version so just obey the rule that you have to take four of them before you can use an M8 macro and use them to have a highway that follows the terrain and other details very smoothly. Do not wonder why you cannot attach the northern end, this is necessary.
If you get the following message you tried to attach a M8H... highway to other than a d-type, you didn't place four, or a multitude of four.
These four M2H... macros take twice the scenery buffer and framerate as one M8H... macro, so usage in FS98 makes no sense and is not supported. Since FS98 has no 3D terrain they are little needed anyway.
The road macros M8Rollll are used exactly like the highways but they are simpler and support only two cars at the same speed. They are intended to be used as overland roads, the crossing M8RX0800 is controlled by signal lights. You can also use the M2... roads in chains of four to better adapt to the rest of the scenery.
There are no moving roads that can be used inside cities. An idea on how to build efficient cities can be seen in the macro ..\details\village1.api or in the moving station macros.
Just like with the rails there are static roads and highways that carry no cars. These can be use to show detailed scenery like narrow bridges. Some static roads and highways can be found in the directory ../Details. Meanwhile you can easily adapt them to other lengths. These roads are three dimensional, contrary to the standard FS roads, which means that they can be above ground and have an embankment. To be useful in FS95/98, together with other 3D objects and under roads, they use a special technique that I call HDDS Height Dependant Dimension Switching. The height above ground is fixed by the parameter %7 at the northern end and %8 at southern end. If the sum of both heights is lower than or equal to four the roads are treated as flat objects that can not cover a three dimensional object or bleed through it. But as soon as the sum is 5 or larger they become three dimensional and can hide other objects.
Three dimensional railways in the "elevated mesh" of FS2000
Did you work through all examples with FS98 or with the "Flatten Switch" in FS2000 ? And you successfully created your own trains and macros? Want to learn the last detail? Not yet? Go back - there is still time. Yes? I warn you. Forget everything. Nothing changed but the mathematics of space.
In the example on static rails we could change the height of the ends carefully to adapt to the terrain but with moving trains this is not possible. We have to work with explicit heights from the beginning to the end.
Fortunately we still have one parameter unused up to now: Altitude (%3). Now we will concentrate on this and you know the rest already. As soon as the value %3 is not equal to 0 all macros change a lot internally, they get massive basements reaching deep into the ground. That is why %3=0 is mandatory for FS95 and FS98 as basements do not fit on the old table.
The way to design for FS2000 without the "flatten switch" is as follows: First we detect the secrets of the terrain. With the map view we place our aircraft at the current position at altitude 0. Calling the map again we can read the current altitude at N50 E10 and we find 255m. Better still if you learned to fly the helicopter then you can fly from spot to spot to discover the altitudes.
Look around carefully? Is it possible at all to place a railway into that landscape? Or do we try to follow downstream along a river which suddenly climbs by 100m? Do we have to modify the terrain? Currently the flatten commands are the only way to do this and we all are waiting for tools to modify the mesh itself.
We add 1 or 2 to the measured altitude and enter the result as parameter height (%3). The result may look like (the example is M1Ra2200):
We see the rail but the right end is partially covered by the landscape - so we have to lift the rail
We change the rail until it is fully visible and suitable as a starting point of our railway. If it is no longer very close to the ground and we have to chose an embankment color or texture.
With %9=100 the above example is already convincingly three dimensional. If we want to add more rails to the right end they will disappear in the hill rather quickly.
To solve this problem moving ramps have been introduced. We select moving straight rails, "Ramps for FS2000", and get a choice of ramps with 1% or 2% climb rate that can manage between 2 and 12m height difference. For all these ramps the northern end 1 is the higher end, the southern end 2 the lower. For example: If you want to climb by 4m with 1% the suitable rail is M1R2Cl04. This rail has as southern height 2m and northern height +2m. Attach to the first rail (257m) the southern end of the ramp and the height of the middle of the rail is 259 and the height of the northern end is 261. FSRail fortunately makes this calculation for us in most cases if we've checked the "3 D Scenery" while creating the railway.
Ramps are available with one and two degrees climb rate. Since they have different lengths to the standard moving rails a set of horizontal moving rails is available that can be entered as user defined rail with the same length as these ramps. For special applications more rails are available.
M1R2Ch02 climbs by 2m on 230m length, this is 0.5 degrees. M1R2Ch01 (125 m length) and M1R2Cl01 (62.5m) only have a height difference of 1m. Their special purpose is to complement the switches M1swi222 and M1sws222 to allow slightly raising or lowering a switch compared to a station in a sloped landscape. Ramps also exist for single and dual width curves. Each of them has a curvature of 15 degrees and climbs by 4m and they differ by radius and by the orientation under which they climb. This makes curved ramps to bridges possible for FS2000 scenery.
3D design makes it necessary to check every step carefully. If the slope is too flat the rail disappears into the terrain. If it is too high we get unnatural high embankments. In hilly terrain each km needs a lot of patience until it fits perfectly. But I remember that I needed two weekends to build a 360 degree dual curve to change between two levels of my model railway - and now it is your turn to build your virtual and your real model railway.
Since FSRail can even modify the terrain you should be able to build railways everywhere. Another tip for this feature: Each elevation polygon carries a small box at the first point. Right click or shift+right click if you want to change the elevation polygon.
Highways in the 3 D scenery of FS2000
Moving and static highways and roads can be similarly entered to the three dimensional scenery by adding explicit height. Enter the correct elevation in %3 and select a suitable color for the embankment. As for the rails we have to remember: Since trenches in the ground are impossible with FS2000 all roads have to be on small embankments. These have to be slightly higher than in the real world where we have embankments and trenches following each other.
The ramps climb the following height difference:
Highway Road | ||
8m, 458 m Length | M8HR0458 | M8RR0458 |
14m, 800 m Length | M8HR0800 | M8RR0800 |
28m, 1600 m Length | M8HR1600 | M8RR1600 |
28m, 800 m Length | M8HRx800 | M8RRx800 |
4 m, 456 m Length | M8Hc0456 | M8Rc0456 |
7 m, 800 m Length | M8HRh800 | M8Rc0800 |
5 m, 800 m Length | M8HRt800 | |
3.5 m, 800 m Length | M8HRq800 | |
2 m, 800 m Length | M8HRe800 |
Modifications of the 3D Terrain
You want 3D and cannot use the default scenery? You want to follow a river and find it climbing uphill steeply? Bad news. There is, to my knowledge, no design program yet to modify the mesh. Wait - one exception - FSRail. You'll need SCASM 2.39 or above to use this feature. You see here the Rhine valley as in the MS default scenery.
Select "Map commands" "Elevation". Click to a polygon you want to be at a fixed height and right click to the last point. Enter the height you want. FSRail will display the polygon. The result is impressive:
A nice valley opens up. Look at the example Rhein1.scm to see how this feature can be used to repair the default scenery. It seems that Polygons of 3 to more than 12 points can be set to an elevation. FSRail allows editing of elevation polygons of up to 14 points. Several elevation polygons can be attached to each other.
So FSRail contains a method to modify the 3D Terrain. With "Map commands" "Elevation" you can select a polygon and set it to a fixed height. I've heard that these may overlap but I do not recommend this. Between polygons of different height ramps are mandatory.
The precision of the points that are actually used is not known. I tested this by changing them by 10 seconds to make definite differences. I observed that slight changes of the polygon can make big differences on the shape of the terrain. I assume this depends on whether a mesh point gets inside or outside the polygon.
You see here a sample of 5 elevation polygons that I used to repair the Rhine valley. You see small boxes at each polygon. Shift+right click to one and you will get a list of the points of the polygon:
You can edit this list to modify the position of the corners of the polygon to place them more precisely. Polygons can be concave. It is not known how many corners are possible. In the Microsoft® scenery polygons between 3 and 9 corners have been found. I have the impression, that a 12 edge polygon still works - FSRail technically can handle polygons with 14 edges. Please experiment with this feature - and check the terrain before you start laying the rails. If the result is different to your expectations try to make simpler polygons.
Attaching several elevation polygons of different altitude I found that the areas are not flat but rise continously. Together with the 3D ramps this makes placement of railways into river valleys simple. Since a neighbouring elevation polygon affects the terrain within another I recommend you place the next two or three elevation polygons before you start to lay down rails.
In the directory ..\Examples you find a scenery BadKreuz.scm. Here you can study the combination of exclusion of standard objects, background bitmaps, markers, elevation polygons and 3D railway design.
At one place I found a river climbing over a mountain and this mountain could not be affected by elevation polygons. It took me quite a while to understand that a nearby airfield (which is in reality on top of a hill) was surrounded by a rather large Flatten area. A Flatten command of 1 x 2 minutes size was able to lower the southern end of this hill to get the terrain flat. So it seems that flatten lines always overwrite elevation polygons.
If you still are not content with the combination of the default terrain and flatten areas or elevation polygons then you'll have to make your own mesh. Not yet motivated but compare the following picture with the ones above; it was the first try.
If you are happy and high resolution DEM data is available for free for your area, you may use them - or see if high resolution mesh scenery is already available for your region. If you are not on that lucky side of life (means no US citizen), or if you want still better quality, you have to make your digital elevation maps yourself. Think this is complicated and hard work? No, you know already which masterpiece of software helps you out again - read here.
|
![]() |
This chapter summarizes several details that have already been explained in the text for reference purposes.
There are several selections that are assumed to be valid for all macros of a scenery. Examples are the form or color of the pylons and timing of trains.
These selection are done in a file ..\includes\00user.inc. Templates for the three different versions of FS are available. Standard values are for FS2000:
Uvar( $arvis 5 )
Uvar( $FS2000 1 )
Uvar( $mir 1 )
Uvar( $pylshape 1 )
Uvar( $slots 56 )
Uvar( $framrate 5 )
Meaning of the values:
1 green grid structure DB
10 - 14 massive structure DB in grey, green, blue, brown, dark grey
15 19 as 10-14. Reserved for user choice of colors
20 - 24 massive structure as SNCB in grey, green, blue, brown, dark grey
25 29 as 20-24. Reserved for user choice of colors
The following parameters only affect moving railways:
Instead of editing the files you can use the menu "Dialogs" "Change macro settings" to change the values.
For the different entries the combo boxes contain commented proposals but you can also enter other values to the fields.
The embankments of static railways and 3D moving railways can be selected by parameter %9 for most of the macros. Avoid drawing embankments when one of the ends is at height 0. For FS95 and Fs98 you can save valuable buffer space by omitting small embankments. %9 is a hexadecimal number with the following meaning:
To select the texture all macros use one file (..\includes\banktex.inc ). This makes it very easy for you to add more textures for values of 106 or above.
Overhead wires
For all macros the overhead wire is switched with %6. For %6 = 1 wires only are drawn. %6=2 switches on lined simple pylons, their shape and color depends on the value of $pylshape. For FS95 use only %6=0, 1 or 2. For %6=3 the pylons get massive. %6=3 and $pylshape=1 selects massive grid pylons. With %6=4 the massive Pylons get lamps on top making active night illumination for FS2000. Experiment with variable $pylshape. Some macros support the following values for extended night illumination for FS2000:
%6=5: No pylons, but illuminated rails and trains. %6=6 Night illumination without wires. %6=7 like 6 with additional lamps.
Only a few files (..\includes\plyin... ) make all pylons. For the advanced user it should not be too complicated to make your own national shape. The color of all lined pylons is selected in the file (..\includes\plycoll.inc ) and for massive pylons (..\includes\plycols.inc). If you want to introduce another pylon color this is the place to do it. Keep the values 10 to 14 and 20 to 24 as they are and replace 15 to 19 and 25 to 29 with the colors of your choice.
The choice of the rail textures happens in the files ..\includes\brbf0xy.inc and most rails use brbf001.inc. Depending on the last digit of %10 the texture set is selected:
0 Standard texture brown ballast with wooden traverses.
1 TGV-texture with grey ballast and bowed high speed transverses.
2 Dark texture similar to FS2000- rail texture, no maintenance for 50 years.
3 Red-brown ballast with light rails (Thanks to Daniel Schleusner).
4 Winter texture for the high north (Thanks to Daniel Schleusner).
5 Seasonal 3 (Spring, summer, autumn) and 4 (winter).
Values 6 to 9 currently call the same textures as 0. If you want to develop your own set of textures you can, for example, enter your color scheme as a 6 and all rails with a range of 7006 will use your texture.
This part of the documentation will explain the use of the menus. Many things explained in the pages above will not be repeated.
Menu | Item | Explanation |
File | New Railway | Creates a new railway. A dialog asks for the coordinates and properties of the railway. Greyed out if a railway is in memory. Enables most operations. |
Read Railway | Reads a railway from disk. Greyed out if a railway is in memory. Enables most operations. | |
Save Railway | Saves a railway to disk. Will warn you if you change the name to an already existing one. It is a good idea to change the name from time to time to have incremental backups of your work. | |
Save and Compile | Saves a railway to disk. Will warn you if you change the name to an already existing one. Creates a batch procedure 'BRailMAKER.BAT' from the template 'BRailMAKER.TXT' and the current filename. | |
Close | Closes a railway without further warning. Enables "New Railway" and "Read Railway" and disables most other operations. | |
Exit without save | Exits without warning and save. If you accidentally exited without saving check the file 'RAILTEMP.TMP' which may contain a backup of the railway. | |
Import from FSRail | After opening a FSRail railway this allows you to import markers, bitmaps, exported files or switch towers from another FSRail file. This will simplify building big projects consisting of several files. | |
Dialogs | Edit railway | An extended dialog that allows most operations. Specially useful to suppress most program messages by unchecking the box and to create the flatten lines for 'SCENERY.CFG'. |
Modify rail parameters | Interface to make entries to the geometry database. | |
Modify macro settings | User interface to modify the file 00user.inc and to create the template BRailmaker.txt | |
Map options | You can select the grid and the color of the markers to show. | |
Railway | Lay down a rail | Lay a rail at a free position not bound by preceeding operations. |
Attach a rail | Attach a rail to an open endpoint. Most rail properties will be calculated from the endpoint parameters. | |
Remove last rail | Remove last rail and restore the endpoint this rail was attached to. Only way to really delete a rail. | |
Switower | Place a switch tower macro. Click where you want it. You then have the possibility to shift it. FSRail will show the range of the switch tower as a white ellipse - so you can arrange switch towers so they cover most of the area and only have small overlaps. | |
Modify rail | Allows selecting a rail to change its parameters. You can also deactivate a rail. This is almost the same as a delete but the endpoints attached this rail have to be reactivated. If you press "reactivate endpoints", all deactivated endpoints of this rail will be reactivated. Maybe you'll have to delete a few of them manually. This is the same as the Shift+right click to a specific rail. | |
Define defaults | Sometimes you may want to change the defaults - like when changing %6 from electrified to a Diesel rail, or the rail texture in %10. | |
Place comment | Did I ever tell you that FSRail is an assembler programming tool? A comment never makes assembler less readable. A good idea is to insert comments with station names. | |
Lift up 25 cm | This is only enabled for 3D design. Between the different patches of FS2000 the level of the terrain changed by 1m at least. The chance that it will change again with the next version is higher than the chance that Microsoft gets split up. No problem: You can lift your railway up and down. | |
Lift down 25 cm | This is only enabled for 3D design. Opposite of above. | |
Shift North-South | Some testers requested a
possibility to slightly shift a railway horizontally. You
can shift in steps of 10 seconds (324m), 1 second or 0.1
second (3.24m). Attention: When shifting in North-South direction on a sphere, lateral positions are not conserved. I estimate that shifts up to 2 km are tolerable, more will give visible effects. |
|
Shift West-East | Some testers requested a possibility to slightly shift a railway horizontally. You can shift in steps of 10 seconds (324m), 1 second or 0.1 second (3.24m). | |
Memory usage | For a grid on the scenery this calls the program SCMEM from Manfred Moldenhauer. Size and color of the dots indicate buffer usage under the assumption that all scenery is in the \Program directory. Requires SCMEM to be installed in the same directory as FSRail. | |
Coordinate | Click on the map and get the coordinate. | |
Endpoints | Modify endpoint | You can select an endpoint and modify all its properties. This is the same as Shift+left click to an endpoint on the map. |
Export endpoint | You can export an endpoint. In the source the instruction ";FSRail AddEP" is replaced by ";FSRail ExpEP". You can move this line to another file to continue a line. | |
Cleanup endpoints | Nearby endpoints are removed automatically. This happens when adding crossings or switches to two rails. | |
Reimport | All exported endpoints are activated again - in case you want to use them in this file again. | |
Calculate distance | Calculate the distance between two endpoints. | |
Map commands | Select endpoint | Identical to Shift+left click to an endpoint |
Select object | Identical to Shift+right click to an object | |
Scale = 1 | Resets the scale to one. This scale is defined as that of the railway in the header so it fits on your full screen. | |
Zoom in | Enlarges the scale. You can select which quarter of the screen you want. | |
Zoom in to mouse | Enlarges the scale by 2. Click to the position around which you want it enlarged. | |
Zoom out | Reduces the scale. | |
Roads and rivers | Allows creation of simple roads or rivers. You click twice to start and end the road. Then are asked for the color and the layer. For 3D designs the roads and rivers are always textured. Note that for FS2000 the layer has to be divisible by 4. Higher layer numbers can cover the lower. So if you cross a river with layer 8 with a road with layer 12 the road will cover the river. | |
Polygons | Left click to a series of points. Right click terminates the input. You can select the color. This does not work with textured polygons under FS2000. | |
Airport Macro | You can add an airport macro to FSRail scenery. Click on the position and edit the proposal. Note that some airport macros require special calling with %13 = v2. If some parameters are not correct the compiler may go into an endless loop. | |
Village | Place a village at the mouse position. A value of 1-3 only draws polygons, 4 to 7 adds houses. | |
Create flatten area | Click to four positions clockwise or counterclockwise. They will be rounded to minutes and written to the internal ;FSRail flatten line. Use the Dialog menu to create the 'flatten.txt' file to add to 'scenery.cfg' | |
Elevation | Modify the terrain. Click to some points (up to 14?) that you want to be the corners of a polygon to be set to one altitude. Right click to the last point you want to enter. | |
Color of marker | Sets the colors of the markers for the following marker operations | |
Set Marker | Sets a marker to the next mouse click. With a right click on a mark this can be changed or the distance to another marker measured. | |
Load Bitmap | Loads a background bitmap and sets the program to background mode. You can set as many markers as you want (2000 or more) to carry the coordinates of the most important objects to FSRail. | |
Reactivate Marker | Reactivates inactive markers. All markers of the current color are reactivated | |
Delete active markers | All active markers of the selected color are deleted. If you want to keep a few make them inactive with a right click, select the color, delete all active, and reactivate the inactives. | |
Window | Full screen | You can switch back with 'Alt+Enter' |
Help | About | Gives an About box |
Intro | Gives a first introduction.
You can call the online documentation from here. The
location of the documentation is: The directory '..\documentation' for the English documentation on all non-German systems. The directory '..\dokumentation' for the German documentation on all German systems. |
|
1 | Sets the scale to 1 and centers | |
< | Shifts the observer's position 100 pixels west. | |
> | Shifts the observer's position 100 pixels east. | |
Up | Shifts the observer's position 100 pixels north. | |
Down | Shifts the observer's position 100 pixels south. | |
- | Reduces the scale | |
+ | Increases the scale |
Shortcut keys allow the keyboard to call menus in the standard windows way: For example, Alt < shifts the observers position left.
All macros and the design program have been used by myself and several testers resulting in many reported and fixed bugs. Nevertheless I can not guarantee that all 1500 macros, 700 include files, and the design program are free of bugs. It is extremely likely that they contain bugs. I do not know anything about incompatibilities between FSRail and other add-ons to Flight Simulator, there must be some because the number of available user parameters is very low. Here is a list of common errors and their removal:
Errors during compilation.
Representation wrong:
This list will get longer with more experience. Please do not hesitate to report problems but do give me some time to answer them. The following web site will contain fixes, patches, and add-ons to FSRail. Please check regularly:
The following support group will be set up for discussion of FSRail - specific issues:
news://news.simflight.com/support.fsrail .
If you do not find your problem solved there, or want to contribute in any way to FSRail, you can also send an email to support@fsrail.com . Problems can be evaluated better if you provide the following information:
Please understand that the above information is necessary to analyze a problem and that I cannot guarantee to follow every question down to the ground.