EL Manual
EL Manual
EL Manual
1
Introduction
Building bases and space stations in Kerbal Space Program can be fun and rewarding
on its own: they look good and allow for the production or storage of fuel and science,
but they amount to little more than outposts. One main problem with such outposts
is that when things go wrong and repairs are needed, they are highly dependent on
resupply runs from the KSC1 . A bigger problem is they serve only as way stations for
grand missions: it is very difficult to use them as the origin of such missions as all the
vessels comprising the grand mission must be launched from the KSC.
Extraplanetary Launchpads (or EL for short2 ) gives additional meaning to planetary
bases and orbiting space stations by allowing for the construction of all manner of vessels
away from the KSC. The construction can be carried out both on the surface of any body
and in orbit. However, EL does not do anything for life support supplies (other mods
have that covered), or the expansion of the kerbal population at the base or station.
EL defines the resources3 used in the construction of vessels, and provides the parts
required to obtain and process those resources into the final product: a vessel that can
be an independent ship (or other vehicle), base, station, a module for a larger vessel, or
even individual parts4 .
1
Kerbal Space Center? Kerbin Space Center? Kerman Space Center? Kraken Snack Constructor?
2
Just like “extraterrestrial”, “extraplanetary” is (or would be) one word, and “launchpad” is also one
word, thus in this case TLA is Two Letter Acronym.
3
Other mods can define other resource that replace those defined by EL.
4
Though currently a little awkwardly.
2
Contents
List of Figures 5
List of Tables 5
1. Getting Started 6
1.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1. Minimal Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2. Survey Build Support . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3. Recommended Mods . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4. Mods that support or use EL . . . . . . . . . . . . . . . . . . . . . 6
1.2. Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. Construction Basics 7
2.1. Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1. Prospecting and Mining: dirt? to MetalOre . . . . . . . . . . . . 8
2.1.2. Smelting: MetalOre to Metal . . . . . . . . . . . . . . . . . . . 8
2.1.3. Working: Metal to RocketParts . . . . . . . . . . . . . . . . . 11
2.1.4. Remelting: ScrapMetal to Metal . . . . . . . . . . . . . . . . . 11
2.1.5. Building: RocketParts to Rockets . . . . . . . . . . . . . . . . 11
2.1.6. Recycling: RocketParts to ScrapMetal . . . . . . . . . . . . . 11
2.2. Productivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Construction Skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1. Unskilled kerbals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.2. Non-career modes . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4. Workshops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.1. Fully equipped . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.2. Other parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5. Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.1. Launchpads and Orbital Docks . . . . . . . . . . . . . . . . . . . . 13
2.5.2. Survey Stations and Survey Stakes . . . . . . . . . . . . . . . . . . 14
2.5.3. Micro-Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Survey System 14
3.1. Survey Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1. Survey Skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Survey Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3
4.3. Roughing It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5. Configuration 21
5.1. Part Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.1. ELControlReference . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.2. ELConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.3. ELDisposablePad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.4. ELExtractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.5. ELLaunchpad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.6. ELNoControlSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.7. ELRecycler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.8. ELSurveyStake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.1.9. ELSurveyStation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.1.10. ELTarget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.1.11. ELWorkshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.2. Recipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.2.1. Recipes for Building . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2.2. Recipes for Recycling . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2.3. Recipes for Converting . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.3. Resource Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6. EL API 34
6.1. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.1.1. ELBuildControl.IBuilder . . . . . . . . . . . . . . . . . . . . . . . . 34
6.1.2. ELControlInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.1.3. ELWorkSink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.1.4. ELWorkSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.1.5. IResourceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2. Part Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.1. ELControlReference . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.2. ELConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.3. ELDisposablePad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.4. ELExtractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.5. ELLaunchpad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.6. ELNoControlSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.7. ELRecycler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.8. ELSurveyStake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.9. ELSurveyStation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.10. ELTarget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2.11. ELWorkshop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4
6.3. Vessel Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.3.1. ELVesselWorkNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
References 37
List of Figures
2. Orbital Dock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. Micro-Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1. Hillside survey site, somewhere on Minmus. . . . . . . . . . . . . . . . . . 18
4. Gilly Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
List of Tables
1. Comparison of stock KSP LFO engines. . . . . . . . . . . . . . . . . . . . 10
5
Part I.
Using Extraplanetary Launchpads
1. Getting Started
1.1. Installation
1.1.1. Minimal Installation
Download the zip file for the latest version via the EL forum thread[14] and extract
its contents to KSP’s GameData directory5 . Ensure that the latest version of Module
Manager[13] is installed correctly.
Note that the minimal installation will not support survey builds.
Kerbal Alarm Clock[21] Keep track of when a build will be finished. Really, the most
important mod for anybody wishing to run more than one mission at a time.
Kethane[18] The original ISRU solution for KSP. Provides hot-spot mining of Met-
alOre.
Talisar Parts[20] High capacity spherical tanks (up to over 200m3 ) and various struc-
tural parts.
5
Ok, folder. Now get off my lawn ;)
6
Pathfinder[2] Space Camping & Geoscience.
1.2. Setup
The first time the space center scene is entered, an options window will be presented
allowing for the selection of various settings:
• Use of Blizzy’s toolbar when available.
• Creation of KAC alarms and the default action for those alarms.
2. Construction Basics
prospecting
mining
MetalOre
MetalOre
shipping smelting
Metal Metal
RocketParts working
Vessel RocketParts
Vessel
ScrapMetal
recycling remelting
2.1. Resources
Currently, EL uses four resources for its production chain (though the recipe system (see
section 5.2 on page 27) allows for much more complicated systems).
MetalOre Assumed to be hematite6 (but not explicitly stated as such) and thus has a
density of 5.2t/m3 .
6
A common form of iron ore.
7
Metal Assumed to be iron (but not explicitly stated as such) and thus has a density of
7.8t/m3 .
RocketParts Assumed to be sub-parts ready for assembly into actual parts, and thus
has a very low density of 0.5t/m3 .
ScrapMetal The true product of any machine shop: all machine shops produce scrap
metal in various forms and efficiencies. The lumps of metal handed over to the
customer are really the left-overs from producing scrap metal. Scrap metal gen-
erally does not pack well, though better than parts, so a density of 0.8t/m3 was
chosen as an average.
Kethane and Karbonite Prior to KSP 1.0, EL relied solely on Kethane[18] for its It may be
prospecting and mining, and there was an adaptation to make EL use Karbonite[11] worthwhile
instead. thinking of
As of KSP 1.0 (EL 5.1.90) Kethane is completely optional, but if present, will be used the stock
on top of the stock resource system. Scanning is quite separate, but mining is done system pro-
using the exact same augers. Mining outside a MetalOre deposit created by Kethane viding a
will extract MetalOre at the rate dictated by the concentration given by the stock means to
system (1% to 15%), but deposits created by Kethane effectively provide hot-spots of extract Met-
100% concentration. alOre from
The Karbonite adaptation seems to have been mothballed, but it was mostly a parts a larger mix
mod with configs for EL, so it may still be usable. of “dirt”,
while the
Kethane
2.1.2. Smelting: MetalOre to Metal
system
MetalOre is converted to Metal via smelting. Smelting is the process of reducing7 provides
metal oxides. EL assumes MetalOre is Fe2 O3 (the most common iron ore on Earth). access to
Reducing Fe2 O3 is a three-step process (from Wikipedia): rich veins of
MetalOre.
Stage One 3Fe2 O3 + CO → 2Fe3 O4 + CO2
7
Chemistry term, the opposite of oxidizing (or reduction vs oxidization).
8
However, this really happens all at once in a smelter so the effective process is:
3Fe2 O3 + 9CO → 6Fe + 9CO2 .
Fe has a molar mass of 55.845g/mol, O has a molar mass of 15.9994g/mol, so 479.0646g
of Fe2 O3 will produce 335.070g of Fe. This leads to a MetalOre to Metal mass
conversion rate of 0.69942558 .
In order to model the CO consumption, EL assumes that LiquidFuel is RP-1 (C12 H16 )
and that Oxidizer is liquid oxygen (O2 ). The stoichiometric equation for burning RP-1
is:
C12 H16 + 16O2 → 12CO2 + 8H2 O
However, rockets tend to burn rich (reduced oxidizer quantity) in order to avoid oxi-
dizing the engine, keep the engine cooler, and increase the number of lighter molecules
in the exhaust. KSP’s standard LiquidFuel and Oxidizer mix of 9:11 by volume
very closely approximates the following when LiquidFuel is assumed to be RP-1 and
Oxidizer is assumed to be liquid oxygen9 (used for 0% efficient smelting):
2C12 H16 + 17O2 → 2C + 17CO + 4CO2 + CH2 O + 7H2 + 8H2 O
The resulting equation for 100% efficient10 smelting thus becomes:
10Fe2 O3 + 2C12 H16 + 17O2 → 20Fe + 24CO2 + 16H2 O
C12 H16 has a molar mass of 160.25544g/mol, CO2 has a molar mass of 44.0095g/mol,
H2 O has a molar mass of 18.01528g/mol, C 12.0107g/mol, CO 28.0101g/mol, CH2 O
30.02598g/mol, H2 2.01588g/mol. Thus the two equations become the following when
viewed as masses:
320.51088 + 543.9796 → 24.0214 + 476.1717 + 176.038 + 30.02598 + 14.11116 +
144.12224
1596.882 + 320.51088 + 543.9796 → 1116.9 + 1056.228 + 288.24448.
The mass conversion rate of MetalOre to Metal is still 0.6994255.
Smelting is assumed to consume 8.62M J/kg of produced Metal[10].
The combustion of LiquidFuel and Oxidizer is assumed to produce 6M J/kg. The
justification for this comes from analyzing the properties of KSP’s stock LFO engines
and noting that the Poodle (the most efficient) gets 5.9M J/kg of LiquidFuel and
Oxidizer (see table 1 on the next page).
Thus, EL’s smelters nominally11 consume 864.49048g/s of LiquidFuel and Oxidizer
to produce 5186.94288kJ/s of heating along with the products necessary for smelting.
At 100% efficiency, they consume 1596.882g/s of MetalOre and 9627.678kJ/s of heat
while producing 1116.9g/s of Metal. Thus 100% efficiency is unobtainable as there is
insufficient heat supplied by the LFO mix. In theory, the attainable efficiency is a bit
less than 53.9%, but due to transferred resources cooling the smelter12 , the maximum
8
0.46628367 volume (resource unit) conversion rate.
9
Note that the exact ratios of the products were arbitrarily chosen but are chemically “correct” (bal-
anced), and that the inclusion of formaldehyde is the result of “Hmm, wonder if there’s a CH2 O .
Oh, there is, and it does appear in partial combustion of hydrocarbons. Neat.”
10
Arbitrary assumption.
11
The actual rates vary with the smelter: 800g/s, 3149.8g/s and 5000g/s of LFO, with the other rates
scaled accordingly.
12
And an engineering mistake in the smelter design. Some kerbals will miss out on snacks.
9
Engine Thrust (N) Isp(s) Ve (m/s) flow (kg/s) power (W) Esp (J/kg)
24-77 16k 290 2843.9 5.6 22.8M 4.0M
48-7S 20k 320 3138.1 6.4 31.4M 4.9M
aerospike 180k 340 3334.2 54.0 300.1M 5.6M
LV-1 2k 315 3089.1 0.6 3.1M 4.8M
LV-1R 2k 290 2843.9 0.7 2.8M 4.0M
LV-909 60k 345 3383.3 17.7 101.5M 5.7M
LV-T30 240k 310 3040.0 78.9 364.8M 4.6M
LV-T45 215k 320 3138.1 68.5 337.3M 4.9M
mainsail 1500k 310 3040.0 493.4 2.3G 4.6M
Mk55 120k 305 2991.0 40.1 179.5M 4.5M
poodle 250k 350 3432.3 72.8 429.0M 5.9M
SSME 1000k 315 3089.1 323.7 1.5G 4.8M
skipper 650k 320 3138.1 207.1 1.0G 4.9M
twin-boar 2000k 300 2942.0 679.8 2.9G 4.3M
rhino 2000k 340 3334.2 599.8 3.3G 5.6M
mammoth 4000k 315 3089.1 1294.9 6.2G 4.8M
rapier 180k 305 2991.0 60.2 269.2M 4.8M
vernor 12k 260 2549.7 4.7 15.3M 3.3M
10
efficiency appears to be about 40%.
11
to the workshop’s (and thus the overall vessel’s) productivity, and more courageous
kerbals will, in general, contribute less than less courageous kerbals, though bad-ass
kerbals complicate the relationship. It is entirely possible for a kerbal to have negative
productivity.
If the KerbalStats[17] mod is installed, then the amount of time a kerbal has spent
in certain workshops (currently only EL’s blue workshop (afaik)) improves the kerbal’s
productivity.
A workshop’s productivity is the sum of the productivities of all kerbals working in
that shop. A vessel’s productivity is the sum of the productivities of all workshops
in that vessel. If the vessel’s productivity is greater than zero, then construction will
progress. Negative productivity does not cause production to become destruction, in-
stead it causes a productivity deficit that must be overcome by better construction
kerbals before construction will proceed.
2 stars The kerbal is always productive in a fully equipped workshop (base productivity
still matters, but to get negative productivity, the kerbal would have to have
infinitely negative base productivity).
4 stars The kerbal enables skilled workers in any workshop (a 4-star construction kerbal
in an under-equipped workshop allows 0-star construction kerbals to contribute).
5 stars The kerbal enables unskilled workers in a fully equipped workshop (a 5-star
construction kerbal in a fully equipped workshop allows any kerbal, even those
without the construction skill, to contribute).
12
2.3.2. Non-career modes
In sandbox (and science?) mode, all kerbals are level 5, so there will be no negative
contributions, and if there is at least one construction kerbal in the workshop, then all
kerbals of sufficient ability will contribute.
2.4. Workshops
Workshops, too, affect productivity. All workshops have a productivity factor that is
multiplied by the sum of the productivities of the kerbals working in that shop. The
resulting productivity is then passed to the vessel.
13
2.5.2. Survey Stations and Survey Stakes
Survey stations use local survey sites to specify the location and orientation of the built
vessel. Survey sites are sets of one or more survey stakes with the same name and within A stake’s
range (200m) of each other. name de-
faults to the
2.5.3. Micro-Pad name of the
kerbal who
The micro-pad is a single-use construction point. When the build is finalized, the pad planted it
self-destructs and the build is attached to the parent vessel as if the build had been placed with “Base”
there in the editor (VAB or SPH). Also, the micro-pad can be carried on a kerbal’s back appended.
using KIS[5]. Thus if
The orientation and position of the build is controlled by the combination of the Valentina
orientation and position of the micro-pad, and the automatically selected attach node plants a
of the root part. The colored diamonds on the micro-pad indicate the orientation of the stake, it will
root part when its bottom node is selected (red = +X, blue = +Z, cyan = -X, yellow = be named
-Z14 . It is important to remember that when the micro-pad is facing up, the root part’s Valentina
selected node will be facing down, having been rotated around the part’s Z axis. Kerman
The micro-pad automatically selects the attach node of the root part by searching for Base.
the first available (unattached) node. First the bottom node is checked, then the top Thus, when
node, then any remaining nodes in the order they are found. Thus a small amount of creating a
control over which node is selected can be obtained simply by attaching parts to the site consist-
undesired nodes. ing of more
than one
3. Survey System stake, it is
easiest to
When landed, orbital docks can be awkward for building as they tend to be on top of have only
the building vessel (especially awkward for building rovers as getting the rover to the one kerbal
ground can be an issue), and launchpads are highly sensitive to ground conditions, and do the stake
and have their own issues when building large vessels. Also, they provide no flexibility planting.
in placement or orientation of the build. Also, if
EL’s survey system greatly eases the seeding (or even complete build-out) of bases, multiple
and works equally well for building ships and other vessels. However, it does have one local sites
disadvantage: any optional resources (liquid fuel, oxidizer, electric charge, etc) will not are desired,
be transfered: the build will be empty of such resources (freedom is not free), but as getting a
KIS[5] is required to place the stakes, and KAS[4] is almost always installed with it, this different
disadvantage should be only minor15 . kerbal to
The survey system consists of two parts16 : the survey station, and the survey site. plant the
The survey station (a re-purposed hitchhiker can) is used to keep track of the survey stakes for
each site
14
Hopefully the colors are distinct enough that any suffering from colorblindness can distinguish at least will make it
one diamond. The pad’s default orientation in the VAB is such that red (+X) points to the VAB easier.
door, blue (+Z) points to the north wall, cyan (-X) to the west and yellow (-Z) to the south.
15
It can, however, lead to good entertainment: [1]
16
If you’re thinking KSP parts, then it’s three: survey station, survey stake, and mallet.
14
sites and do the actual building (it serves the same purpose as the orbital dock or a
launchpad, but must be landed), and must be flown down to the surface in the vicinity
of where the builds will occur. The survey site is ephemeral: it is marked out by one or
more survey stakes and is used to specify the location and orientation of the build.
unmanned 20 meters.
unskilled 50 meters.
Note that the range is from the survey vessel’s center of mass to the nearest stake of the
survey site, but stakes may be separated by up to 200 meters17 .
17
This is a bit of a misfeature: the range should be from the survey station part and the maximum
separation of the stakes should be dependent on the skill as well.
15
-Y and +Y used to specify the "vertical" (nadir (-Y) and zenith (+Y)) axis of
the build (relative to the floor in the VAB or SPH). If both -Y and +Y are
used, then the origin is is ignored, otherwise the axis runs from -Y to origin
or origin to +Y. NOTE: not recommended, very advanced usage.
The VAB
-Z and +Z used to specify the ventral(+Z)/dorsal(-Z) (VAB) or fore(+Z)/aft(-Z)
orientation
(SPH) axis of the build. If both -Z and +Z are used, then the origin is is
really is
ignored, otherwise the axis runs from -Z to origin or origin to +Z.
weird.
* If none of the axis direction stakes are used, then the default orientation is such
that the build’s +Y axis is the local up, +X axis points east, and +Z points
north (same as on the KSC launchpad).
* If the axes marked out by the stakes are not perfectly orthogonal, then the build
will be oriented such that the errors are balanced.
Bounds these are used to control the placement of the build based on its bounding box
rather than its root part.
Origin used to mark the location of the root part along any axis that has not been
bound.
-X and +X used to mark the lateral (port (-X) and starboard (+X)) edges of the
build. If only one of -X or +X is used, then that edge of the build will be
exactly on that stake, otherwise the the X-axis center of the build’s bounding
box will be centered on the midpoint between the two stakes.
-Y and +Y used to mark the "vertical" (nadir (-Y) and zenith (+Y)) edges of the
build. If only one of -Y or +Y is used, then that edge of the build will be
exactly on that stake, otherwise the the Y-axis center of the build’s bounding
box will be centered on the midpoint between the two stakes. NOTE: use
of the +Y bounds stake is not recommended unless you know what you are
doing.
-Z and +Z used to mark the ventral(+Z)/dorsal(-Z) (VAB) or fore(+Z)/aft(-Z)
(SPH) edges of the build. If only one of -Z or +Z is used, then that edge
of the build will be exactly on that stake, otherwise the the Z-axis center of
the build’s bounding box will be centered on the midpoint between the two
stakes.
* Bounds stakes and direction stakes work together: any unbound axis of the build
slides along that axis of the reference frame created by the direction stakes (or the
default frame if no direction stakes are used).
* There is actually only one origin stake: there is no difference between a bounds origin
stake and a direction origin stake. The appearance of there being two origin stakes
is due to the overly simple controls.
* If multiple stakes of the same type+setting have been placed, then they will be aver-
aged together to form a virtual stake of the same type+setting. This can be very
16
useful with multiple origin stakes to avoid the build clipping into the stake when
the lowest part of the build is directly below the root part.
* If no origin stakes have been placed, then the average of all other stakes is used as the
origin point.
* The actual location of the stakes is about 19cm above the ground.
* If no Y bounds stake has been placed, then the origin acts as an implicit -Y bounds
stake (otherwise almost all builds would spawn in the ground).
17
18
Figure 1: Hillside survey site, somewhere on Minmus.
This is one possibility for placing stakes for building a large structure on the side of a hill. From left to right, there’s a -Y
Bounds stake, a +X Direction stake, a +Z Bounds stake with a +X Bounds stake hiding behind it, a flag and kerbal (not
relevant to the site), and near the far right launch clamp, an Origin stake (direction, but bounds would have the same effect).
Although the top of the structure is not directly visible, it is horizontal.
This can be done using either the workshop or the rocket work-
bench, but since even the rocket workbench can give a significant
boost to production speed, the only real disadvantages are the rel-
evant part needs to be either flown up to the station and docked
or built at the station and maneuvered into a convenient location, The rocket
and the increased power requirements. A minor disadvantage is workbench
the conversion of Metal into RocketParts produces Scrap- can be man-
Metal. Normally, the ScrapMetal is simply thrown away, but handled into
the next solution takes care of that. position by
two kerbals
• Thirdly, if Metal to RocketParts production is already avail-
using KIS.
able on the station20 , a smelter can be added to the station al-
lowing MetalOre to be flown in and processed into Metal.
While this does significantly increase the fuel requirements of the
station, the smelter is actually dual-use: not only can it convert
MetalOre into Metal, but it can convert ScrapMetal into
Metal, resulting in very low production losses. As an added
bonus, the smelters have a small amount of storage for the three
resources.
• Fourthly, and finally, a recycling bin can be added to the sta-
tion. EL’s recycling bins do not look like much, but they are
ravenous maws that eat vessels of any size (except asteroids, but
including unfortunate kerbals) and spit out resources. Most re-
sources, except Ablator and SolidFuel, stored in tanks will be
reclaimed as-is without loss, and the hull material will be recy-
cled into ScrapMetal. For best results, the station needs large
quantities of storage and a full production chain. The biggest ad-
vantage of using a recycling bin is unmanned21 supply ships can
be flown into the recycling bin and recycled. If there is sufficient
storage on the station, then all remaining fuel and any stored re-
sources will be automatically transfered to the station, and the hull
of the supply ship will go towards the next construction project.
Unfortunately, if there is insufficient storage for any resource, the
the excess of that resource will be lost.
19
The main difference between orbital construction and grounded construction is that
gravity can make getting built vessels off the pad rather awkward. Thus, instead of a
launchpad, though launchpads can have their advantages (such as resource transfer), the
base can be equipped with a survey station, a supply of survey stakes, a mallet to drive
the stakes, and a KIS[5] container in which to store the stakes and mallet. As KIS is
required for the survey parts to be available, the container should not be a problem22 .
4.3. Roughing It
NOTE: this section is out of date as it is relevant for when smelters required only
ElectricCharge and not LiquidFuel and Oxidizer. However, it should still server
as inspiration.
This is grounded construction the hard way23 . The absolute minimum is flown to a
site and the first things constructed are the modules needed to sustain construction.
20
Once the required modules have been built, base production can go into full swing,
even the construction of larger resource production chain, including recycling and the
full-sized workshop.
Part II.
Modding Extraplanetary Launchpads
5. Configuration
5.1. Part Modules
For the most part, EL places no restrictions on the models used for parts using EL’s
module, so unless otherwise stated, models are completely free-form as far as EL is
concerned.
5.1.1. ELControlReference
Allows the part to become a control reference (“Control From Here” in the part’s PAW).
Also provides a “Toggle Reference” action group that saves the previous control reference
when becoming the reference and returns the vessel to the previous reference when
toggled again.
Model Requirements The model’s mesh needs an emissive material with _EmissiveColor
set with appropriate RGB values. The alpha value is used for turning the emission on
and off as a status indicator. The part’s root game object is used as the reference trans-
form consistent with command pods and docking ports, so the model should be shaped
appropriately.
5.1.2. ELConverter
Consumes a set of input resources to produce a set of output resources. An EL converter
uses a converter recipe (see 5.2.3 on page 32) to specify the inputs and outputs while
controlling the rate of flow of the resources specified by the active input recipe and
distributing the recipes specified by the active output recipe. The active input and
output recipes are selected by the current efficiency of the converter, and may be a
blend between two specified recipes. The efficiency of the converter is either fixed, or
determined by the temperature of the converter part.
21
22
Figure 4: Gilly Base
The base started with just a tiny seed lander, but eventually flourished into a productive base... until the kethane supply ran
out :/
ELConverter subtracts the total input heat from the part and adds the total output
heat to the part (use negative heats to have heating associated with input ingredients
and cooling with output ingredients). Note that
If an efficiency curve24 has been specified, then the converter’s efficiency is determined
KSP’s ther-
by the part’s internal temperature (otherwise the efficiency is constant). The converter’smal data in
efficiency is then used to bake the converter recipe into a specific conversion recipe. the PAW
Once the specific conversion recipe has been obtained, ELConverter then bakes that does not di-
recipe using the current mass flow rate. The current mass flow rate is the specified raterectly show
of the converter scaled by the relative mass of the active input recipe compared to the the effects
smallest mass input recipe in the converter recipe. This keeps the mass flow of certain of resource
resources constant while varying the flow of others appropriately25 when suitable ratios transfer
are specified. The mass flow rate of the output recipe is always the same as that of the on the
input recipe26 . part’s tem-
perature,
Model Requirements None so there
may be
Part Requirements None. However, it is strongly recommended to use appropriate significant
thermal settings for converters that use heat. In particular, skinInternalConductionMult thermal flux
and heatConductivity should be adjusted to provided sufficient insulation when keep- despite the
ing the part hot is necessary. temperature
being fairly
Module Fields stable.
EVARange Adjust the range (in meters) from which an EVA kerbal can activate or
deactivate the converter. Default is 1.5m.
ConverterRecipe The name of the converter recipe to use. Required.
Rate The base mass flow rate of the converter, in kg/s. Defaults to 0. The base mass
flow rate is that of the smallest mass input recipe in the converter recipe.
efficiency Specify the efficiency/temperature curve of the converter. Defaults to con-
stant 1.0 (100%). If a single efficiency entry is given, then it specifies a constant
efficiency and is of the form efficiency = 0.9 (90%). If multiple efficiency
entries are given, then they form keys in a piece-wise linear “curve”. Each entry is
of the form efficiency = temp, eff where temp is the part’s internal tempera-
ture in Kelvin and eff is the converter’s efficiency at that temperature. Note that
the keys need to be specified in ascending order of temperature and eff should
be between 0.0 and 1.0 (inclusive)27 . For temperatures outside the range of the
curve, the nearest key is extrapolated with a constant efficiency.
24
For certain values of “curve”: it’s piece-wise linear.
25
For example, in a smelter, LiquidFuel and Oxidizer flow at a constant rate, while MetalOre is not
consumed at all at 0% efficiency, but is consumed at the maximum rate at 100%. Thus the actual
mass flow rate might vary from 864.49048g/s to 2461.37248g/s.
26
Conservation of mass.
27
No checking is performed, so expect rhinodaemons should this rule be broken.
23
5.1.3. ELDisposablePad
Special one-shot launchpad that replaces itself with the built vessel, attaching the built
vessel to the vessel owning the pad.
Model Requirements The only requirement is the model provides a transform with the
up axis (positive Y-axis in KSP/Unity, Z-axis in Blender) pointing away from where
the spawned vessel will be as it will be used to align the selected attach node of the
vessel’s root part. This is the opposite direction of the transform used by ELLaunchpad.
Module Fields
PadName Specifies the name of the launchpad. Note that this is editable by the user
both in the editor (VAB/SPH) or in flight.
5.1.4. ELExtractor
Extracts resources from the environment.
5.1.5. ELLaunchpad
Builds complete vessels attached (pseudo-docked) to the current vessel. Allows post-
build resource transfer without any extra fuss. Supports building both landed or in
orbit.
Module Fields
SpawnHeightOffset Specifies the distance in meters above the launch transform of the
lowest point of the spawned vessel. This is most useful when the model does not
have a specific spawn transform. Defaults to 0.0m.
24
SpawnTransform Specifies the model transform to be used as the launch transform.
Optional, but using a spawn transform allows finer control over the launch position
than that afforded by SpawnHeightOffset, and also allows the orientation to be
specified. If not specified, the model’s root transform will be used as the launch
transform (setting SpawnHeightOffset is highly recommended, but not as highly
as having a spawn transform).
PadName Specifies the name of the launchpad. Note that this is editable by the user
both in the editor (VAB/SPH) or in flight.
5.1.6. ELNoControlSwitch
Resets the vessel’s control reference to what it was before a kerbal boards the external
command seat. Used by the rocket workbench to prevent the vessel getting weird control
references28 .
5.1.7. ELRecycler
Destroys anything it touches (including unfortunate kerbals), reclaiming what resources
it can. Implements ELControlInterface.
Model Requirements The only requirement is the recycle field. The recycle field must
be a trigger collider and should (must?) not touch any other collider.
Module Fields
RecycleField_name Specifies the name of the transform for the recycle field collider.
Defaults to “ReycleField”.
28
Imagine how annoying this can be when using SAS hold option on a bendy station. Now imagine the
motivation for creating this part module.
25
5.1.8. ELSurveyStake
Marks locations for survey station. In the current implementation, a stake must be the
only part in the vessel for the survey station to recognize it.
Model Requirements None except any required by KIS[5] for ground attachment.
Part Requirements As the survey system will not look at vessels with more than one
part to check for the ELSurveyStake module, the part should be configured to be ground
attached using KIS[5]. However, parts designed to be dropped via staging or decoupling
will work, too, so long as the resulting vessel consists of only the one part.
5.1.9. ELSurveyStation
Builds complete vessels at locations marked out using survey stakes (parts with the
ELSurveyStake module). Does not allow post-build resource transfer (freedom is not
free), but as KIS[5] is required to place the stakes, and KAS[4] is almost always installed
with it, survey stations are probably the preferred tool for landed operations. Implements
ELControlInterface.
Part Requirements No requirements, but as kerbals improve its range, having crew
capacity (crewCapacity > 0 or KerbalSeat modules) is recommended.
Module Fields
StationName Specifies the name of the survey station. Note that this is editable by the
user both in the editor (VAB/SPH) or in flight.
5.1.10. ELTarget
Allows a part to be targeted. Includes orientation so it works with any docking alignment
mod (DPAI[7], navball[6], and navhud[9] are known to work).
26
Module Fields
TargetTransform Specifies the model transform to be used as the target. If not specified
(the default), the model’s root transform will be used.
TargetName String to be added after the host vessel’s name when set as target. Defaults
to “Target”.
5.1.11. ELWorkshop
Collect productivity from kerbals in the part. Works with either normal parts with crew
capacity or command chairs.
Part Requirements The part must have some crew capacity. This can be via either
the part’s crewCapacity field, or KerbalSeat (stock KSP) modules, or both. Note that
parts may have multiple KerbalSeat modules on them (eg, EL’s Rocket Workbench).
Module Fields
FullyEquipped If true, then even workshops with productivity factors less than 1.0 are
considered fully equipped allowing 0-star kerbals to contribute.
IgnoreCrewCapacity If true, the workshop will operate even if the part’s crewCapacity
is 0 (and not check for KerbalSeat). This is most useful on parts with dynamic
crew capacities (eg, inflatables).
5.2. Recipes
Extraplanetary Launchpads provides, via recipes, a means of customizing the resource
costs for building parts, their modules and resources, and thus whole vessels. The recipes
are used also for recycling.
Essentially, recipes are config nodes with a list of ingredients with their ratios in the
form of IngredientName = Ratio, although each recipe type will be a little more
complex (details given below). The final ratio of each ingredient is calculated by dividing
the specified ratio by the sum of the ratios of all ingredients in the recipe such that the
final total is 1.0. This allows for flexibility in how the ratios are specified, so long as
27
consistency is maintained throughout the individual recipe: they can be considered as
“parts” as in when mixing drinks (one part this, two parts that...), as masses in any unit
(24g this, 16g that, 6g the other29 ), percentages (if they add up to 100), or raw ratios
(if they add up to 1.0). Note, however, that EL always uses mass for its calculations.
For example, glucose (C6 H12 O6 ) using approximate molar masses:
Using masses: Using parts: Using raw ratios:
29
A popular compound.
28
• Any resource mentioned in EL_Recipe or EL_ModuleRecipe is required for building
(but not for filling tanks).
• Any resource stored in a part inside a KIS container becomes a required resource,
regardless of recipes.
EL_Recipe {
structure = 5
Resources {
RocketParts = 1
}
}
EL_ModuleRecipe Specify the resources needed to build any part’s module. Applies to
all instances of that module. The module to which the recipe applies is specified by
the name = line, and the actual recipe for the module is specified by the Resources
node. The mass of the module is calculated from the part’s mass using the ratio
specified in the part’s recipe. If the named module does not exist, no module is
named (ie, no top-level name = line), or no recipe is given (no Resources node),
the recipe will be dropped from the recipe database.
The example below gives EL’s module recipe for KerbalEVA. The ratios are in
kilograms, assuming a suited kerbal has a mass of 93.75kg (10kg for the kerbal).
It can be found in Kerbal.cfg[15].
EL_ModuleRecipe {
name = KerbalEVA
Resources {
Metal = 39
loss = 44.75
29
}
}
EL_DefaultStructureRecipe {
RocketParts = 1
}
EL_ResourceRecipe {
name = Ablator
Resources {
RocketParts = 1
}
}
• Any resources stored in the part are drained. Those with an EL_TransferRecipe
are transferred accordingly. Those with an EL_ResourceRecipe but no EL_RecycleRecipe
are lost, otherwise they are broken down as dictated by the EL_RecycleRecipe
and the resultant resources will be transfered.
30
TODO: In theory: not tested.
30
• The part is then broken down into the resources specified by its EL_Recipe and
EL_ModuleRecipe(s). Those resources with an EL_ResourceRecipe but no EL_RecycleRecipe
are lost, otherwise they get broken down further in accordance with their EL_RecycleRecipe.
• Whether transferring (from a tank) or recycling (the part itself), resources with
no recipe are reclaimed as-is at a 1:1 ratio.
EL_RecycleRecipe Specify the resources to which a resource will be broken down when
recycling. Prevents evaporation of the resource when the resource has a resource
recipe (EL_ResourceRecipe). The resource to be broken down is specified by
the name = line, and the recipe for the broken down resource is specified by the
Resources node. If no resource is named (ie, no top-level name = line), or no recipe
is given (no Resources node), the recipe will be dropped from the recipe database.
Ingredients specifying undefined resources are permitted, allowing for loss ratios to
be specified. The example recycle recipe shows RocketParts being broken down
to ScrapMetal with 10% loss (the exact name (loss) doesn’t matter so long as
it is not a defined resource). It can be found in Recipes.cfg[16].
EL_RecycleRecipe {
name = RocketParts
Resources {
ScrapMetal = 9
loss = 1
}
}
EL_TransferRecipe {
name = RocketParts
Resources {
RocketParts = 1
}
}
31
EL_KerbalRecipe Specifies the resources making up a kerbal (whether on EVA or
boarded31 ). This is a special part recipe that is not actually attached to any
part32 , and is used only when the unfortunate kerbal gets recycled. The kerbal
recipe shown below assumes a fully suited kerbal is 93.75kg (the default in KSP)
with 10kg for the kerbal and 83.75kg for the suit, with a 30:1 gain33 when con-
verting the kerbal to Kethane. It can be found in Kerbal.cfg[15].
EL_KerbalRecipe {
structure = 10
KerbalEVA = 83.75
Resources {
Kethane = 30
loss = -29
}
}
31
The kerbal is assumed to be suited or have a suit nearby in the same part
32
The need for the node came from not having access to KerbalEVA part configs at the time, and keeping
it after KSP 1.2 maintains flexibility.
33
Highly unrealistic, but that is how the KE-WAITNONOSTOP-01 in Kethane is configured
34
Or reasonable approximations thereof.
32
scaled with the ingredient when the recipe is baked. Output heats are added to the
part’s internal flux while input heats are subtracted from the part’s internal flux.
If the ingredient ratios are in grams, then the heats are in kilo-joules. The mass
flow of the conversion process is governed by the input recipe with the smallest
mass.
EL_ConverterRecipe {
name = LFOFiredSmelter
Input {
efficiency = 1
LFOMix = 864.49048 -5186.94288
MetalOre = 1596.882
}
Output {
efficiency = 1
CarbonDioxide = 1056.228
Water = 288.24448
Metal = 1116.9 -9627.678
}
Input {
efficiency = 0
LFOMix = 864.49048 -5186.94288
}
Output {
efficiency = 0
Carbon = 24.0214
CarbonDioxide = 176.038
CarbonMonoxide = 476.1717
Formaldehyde = 30.02598
Hydrogen = 14.11116
Water = 144.12224
}
}
EL_ResourceRecipe {
name = LFOMix
Resources {
LiquidFuel = 9
Oxidizer = 11
}
}
33
5.3. Resource Rates
The amount of work required to prepare resources may be configured using an EL_ResourceRates
node. This node is very simple in that it is just a list of resourcename = rate lines.
resourcename is the name of the resource (or default to specify the default rate), and
rate is the amount of kerbal-hours / ton (or kerbal-seconds / unit for massless resources
(such as ElectricCharge)). Note that this affects only those resources that are re-
quired to complete the build, not optional resources that will be transferred afterwards.
If default is not specified, then it defaults to 5.
EL_ResourceRates {
default = 5
ElectricCharge = 1
LiquidFuel = 0.36
Oxidizer = 0.44
MonoPropellant = 0.4
XenonGas = 2
Ore = 8
}
6. EL API
Calling it an API might be stretching things, but...
6.1. Interfaces
6.1.1. ELBuildControl.IBuilder
ELBuildControl is the actual workhorse for building vessels, the various pad modules
all use ELBuildControl for the common functionality. The IBuilder interface is the
methods and properties that ELBuildControl requires of the pad modules. There
are several methods and properties, but main property of interest is control which
provides access to the ELBuildControl object attached to the pad.
6.1.2. ELControlInterface
Its purpose is to allow other mods easy control and detection of the operational status
of EL’s modules. For example, mods with inflatable parts can disable the EL module
when the part is deflated and block deflation when the EL part is busy.
Fields Note that these are actually properties, so access via reflection needs to be done
using GetProperty, PropertyInfo.GetValue and PropertyInfo.Setvalue.
isBusy Read-only boolean that indicates whether the module is currently busy process-
ing something. While not enforced, the module should not be disabled while it is
busy (i.e. the part should not be deflated).
34
canOperate Boolean usable by other part modules to enable or disable (or detect) the
operational status of the EL part module. Setting this may cause the implementing
module to run other code (e.g. the ELSurveyStation module will recompute its
range and possibly scan for sites), so mods must invoke the property setter to
guarantee correct behavior.
6.1.3. ELWorkSink
Consumes vessel productivity to get something done.
6.1.4. ELWorkSource
Provides vessel productivity.
6.1.5. IResourceProvider
Interface used by ELExtractor for querying environmental resource availability and
extracting a resource from the environment.
35
while the vessel is unloaded. Also prevents erroneous productivity credit caused by
leaving a vessel unattended for several game years35 .
35
Background building was implemented by keeping track of how long the vessel was unloaded. When
the vessel was loaded, the time was processed in chunks of (default) 21600 seconds every physics
frame. This works out to fifty Kerbin days per second, so if a vessel had not been visited for ten
Kerbin years, there would be an 85 second (game-time, worse for low FPS real-time) window after
switching to the vessel in which new builds would finish instantly (assuming resource availability).
36
References
[1] 5thHorseman. KSP Bases 0.90 - 29: Ike ELP Base: Check! - 5th Horseman Let’s
Play. url: https://www.youtube.com/watch?v=67vth86RQH0&t=1525.
[2] Angel-125. Pathfinder. url: http://forum.kerbalspaceprogram.com/index.
php?/topic/121397-pf/.
[3] blizzy78. Toolbar. url: http://forum.kerbalspaceprogram.com/index.php?
/topic/55420-tb/.
[4] IgorZ. Kerbal Attachment System. url: http : / / forum . kerbalspaceprogram .
com/index.php?/topic/142594-kas/.
[5] IgorZ. Kerbal Inventory System. url: http://forum.kerbalspaceprogram.com/
index.php?/topic/149848-kis/.
[6] linuxgurugamer. Navball docking alignment indicator (Community Edition, v2).
url: http://forum.kerbalspaceprogram.com/index.php?/topic/152739-
navball/.
[7] NavyFish. Docking Port Alignment Indicator. url: http://forum.kerbalspaceprogram.
com/index.php?/topic/40423-dpai/.
[8] Nils277. Kerbal Planetary Base Systems. url: http://forum.kerbalspaceprogram.
com/index.php?/topic/133606-kpbs/.
[9] Ninenium. NavHud - a NavBall inspired Heads Up Display. url: http://forum.
kerbalspaceprogram.com/index.php?/topic/73692-navhud/.
[10] H.W. Paxton R.J. Fruehan O. Fortini. “Theoretical Minimum Energies To Produce
Steel”. In: ().
[11] rabidninjawombat. ExtraPlanetary LaunchPads Extended-Part Pack. url: http:
//forum.kerbalspaceprogram.com/index.php?/topic/80988-elkarb/.
[12] RealGecko. Simple Construction. url: http://forum.kerbalspaceprogram.com/
index.php?/topic/152575-sc/.
[13] Sarbian. Module Manager. url: http : / / forum . kerbalspaceprogram . com /
index.php?/topic/50533-mm/.
[14] taniwha. Extraplanetary Launchpads. url: http://forum.kerbalspaceprogram.
com/index.php?/topic/54284-el/.
[15] taniwha. ExtraplanetaryLaunchpads/Resources/Kerbal.cfg.
[16] taniwha. ExtraplanetaryLaunchpads/Resources/Recipes.cfg.
[17] taniwha. KerbalStats. url: http : / / forum . kerbalspaceprogram . com / index .
php?/topic/89285-ks/.
[18] taniwha. Kethane. url: http://forum.kerbalspaceprogram.com/index.php?
/topic/119480-kethane/.
[19] taniwha. Modular Fuel Tanks. url: http://forum.kerbalspaceprogram.com/
index.php?/topic/58235-mft/.
37
[20] taniwha. Talisar Parts. url: http://forum.kerbalspaceprogram.com/index.
php?/topic/116849-tp/.
[21] TriggerAu. Kerbal Alarm Clock. url: http://forum.kerbalspaceprogram.com/
index.php?/topic/22809-kac/.
[22] Z-Key Aerospace. TAC Fuel Balancer. url: http://forum.kerbalspaceprogram.
com/index.php?/topic/139223-tacfb/.
38