Profile image

The Ultimate Guide to Editing XML

6,360 AV8R  7.1 years ago

I wanted to do something special for the community as a thanks for gold. To that end, I wrote this guide to editing the SimplePlanes aircraft XML files.

Follow along in the tutorial with This Plane which was created specifically for this tutorial. Enjoy!

Guide now available on Steam as well.


Version 1.3.0


0.0.0.0 Introduction

0.1.0.0 So you want to make that scaled detailed replica of your favorite airplane, or maybe you just want to double the thrust of an engine. Perhaps you want an airplane to have a huge wing in the back for looks but don't want to change the plane's aerodynamics? Would you like to make a gun that fires huge bullets really slowly, or maybe turn it into a Star Wars laser cannon? Would you like to change parts into colors that aren't available on the paint pallete, rotate parts in increments other than 90 degrees, make a fuselage longer than 5 or shorter than 0.25, change the mass of a part (or reduce it to 0)? You can do all of this and more by editing your aircraft's .XML save file in a simple text editor, and if you're willing to learn I'll happily teach you how to do it.

Reference this key if you're following along with the Tutorial Plane!


1.0.0.0 Index

Search this page for the 4 digit number tag on the left to scroll to the desired section. If this is your first time editing .XML it is highly suggested you read the guide from the top down in its entirety before skipping sections.

0.0.0.0 Introduction

1.0.0.0 Index

2.0.0.0 Tools

2.2.0.0 In-game Mods

2.2.1.0 Fine Tuner
2.2.2.0 Overload

2.3.0.0 Programs

2.3.1.0 Notepad++
2.3.2.0 MB-Ruler

2.4.0.0 References

2.4.1.0 Hex Color Picker
2.4.2.0 Tutorial Aircraft

3.0.0.0 Basic Information Before We Start Editing

3.2.0.0 Locating and Opening Your Aircraft's .XML File
3.3.0.0 Introduction to the Aircraft .XML Save File

3.3.3.0 RULES!

3.4.0.0 Understanding and Navigating the .XML File

3.4.2.0 Very Basic Code Structure

4.0.0.0 EDITING THE FILE

4.1.0.0 Making Your Changes Take Effect
4.2.0.0 Finding the Right Part in the Code
4.3.0.0 General Variables

4.3.2.0 Position
4.3.3.0 Rotation
4.3.4.0 Scale
4.3.5.0 Mass

4.4.0.0 Part-Specific Variables

4.4.2.0 Fuselage Blocks
4.4.3.0 Wings
4.4.4.0 Engines
4.4.5.0 Fuselage Inlet
4.4.6.0 VTOL Nozzle
4.4.7.0 RCN
4.4.8.0 Fuel Tank
4.4.9.0 Wheels and suspension
4.4.10.0 Cockpit
4.4.11.0 Cameras
4.4.12.0 Lights
4.4.13.0 Shocks
4.4.14.0 Pistons
4.4.15.0 Detachers
4.4.16.0 Rotators
4.4.17.0 Air Brakes
4.4.18.0 Parachutes
4.4.19.0 Weapons

4.4.19.1 Guns
4.4.19.2 Rockets
4.4.19.3 Bombs
4.4.19.4 Missiles

4.5.0.0 Miscellaneous Variables

4.5.1.0 disableAircraftCollisions
4.5.2.0 drag

4.6.0.0 Colors / Materials

4.6.1.0 Numbering
4.6.2.0 Finding the HEX code
4.6.3.0 Changing the Color
4.6.4.0 Editing r, m, and s
4.6.5.0 Adding the Color to a Part
4.6.6.0 Coloring Engine Exhaust
4.6.7.0 Coloring Weapon Tracers

4.7.0.0 Connections

5.0.0.0 Tips and Tricks

5.1.0.0 Converting Image Measurements into SimplePlanes Dimensions
5.2.0.0 Scaling Engine Performance to Realistic Values

6.0.0.0 Reference Material

6.1.0.0 List of partType Identifiers

7.0.0.0 Conclusion
8.0.0.0 Credits
9.0.0.0 Changelog


2.0.0.0 Tools

2.1.0.0 Before we get started there are some tools you should be aware of that are either required or extremely useful. Keep in mind that the only thing you really need is a text editor, the rest of these just make your life easier.

2.2.0.0 In-game mods

2.2.1.0 Fine Tuner

2.2.1.1 Download Link

2.2.1.2 Creator: @HellFireKoder

2.2.1.3 Description: This mod allows you to do some simple .XML edits without having to tab out of the game. It is not capable of performing everything in this guide, but for simple positioning, rotation, and scaling of parts this is a must-have in my opinion.

2.2.2.0 Overload

2.2.2.1 Download Link

2.2.2.2 Creator: @WNP78

2.2.2.3 Description: This mod serves as an in-game tool to edit various .XML properties of parts. I have not started using it yet so I can't speak to its effectiveness, but it is positively reviewed so if you learn to use it your time would probably be well spent.

2.3.0.0 Programs

2.3.1.0 Notepad++

2.3.1.1 Download Link

2.3.1.2 Description: This program is my personal favorite source code editor and Notepad replacement. It helps you to identify code blocks found in an .XML file by coloring text portions to help you keep your place, notice mistakes, and quickly replicate common entries. This is the program that I use to edit my .XML and it is the program that I recommend you use as well, but if you have another preferred program feel free to use it instead (let me know what your favorite is!).

2.3.2.0 MB-Ruler

2.3.2.1 Download Link

2.3.2.2 Description: This program is infinitely useful for creating scaled replicas by using an on-screen ruler to perform measurements of images. In the Tips and Tricks section I describe a method to use this program and a simple math equation to convert measurements taken from an image into SimplePlanes dimensions (useful for creating scaled replicas).

2.4.0.0 Miscellaneous Tools and References

2.4.1.0 XML Color Picker

2.4.1.1 Link to Website

