DEFINING SHIP PARAMETERS USING VINKA'S SPACECRAFT2.DLL
Tutorial made by José Pablo Luna Sánchez. Version 0.8 beta. October 2005.
Feedback: jpluna@racsa.co.cr

Special thanks to Vinka, Martin Schweiger, Jorge "Hispaorbiter" Iglesias, Salvadortega, Furtim, Juan J. Luna, Juan Carlos Dovis, AndyMc for sharing their valuable knowledge, and having patience and answering my questions, which made this tutorial possible.
Special thanks to Glen Jackson for his valuable comments that helped to improve this tutorial.

Notice:
This tutorial is a beta.
Despite of the intensive research process, it is possible that there might be a few inaccuracies, because I am not an aeronautics engineer.
So if you can point them out for correction purposes, it would be appreciated.
However, it is mostly debugged and tested.
If you provide any feedback you will be included in the credits for the next version of this tutorial and you may choose to appear with your real name, or just your nick, or both.

You are authorized to use this tutorial for personal and non commercial purposes only.
You are not authorized to modify or repack the contents of this pack without written permission of the author.
However you may post and modify the contents of this tutorial for wiki purposes only, as long as credits are kept.


WHAT IS THIS TUTORIAL ABOUT

This tutorial will describe the most commonly used variables needed to configure a spacecraft using Vinka's Spacecraft2.dll.

SPACECRAFT2.DLL is an add on to Orbiter Space Flight Simulator that allows users to configure their own spacecraft using Notepad only, instead of programming C++ to make their meshes flyable.
It has some limitations in the sense that you can´t configure the internal systems of your ship, and it does't allow to configure a virtual cockpit.
But still it´s just great because it's very easy to use.
With this add on, your main concern should be to develop the skills and get the tools to make 3D meshes and texture them.

You may get SPACECRAFT2.DLL at http://users.swing.be/vinka/

You may get Anim8or at http://www.anim8or.com
You will need it if you are to obtain some coordinates from your mesh for thruster, landing and launch points placement.

Spacecraft performance parameters and properties are indicated in a .INI file that is placed at the Orbiter CONFIG/SPACECRAFT directory.
You may create or edit such INI files using Notepad.

The complex part of making your own spacecraft is to understand all the concepts involved in the design of your ship.
Fortunately, this tutorial will help you, even if you don't have a math or programming degree.

Here is an example of the contents of an .INI file.

[PARTICLESTREAM_1]
NAME=engine
SRCSIZE=0.2
SRCRATE=1600
V0=100.0
SRCSPREAD=0.05
LIFETIME=0.5
GROWTHRATE=5
ATMSLOWDOWN=3.0
LTYPE=EMISSIVE
LEVELMAP=LVL_SQRT
LMIN=0
LMAX=1
ATMSMAP=ATM_PLOG
AMIN=1e-5
AMAX=0.1

[CONFIG]
MESHNAME="Practice"
SIZE=25
EMPTY_MASS=10000
FUEL_MASS=20000
MAIN_THRUST=6e5
RETRO_THRUST=3e5
ATTITUDE_THRUST=6e5
ISP=50000
TRIM=0.05
PMI=(15.5,22.1,7.7)
CW_Z_POS=0.09
CW_Z_NEG=0.09
CW_X=2.
CW_Y=1.4
CROSS_SECTION=(53.0,186.9,25.9)
COG=2.47
PITCH_MOMENT_SCALE=0.00005
BANK_MOMENT_SCALE=0.00005
ROT_DRAG=(1.5,1.5,1.5)
WING_ASPECT=0.7
WING_EFFECTIVENESS=2.5
LAND_PT1=(0,-1.1,9)
LAND_PT2=(-4,-1.95,-5)
LAND_PT3=(4,-1.95,-5)
VISIBLE=1
CAMERA=(0,1.22,5.4)
MAIN_PSTREAM1=engine

[EX_MAIN_0]
OFF=(0,0,-2)
DIR=(0,0,-1)
LENGTH=0.001
WIDTH=0.001

Looks too complex?
We will learn it is not as complex as it seems.

This example doesn't take advantage of all the capabilities of spacecraft2.dll.
This example was selected precisely because it was short.
As you can see, you basically have a group of parameters or properties grouped in certain sections that appear between brackets.

This tutorial WILL NOT cover the AERODYNAMICS, PAYLOADS and the ANIMATIONS sections.
Let's focus on creating a simple flyable spacecraft.


TEXTURE LIST SECTION
[TEXTURE_LIST]

This section will declare the list of engine exhaust textures that will be used later.

Example:

[TEXTURE_LIST]
TEX_1=Exhaust_atrcs


TEX

The tex parameter specifies the name of the DDS texture placed at the TEXTURES directory you will use for the engine exhaust.
You may use a maximum of 16 textures for all spacecraft present in a scenario, defined by Vinka's Spacecraft2.dll.

Example

TEX_1=Exhaust_atrcs
TEX_2=Exhaust_atsme

It will load a texture called Exhaust_atrcs.dds

and a texture called Exhaust_atsme.dds

As you add more textures they should be declared as

TEX_3 = ...
TEX_4 = ...
etc.

Notice all these textures are squares and they are composed by slices containing different elements each.


PARTICLE STREAM SECTION
[PARTICLESTREAM]

Particle streams are basically... SMOKE and FIRE coming out from the engine exhaust.
You may use up to 13 particle streams.
They will range from PARTICLESTREAM_1 to PARTICLESTREAM_13.

Particles are emitted by the engine exhaust.
PARTICLESTREAM definition must be made at the beginning.
This definition will be used later when you define the MAIN_PSTREAM, HOOVER_PSTREAM, RETRO_PSTREAM or ATT_PSTREAM variables.

Example:

This is the particle definition.
As you may notice, the NAME parameter is an arbitrary name defined by you, that is used later.

