free web hosting | free hosting | Business WebSite Hosting | Free Website Submission | shopping cart | php hosting

BVE

Boso View Express

Making BVE Routes (RW & CSV files)

With the onset of BVE 2's ability to read comma seperated value (CSV) files, this page has been updated to show what you can do in BVE 2.

About CSV Files

Like RW files, CSV files can be edited with a simple text editor (like Notepad). However, CSV's can also be edited using spreadsheet programs like Microsoft® Excel. The extension is automatically associated with this program so all you have to do to edit a CSV is simply double-click it.

Distance

The first cell in the row (or the first value of a new line) must contain a number to set the distance from zero. Distances may contain the $rnd(a;b) command, which is explained below.

Special characters in CSV

, (Comma)

The comma is used exclusively to seperate the commands. In Excel, each row is equivalent to a line break in the text file, and each column is divided by a comma; thus forming the cells.

; (Semicolon)

This divides the arguments in each command cell.

$ (Dollar Sign)

The dollar sign allows special commands:

The sections and commands (both in RW and CSV) are case-insensitive, meaning "@WALL" is the same as "@wall", "@WaLl", "@waLL", and "@WAll".


From this point on, please keep in mind the following:

Descriptive Text (RW)

This text is displayed in the "Route Information" section of the "Select Route" dialog. The first 2 lines are also used in the timetable. Please start this section as the following example:

IRT Flushing #7 Express Line
Main Street to Times Square

[train] Section (RW)

Set the behavior of your train and the train in front of you.

File=(name) Folder name for your train
Velocity=# Speed of train ahead. # is in Km/h
Acceleration=# Acceleration of train in front. # is in Km/h/s
Station=# Stopping frequency of the train in front
Interval=# Interval between your train and the train in front. #=seconds
Gauge=# Distance between rails. #=millimeters. Standard gauge=1435.
Run(A)=B A=track type. B=(runB.wav file) A=0 to 15, B=0 to 7
Flange(A)=B Flange creaking sound A=track type. B=(FlangeB.wav). B=0 to 3. A is same as above.

Route object (CSV)

This object combines the descriptive text and some of the the [train] section of RW files.

Route.comment value value = Full descriptive text that appears in the Route Information field of the "Open..." dialog box.
Route.timetable value value = Full descriptive text that appears in the timetable.
Route.change value value = Ended Exchange {-1: Nothing (service braking system) | 0: Nothing (emergency brake) | 1: Possession}
Route.gauge value value = distance between rails [mm]
Route.signal(index) value index = signal {1 precaution|2 note|3 deceleration}
value = approved speed of signal [Km/h]
Route.RunInterval value value = interval of time between your train and the preceding train
***IT CANNOT BE USED WITH Track.PreTrain***
Route.developerID = Value Value: 8-digit number.
NOTE: THE DEVELOPER ID ALLOWS ENTRY TO THE DEVELOPER MODE OF THE BVE PROGRAM.
DELETE THIS COMMAND BEFORE RELEASING ANY ROUTE!

Train object (CSV)

This object contains the rest of the [train] section of RW files.

Train.folder value value = Location of the train folder.
Train.run(index) X index = track object index (0-255)
X= sound file (runX.wav)
Train.flange(index) X index = track object index (0-255)
X= sound file (flangeX.wav)

[object] Section (RW) and Structure object (CSV)

Defines the objects used on the railway. They are all in the same format:
stType(txI)=FileName (RW)
Structure.stType(txI) FileName (CSV)