2.4.1.2 Description: This service powered by Google is an extremely easy way to determine the HEX code of every possible color in SimplePlanes. You know, that slightly grayer shade of medium-light greenish pink you've been dreaming of.

2.4.2.0 Tutorial Aircraft

2.4.2.1 Download Link

2.4.2.1 This is the build I am making as I write this guide. You may download it from the link above if you wish to follow along in the same file I am working with.


3.0.0.0 Basic Information Before We Start Editing

3.1.0.0 In this section I will teach you to locate your aircraft's SimplePlanes save file, open it in a text editor, get a general idea of what you're looking at inside the file, and give you some ground rules to safeguard your creations while you edit.

3.2.0.0 Locating and Opening Your Aircraft's .XML File

3.2.1.0 Press WINDOWS+R to open the Run command and type the following: "%appdata%" without quotations. Click "OK" then navigate to C:\Users\YourUsername\AppData\LocalLow\Jundroo\SimplePlanes\AircraftDesigns If you downloaded the Tutorial Plane, find the file titled, "XML Editing Tutorial by AV8R.xml" then Right Click > "Open With" > Notepad++. This will open the XML file in the Notepad++ editor.

3.2.1.1 Note: If you didn't download the Tutorial Plane, open whatever plane you want to edit in the same way. If you didn't download Notepad++, open the file in your chosen text editor.

3.2.1.2 Note: You may also open Notepad++, click File > Open, then navigate to the same directory listed in 3.2.1.0 and select your aircraft that way. Both work equally well.

3.3.0.0 Introduction to the Aircraft .XML Save File

3.3.1.0 If this is your first time opening a document containing code, believe me I understand how overwhelming it looks, but trust me, if you follow along I will prove to you it is not as complicated as you think! You do not need to be a programmer to be able to edit your aircraft's part properties in the .XML file!

3.3.2.0 First, without going into computer coding language too much, we need to understand some extremely basic principles that will prevent us from breaking the code's syntax and allow us to edit the important stuff (like block position) without accidentally making the code stop working.

3.3.3.0 RULES:

3.3.3.1 Rule 1 - NEVER delete the following symbols: < > / = , (unless you're deleting an entire property, explained later)

3.3.3.2 Rule 2 - ONLY edit text inside of quotation marks (unless you are adding or removing an entire property, explained later)

3.3.3.3 Rule 3 - BACKUP OFTEN! If you make a mistake and break the code's syntax, you have exactly two options: Find and fix the mistake that broke the code, or revert to your last working save. For this reason, especially while you're new to this, I recommend making a backup of the file you're working with at regular intervals. This is simple, just save the .XML file as "YourAircraftName 2.xml" for example. Now go back to editing the original file and your backup will sit there in safety for you to come back to if you accidentally delete something that you can't find.

3.4.0.0 Understanding and Navigating the .XML File

3.4.1.0 When you open the file you will see a bunch of text. Think of this like an outline from top to bottom. First we have the entire "Aircraft" code (from top to bottom) which contains the "Assembly" code and the "Theme" code. Inside of the "Assembly" code are the "Parts", "Connections", and "Bodies" sections. Lastly, inside of the "Theme" code is the "Materials" section.

3.4.2.0 Code Organization:

                    Header information (ignore this)
                              Aircraft
                                    Assembly
                                            Parts
                                                    Part 1
                                                    Part 2
                                                    Part 3 etc.
                                            Connections
                                                    Connection 1
                                                    Connection 2
                                                    Connection 3 etc.
                                            Bodies
                                                    Body 1
                                                    Body 2
                                                    Body 3 etc.
                                    Themes
                                            Material 1
                                            Material 2
                                            Material 3 etc.

3.4.2.1 Luckily for us, 99% of the time we are only going to be interested in editing individual parts of the aircraft and changing colors. Because of this, we can skip straight to the "Parts" section of the code (or down to the "Materials" to edit colors, more on that later) and just ignore the rest!.

3.4.2.2 If you've read this far, then congratulations, you're ready to start learning the fun stuff! For each of these steps, if there is a corresponding example in the Tutorial Aircraft I will annotate it as such. Let's get down to business.


4.0.0.0 EDITING THE FILE

4.1.0.0 Making Your Changes Take Effect

4.1.1.0 When you are in the SimplePlanes game editor and you make a change to your aircraft, the game program is writing lines of code into a temporary copy of the aircraft file that you have open. In order to make the change take place in the .XML file, you must save your build in the game then the game writes all of the changes you made into the .XML file we discussed above. The reverse is also true. If you want to change your aircraft by writing or editing the code yourself, you must type in the edits in the .XML file then save the document. Once it's saved, you must re-load it into the game. You will be doing this a lot so I suggest using the keyboard shortcut CTRL+S for save in Notepad++.

4.1.1.1 For example, If I add a block to my build then tab out to the .XML file that I have open, nothing at all will have changed. But as soon as I save my aircraft in the game, when I tab out to the .XML file, I will see new lines of code in the parts section showing that a new block was added to the file.

4.2.0.0 Finding the Right Part in the Code

4.2.1.0 To edit a part, we must first find it in the code. There are multiple ways to do this.

4.2.1.1 First, the parts are written in the code in sequential order as they are added in the game editor. If I add a new wing to my plane, that wing will be at the very bottom of the parts section (newest = lowest) which makes it very easy to find parts if I edit them right after I add them in the game editor.

4.2.1.2 A second method to locate parts is to look at the partType, which looks like this: partType="XXXX" It's easy to find, for example, the engine of my airplane if I only have one engine! Simply CTRL+F > Type "engine" > then click next until you find the section of code talking about partType="engine..."

4.2.1.3 Lastly, a method that I use ALL THE TIME is to paint the part using the very last color on my paint pallette. The colors you have selected as your paints are the "materials" which we will talk about later. What you need to know now is that they are numbered 0-14 in order from top left to bottom right. Using this piece of information, if I paint a part with the very bottom right color in the paint options, I can then find the part in .XML by doing the following: CTRL+F > type materials="14 > then click Find to scroll to the part that is painted color #14. This is useful when you're trying to figure out which one of the 100 different fuselage blocks is the one you actually want to edit.

4.3.0.0 General Edits

4.3.1.0 So you know how to find parts and you know that you have to save before the changes take effect! In this section we'll be making our first edits, starting out with a few that can be made to any part in the game, from blocks and engines, to wings and guns. Let's get started!

4.3.2.0 Position

4.3.2.1 Refer to Tutorial Aircraft Column 1 (left-most) Row 1 (top-most). Let's move that red block to a new position without disconnecting it from it's connection on the fuselage. For this one I will tell you the part's id number so you can easily find it. CTRL+F > type id="36" and search. We will be editing id="36" partType="Block-1"

4.3.2.2 In order to move a part, we will be changing the values of the position variable. In that line of code find: position="-5,2.5,5.375" These are the X,Y,Z coordinates of that block. X is left and right, Y is up and down, and Z is forward and backwards. The coordinates are given in units of a block length and are measured from the center of the "aircraft" bounds (not necessarily the center of mass). In this example, our red block is 5 blocks left of center, 2.5 above center, and 5.375 forward of center.

4.3.2.3 Change the text so it reads: position="-6, 3.5, 5.75" then save the file. Now reload it in SimplePlanes and you will see that the block has moved to the left one block, up one block, and forward one half block from its old location. Experiment with this until you're comfortable with the coordinate system!

4.3.3.0 Rotation

4.3.3.1 Refer to Tutorial Aircraft Row 1 Column 2. Let's rotate that orange structural panel. Hint: it is orange, which is material (color) number 4 in the Tutorial Plane's color selection. Let's type CTRL+F > type materials="4 and search. You should be directed to a line of code with id="37" partType="Wing-2" in it. Notice the partType is sort of deceptive - the part type doesn't necessarily match what the part is called inside the game editor!

4.3.3.2 In order to rotate a part, we will be changing the values of the rotation variable. In that line of code find: rotation="0,0,0" These are the number of degrees of rotation around the X, Y, and Z axes of that block. Positive is clockwise, negative is counter-clockwise. This might be confusing at first if you're not familiar with the coordinate system and rotation about an axis, but if you think of it as follows you'll figure it out no problem: Remember the X axis is left and right. Imagine hanging a roll of paper towels on that axis, now if you roll those paper towels clockwise, that's a positive rotation around the X axis (like the aircraft "pitching"). The Y axis is up and down, so if you roll the paper towels counter clockwise on that axis that's a negative rotation about the Y axis (it's like the aircraft "yawing"), and the Z axis is front to back, so a rotation about the Z axis is like the aircraft "rolling." If you're having a hard time catching on, just try a rotation and if it isn't right, change it back and try again in a different axis!

4.3.3.3 Change the text so it reads: rotation="10,23.5,-5" then save. Now reload it in SimplePlanes and you will see that the block has rotated clockwise 10 degrees in the x-axis, clockwise 23.5 degrees in the y-axis, and counter-clockwise 5 degrees in the z-axis.

4.3.3.4 It is important to know that, for example, a -5 degree rotation is the same as a 355 degree rotation. It's the same thing as turning left 5 degrees or turning right 355 degrees, the result is that you are pointing the same direction either way. SimplePlanes will always change negative rotations to positive ones (ex. changing -5 to 355) when saved from the in-game editor.

4.3.4.0 Scale

4.2.4.1 Refer to Tutorial Aircraft Row 1 Column 3. Let's scale that yellow curved block. See if you can find the part on your own, but if you can't I'll put its part ID at the bottom of this section.

4.2.4.2 In order to scale a part, we will be changing the values of the scale variable, scale="X,Y,Z" In this case, this is multiplying the dimensions of the selected block (eg. X times bigger in the x direction, Y times bigger in the y direction, and Z times bigger in the z direction). You will notice that this block does not come with a scale variable by default! Not to worry, all parts in SimplePlanes can be scaled, even though they don't all have it in their line of code by default.

4.2.4.3 Pick any of the spaces in the first line of code for the block and type: scale="1,2,0.75" For example, you can make it look like this: ... rotation="0,0,0" scale="1,2,0.75" drag="0,0,0,0,0,0" ... Save the file and load it in SimplePlanes. You will see that the block is the same width (One times the length in the X axis), it's twice as tall (2 times the length in the Y axis), and it's 75% or 3/4 as long in the Z axis.

4.2.4.4 Note: This is NOT the same as frontScale and rearScale in fuselage blocks, fuselage intakes, and wings! Think of this as "the big scale" - it takes whatever other values for size your block has and multiplies them by your scale values. I'll cover variables specific to fuselages, wings, and fuselage intakes later on.

4.2.4.5 As promised above, the answer is id="38" partType="Block-7"

4.3.5.0 Mass

4.2.5.1 Refer to Tutorial Aircraft Row 1 Column 4 and Part id="39" in the .XML file. Let's make that little green cockpit block VERY heavy! (Then we'll make it weightless).

4.2.5.2 To edit the mass of a block, we'll be changing the values of the massScale="X" variable. In this case, X is a multiplier of the default mass of the block, including all of its contents (such as fuel in a fuselage).

4.2.5.3 In one of the spaces in the first line of code, type: massScale="100" for example, it might look like this: drag="0.262,0.262,0.0076,0.0076,0.0984948,0.1264387" massScale="100" materials="5,5,5" Now save and load it in SimplePlanes. You will see that our little cockpit that used to weigh 110 lbs now weighs 11,000 lbs.

4.2.5.4 Guess what happens if we change it to massScale="0"? That little cockpit is now weightless!

4.3.6.0 Congratulations! You now know how to edit the position, rotation, scale, and mass of any block in SimplePlanes. This is just the beginning, but these are powerful tools that allow you to do things that wouldn't be possible in the standard game editor. Many of these general edits can be very easily accomplished using in-game mods like Fine Tuner, but I explained them in detail here because understanding the concept of these edits will make learning the rest of them a breeze. All of the edits you will make in the game involve one or more of the concepts you have learned above. You will either change a number to a different number, change a true to false (or vice versa), or add a whole new phrase to the line of code which gives the part a new property. In the following section I will explain variables for various part types.

4.4.0.0 Part-specific Variables

4.4.1.0 Unlike position, rotation, scale, and massScale, not all variables can be applied to all parts. For example, rootLeadingOffset (which is a variable that only applies to wings and structural panels) will either do nothing or completely break your code and make it fail to load into the game if applied to an engine. Because of this, it is important to know what variables work with what parts. In this section, I will describe some commonly used properties on the different partTypes in the game.

4.4.2.0 Fuselage Blocks

4.4.2.1 Refer to TutorialAircraft Row 1 Column 5. This is the Fuselage Block that I painted a very sexy hot pink which just happens to be color #14 on the color palette. Find materials="14" to locate this Fuselage amongst all of the others in the file. Again, if you can't find it I have listed the ID below this section.

4.4.2.2 frontScale="X,Y" this is the width and height of the front face of the fuselage body measured in units of block length. The in-game editor limits you from 0.25 to 5, but with XML editing you can make it whatever dimensions you want.

4.4.2.3 rearScale="X,Y" the same as frontScale but for the back face of the fuselage

4.4.2.4 offset="X,Y,Z" this is the RUN, RISE, and LENGTH of the fuselage measured in block lengths. These values are locked at -2.5 to +2.5, -2.5 to +2.5, and 0.25 to 5 respectively in the game editor, but with XML editing you can make them whatever dimensions you want.

4.4.2.5 deadWeight="X" this is the amount of dead weight in pounds you want the fuselage block to hold. This value is locked at 0-1000 in the game editor but you can make it any positive value with XML (negative dead weight doesn't work).

4.4.2.6 buoyancy="0" this is how "floatable" the block is. Admittedly I've never made a float plane or boat, so I do not have experience editing this value. Surely someone better at this than me can enlighten us all!

4.4.2.7 fuelPercentage="X" where X is a value from 0-1 in decimal format, eg. fuelPercentage="0.7" means the fuselage is 70% full of fuel. Overall worthless since this can be edited from 0-100 in game and putting it above 1 in XML does nothing.

4.4.2.8 fuel="X" and capacity="X" changing these values does nothing. If you want "infinite fuel" you need to see the section on fuel tanks.

4.4.2.9 cornerTypes="0,0,0,0,0,0,0,0" changes individual corners to different versions (like circle, round, hard, smooth). You can do this in the editor so this is only useful if you want to have two fuselages connected together but not have the same corners, such as a hard corner attached to a circular fuselage.

4.4.2.10 Exercise: Edit this block so that the frontScale="0,0" rearScale="7,0.1" offset="1.2,3.4,5.6789" then save the file and load in SP.

4.4.3.0 Wings

4.4.3.1 Refer to Tutorial Aircraft Row 2 Column 1 and part id="40" partType="Wing-2" in the .XML file. We will do something cool to this blue structural wing.

4.4.3.2 angleOfAttack="0" According to the developers, this is a remnant of an old version of the game and no longer does anything.

4.4.3.3 airfoil="ABC" Reflects the choice of Symmetric, Semi-Symmetric, or Flat Bottom - just edit this in-game.

4.4.3.4 inverted="true/false" determines if the wings aerodynamics are producing lift toward the top or bottom of the wing.

4.4.3.5 wingPhysicsEnabled="true/false" determines if the wing is used in the calculation of lift or not (set to false if you want to use a wing for decoration but don't want it throwing your center of lift out of whack).

4.4.3.6 rootLeadingOffset="X" / rootTrailingOffset="X" / tipLeadingOffset="X" / tipTrailingOffset="X" this is the distance from the wing's tip or root's connection point (the little nub you see in the editor) to the corner. Example: tipLeadingOffset is the distance from the tip's attachment point to the tip's forward corner of the wing.

4.4.3.6a Important! Wings are weird. For some reason their values are doubled in the editor compared to fuselages. So if you want the root's trailing corner to be 2 blocks behind the attachment point, you would input a value of rootTrailingOffset="1"

4.4.3.7 tipPosition="X,Y,Z" this is the location of the tip's connection point relative to the root's connection point in the format "Dihedral, Wing Length, Forward/Back" Note, as above the input here should be half of what you actually want in game. If you want the tip to be 2 blocks above the root, the wing to be 2 blocks long, and the tip to be 2 blocks behind the root, it would look like this: tipPosition="1,1,-1"

4.4.3.8 hingeDistance="x" this is the percentage of the wing that should be used as a control surface written in decimal format. Example: If you want the wing to be 60% fixed and 40% control surface, you would use: hingeDistance="0.4"

4.4.3.9 allowControlSurfaces="true/false" this one is HUGE! Use structural wings for their strength then set this value to true to be able to add control surfaces to them, something you can't do in the in-game editor.

4.4.3.10 in the control surfaces section:

4.4.3.10a start="X" and end="X" This can only be set to whole numbers from 0 to a variable max value. The max value is determined by the length of the wing. This determines at what position on the wing the control surface will start and stop (this is the width of the control surface, different from hingeDistance).

4.4.3.10b inputId="X" determines what input makes the control surface move. Can be set to roll, pitch, yaw, vtol, or landingGear

4.4.3.10c invert="true/false" determines whether or not to make the control surface do what you tell it to or do the opposite. This is NOT the same as the "inverted" variable above!

4.4.3.10d maxDeflectionDegree="X" determines how much the control surface can move in degrees when given an input. Default value is 35 degrees. Use this to make a control input make bigger or smaller pitches/rolls/yaws. Setting it too high is usually bad (I actually usually turn this value down some).

4.4.3.10e activationGroupLocksInput="true/false" This determines if the control surface will remain locked in place if you turn off its activation group while a control input is made. Example: activationGroupLocksInput="true" and you set your elevators to AG1. You pull up hard to do a loop and disable AG1. Now your plane is going to keep doing loops because you have locked the pitch input in place until you turn AG1 back on to make a new control input.

4.4.3.10f trim="on/off" does what you think, you can change this in the in-game editor so no reason to mess with it here.

4.4.3.10g Exercise: On the blue structural wing, enable control surfaces and add a control surface from start="1" to end="2" with hinge distance=".5" that has inverted roll control response but NOT inverted aerodynamics. Also give the wing a 3 block positive dihedral and disable wing physics. Be careful with the dihedral, remember to only put in half of what you want for wing measurements!

4.4.4.0 Engines

4.4.4.1 Refer to Tutorial Aircraft Row 2 Column 2, and XML part id="41" partType="Engine-Jet-1" to find the dark blue jet engine.

4.4.4.2 invert="true/false" determines if pressing throttle increase actually increases or instead decreases your throttle setting

4.4.4.3 min="X" determines what the starting thrust of your engine is (effects "spool up" time)

4.4.4.4 max="X" determines what the full throttle thrust of your engine is after it has fully spooled up to max power. The bigger this value is the more power the engine will have but the longer it will take to go from 0 thrust to max thrust and vice versa. Making this value very large will cause your engine to be very powerful but take a very long time to reach full power.

4.4.4.5 input="ABC" set to throttle, pitch, roll, yaw, brake, landingGear, or VTOL to determine what input will change your throttle

4.4.4.6 powerMultiplier="X" takes the thrust that is calculated based on your engine type and "max" setting then multiplies it by this value. Use this to make really weak or powerful engines and use it to fine tune engine performance to give you the speeds you want.

4.4.4.7 exhaustScale="X,Y,Z" determines the size of engine exhaust graphics

4.4.4.8 exhaustStartColorOverridePrimary="FFFFFFFF" determines color of exhaust. Refer to section 4.6.4.0 for information about changing color of engine exhaust.

4.4.4.9 Exercise: Edit the dark blue engine to respond to a pitch input, max="5" powerMultiplier="0.2" and exhaustScale="2,2,2" Now go test this engine out and see how long it takes to reach full power.

4.4.5.0 Fuselage Inlet

4.4.5.1 Refer to Tutorial Aircraft Row 2 Column 3, and XML part id="42" partType="Fuselage-Inlet-1" to find the purple fuselage inlet. For the most part the properties of this part are the same as for a fuselage block. The difference being the addition of some options to edit the inlet properties.

4.4.5.2 inletSlant="X" determines how angled the inlet opening is

4.4.5.3 inletTrimSize="X" determines how long the paintable second color portion of the inlet is

4.4.5.4 inletThicknessFront="X" determines how thick the wall of the inlet is at the front of the inlet (the opening)

4.4.5.5 inletThicknessRear="X" determines how thick the wall of the inlet is at the rear of the inlet (toward the closed back)

4.4.6.0 VTOL Nozzle

4.4.6.1 Refer to Tutorial Aircraft Row 2 Column 4 and XML part id="43" partType="ThrustPort-1" to find the white VTOL nozzle.

4.4.6.2 min="X" / max="X" determines amount of degrees the nozzle can rotate when given an input

4.4.6.3 input="ABC" see 4.4.4.5

4.4.6.4 In the Rotator.State section:

4.4.6.4b enabled="true/false" determines if the nozzle can rotate or not

4.4.6.4 Exercise: Edit the nozzle to respond to a pitch input instead of a VTOL input and only travel from min="0" to max="30" Why might someone be interested in using rotator.state enabled="false"?

4.4.7.0 RCN

4.4.7.1 Refer to Tutorial Aircraft Row 2 Column 5, and XML part id="44" partType="ReactionControlNozzle-1" to find the dark grey RCN nozzle.

4.4.7.2 autoAssignType="true/false" determines if it lets the game decide to make it pitch, roll, or yaw based on it's location on the plane
4.4.7.3 reverse="true/false" determines if the control input is inverted or not

4.4.8.0 Fuel Tank

4.4.8.1 Refer to Tutorial Aircraft Row 3 Column 1, and XML part id="45" partType="FuelTank-1" to find the light grey fuel tank.

4.4.8.2 fuel="X" determines how much fuel is in the tank. Number must be less than or equal to capacity, so you need to increase the value of both of them to add a bunch of gas.

4.4.8.3 capacity="X" determines what the maximum amount of fuel that can be put into the tank is.

4.4.9.0 Wheels and suspension

4.4.9.1 Refer to Tutorial Aircraft Row 3 Column 2, and XML part id="46" partType="Wheel-Resizable-1" to find the black wheel.

4.4.9.2 turningAngle="X" determines how many degrees the wheel can turn

4.4.9.3 engineId="X" determines which car engine powers the wheel. Set this value equal to the part id of the car engine (easiest to just do this in the in-game editor).

4.4.9.4 direction="Normal" determines if the input is inverted or normal.

4.4.9.5 size="X" determines how large the diameter of the wheel is, measured in block length.

4.4.9.6 width="X" determines how wide the wheel is, measured in percentage of the default value. Example, 0.5 is 50% and 2.3 is 230%

4.4.9.7 tire="ABC" determines what type of tire is on the wheel, easiest to select this in the in-game editor

4.4.9.8 damper="X" determines the amount of damper is in the suspension. Damper is how well the suspension stops the bouncing/wobbling moments of the suspension. Measured in percentage written in decimal format, Example: 0.5 is 50% and 2.3 is 230%

4.4.9.9 spring="X" determines the strength and stiffness of the suspension. Measured in percentage in decimal format.

4.4.9.10 enableSuspension="true/false" determines if the wheel has built-in suspension or not. If set to true, it uses the damper and spring values above. If set to false, damper and spring values do nothing.

4.4.9.11 enableAutoTraction="true/false" determines if the wheel will use default traction values or manual values below, false causes the traction and slip values below to take effect

4.4.9.12 turningRate="x" determines how fast the wheel can turn

4.4.9.13 brakeTorque="X" determines how hard the brakes exert force on the tire. A low value will cause you to brake slowly but not lose traction, a high value will cause you to brake hard but possibly lose traction and skid.

4.4.9.14 slipForwardExtremum="X" and slipSidewaysExtremum="X" need further information

4.4.9.15 slipForwardAsymptote="X" and slipSidewaysAsymptote="X" need further information

4.4.9.16 tractionForward="X" and tractionSideways="X" need further information

4.4.9.17 flipped="true/false" this is a landing gear only variable and determines if the graphic is mirrored or not, mainly useful for "read landing gear" to make them extend down and left vs. down and right.

4.4.10.0 Cockpit

4.4.10.1 Refer to Tutorial Aircraft bottom center, XML part id="1" partType="Cockpit-1" to find the blue and white cockpit.

4.4.10.1 primaryCockpit="true/false" determines if this is the cockpit that will be used for "cockpit view." The primary cockpit cannot be deleted, and if the primary cockpit is removed from an aircraft everything else in the editor will turn gray and move like a subassembly.

4.4.11.0 Cameras

4.4.11.1 Refer to Tutorial Aircraft Row 3 Column 3, and XML part id="47" to find the grey camera.

4.4.11.2 viewMode="ABC" determines what type of camera view it has. Default value is FirstPerson, can be set to Orbit, Chase, and FlyBy. Requires proper capitalization (orbit doesn't work, but Orbit does)

4.4.11.3 autoOrient="true/false" determines if, when you switch to the camera, you keep your old camera rotation or automatically turn to face the camera direction

4.4.11.4 lookAtCockpit="true/false" determines if the camera will automatically point your view toward your primaryCockpit or not

4.4.11.5 autoZoomOnCockpit="true/false" need further information

4.4.11.6 autoCenterCamera="true/false" determines if the camera view returns to default value after you stop looking around

4.4.12.0 Lights

4.4.12.1 Refer to Tutorial Aircraft Row 3 Column 4, and XML part id="48" partType="BeaconLight" to find the red beacon light.

4.4.12.2 designerBlinkProgram="ABC" determines if the light is steady, slow blink, or fast blink. Easiest to change in-game.

4.4.12.3 showHalo="true/false" determines if the light will have a halo effect around it or not. For example, you might want this to be false if it is a light inside a cockpit that the viewer is looking at up close, but want it on for an external light that will be seen from further away. Purely for looks.

4.4.13.0 Shocks

4.4.13.1 For spring and damper values refer to 4.4.9.8 and 4.4.9.9

4.4.14.0 Pistons

4.4.14.1 Refer to Tutorial Aircraft Row 3 Column 5, and XML part id="49" partType="Piston" to find the orange piston.

4.4.14.2 min="X" / max="X" multiplies the range value to determine travel distance of the piston when activated

4.4.14.3 preventBreaking="true/false" determines if the piston can break if too much force applied

4.4.14.4 cycle="true/false" determines if the piston will repeatedly extend and retract over and over or not.

4.4.14.5 extend="true/false" determines if the piston starts closed and extends when activated, or starts extended and retracts when activated

4.4.14.6 range="X" determines the range of the piston when fully extended. This value is multiplied by max="X" to determine range.

4.4.14.7 speed="X" determines how fast the piston extends and retracts

4.4.15.0 Detachers

4.4.15.1 Refer to Tutorial Aircraft Row 4 Column 1, and XML part id="50" partType="Detacher-2" to find the yellow detacher.

4.4.15.2 detachForce="X" determines how much force is exerted on the item being detached. The higher the value, the harder the item is "shot" away from the detacher.

4.4.15.3 detacherUiMaxForce="X" need further information

4.4.16.0 Rotators

4.4.16.1 Refer to Tuttorial Aircraft Row 4 Column 2, and XML part id="51" partType="JointRotator-1" to find the green rotator.

4.4.16.2 min="X" / max="X" multiplies the value of range="X" to determine how many degrees the rotator can travel in the negative (min) and positive (max) directions. Increase both of these values to a very high number to make "infinitely spinning rotators"

4.4.16.3 range="X" determines how many degrees the rotator can turn in each direction. Multiply this value by min and max to get the final value.

4.4.16.4 speed="X" determines how fast the rotator rotates

4.4.17.0 Air Brakes

4.4.17.1 Refer to Tutorial Aircraft Row 4 Column 3, and XML part id="52" partType="AirBrake-1" to find the light blue air brake

4.4.17.1 min="X" / max="X" determines range of travel

4.4.18.0 Parachutes

4.4.18.1 Refer to Tutorial Aircraft Row 4 Column 4, and XML part id="53" partType="Parachute-1" to find the dark blue parachute.

4.4.18.2 size="X" determines size of parachute

4.4.18.3 style="ABC" this should just be edited in-game

4.4.19.0 Weapons

4.4.19.1 Guns

4.4.19.1a Refer to Tutorial Aircraft Row 4 Column 5, and XML part id="54" partType="Gun-2" to find the purple gun.

4.4.19.1b ammoCount="X" appears to do nothing

4.4.19.1c burstCount="X" how many bullets are fired before there is a delay

4.4.19.1d timeBetweenBursts="X" how many seconds to pause during delay

4.4.19.1e muzzleVelocity="X" how fast the bullets travel

4.4.19.1f roundsPerSecond="X" how fast the fun shoots

4.4.19.1g bulletWeightKg="X" I think this value is multiplied by ammoCount to determine the weight of the ammunition in the gun, but it might also effect bullet drop as well. Need further information.

4.4.19.1h bulletCaliber="X" determines the size of the bullets

4.4.19.1i spread="X" determines how accurate the bullets are, bigger numbers make bullets spray all over the place, smaller numbers make the bullets more accurate

4.4.19.1j tracerColor="X" refer to section 4.6.5.0

4.4.19.2 Rockets

4.4.19.2a To my knowledge there are currently no unique XML edits that can be made to rockets

4.4.19.3 Bombs

4.4.19.3a To my knowledge there are currently no unique XML edits that can be made to bombs

4.4.19.4 Missiles

4.4.19.4a To my knowledge there are currently no unique XML edits that can be made to missiles; however, if you edit the mass with massScale="X" to a value lower than 1, the missiles will travel faster because they weigh less.

4.5.0.0 Miscellaneous Variables

4.5.1.0 disableAircraftCollisions=true/false" must be added to an empty space in the top line of part code, when set to true this allows parts to clip through eachother without causing an impact. Use this to rotate items inside of eachother, create landing gear, shoot missiles from inside your planes, etc.

4.5.2.0 drag="U,V,W,X,Y,Z" you can edit these values and it will load into SP, but the game will automatically recalculate them as soon as you press play, so in effect they do nothing.

4.6.0.0 Colors / Materials

4.6.1.0 Numbering

4.6.1.1 The paint selections are numbered as follows:

                                     0,  1,  2,  3,  4
                                     5,  6,  7,  8,  9
                                    10, 11, 12, 13, 14

4.6.1.2 In the aircraft save file, the colors are saved at the bottom in the materials section in order from top to bottom, starting at 0. There are 4 extra colors after these in the list that I'm not sure what they do, hopefully someone can help us out!

4.6.2.0 Finding the HEX code

4.6.2.1 Colors are saved in "HEX" format, which is one method of describing color mathematically. The easiest way to find the hex code for your desired color is to use an online tool to pick the color from a display and it will tell you what the hex code is. Here is a Link to one powered by Google.

4.6.3.0 Changing the Color

4.6.3.1 Say we want to change the very first color in our paint pallete to a greyish pink. Using the color picker by Google, I determine that the hex code is: "a897a2" So in the first "material" line I change color="FFFFFF" to color="a897a2" and save. Now when I load the file in SimplePlanes, my first color will be that greyish pink.

4.6.4.0 Editing r, m, and s

4.6.4.1 In addition to editing the color, it's also possible to edit other properties, such as the reflectivity, metallic, and smoothness. These values range from 0-1 and the best thing to do is just mess with them, changing one at a time and seeing what effect it has. For making super glossy cockpits, my personal settings are r="0.35" m="1" s="1". According to the developer, @NathanMikeska, reflectivity isn't really used anymore and more information on these values can be found here.

4.6.5.0 Adding the Color to a Part

4.6.5.1 Once you've got your paint palette set up, you can easily change the paint of any part in your XML file by finding the materials="X" variable. If there are multiple numbers, such as materials="1,13,0" they are listed in order of "primary, trim1, trim2, etc" All you need to do is edit the values to the number corresponding to your intended color in the materials list (numbered starting at 0 from top down). Save and load into SP.

4.6.6.0 Coloring Engine Exhaust

4.6.6.1 Find the following: exhaustStartColorOverridePrimary in your XML file.

4.6.6.2 Engine exhaust still uses HEX to determine the color, but there are two extra digits at the end (8 total). Find the first six digits in the same way you found the HEX code for painting any other piece. Technically, the last 2 digits should be for transparency, but as far as I can tell they have no effect. (Some useful numbers, in case they are found to have effect: 00=0%, 80=50%, FF=100%).

4.6.6.3 For our example engine in the Tutorial Aircraft, part id="41", find exhaustStartColorOverridePrimary="FFA400FF" Let's make the exhaust red instead of the default color. Using the color picker I determined that pure red color in hex format is FF0000. So edit the variable to say exhaustStartColorOverridePrimary="FF0000FF" (we're just ignoring the last 2 digits), save and load into SP. The exhaust should now be bright red.

4.6.7.0 Coloring Weapon Tracers

4.6.7.1 Refer to Tutorial Aircraft part id="54" again, the purple gun.

4.6.7.2 Find tracerColor="FFED00" To change the color of the tracers, simply replace FFED00 with your chosen hex color (see section 4.6.2.0), save and load into SP.

4.7.0.0 Connections

4.8.1.0 Coming Soon!


5.0.0.0 Tips and Tricks

5.1.0.0 Converting Image Measurements into SimplePlanes Dimensions

5.1.1.0 Coming Soon!

5.2.0.0 Scaling Engine Performance to Realistic Values

5.2.1.0 Coming Soon!


6.0.0.0 Reference Material

6.1.0.0 List of partType Identifiers

6.1.1.0 Coming Soon!


7.0.0.0 Conclusion

7.1.0.0 I hope you have gotten some value out of this guide. If you followed along and practiced as we went you should now have the tools and skills to do anything that can be done in SimplePlanes. This should also serve as a guide to refer back to if you forget what a variable does or how it is used. Thanks to everyone who has helped me out along the way and be sure to let me know if you have questions - I'll do my best to help out. Regards, Av8r


8.0.0.0 Credits

8.1.0.0 Get your name in the credits if you help find mistakes, suggest clarifications, or provide new information for me to add!
8.2.0.0 Thanks to everyone who has helped me along the way since I started playing SimplePlanes
8.3.0.0 @HellFireKoder for making Fine Tuner
8.4.0.0 @WNpP78 for making Overload
8.5.0.0 @NathanMikeska for clarifying R, M, S color values
8.6.0.0 @Joco80 for tip on massScale effect on missile speed


9.0.0.0 Changelog

Version 1.3.0 / 1.3.1 (Steam)
Added note about massScale effect on missile speed

Version 1.2.0 / 1.2.1 (Steam)
Reflectivity, Metallic, Smoothness (R, M, S) clarification

Version 1.1.0 / 1.1.1(Steam)
Formatting, added guide to Steam

Version 1.0
Original Release

  • Log in to leave a comment
  • Profile image

    Im not reading allat😂☠️

    11 months ago
  • Profile image
    15.3k Mastereldo

    Question: is there a way to increase or decrease the volume of detacher without using more detacher

    one year ago
  • Profile image
    45 Jar985

    I looked for the keywords with ctrl-f, but I couldn't find what I want, so I'm gonna ask it here.

    So I can use 'FireWeapons' in 'input', but can I also specify it to only use the input when the 'FireWeapons' keybind has been pressed, for example, 3 times? Something like 'FireWeapons:3'.
    I'm building a MIM-104 patriot missile launcher and I want the missile caps to fly off the tube when a missile launches, but only the tube which is launching a missile. I can't use action groups, because I'm planning on make a whole battery, which will probably have about 8 launchers.

    1.4 years ago
  • Profile image

    You could just increase your fuel instead @Joshi13

    2.1 years ago
  • Profile image
    690 Joshi13

    Does anybody know how to change fuel consupmtion of an Engine?

    2.1 years ago
  • Profile image
    16.4k MrGreen

    I prefer VS code or devcpp to edit my code

    2.8 years ago
  • Profile image
    4,165 Formula350

    I wish I knew more to contribute. However, currently, there are most definitely lots of missing stuff, such as that the bombs/missiles/rockets can have their explosive power changed. Cannons have various bullet types, and also can themselves be set to explosive or not.
    .
    Though I was coming here, hoping to find some info on Action Groups, so I could assign a weapon to be Air-to-Air only (thereby not showing up in the Air-to-Ground hud...)
    Oh well heh
    I still can't upvote, so... Thanks for having originally made the guide!

    +2 2.9 years ago
  • Profile image
    12.0k 52

    Poor thumbs

    3.2 years ago
  • Profile image
    120 CB76565

    Now THIS is the longest toutorial ever

    3.5 years ago
  • Profile image
    3,572 JumpingJack

    @Spectres it doesnt give you nearly as many options as directly editing the code within a code editor like sublime

    3.5 years ago
  • Profile image
    16.8k Fygaroh

    thank you so much @Birdman9301 and @47parzival41 really

    3.7 years ago
  • Profile image
    11.1k Birdman9301

    Go into XML and go to “beacon light” menu. Change input from “none” to “activate1” or whatever action group you need @Fygaroh

    3.7 years ago
  • Profile image
    16.8k Fygaroh

    I need to invert a ligth, for example if I associate the light to any AG, the light must stay on, once the AG is activated the light must turn off. how do i do that?

    3.8 years ago
  • Profile image
    9,245 UraniumOxide

    Very helpful.

    4.2 years ago
  • Profile image
    7,308 iPilot

    Just thought I should drop this here: bullet size is bulletScale, NOT bulletCaliber

    4.3 years ago
  • Profile image
    7,323 WarringMunky

    THANK YOU!!!

    4.3 years ago
  • Profile image

    Ahh yup. Thanks! @AV8R

    4.6 years ago
  • Profile image
    6,360 AV8R

    @jamesPLANESii I haven't played in a long time, but I imagine the easiest way would be clever use of ctrl+R (replace) functionality.

    Select a property that every single part always has (like color, for example), then do this:

    1. CTRL+R
    2. Replace this:
      color="
    3. With this:
      disableAircraftCollisions="true" color="

    Hope it helps,
    av

    4.6 years ago
  • Profile image

    How do you edit the attribute on every single part of the plane without having to individually change every single part? I.e., making every part on your plane nonCollision=true? know it’s possible, and I’ve heard of other people doing it, but I don’t and I’ve forgotten how if someone has told me already.

    4.6 years ago
  • Profile image
    60 Boioboi

    Here are some more options for all air to Air and Air to Ground missiles
    1.lockTime:X (i recommend 0 for no lock on time)
    2.minRange:X (Set a minimum range for the missile set to 0 for no minRange)
    3.maxRange:X (set to high number for 10 miles range of the missiles)
    4.maxTargetingAngle:X (increases targeting/lock on circle size)
    5.maxSpeed:X (increases speed) duh..
    6.maxFuelTime:X (increases max distance travelled of missile)
    7.maxForwardThrustForce:X (increases the max thrust force works great with maxSpeed)
    8.maxHeadingAngleAdjustmentRate:X (creates a smaller turning circle? When enemy takes a sharp turn)
    9.maxVelocityAngleAdjustmentRate:X (i really don't know what this does so just insert a high number)

    10.Make sure to type it correctly just as i did it's kinda caption sensitive?(idk what its called im dumb)

    +1 4.7 years ago
  • Profile image
    13.6k Urocyon

    I've edited the cockpit scales on several planes to 0,0,0 to make them invisible in my ww1 craft, but now when my plane crashes into something and explodes, the game crashes, is that a function of having the cockpits at scale 0,0,0?

    4.8 years ago
  • Profile image
    26.0k Strucker

    I feel bad for them as you could just dowload the Overload mod now.

    4.8 years ago
  • Profile image
    230 kerbober

    this is too much complexity

    4.9 years ago
  • Profile image

    Anyone can help me ? when I  set vtol for giroscope input and move vtol giroscope activated when i move vtol to default position giroscope deactivated but i need when i set vtol for giroscope input and move vtol giroscope deactivated when I move vtol to default position giroscope activated

    5.0 years ago
  • Profile image
    405 syl12

    @Boatrider you need to add the code your self add damage "insertamounthere" put that in the gun area of code

    5.1 years ago
  • Log in to see more comments