[PARTICLESTREAM_1]
NAME=DGContrail
SRCSIZE=8.0
SRCRATE=3
V0=150.0
SRCSPREAD=0.3
LIFETIME=3.5
GROWTHRATE=4
ATMSLOWDOWN=3.0
LTYPE=DIFFUSE
LEVELMAP=LVL_PSQRT
LMIN=0
LMAX=2
ATMSMAP=ATM_PLOG
AMIN=1e-4
AMAX=1

[PARTICLESTREAM_2]
NAME=DGMain
SRCSIZE=2.0
SRCRATE=10
V0=150.0
SRCSPREAD=0.1
LIFETIME=0.2
GROWTHRATE=16
ATMSLOWDOWN=1.0
LTYPE=EMISSIVE
LEVELMAP=LVL_SQRT
LMIN=0
LMAX=1
ATMSMAP=ATM_PLOG
AMIN=1e-5
AMAX=0.1

This is where the particle streams are used

[CONFIG]
MESHNAME="dg\DeltaGlider"
SIZE=9.
CAMERA=(0,1.467,6.782)
EMPTY_MASS=12000
FUEL_MASS=10000
MAIN_THRUST=2.16e5
RETRO_THRUST=5.4e4
HOVER_THRUST=2.16e5
ATTITUDE_THRUST=5000
ISP=50000
TRIM=0.05
PMI=(15.5,22.1,7.7)
CW_Z_POS=0.09
CW_Z_NEG=0.09
CW_X=2.
CW_Y=1.4
CROSS_SECTION=(53.0,186.9,25.9)
COG=2.47
PITCH_MOMENT_SCALE=0.00005
BANK_MOMENT_SCALE=0.00005
ROT_DRAG=(0.10,0.13,0.04)
WING_ASPECT=0.7
WING_EFFECTIVENESS=2.5
ATT_TEX=Exhaust_atrcs
MAIN_PSTREAM1=DGContrail
MAIN_PSTREAM2=DGMain
HOOVER_PSTREAM1=DGContrail
HOOVER_PSTREAM2=DGHoover

Let's learn about the variables required to configure them.

The description of particle stream variables is based on the API manual made by Martin Schweiger.
The whole Spacecraft2.dll app is based on the concepts of the API manual that comes with Orbiter SDK.
If you want to go technical into programming stuff, you may like to read it.


SRCSIZE

Initial smoke particle size when it's being created (measured in meters)

Example

SRCSIZE=8.0


SRCRATE

Average particle generation rate (particles per second)

Example

SRCRATE=3


V0

Average particle emission velocity (measured in meters per second)

Example

V0=150.0


SRCSPREAD

Emission velocity distribution randomisation

Example

SRCSPREAD=0.3


LIFETIME

Average particle lifetime (measured in seconds)

Example

LIFETIME=3.5


GROWTHRATE

Particle growth rate (measured in meters per second)

Example

GROWTHRATE=4


ATMSLOWDOWN

Deceleration rate beta in atmosphere, defined by

v = v0 * e ^ (- beta * d * t)

Example

ATMSLOWDOWN=3.0


LTYPE

Lighting type.
Could be EMISSIVE or DIFFUSE.

Emissive particles are good for fire, for they are a source of light.
Diffuse particles are good for smoke, for they don´t have light by themselves.

You may define several particle streams.

Example

LTYPE=DIFFUSE


LEVELMAP

Mapping between level parameter and particle opacity.

Example

LEVELMAP=LVL_PSQRT


LMIN

Minimum level for alpha mapping.
The alpha channel contains a grayscale image of any object in an image.

Example

LMIN=0


LMAX

Maximum level for alpha mapping.

Example

LMAX=2


ATMSMAP

Maximum level for alpha mapping

Example

ATMSMAP=ATM_PLOG


AMIN

Minimum atmospheric mapping for alpha mapping

Example

AMIN=1e-4


AMAX

Maximum atmospheric mapping for alpha mapping

Example

AMAX=1


CONFIG SECTION
[CONFIG]

General ship definition parameters are used in this section.

Example:

[CONFIG]
MESHNAME="dg\DeltaGlider"
SIZE=9.
CAMERA=(0,1.467,6.782)
EMPTY_MASS=12000
FUEL_MASS=10000
MAIN_THRUST=2.16e5
RETRO_THRUST=5.4e4
HOVER_THRUST=2.16e5
ATTITUDE_THRUST=5000
ISP=50000
TRIM=0.05
PMI=(15.5,22.1,7.7)
CW_Z_POS=0.09
CW_Z_NEG=0.09
CW_X=2.
CW_Y=1.4
CROSS_SECTION=(53.0,186.9,25.9)
COG=2.47
PITCH_MOMENT_SCALE=0.00005
BANK_MOMENT_SCALE=0.00005
ROT_DRAG=(0.10,0.13,0.04)
WING_ASPECT=0.7
WING_EFFECTIVENESS=2.5
ATT_TEX=Exhaust_atrcs
MAIN_PSTREAM1=DGContrail
MAIN_PSTREAM2=DGMain
HOVER_PSTREAM1=DGContrail
HOVER_PSTREAM2=DGHover


MESHNAME

It's the name of a .MSH file that is placed in the Orbiter MESHES directory.
A mesh contains the data of the ship 3D model that is displayed on screen.

Syntax
MESHNAME= <filename>

Example:
MESHNAME="K-Gripen"

It refers to a file called K-Gripen.msh
This file, once displayed on screen, looks like this...

You may need to model a mesh using an 3D modeller that allows you to do some 3D modelling and texturing.


SIZE

It is the radius of a sphere that contains the mesh.

Syntax

SIZE=<Radius in meters>

Example:

SIZE=8

Radius of the sphere is 8 meters. Diameter is 16 meters. So craft length is 16 meters.


EMPTY_MASS

It's the mass of the ship, but without any fuel or payload or ordnance, measured in kilograms.
Some specs are presented in pounds, so conversion to kilograms is necessary.
Usually such specs already include the weight of filled internal fuel tanks.