txI = Texture Index
FileName = Path to B3D or Structure CSV (BVE2) relative to the Railway\Object folder in the directory in which you installed BVE.
stType Description BVE1
txI
Range
BVE2
txI
Range
Rail Rails 0-15 0-255
Pole Overhead (Cantenary) Wire Poles (BVE2)
Format for this is Pole(T;txI) FileName. T = track type (number of tracks for the line minus one)
0-255
Ground Ground texture 0-63 0-255
WallL Left side walls 0-15 0-255
WallR Right side walls 0-15 0-255
DikeL Left side dike 0-15 0-255
DikeR Right side dike 0-15 0-255
FormL Platform edge - left side none 0-255
FormR Platform edge - right side none 0-255
FormCL Platform center - Left side none 0-255
FormCR Platform center - Right side none 0-255
RoofL Roof edge - Left Side none 1-255
RoofR Roof edge - Right side none 1-255
RoofCL Roof center - left side none 1-255
RoofCR Roof center - Right side none 1-255
CrackL Fills gap on left side of track 0-15 0-255
CrackR(0-15) Fills gap on right side of track 0-15 0-255
FreeObj Free object 0-255 0-65535
Back(0-3) Background picture¤ 0-3 See
Texture
Object
¤ This must point to a BMP file, not a B3D file.

Texture object (CSV)

Texture.TxType(txI) FileName
TxType: Texture Type
FileName: path to a BMP file relative to the Railway\Object folder in the directory in which you installed BVE.
TxType Description BVE2
txI
Range
Background Background 0-15

[cycle] Section (RW)

Repetition of the land which is defined in the Object Section is defined here. When repetition is not used, you can omit this section. Land number 0 - 15 = land object numbers, (Example: * & *, * & *)
0 = 0, 1, 2
1 = 3, 0, 3, 4

Cycle Object (CSV)

This is more or less the same as above, but this has a different syntax. Cycle.CyType(cI) I1; I2; I3; ... In
CyType Description BVE2
cI
Range
Background Background 0-255

[Railway] Section (RW) and Track Object (CSV)

This is where it all comes together. Using the objects defined above, you actually build the railway. There is one limitation. It concerns categories marked with a red asterisk (*) Categories marked with this must have a distance that is a multiple of 25 meters (0, 25, 50, 75, 100...).

Each line must start with a distance, which is a positive integer, which is a measured in meters. It doesn't matter if the first distance is not zero. It also doesn't matter if there is a space between the number and the command.

Track-building commands*

BVE1 Command BVE2 Command What it does
@railstart(index, X, Y, type) Track.Rail index; X; Y; type Start a new track
@rail(index, X, Y) position an existing track
@railend(index, X, Y) Track.Railend index; X; Y End an existing track
@railtype(index, type) Track.RailType index; type Change a track's type

index: track number (0-7 BVE1, 0-15 BVE2)
X: distance from your track (+: right, -: left)
Y: distance from your track (+: up, -: down)
type: Track type as defined in [object] section or Structure Object
BVE1 Only: If X and Y are omitted, they are set to zero.
BVE2 Only: If X and Y are omitted, the existing distances are not changed.

Accuracy* (BVE2)

Track.Accuracy rank
rank=Precision {1-4, 4 being low and 1 being high} Comments: This affects the quality of the track installed. The lower the number, the less rocking of the train you get.

Grades*

BVE1 Command BVE2 Command What it does
@pitch(rate) Track.Pitch rate Change the grade

rate: Slope (per thousand) (+: ascending, -: descending)

Curves*

BVE1 Command BVE2 Command What it does
@curve(radius, cant) Track.Curve radius; cant Makes a curve

radius: Curve radius in meters. (+: right, -: left, 0: straight)
cant: Also known as "superelevation," this is the height difference between rails in millimeters (1 inch = 25.4mm) It can be omitted for straight curves BVE1 Only: +: right is higher, -: left is higher. BVE2 Only: +: outside rail is higher, -: inside rail is higher (I don't think you'd want that).

Switches*

BVE1 Command BVE2 Command What it does
@turn(slope) Track.Turn slope Shifts track

slope: movement (+: right, -: left)
Example: If in 25m you open 2.4m with another track: 2.4 / 25 = 0.096

Rail Adhesion* (BVE2)

Track.Adhesion rate
rate=Stickiness of the rail (reference: Dry=135, damp=93, frost=85, snow=50)

Fog* (BVE2)

