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.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.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.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.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.0 To edit a part, we must first find it in the code. There are multiple ways to do this.

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.2.5.4 Guess what happens if we change it to massScale="0"? That little cockpit is now weightless!

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.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.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.4.5 As promised above, the answer is id="38" partType="Block-7"

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.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.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.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.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.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.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.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.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.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.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.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.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