To give you an idea about mass, the container carried by a truck may carry up to 26,000Kg of cargo and the total weight (including platform an wheels) could reach 30,000Kg.
A Space Shuttle has a mass of 90,718kg when landing, the External Tank (ET) has a mass of 29,938Kg when empty, and each Solid Rocket Booster (SRB) has a mass of 589,680Kg.
An A-10 Thunderbolt has an empty mass of 9183Kg.

Kilograms (Kg) is the standard measure used to measure mass, and Newtons (N) is the standard measure for forces.
However, you may be able to find airplane specs using other non standard units, like lb (mass), hp-lb (force), lbf (force), ton force (force) and Kgf (force).

Kg = lb /2.2

Kgf (kilogram force) = g * 1 kg = 9.80665 N

lbf (pound force) = g * 1 lb = 4.4482216152605 N

ton force = g * 1 sh tn = 8.896443230521 N

where g = 9.80665 m / s ^ 2

As you may notice, some plane specifications describe weight using mass units, so you say that a certain plane has a weight measured in lb or Kg.
Kg and lb are not units of weight, but mass, but since aircraft are not subjet to gravitational variations as spacecraft may be, and since every measure takes place on Earth, you should understand weight as the force of gravitational atraction for the mass described in Kg or lb, when you read plane specifications.

Here you have the empty "weight" (mass) of several airplanes measured in lb.

B-17E: 31,150 lb
B-29C: 135,000 lb
B-52: 480,000 lb
F-105D: 27,500 lb
F-4E: 28,000 lb
F-86E: 10,555 lb
FW-190: 7,055 lb
L-5: 2,158 lb
ME-109: 4,330 lb
ME-110: 4,330 lb
ME-163: 4,191 lb
ME-262: 8,820 lb
MIG-15: 8,820 lb
MIG-17: 9,040 lb
MIG-21: 11,464 lb
P-47: 19,400 lb
P-51D: 7,125 lb
YAK-9: 7,055 lb

Syntax

EMPTY_MASS=<mass>

Example:

EMPTY_MASS=10000

The mass of this ship is 10,000kg.
This could be the mass of a modern jet fighter with no fuel.


FUEL_MASS

It's the mass of the fuel contained in the internal fuel tanks, measured in kilograms.
The external tank of a space shuttle has a mass of 29,938Kg when empty, and a total mass of 760,234 when it's full of fuel. How much fuel mass does it have?
Time to use your calculator...

Notice that such fuel will barely be enough to achieve a Low Earth Orbit when heading east.

AIRCRAFT FUEL MASS

An A-10 Thunderbolt carries 4835Kg of fuel.

Weight is a force, it is measured in Newtons.
Objects near Earth seal level will have the following weight

Weight = 9.8 * Mass

For an aircraft we may calculate fuel as

Fuel weight = Max weight - Payload capacity - Empty weight

Maximum weight is the maximum possible weight an aircraft can have so it can take off using a runway with a certain length and having a certain engine power.

SPACECRAFT FUEL MASS

For spacecraft things could be a bit more complex.
We need to estimate how much fuel we need for a space trip.

Usually, if your craft will fly from Earth surface to orbit only, it would need fuel to be about 90% of it's total weight upon take off.
If your craft is to be designed for interplanetary travel you will need fuel for the various stages of your flight:

Notice that if you use realistic fuel limited settings, your craft will lose mass as fuel is consumed, so more fuel will be required at the beginning and less wil be required at the end of your mission.
If your fuel limited settings are unrealistic, weight will remain the same, but also fuel is not consumed, so you´ll need not to have an empty tank to make it flyable.

CALCULATING FUEL FOR SURFACE TO ORBIT

You may use the following formula:

Fuel mass = 0.9 * Total mass

Notice that total mass is the mass upon take off.

CALCULATING FUEL FOR EJECTION BURN

To escape gravity of a certain planet you will need to accelerate from your current velocity (Vel in the Orbit MFD) to reach escape velocity.
You may find escape velocity data for each planet in the Orbiter.pdf manual, page 108.
The difference between those is called as "Delta V" or "dV".

dV = Escape velocity - Current Velocity

Such dV can be obtained from Interplanetary MFD (also known as IMFD) by Jarmonik, or TransX MFD that comes with the standard Orbiter.

To calculate the fuel required for escaping gravity, you will use the following formula.

Fuel mass = dV * Total mass / Thrust * Is * 9.8

Notice that "total mass" for escaping is not the initial mass upon take off, but the total mass before the ejection burn.
In this formula you have 2 missing values:

CALCULATING FUEL FOR THE REST OF THE TRIP

As an approximate, you may think that the amount of fuel required for orbit ejection is about the same as the required to achieve an orbit around your destination planet. Of course, it is just a gross estimate.
Such orbit insertion at the destination planet will also imply a certain dV and some fuel consumption.
But as you get closer to the destination planet, your craft will increase its velocity.
So what should be the "current velocity" we should use to calculate dV?

We have a point where we start the retrograde burn, which is located near the periapsis (lowest point in the orbit) of your parabolic/hyperbolic orbit.
So we could think that the velocity at the periapsis, given your current parabolic/hyperbolic orbit, should be the "current velocity".
Your current velocity before orbit insertion usually should be higher than the escape velocity.
To achieve an orbit around the planet, you'd need to get below escape velocity to get into orbit, so you need to brake using a retrograde burn.
Now you can make a gross estimate of dV for orbit insertion.

To land on a planet you will have a dV will be equal to Vel (which can be found at the Orbit MFD) because you want to bring your craft to a zero velocity.
Notice that Vel and ground velocity are not the same, due to planet rotation, but it is a rough estimate to calculate fuel consumption.

Fuel mass = Vel * Total mass / Retro thrust * Is * 9.8 + spare fuel

You have Retro thrust as a missing variable, so see RETRO_THRUST variable.