Track.Fog Start; End; Red; Green; Blue
Start: Fog start distance [m]
End: Fog end distance [m]
Red, Green, Blue: Brightness of respective color (0-255)

Signals

BVE1 Command BVE2 Command What it does
@signal(aspect, name, X, Y, Type) Track.Signal aspect; name; X; Y; Type
(can be abbreviated to Track.Sig)
Places a signal

aspect: number of aspects (2: YR, -2: GR, 3: GYR, 4:RYGY -4:RYYG 5:YYRYG)
name: Sign under signal. You may use the special commands listed above (You know, the ones starting with $) in CSV only.
X: distance from track
Y: height above track (0: Invisible, 1: Attached to pole)
Type: Type {1 Block (automatic) signal|2 entering signal|3 leaving signal} * When X=0 and Y=1, all this does is make an end to the signal block. For example, where the safety system for the line changes from ATS to ATC. Using this prevents the last signal from being permanently red.

Repeater Signals

BVE1 Command BVE2 Command What it does
@relay(X, Y) Track.Relay X; Y Places a repeater signal

X: distance from track
Y: height above track (0: Invisible, 1: Attached to pole)

Speed Pattern (BVE2)

Track.Pattern type; speed
type: Type {0: turnout restriction| 1: full restriction}
speed: Speed [Km/h]

Speed Limit

BVE1 Command BVE2 Command What it does
@limit(speed, position, arrow) Track.Limit speed; position; arrow Sets Speed Limit

speed: Limit (Km/h) (0 removes limit)
position: Position of sign (-1: left side, 0: no sign, 1: right side)
arrow: Arrow on sign (-1: left, 0: none, 1: right)

Train Stop marker

BVE1 Command BVE2 Command What it does
@stop(position) Track.Stop position Sets Stop point

position: Position of sign (-1: left of track, 0: no sign, 1: right side)
*You can make your own stop signs with a combination of position 0 and FreeObj (described below)

Stations*

BVE1 Command BVE2 Command What it does
@station(name, t1, t2, stop, Device, Sound2) Track.Sta name; t1; t2; PassAlarm; DOOR; stop; Device; Sound1; Halt; Jam; Sound2 Sets station location

name: Name of station
t1: Arrival time (hh.mmss)
t2: Departure time (hh.mmss)
PassAlarm: Alarm to Prevent Accidental Passing? {0: No|1: Yes}
Door: Which side opens: {-1: Left|0: neither|1: Right}
stop: State of departure signal as train enters (1: clear, 0: stop)
Device:
Sound1: *.wav Sound that plays when doors open
Halt: Minimum stop time [sec]
* Even when late, the train needs to be stopped for the minimum necessary stop time. It also has an influence on the method of shaking the train and the timing of departure sound.
Jam: Crowd trying to board [%] (0-250)
Sound2: *.wav sound to be played before the doors close. Optional parameter. Omit at terminal station.

BVE1 Only:
for t1: L if passing without stopping
for t2: = if this is a terminal station
for Device: ATS, ATS-P or ATC. 0 at end station.

BVE2 Only:
for t1: P if passing without stopping
for t2: T if this is a terminal station
for Device: 0 for ATS, 1 for ATC

Platforms*

BVE1 Command BVE2 Command What it does
@form(index1, index2, roof) Track.Form index1; index2; roof; Pf Installs platforms

index1: track index on one side of the platform
index2: track index for other side of platform (For "wall" platforms, L for left side, R for right side. In BVE1, use -9 and 9 in place of L and R.)
roof: BVE1 0 for no roof, 1 for a roof. BVE2 0 for no roof, otherwise roof structure number
Pf: BVE2 Platform structure number

Overhead Wire Poles*

BVE1 Command BVE2 Command What it does
@pole(Index, Type, Locate, Distance) Track.Pole Index; Type; Locate; Distance; IdxStType Installs overhead wire poles
@poleend(Index) Track.PoleEnd Index Installs overhead wire poles

