This game makes you a constructor and pilot of a spaceship.
Piloting is similar to classic 3D FPP spaceship games, like Elite and Netwars.
In the current version, there are not many piloting missions to be done.
In single player mode you can shoot at asteroids, and in multi-player mode
you can shoot at your friends.
Construction is done by assembling spaceship from parts such as engines,
lasers and armor in correct places. Lasers just fire, and armor protects
vital parts of your spaceship from enemy fire; engines are the most
interesting, since maneuvrability of your spaceship will depend on their
placement. As an example, see the following simple spaceship design:
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| A | | B | | C |
+---+ +---+ +---+
||| ||| |||
The engines are A, B and C. If you turn B on, the spaceship will start
going forward (accelerate). (Don't forget you fly through vacuum, so if you
start moving or rotating, you will move or rotate forever, unless you
counter it by another thrust.) If you turn A,B,C on, the spaceship will
accelerate even faster. However, if you turn only the engine A on,
acceleration won't be the only result, as the thrust will cause your
spaceship to rotate clockwise. The rotation can be stopped by activating only
the B engine, but the spaceship will gain some speed in the process.
(Actual ships are three-dimensional; the example above is maneuvrable
only in two dimensions.)
Your challenge is to place engines in a way such that your spaceship is
maneuvrable in an intuitive way (or at least one that you can understand),
and also cheap (you have limited budget and cannot put the expensive engines
everywhere --- you'll have to decide whether to add engines which allow
faster acceleration, faster targetting, strafing, or maybe add weapons
Since the game does not know how your engines are supposed to control
your spaceship, you will also need to tell your spaceship computer what
engines and other parts should be activated in response to your keypresses
and measuring devices. This is done by writing a simple script program
(in Lua). It is really simple (like "if 'a' is pressed turn on the engine 'a'"),
so you should not have any problems if you never programmed in Lua before
(or maybe even if never programmed at all).
The game is hosted at Sourceforge.
project information and downloads
I "always" wanted to have a game based on this idea, but I am not sure if
anyone except me would like to play it. I don't think building spaceship
is that challenging in the current version. Hopefully it is fun. But there
are not enough game possibilities to actually test your design.
The game is playable, but it would certainly greatly benefit from
new spaceship elements
more interesting missions (or even campaigns, where you start from a tiny
ship with three engines and by gathering cash and components you end up
with a huge battleship with powerful engines giving a total control)
newbie friendliness (such as spaceship editor, menus)
mouse control etc.
If you think it has some potential, you can try to send me a message or your
spaceship design, or even join the project and develop it, I don't know if
I have time and will to do it.
Keys used to control your ship depend on its design. Also the following keys
F1: resurrect your ship (all components are given full health)
F2: display changing game stats on console
F3: display static ship stats on console
Tab: switch to another ship if you control a fleet
Esc: quit the game
The game configuration is in the "lne.cfg" file. (You can use another config
file by giving a parameter, like "lne other.cfg".) The format is quite simple;
see the file for comments about meanings.
The file "lne.lec" lists all components available. Spaceships are constructed
out of this. The format of this file should be quite easy too.
Under Windows you should run through "console.bat", this gives you a console
which displays more or less important messages for you.
Standard Spaceship Components
Before constructing your spaceship... here are the available components.
(They are defined in the "lne.lec" file; some details would be changed when
using another file.)
A heart of the spaceship. If your computer is destroyed, you lose control
of your ship. The computer is equipped with devices to measure velocity
and rotation of your spaceship.
Provides maneuvrability to your spaceship. You have to put engines in
correct places and directions.
The main (and only) method of offense. Produces a long beam of energy which
damages enemy spaceships and asteroids.
Detects flying objects close to you and displays them. Your radar is shown
in the bottom right corner during the game. A radar makes pointing your
lasers at enemy objects much easier.
Allows you see the surroundings of your spaceship. Playing without one
is unpleasant, and it is hard to target precisely without one. You could
also try to place an additional eye and lasers in the rear part of your
Protects the vital parts of your spaceship. Note that it is a bad idea
to place armor directly before your laser (you would shoot the armor then)
or eye (you won't see anything then). (You can currently place armor
before an engine.)
battery & generator:
Lasers need energy to work. This energy is produced by the generator,
and stored in batteries when not in use.
When a component of your ship gets destroyed, it stops working and allows
laser rays to pass through it, but mass and balance of your ship is not
affected. This is good for you, since balance is very important in building
good ships. (Note that various components have different masses, so a
symmetric ship is not necessarily balanced.)
Spaceship construction manual
The example spaceship is defined in "example.les" and programmed in
"example.lua". The picture shows the screenshot of this
The ship is controlled with the following keys:
||rotation (the ship also goes forward when these keys are pressed)
||full forward (=w+s+o+p)
You can turn on the game to get the hang of this spaceship. The control
is not very good; since rotating the ship forces forward moement,
the ship will start going in some strange direction at a big speed, and
it'll be hard to stop it. It's your goal to make it better.
(If you don't like this spaceship, you can find some designs
here. You will miss a big part of challenge, though. Don't forget to
edit the configuration file.)
The format used to define spaceships and program them is explained below.
The file format of spaceship definition is as follows:
[list of pieces used]
Each piece is defined with a line, for example "e engine f" is used to define
an engine. The letter "e" is used to refer to this piece; it will appear in
the spaceship layout (the engine will be denoted by "e" here), and also in the
control script ("if 'forward' is pressed, turn on the 'e' and 'l'"). (Note that
a single defined piece can appear many times in the spaceship.) "engine"
tells what kind of component it is, using the names from above (or actually
from the "lne.lec" file). The letter "f" tells what direction will the
engine/laser/eye be facing. Possible values are "f" (front), "b" (back),
"u" (up), "d" (down), "l" (left), "r" (right). If direction is not given,
"f" is assumed.
The layout tells what pieces are placed where. The ship is three-dimensional,
so you have to draw all layers of your spaceship, from bottom to top. If you
don't get the idea, see the screenshot above and compare it with the layout
from example.les (the screenshot is rotated in quite a strange way, sorry).
See the example.lua file for the example spaceship control script.
The comments in this file should make the program clear. In general,
the following game-related functions and instructions are available:
turnon(component) Turns component on.
turnoff(component) Turns component off.
measure(parameter to measure) Uses your measuring devices.
You can measure the following parameters: vx,vy,vz (velocity), mx,my,mz (rotation).
health(component) Returns current health of component (total if there are many of them).
maxhealth(component) Returns maximum health of component (total if there are many of them).
count(component) Returns the number of components active.
click(key) Checks whether the key is pressed.
shipname() Returns the ship's name.
All functions can accept multiple parameters, and they will return a result for
each parameter. E.g. health("a","b") will return two numbers: health of "a"
and health of "b".