Notice that total mass is the initial mass before deorbiting and it doesn't consider the amount of fuel required to reduce vertical speed.
So you may like to add spare fuel since you may like to use your hover engines and have some fuel in case you need it for some extra maneuvering.

Of course, if your orbiter is a glider and you are about to land on Earth, you may not need too much fuel, because you may use drag instead of retro thrusters to brake and land.

ONE WORD OF ADVISE

Since "total mass" is diferent at every stage of the trip, it would be better if you calculate the required fuel for the latest stages of your trip first, and then the earlier stages of your trip.
Why?
Because the fuel mass used for later stages is part of the total mass at the beginning of earlier stages.

Notice that these formulas used to calculate fuel mass for interplanetary travel are just gross estimates so you can have an idea of how much fuel you may need.

Syntax

FUEL_MASS=<mass>

Example:

FUEL_MASS=20000

This craft has 20000kg of fuel in the internal fuel tanks.


MAIN_THRUST

There are several forces acting on a flying craft:

1.Thrust
2.Drag
3.Lift
4.Weight

Main Thrust indicates how much power the main engine has.
The following picture shows the main thruster of a space shuttle performing a burn.

A good way to think of how much thrust you should add is to think about the thrust/weight ratio.
Thrust/weight ratio would be important to determine if a craft can fly vertical and continue climbing or not.

If thrust/weight ratio <1 it means that the engine can't sustain a continued climb on earth.
It means that weight is higher than thrust, so you can't lift this object from Earth surface using this engine.

An A-10 Thunderbolt has a thrust/weight ratio of 0.6 so if you are wise, you shouldn't go in a steep climb with that plane.

Obviously, a rocket that goes upward must have thrust/weight ratio higher than 1, for it wouldn't take off otherwise.

The mass is expressed in Kg (kilogram) and the force is expressed in N (Newton).
Weight is the attractive force of Earth on the mass.

You can calculate weight at the surface of the Earth as follows:

Weight = 9.81 * Mass

So if you want to calculate thrust you could do it as follows:

Thrust = Thrust-weight-ratio * Mass * 9.81

In the case of A-10, it flies due to aerodynamic properties, airspeed causes a difference of pressure on the wings, that causes lift and that keeps it flying.
If A-10 had a hover thrust with a thrust/weight ratio of 0.6, it wouldn't be able to make a vertical take off.

Also you can calculate thrust using powerplant data from aircraft specifications.

B-17E: 1200*4 hp-lb
B-29C: 2200*4 hp-lb
B-52: 13750*8 hp-lb
F-105D: 17200 hp-lb
F-4E: 17900*2 hp-lb
F-86E: 5200 hp-lb
FW-190: 1700 hp-lb
L-5: 190 hp-lb
ME-109: 1300 hp-lb
ME-110: 1100 hp-lb
ME-163: 3748 hp-lb
ME-262: 1980*2 hp-lb
MIG-15: 5005 hp-lb
MIG-17: 5952 hp-lb
MIG-21: 11240 hp-lb
P-47: 2300 hp-lb
P-51D: 1590 hp-lb
YAK-9: 1360 hp-lb

The hp unit is usually referred to "horse power" (the weight or pull of a horse used to power a piece of machinery) and is used to describe the power of internal combustion engines.
Such unit was first used by James Watt who used steam engines to replace horses.

1 hp = 745.69987158227022 W
1 W = 1 N m / s

where W (Watt) is a unit of power.

Syntax

MAIN_THRUST=<Thrust force>

Example

MAIN_THRUST=2.7e5

It means it has 2.7 * 10^5 N or 270000 N of thrust.
If the ship has a mass of 30000kg (craft and fuel), then thrust mass ratio would be:
Thrust/weight ratio = 270000N / [ 30000kg x 9.81 ] = 0.917

As you can see, this craft can't go vertical. It seems to be an airplane, not really a spacecraft that could take off from Earth to go to space.
It is quite underpowered to go from Earth to space.

N stand for Newtons which is:
1 Newton = 1 Kg x m /sec^2

A space shuttle may have a thrust of 53,400 N.


RETRO_THRUST

Retro thrust indicates how much power the retro thrusters have.
Retrothrusters fire backwards, precisely in the opposite direction of the main thrusters.
It's mostly used for braking in space, so it is not expected to have too much power, for space maneuvers don't require so much power if you plan to make delicate maneuvers.

Syntax

RETRO_THRUST=<Thrust force>

Example

RETRO_THRUST=5.4e4

It means it has 5.4 *10^4 N or 54,000 N of retrothrust.
This is the retrothrust of a Delta Glider.
Main thrust for Delta Glider is 2.16 * 10^5 N or 216,000 N.

An airplane or a rocket should have no retrothrust.


HOVER_THRUST

It indicates how much power the hover engine has.
Thrust/weight ratio applies here, because hover thrust keeps the ship flying.
Logic says that VTOL (Vertical Take Off and Landing) craft, should require a thrust/weight ratio higher than 1.

Syntax

HOVER_THRUST=<Thrust force>

Example

HOVER_THRUST=2.16e5

It means it has 2.16 *10^5 N or 216,000 N of retrothrust.
This is the hover thrust value for a Delta Glider.


ATTITUDE_THRUST

It indicates how much power the attitude engines have.

Attitude thrusters control your ship's orientation.
They will rotate your ship around all 3 axes.
Those are needed in space and therefore they should not be very powerful as other engines, but still powerful enough to move your craft.

Orbiter considers ships as a mass placed at a certain point in space, not like a volumetric shape.
The thrust specified should be the equivalent to the force placed at 1 meter from such point.

If you have a thruster (T1), located at a different distance (D1), the equivalent thrust T at 1 meter from the point where the ship is located, would be

T = T1 * D1

Syntax

ATTITUDE_THRUST=<Thrust force>

Example

ATTITUDE_THRUST=7740

