Logo About   Features   Roadmap   Compatibility   Developer Log   Downloads   Forum

Features

This page is intended to outline the features of openBVE and to compare them with mackoy's BVE.

Quality

This section covers the visual quality of the renderer.

Track

This section covers the internals of the track.

Train

This section covers the internals of the train.

Signals

This section presents the default Japanese signals.

Audio

This section presents the internal audio model.

World coordinates

In BVE tracks are laid out in track coordinates, that is objects are always placed relative to existing rails, where the rail the player drives on can be instructed to curve, slope and the like. Internally in openBVE, everything is based on world coordinates. That means that with a suitable 3D editor, individual objects could be arbitrarily placed in a large 3D world. BVE does not provide interfaces to access this level of world coordinates, but openBVE will eventually offer such abilities without needing elaborate mechanisms to convert the world data that a 3D editor provides first into the complex track coordinates, just for the game to convert it back into world coordinates.

Everything is an object

In BVE routes you can create things like walls, dikes, poles, freeobjs and the like, but in openBVE none of them actually exist. There is one unified object type that is freely placed in world coordinates. That means that a parser which reads the route file needs to manually convert all the objects into the internal format employed by openBVE. This keeps openBVE a simple and lightweight program in its core graphics engine, because none of the nuisances of the route format need to be taken into account once the game is running.

There are no blocks

BVE features blocks of 25m at which objects can be placed. It is impossible to curve a rail after 20m, then after 10m etc. BVE always employs its block structure. Presumably, the internals of BVE don't allow it in a different way. openBVE does not know anything about blocks. Each object can be freely placed in the 3D world. openBVE employs an extremely efficient mechanism to tell at any point which objects needs to be introduced into the scene and which can be disposed of as you pass them.

As for the track, that is not the visible part, but the information needed to make the train follow the visible part, it is basically a list of instructions. For example at 10m make a curve, at 23m increase the pitch, etc. To follow the track, this list is simply traversed, with all parts having precalculated world coordinates, so at runtime only minor processing is required to convert a track coordinate into world coordinates. Yet again, there are no blocks.

For route developers, this also means that they can curve, pitch and the like at any position. However, in order to be compatible with existing BVE routes, this feature cannot be currently made available without breaking compatibility with existing BVE material. Extensions to the route format could be made and an openBVE route format will follow at some day to expose the functionality. Developing the specifications should be community-coordinated.

External view

BVE does not employ external views, only the cab view. openBVE changes this from the beginning with a simple mechanism. The train is internally composed of as many individual cars as you want, and each of them has two axles which follow the track each individually. This allows for one axle to go into a curve while the other is still on straight track, so the car rotates realistically. The same applies on pitches. The axles that follow the track use the same internal mechanism as would the camera if it wanted to follow the track. As therefore each individual axle, and therefore each individual car, is calculated into exact world coordinates, these coordinates can simply be used to align an object file around them. So, an external view is very simply possible even now. Also, these coordinates, the pitch of each car etc. can be later used for more elaborate physics.

The length of each car can be individually specified, as can be the front and rear axle positions. Additionally, each car has a front and rear coupler position, and yet another object can be displayed between the cars in a realistic fashion: couplers.
Screenshot

Animated objects

openBVE will feature various sorts of animated objects, ranging from cycling through a list of objects for key-frame animation, rotating objects, pendulums, moving objects, clocks and much more. These can be used to create simple things from swingsets at the backyard of a house to opening and closing railway crossings as the train approaches, or whatever the imagination allows for.

Driving the route backward

Internally, a viewing distance to the front and also to the back is maintained. These are changed at runtime depending on the orientation of the camera. If you look forward, you get the full viewing distance to the front, e.g. 1000m, and 0m backward. As you turn around, these values are modified accordingly to show only what is necessary to be shown.

This effectively enables a full 3D view at all the times. In conjunction with the external view and the fact that each car of a train can be simulated individually, the driver can not only drive backward while looking backward in the external view, it is also possible for the driver to switch the cockpit to another car, possibly even with a different cab and different sounds.

Event model

A list of events sorted by track coordinates is internally maintained. Whenever such a point-based event is passed by the train or camera, the event will fire if appropriate.

Internally, everything that can be will be provided via this event model, ranging from change of the background image, making announcements, displaying marker images, even stations and stops, etc. It is an extensible system that could also be used to script custom events if the necessity arises.

Valid HTML 4.01 Transitional