The game
The purpose of this project is to make a UNIX/Linux remake of the famous DOS-game "stunts"."The old game"
The original DOS game (developed by Broderbund and Mindscape) can be downloaded on several abandonware sites, e.g the XTC site.Stunts is a 3D racing game, with simple CGA/EGA/VGA graphics and no texture or smooth shading, but because of the spectacular stunts (loopings, bridges to jump over, etc.) it was really fun to play. One of the best aspects of this game is that it had a track editor. Because of the tile-based tracks, every gamer was able to make it's own tracks.
Similarities / differences
UltimateStunts will be a game very similar to Stunts:- It is a 3D racing game
- It is possible (and relatively simple) to build your own tracks
- The tracks are built of large blocks, called 'tiles'
- It is possible to play it on relatively old computers
- The games share some VERY spectacular stunts
- You are free to drive where you want (but you'll get penalty time for it)
- Platform independence: UltimateStunts is open source and it will use platform independent libraries if possible.
- 3D sound
- Better tracks: The track sizes (l*w*h) are variable, and multiple tiles can be placed on top of each other.
- Better graphics (based on openGL), with texture, smooth shading, reflection etc.
- Multiplayer: the original game allowed 1 human player and max. 1 computer opponent. UltimateStunts will be an IP-based network game, with a server and both human and AI clients
- An expanded set of tiles and tracks. actually, you can expand your own collection of tiles and tracks with packages.
Detailed specification
The game
The game will be a threedimensional racing game, in which creating your own tracks and doing stunts are esential parts of the gameplay. The physics will be quasi-realistic: gameplay is more important than realism. The goals that a player can have are beating opponents in a race, getting a high score, and creating tracks that are long, fast, funny or (almost) impossible to drive.Multi-player
Players will be able to drive on their own (just to get in the highscore list), against computer opponents, against their friends in a split-screen session, or in a multiplayer session over a LAN or over the internet. Combinations will also be possible, for example to play against computer opponents over the internet.Network
Whenever network communication is involved in a gaming session, a separate server program is started on one of the computers. It will be possible to start the server with a menu item in the client program, but it will also be possible to start it manually on a dedicated server computer. All client programs that are involved in the gaming session need to connect to the server. The server does not only give through all data, but it also acts as a referee. The game simulation will run on the server, and all local simulators need to synchronise with the server. The server also decides on which track the game is played, and which cars are allowed. All files should be available at the server, and if they are not available at one of the clients, that client will be able to download the missing files automatically.Graphics
Ultimate Stunts will be able to provide high-quality 3D graphics, but it will become very flexible at this point. In order to provide a playable game even on platforms where no hardware acceleration is available, it will be possible to scale down the complexity of the graphics to a minimum. On the other hand, on high-end platforms, advanced technologies will be used.The tracks
The tracks will consist of square tiles, just like in Stunts. The differences are:- The sizes of an Ultimate Stunts track are not fixed. Tracks can be made that are extremely large. Limiting factors could be the size of integer values (data wil be transferred over the network as 32-bits integers; positions are multiplied with 1000 to get an accuracy of 1 mm), the accuracy of floating point values (some calculations are done in absolute coordinates), or the memory usage. Memory usage of large tracks will not be very large, because per tile only a few integers are stored, to define the tile model, the orientation and the height.
- In Stunts, for every location on the map, a landscape type and a tile type are defined. This does not make it possible to place tiles on top of each other, and it also places a limitation on height differences. In Ultimate Stunts, the track will be a threedimensional array of tiles. In a track with n layers, a maximum of n tiles can be placed on top of each other. For every place in this threedimensional grid, three values are defined: one refers to the tile model, one describes the rotation (0, 1, 2 or 3) of the tile, and the third one defines the height of the tile (measured in units of 1 tile). That last value makes it possible to create very large height differences with only a few layers.
- The tiles that can be used in Ultimate Stunts will not be limited to a fixed set. Instead, every tile is stored in its own file(s), and the track files will refer to these files.
The track editor
The track editor will be a user-friendly program for editing tracks. It will be possible to start the track editor from a menu item in the main program. Because tracks in Ultimate Stunts are more 3D than Stunts tracks, the editor will be more complex. It will be inspired by the rollercoaster editor of Rollercoaster Tycoon. The basic idea is to have a "cursor" at the end of a road. The user can select if the roads needs to turn right or left, if it needs to go up/down, if a stunt needs to be included etcetera. Then the tile editor should automatically apply the right changes to the track. Of course the track editor should also validate the track, and make it impossible to make invalid changes. The track editor should also have the possibility for importing original Stunts tracks.Replays
Just like Stunts, Ultimate Stunts will have the possibility to create and view replays (but it will not be able to read original Stunts replays). Ultimate Stunts replays will contain every position and orientation for every moving object in the scene, for every frame. With the right conversion tools, this data can also be used in animation programs (like 3D Studio), for example for creating an intro video for Ultimate Stunts. In Ultimate Stunts it will also be possible to use a replay as a ghost player.The stunts3dedit editor
When this project was started, there were no plans for a 3d editor, but as soon as complex tiles were needed, it was created to reduce the difficulty of writing tile definitions in text files. The 3d editor will be what it is now: a simple tool for very low-level polygon manipulation, with some high-level modifiers. A feature that becomes increasingly important is the possibility to import foreign file formats. The usage will be: create a model in an external editor, import it in stunts3dedit, do some fixes, and save it for use in Ultimate Stunts.Requirements
UltimateStunts is very flexible in it's system requirements: it can be played on computers without hardware-acceleration, but it is possible to take full advantage of the 3D-technology in modern PC's.The following things are required to get the windows binaries working:
- Windows 95,NT or higher (but Wine, the windows-emulator on Linux, will probably also work)
- openGL (or Mesa) installation (standard on most systems)
- The X window system
- openGL (or Mesa)
- SDL (previous versions used glut)
- BSD networking library (always(?) available on BSD and Linux systems)
To get a nice-looking game with a normal frame-rate, the following is recommended:
- Pentium 200MHz processor or higher (or something comparable on non-PC platforms)
- A videocard with hardware-acceleration supported by openGL
- Sound (by FMOD or openAL)
- Joysticks
The technology
The main developing platforms are Linux and Cygwin (= in windows), but I am trying to keep it portable with other unix-like environments, like MacOS/X. For graphics and input, a openGL/SDL combination is used. Networking is done by standard UNIX (BSD) network functions. The gaming communication will use UDP/IP. Sound is implemented both on FMOD and on openAL.The project will provide a number of different programs. These include the following:
- The main UltimateStunts program, providing graphics, sound etc. This program also provides a nice gui.
- A server program
- An AI client
- A simple 3D editor, for modifying tiles and cars, and importing them from foreign file formats.
- A track editor
Network and simulation
The functionality of the various programs involved in a game-session will be very flexible, as the most optimal configuration will depend on the network parameters, like bandwidth. The following text describes future versions. It does NOT apply to the current version.In a local game, when only one computer is involved in the game session, all things (including graphics, AI players and physics) are done by a single program. When more than one human player is involved, in a networked game, data will be distributed by the server program. The main physics simulation is done by the server program, but (depending on the connection bandwidth) some client programs might also calculate physics, to correct for the slow synchronisation with the server.
AI players can be started inside both the server and the UltimateStunts client. They can also be added using the separate AI-client program. Experts who want optimal performance, can use the server program to act also as a client. This way, the server program can log in on an internet-game over a slow connection, and act as a server to various players in a LAN. This enables the possibility to share a single client-server connection by several players.