It means it has 7740 N of attitude thrust.
That's the thrust for a space shuttle.

A Delta Glider may have an attitude thrust of 5000 N.

If your thruster is located at 20 meters from the center of mass of your ship and it has a force of 350N, using the formula the equivalent ATTITUDE_THRUST would be:

T = 20 * 350 = 7000 N m

So you'd have

ATTITUDE_THRUST=7000


ISP

It is some sort of measure of fuel consumption. It measures the flow of gas coming out from the craft exhaust.
It is not really fuel specific impulse (Is), but the flow of gasses (Vg) that come out from the exhaust.

Vg = Is * 9.8
ISP = Vg

If you want to estimate what a ship can do, you have the following formula:

1/2 (Vg * ln( m0 / mt )) ^2 = 1/2 v^2 + G * M / R

Where:

Vg: Flow of gasses coming out from engine exhaust.
m0: Mass of the rocket/ship (without fuel)
mt: Total mass (Fuel + rocket) which can be considered as initial

v: Velocity required to achieve a certain orbit.
R: Radius of orbit measured from the center of the planet/moon
G: This is a constant value (6.67e-11)
M: Mass of the planet/moon

Notice that due to Is, for rockets we usually have:

m0 = 0.1 * mt

One of the highest Is is the H2 and O2 which is 363 which gives about Vg = 363 * 9.8 = 3557.4 m/sec (which looks like the numbers that appear in Orbiter).
Ion engines have higher ISP but their thrust don't provide enough power to go from Earth to space. It's mostly for use in outer space.

In Orbiter this is just a number, you might put any number you want.

Here some Is values for different types of fuel mixtures:

Nafta / liquid O2 (at 3000ºC, mixture proportion 0.4, combustion pressure 24kg/cm2) : 242
Nafta / liquid O2 (at 3200ºC, mixture proportion 0.4, combustion pressure 24kg/cm2): 261
Nafta / liquid O2 (at 3300ºC, mixture proportion 0.4, combustion pressure 40kg/cm2): 279
JP4 / liquid O2 (at 3300ºC, mixture proportion 0.45, combustion pressure 40kg/cm2): 255
Methylic alcohol and liquid O2 (at 2800ºC, mixture proportion 0.80, combustion pressure 24kg/cm2): 238
Methylic alcohol and gas O2 (at 2900ºC, mixture proportion 0.83, combustion pressure 24kg/cm2): 248
Liquid H2 and O2 (at 2500ºC, mixture proportion 0.28, combustion pressure 40kg/cm2): 363
JP4 and nitric acid (at 2800ºC, mixture proportion 0.24, combustion pressure 40kg/cm2): 238

JP4 is a special fuel for jets.

Specific impulse is the thrust given by each kilogram of burned gas per second.

Specific impulse (Is) = Thrust / Total gas flow

Aircraft that accelerate air by using air intakes, behave like a craft with a big ISP (fuel will last longer), so for aircraft you calculate ISP as follows:

ISP = Thrust at cruise speed * Max flight time / Fuel mass

Max flight time = Range / Cruise speed

Here you have the range for several aircraft

B-17E: 1100 miles
B-29C: 3250 miles
B-52: 9000 miles
F-105D: 800 miles
F-4E: 786 miles
F-86E: 925 miles
FW-190: 497 miles
ME-109: 350 miles
ME-110: 559 miles
ME-163: 50 miles
ME-262: 652 miles
MIG-15: 1115 miles
MIG-17: 870 miles
MIG-21: 683 miles
P-47: 590 miles
P-51D: 950+ miles
YAK-9: 875 miles

where 1 mile = 1609.344 m
It is possible also that you may find a measure in terms of nautical miles (nm).

1nm = 1852 m

Syntax

ISP= <Flow of gas>

Example

ISP=12500

This ship spend 12500 Kg/sec of fuel.


TRIM

Trim factor will set the magnitude of the trim angle of attack.
If trim is zero, there is no angle of attack.

It is not engine trimming but control surface trimming.
Its value ranges from -1 to 1.

Syntax

Trim = <Trim value>

Example

TRIM=0.05


PMI

Principal moment of inertia describes some sort of resistance to rotational movement.
F
or a very small mass is calculated in the following way:

PMI = Mass * Distance between mass center and axis of rotation^2

Since making the calculations for a complex shape is a bit hard, we better use some tools to calculate it.
It can be calculated using ShipEdit, an application that comes with the Orbiter SDK that can be downloaded from the Orbiter website, and it is located at the Orbitersdk\utils directory.
To calculate baricenter, just load the mesh you will use, and do the calculations, using either MC integration or grid integration.

ShipEdit is a useful tool that will give you the following information:

By making an MC integration, or a grid integration, you may get the PMI values.

In the previous example, you have the output from ShipEdit which gives some PMI values.

9.96 -0.01 -0.03 (X axis moment of inertia)
-0.01 9.62 0.035 (Y axis moment of inertia)
-0.03 0.35 1.72 (Z axis moment of inertia)

The PMI values for orbiter will be the figures shown with bold letters.
You have different PMI values because the resistence to rotation is not the same in the 3 axes.

Syntax

PMI=(<X axis PMI>,<Y axis PMI>,<Z axis PMI>)

Example

PMI=(9.96,9.62,1.72)

This is the PMI for a custom vessel.
For F-18 plane, you may have a PMI of (15.5,22.1,7.7).
A space shuttle may have a PMI of (78.2,82.1,10.7)


CROSS_SECTION

A cross section of a solid is a plane figure obtained by the intersection of that solid with a plane.
The cross section of an object therefore represents an infinitesimal "slice" of a solid, and may be different depending on the orientation of the slicing plane.

The cross section in Orbiter is the area of such surface, measured in square meters.

Notice that depending on where you slice the object, or depending on the direction of the cut, cross section may look different.
So when you calculate the cross section area, you must use a shape that should look like a "shadow" of that ship.
As you see, in this case, the cross section is the area of the shadow of your craft.