index: track number
type: (0: single Track, 1: Double track, 2: 3-track line, 3: 4-track line)
Locate: (-1 left side, 0 both sides, 1 right side)
Distance: interval in meters. (25 or 50)
IdxStType: BVE2 Pole structure type

Please think "under" when using @PoleEnd.
In other words if you write "1000@PoleEnd", it means that the poles run to 975m. (If using a 25m interval)

Walls & Dikes*

BVE1 Command BVE2 Command What it does
@wall(Index, Locate, type) Track.Wall Index; Locate; type Starts a wall
@dike(Index, Locate, type) Track.Dike Index; Locate; type Starts a dike
@wallend(Index) Track.WallEnd Index Ends a wall
@dikeend(Index) Track.DikeEnd Index Ends a dike

Index: track number
Locate: Side {-1: left, 0: Both, 1: right}
Type: Number as defined in [Object]
The @Wall and the @Dike functionally are the same.
You can use them in various ways with the definition of the objects.
IMPORTANT!!! When you end a track with @railend (or track.railend), you have to use @wallend, @dikeend, and @poleend (or the respective CSV command) for that track to avoid any unnecessary walls, dikes, and poles showing up when the track's number is used again later in the RW or CSV file.

Signs

BVE1 Command BVE2 Command What it does
@Marker (FileName, Distance) Track.Marker FileName; Distance Displays a sign

@Marker (FileName, Distance)
FileName: Image file name
Distance: Indicatory distance in meters
These appear on the right side of the screen, not amongst the tracks.
The image must be a maximum of 64x64 pixels, and may be in BMP, GIF, or JPEG formats.

Track Elevation*

BVE1 Command BVE2 Command What it does
@height (Y) Track.Height Y Changes elevation of track

Y: Height in meters.

Ground*

BVE1 Command BVE2 Command What it does
@Ground (type) Track.Ground type Changes Ground Type

Type: Number defined in [Cycle] section or Cycle object.

Opening between two tracks*

BVE1 Command BVE2 Command What it does
@Crack (Index1, Index2, Type) Track.Crack Index1; Index2; Type Fills gap between two tracks

Index1: track number
Index2: track number of partner
Type: Type as defined in [object] section or Structure object

Free Object

BVE1 Command BVE2 Command What it does
@FreeObj (Index, Type, X, Y, RotY) Track.FreeObj Index; Type; X; Y; RotY Places a free object

Index: {-1: Ground, 0-15: Railroad track}
Type: Type as defined in [object] section or Structure object
X: Position in meters (+: right, -: left)
Y: Position in meters (+: above, -: below)
RotY: Angle of rotation on Y axis in degrees.

Background Modification*

BVE1 Command BVE2 Command What it does
@Back(Type) Track.Back Type Changes Background

Type: Type as defined in [object] section or Structure object

Announcement*

BVE1 Command BVE2 Command What it does
@Announce(FileName) Track.Announce FileName Interior announcement

FileName: WAV file name

Exterior Sound BVE2

Track.Doppler FileName; X; Y
FileName: WAV file name
X: Position in X direction of sound source [ m ]
Y: Position in Y direction of sound source [ m ]
* It is necessary to seperate track.doppler statements by at least 100 meters.

Previous Train BVE2

Track.PreTrain Time
Time: Passing time (HH.MMSS)
* From the previous Track.PreTrain it travels at fixed speed.

Other things

With Statement (CSV)

You can use the With statement to group commands of the same object. For example: With Route
.Timetable Value
.Change Value
.Gauge Value
...

Remarks

You can display remarks using a semicolon (;) before the remark. Example:
5000@signal(3,Q1 111,3,2) ;Put a signal here. This text is ignored.

In CSV, only the cell in which a semicolon is the first character is ignored.

This document contains information translated from Mackoy's site using the BabelFish translator (http://world.altavista.com). The translated text was then modified further for clarity by Robert Marrero. This page was last updated on December 28, 2003.