The 3 values describe the area of each cross section through the XY, YZ and XZ planes. (The XY plane is the plane opened by X and Y axis).
You must specify the cross section area for X, Y and Z axes in square meters.

Tip:
To calculate the area, you may use ShipEdit.Exe that comes with OrbiterSDK.
Just load the mesh and run integration process.
You may also get PMI data from the Inertia Tensor after running the integration.

Syntax

CROSS_SECTION=(<X>,<Y>,<Z>)

Example

CROSS_SECTION=(53.0,186.9,25.9)

These are cross section values for a Delta Glider.
For a space shuttle you may have (234.8, 389.1, 68.2)


CW_Z_POS

Drag coefficient when the craft is moving forward.
Drag coefficient is an aerodynamical resistance coefficient, that depend on how air will flow along the axis of each coefficient.

In the following picture air flow lines are shown.
As you see, the air is not flowing smoothly and some turbulence appears.
Turbulence creates drag, because vacuum is created.
The turbulence is produced by the fact that vacuum is produced behind the ship.
Vacuum will suck air and it will cause non smooth air flow, so the drag coefficient is bigger.
A bigger cross section is likely to produce drag , but also air flow problems causes drag because air is not flowing smoothly.
That causes drag.

If you have a drag coefficient higher than 0, you have basically an object trying to move, which will face some resistance to movement due to the action of atmosphere.
If you have a drag coefficient of 0, you have a thin knife that makes a cut in the air (no resistance).
If coefficient is higher than 1, then you have a VERY high drag.

Drag coefficient when craft is moving forward should be the lower of all drag coefficients, since it's the direction in which the craft will move.

Each object will have a cross section in each axis.
Equal cross sections may result in different drag coefficients, because cross section is not the only factor responsible for drag.
For example, an ellipsoid should have lower drag than a sphere, but both would have the same cross section.

Drag is the force that poses resistance to movement, and it will indicate aerodynamic efficiency.
Drag is calculated by Orbiter, but here you have the formulas anyway.

Drag = 0.5 * drag coefficient * atmosphere density * cross section area * velocity ^ 2

Atmosphere density = 1.3 * e ^ (-G * Alt * Wm / (8320 * T))

Where

e: constant called "e"
Alt: Altitude (meters)
G: constant. For Earth, G = 9.86 m/s^2
Wm: Average molecular weight of atmosphere. Wm=29 (similar to N2 which represents 78% of air)
T: Temperature of air (Kelvin).

At sea level, atmosphere density = 1.3Kg/m^3

Drag coefficient could be calculated as:

Drag coefficient = 2 * Main Thrust / (atmospheric density * cross section area * max speed ^ 2)

Drag coefficient changes at supersonic speeds, due to compression of air, but it has nothing to do with the .INI file.
You could make a wild guess regarding this coefficient by comparing similar ships to yours, either by interpolating or extrapolating figures.
The most accurate way to measure drag coefficients in using an wind tunnel designed for such a specific purpose, but most of us won't have one at our disposal.

Here you have the maximum speed for several aircraft.

B-17E: 317 mph
B-29C: 357 mph
B-52: 665 mph
F-105D: 1226 mph
F-4E: 1386 mph
F-86E: 679 mph
FW-190: 408 mph
L-5: 129 mph
ME-109: 390 mph
ME-110: 349 mph
ME-163: 596 mph
ME-262: 540 mph
MIG-15: 668 mph
MIG-17: 711 mph
MIG-21: 1285 mph
P-47: 428 mph
P-51D: 437 mph
YAK-9: 368 mph

where 1 mph = 0.44704 m/s

Syntax

CW_Z_POS=<Drag coefficient>

Example

CW_Z_POS=0.09


CW_Z_NEG

Drag coefficient when the craft is moving backwards.

Syntax

CW_Z_NEG=<Drag coefficient>

Example

CW_Z_NEG=0.09


CW_X

Drag coefficient is the aerodynamical resistance coefficient when the craft is moving along X axis (lateral motion).
For a normal airplane, CW_Y would always have the highest value of all drag coefficients.

Syntax

CW_X=<Drag coefficient>

Example

CW_X=2.0

This is the X drag for a Delta Glider.


CW_Y

Drag coefficient is the aerodynamical resistance coefficient when the craft is moving along Y axis (vertical motion).
A cylindrical rocket should have CW_X = CW_Y and they both would be higher than CW_Z POS.

Syntax

CW_Y=<Drag coefficient>

Example

CW_Y=1.4

This is the Y drag for a Delta Glider.
A space shuttle would have a Y drag of 1.5.


COG

It's the "center of gravity" above the ground.
It raises your craft to prevent that your craft looks like it's sunk in the ground when your craft has a mesh with points below 0 level in the Y axis.


Syntax

COG=<Minimum altitude in meters>

Example

COG=2.47


PITCH_MOMENT_SCALE

It's some sort of resistance to pitch changes.
When your craft has an Angle of Attack (AoA), it means that your ship longitudinal axis is not aligned with your airspeed velocity vector (the direction in which your ship is moving).
The ship will try to align both, so there will be a moment acting to rotate your ship, your longitudinal axis towards the velocity vector.
It is known as pitch moment scale.

Example

PITCH_MOMENT_SCALE=0.00005

This is the pitch moment scale for a Delta Glider or an F/A-18 Hornet

PITCH_MOMENT_SCALE=0.00001

This is the pitch moment scale for a space shuttle.


BANK_MOMENT_SCALE

When your craft has an Angle of Attack (AoA), there will be also a moment acting on bank when ship is moving towards the airspeed vector.

Example

BANK_MOMENT_SCALE=0.00005

This is the bank moment scale for a Delta Glider, or an F/A-18 Hornet

BANK_MOMENT_SCALE=0.00002

This is the bank moment scale for a space shuttle.


ROT_DRAG

It's the vessel resistance to rotation around all 3 axes when flying in atmosphere.
It will cause an angular deceleration due to atmospheric friction.
Basically it will be the resistance force that will stop pitch, yaw and bank maneuvers.

Syntax

ROT_DRAG=(<X>,<Y>,<Z>)

Example

ROT_DRAG=(0.10,0.13,0.04)


MAIN_PSTREAM

It will use particle streams defined at the PARTICLESTREAM section to display the main engine smoke and/or fire.

Syntax

MAIN_PSTREAM<n>=<Particle Stream Name>

<Particle stream name> must previously defined at the PARTICLESTREAM section

Example

MAIN_PSTREAM1=DGContrail
MAIN_PSTREAM2=DGMain


HOVER_PSTREAM

It will use particle streams defined at the PARTICLESTREAM section to display the hover engine smoke and/or fire.

Syntax

HOVER_PSTREAM<n>=<Particle Stream Name>

<Particle stream name> must previously defined at the PARTICLESTREAM section

Example

HOVER_PSTREAM1=DGContrail
HOVER_PSTREAM2=DGHover


ATT_PSTREAM

It will use particle streams defined at the PARTICLESTREAM section to display the attitude engines smoke and/or fire.

Syntax

ATT_PSTREAM<n>=<Particle Stream Name>

<Particle stream name> must previously defined at the PARTICLESTREAM section

Example

ATT_PSTREAM1=DGContrail
ATT_PSTREAM2=DGAtt


MAIN_TEX

It will define what texture will be used for attitude exhaust flames.
The texture should be previously defined at the TEXTURELIST section.

Example

ATT_TEX=Exhaust_atsme

It will use a texture called Exhaust_atsme.dds to display the main thruster flames.


HOVER_TEX

It will define what texture will be used for hover engine exhaust flames.
The texture should be previously defined at the TEXTURELIST section.

Example

HOVER_TEX=Exhaust_atsrb

It will use a texture called Exhaust_atsrb.dds to display the attitude thruster flames.


ATT_TEX

It will define what texture will be used for attitude engine exhaust flames.
The texture should be previously defined at the TEXTURELIST section.

Example

ATT_TEX=Exhaust_atrcs

It will use a texture called Exhaust_atrcs.dds to display the attitude thruster flames.


LAND_PT

Landing points are the points where the craft will be in contact with the ground once it lands.
You may think of it as the points where the landing gear are in contact with the ground.

To obtain the coordinates of landing points you may use Anim8or.
Your ship should be properly oriented, sized and located so you can get the coordinates.
Refer to the "Engine exhaust sections" to see exactly how to orientate, resize and locate a mesh.

Once ship is properly oriented, sized and placed, press the buttons highlighted in RED in the following diagram and double click on a point that is as close as possible to the location of your landing point.

The axes used by Anim8or are different than the axes used by Orbiter.

Orbiter X = Anim8or X
Orbiter Y = -Anim8or Z
Orbiter Z = Anim8or Y

So in the example shown above, Anim8or coordinates are (121.56, 41.9337, -65.179) and Orbiter coordinates should be (121.56, 65.179, 41.9337).

Syntax

LAND_PT<n> =(<x>,<y>,<z>)

Example

LAND_PT1=(-4.5,0,6.2)
LAND_PT2=(4.5,0,6.2)
LAND_PT3=(0,4.5,6.2)
LAND_PT4=(0,-4.5,6.2)

These would be the coordinates of the 4 legs of a lander, similar to the rocket of Tintin, or an Eagle from Space 1999.


LAUNCH_PT

Launch points are the points where the mesh is in contact with the ground before taking off.
Launch points may be the same of landing points for some space modules, but in some cases, landing and launch points could be different.
For example, if you have a craft that is vertical upon launch and it's horizontal when it lands on a runway, launch and landing points would be different.

Syntax

LAUNCH_PT<n> =(<x>,<y>,<z>)

Example

LAUNCH_PT1=(-4.5,0,6.2)
LAUNCH_PT2=(4.5,0,6.2)
LAUNCH_PT3=(0,4.5,6.2)
LAUNCH_PT4=(0,-4.5,6.2)

These would be the coordinates of the 4 legs of a lander. These are the support points during take off.


CAMERA

It's the position of the camera when in cockpit view.
When you make a mesh, if you modelled it in detail so cockpit details can be seen, you may like to put your camera there.
So you define the mesh coordinates where the camera should be.

Syntax

CAMERA=(<X>,<Y>,<Z>)

Example

CAMERA=(0,1.467,6.782)


VISIBLE

It will specify if the internals of the mesh should be displayed in cockpit view.

Example:

CAMERA=1


DOCKING PORT SECTIONS
[DOCK]

In these sections you will define the docking ports of your craft.
You may have up to 16 docking ports, from [DOCK_0] to [DOCK_15].

Example:

[DOCK_0]
POS=(0,-0.49,9.84)
DIR=(0,0,1)
ROT=(0,1,0)


POS

Indicates where the center of the docking port is located in the mesh, in X, Y and Z axis.

To obtain the coordinates of a docking port you may use Anim8or.
Just press the buttons highlighted in RED in the following diagram and double click on a point that is as close as possible to the location of your docking port.

The axes used by Anim8or are different than the axes used by Orbiter.

Orbiter X = Anim8or X
Orbiter Y = -Anim8or Z
Orbiter Z = Anim8or Y

So in the example shown above, Anim8or coordinates are (-2.9111, 29.104, 0.400) and Orbiter coordinates should be (-2.9111, -0.400, 29.104)

Example:

POS=(0,0,9.84)

The docking port is located along the Z axis, 9.84 meters from the origin.


DIR

Indicates a direction that is normal to the docking port.
It indicated the side of the dock where you can dock.

Example:

DIR=(0,0,1)

When you try to dock with this port, you must approach from the +Z direction in this case.
If this docking port belongs to a craft, this port should be in front of the craft.
If you had to approach from -Z, the port should be placed in the back of the craft.


ROT

Indicates where is the "this side up" of the docking port.
You must align ports with both sides up pointing at the same direction to have an effective dock.
You may notice that as you approach to dock there is a double line in each one of the docking gates that indicates what side is "up".

Example:

ROT=(0,1,0)

In this case, the "this side up" vector is pointing to +Y, it tells you where the green arrow in the diagram is pointing.
Notice that DIR and ROT will always be perpendicular to each other.
ROT vector must not be aligned with DIR vector.


EXHAUST SECTIONS

These sections contain information about the location and orientation of the engine exhaust flames of your craft.
This information will be used to draw the exhaust smoke and flames of your vessel.
Notice that it is just for graphical purposes, not for calculation purposes.

To obtain the coordinates of the exhaust port of a mesh you have created, you may use Anim8or.

Anim8or is a freeware that can be found at www.anim8or.com.
It allows to import and export from and to 3DS files.

First, you must rotate your craft (Edit > Rotate) so it looks like this when using LEFT view (View > Left).

As you may notice, ship nose is up, and the top of the ship is to the right.

Then you must give your ship the proper size.
To do that, you may use Edit > Scale.

You may want to set grid to 1 meter using Options > Grid and then set a fixed spacing to 1 meter, so you can have an idea of dimensions during the resizing process.

Then you should locate your ship using Edit > Locate.

Once ship is properly oriented, sized and placed, press the buttons highlighted in RED in the following diagram and double click on a point that is as close as possible to the location of your exhaust.

The axes used by Anim8or are different than the axes used by Orbiter.

Orbiter X = Anim8or X
Orbiter Y = -Anim8or Z
Orbiter Z = Anim8or Y

So in the example shown above, Anim8or coordinates are (-2.9111, 29.104, 0.400) and Orbiter coordinates should be (-2.9111, -0.400, 29.104)

Orbiter Axes go as follows.

Exhaust sections use the following parameters:

Example:

We have this craft.

This is the area in detail.

We want to configure the forward attitude thruster, using Orbiter coordinates system..

Since it is an attitude thruster, and it's the first one we define (thruster number 0), we have

[EX_ATT_0]

The coordinates of such thruster are 10.8 meters to the front, 9.2 meters to the left from the origin.

OFF=(-9.228,0,10.838)

Since the attitude thruster is pointing forward (+Z axis), we have

DIR=(0,0,1)

The width of the flame will be 20 cm.

WIDTH=0.2

The flame will be 60 cm long.

LENGTH=0.6

This thruster would make the ship to spin around the Y axis, with no drag in Y axis in atmospheric flight.

ROT_AXIS=Y
ROT_CW=0

This thruster will have a flame aligned with Z axis and there might be drag in the Z axis.

LIN_AXIS=Z
LIN_CW=1

Notice that HOVER, RETRO and MAIN thrusters don´t use the ROT_AXIS, ROT_CW, LIN_AXIS and LIN_CW parameters.

We have several types of sections for each thruster.
EX_MAIN for main engines, EX_RETRO for retro rockets, EX_HOVER for hover engines, and EX_ATT for attitude thrusters.
Notice that such sections will configure the placement where exhaust flame textures will be displayed.
But it won´t reflect the actual placement of the thrusters, because for calculation purposes the ship is considered as a point with a mass in space and engines are just forces acting on that point.


EX_MAIN SECTIONS

It will configure main thruster texture placement.
You may have up to 16 thrusters (EX_MAIN_0 to EX_MAIN_15)

Example:

[EX_MAIN_0]
OFF=(-1,0,-7.7)
DIR=(0,0,-1)
LENGTH=12
WIDTH=1

[EX_MAIN_1]
OFF=(1,0,-7.7)
DIR=(0,0,-1)
LENGTH=12
WIDTH=1


EX_RETRO SECTIONS

It will configure retro rocket texture placement.
You may have up to 16 thrusters (EX_RETRO_0 to EX_RETRO_15)

Example:

[EX_RETRO_0]
OFF=(-3,-0.236,5.6)
DIR=(0,0.042,1)
LENGTH=3
WIDTH=0.4

[EX_RETRO_1]
OFF=(3,-0.236,5.6)
DIR=(0,0.042,1)
LENGTH=3
WIDTH=0.4


EX_HOVER SECTIONS

It will configure hover thruster texture placement.
You may have up to 16 thrusters (EX_HOVER_0 to EX_HOVER_15)

Example:

[EX_HOVER_0]
OFF=(0,-1.6,3)
DIR=(0,-1,0)
LENGTH=6
WIDTH=0.5

[EX_HOVER_1]
OFF=(-3,-1.3,-4.55)
DIR=(0,-1,0)
LENGTH=6
WIDTH=0.5

[EX_HOVER_2]
OFF=(3,-1.3,-4.55)
DIR=(0,-1,0)
LENGTH=6
WIDTH=0.5


EX_ATT SECTIONS

It will configure attitude thruster texture placement.
You may have up to 16 thrusters (EX_ATT_0 to EX_ATT_15)

Example:

[EX_ATT_0]
OFF=(-0.8,-0.25,9.6)
DIR=(0,1,0)
LENGTH=0.6
WIDTH=0.078
ROT_AXIS=X
ROT_CW=1
LIN_AXIS=Y
LIN_CW=1

[EX_ATT_1]
OFF=(0.8,-0.25,9.6)
DIR=(0,1,0)
LENGTH=0.6
WIDTH=0.078
ROT_AXIS=X
ROT_CW=1
LIN_AXIS=Y
LIN_CW=1

[EX_ATT_2]
OFF=(-0.75,-0.7,9.65)
DIR=(0,-1,0)
LENGTH=0.6
WIDTH=0.078
ROT_AXIS=X
ROT_CW=0
LIN_AXIS=Y
LIN_CW=0