Free Web Hosting by Netfirms
Web Hosting by Netfirms | Free Domain Names by Netfirms

Aircraft Damage Modelling (DM) Tutorial

By Harman_5

INTRODUCTION:

Before we begin, I want to make four things clear:

1. I am NOT an expert in Openplane;

2. I do not know everything (nor do I pretend to);

3. This tutorial will NOT teach you how to make planes;

4. This is not the be-all-end-all of damage modelling! New and more advanced things are being discovered all the time;

 

The only purpose of this tutorial is to make known to the SDOE Community and anyone interested in adding DMs to their aircraft in SDOE, how I do it. I may not mod like the best of 'em, but I do know something! Everything I know in the DM department will be put forward, and you can pick through it and see if my methods suit you. Simple. The methods described here were used with success in my Ju88A4 Damage Model modifications of which version 6 (included) is the latest. This tutorial assumes you have some knowledge of Openplane. I will not try to teach to you too much Openplane now because it is simply out of the scope of this tutorial and it is way complex. I will describe how to use Openplane to model damage effects for aircraft in SDOE though. There is a separate Openplane Document written by the developers of SDOE (not included here) that you may want to refer to during this tutorial. Before continuing, I feel I should credit some people for leading me to learn some of the more advanced damage modelling effects in Openplane, namely Raider (flat tires, brake failures) and ArgonV (showing me some samples of how to enable airfoils with obFunc, etc) both from the FSIC Forum for enlightening me. Although the things I learned from these people were always existant in Openplane, understand or discovering them is another thing altogether. Also, there are many different ways of achieving effects in SDOE through Openplane, and I did some tweaking around myself of what I learned and found it worked just as well.

Because the 3D models in SDOE rely on a program language called "Openplane" to define the objects properties, users can tweak away at their hearts content as long as they know what they're doing. Working with Openplane is not easy, but getting to know enough of it will be very rewarding to you. Now I will start dispensing all of what I know regarding modelling damage effects and using Openplane to achieve these effects in SDOE from easier stuff to advanced stuff...

Anyone who has played SDOE knows that it already has a very accurate physics model. And yes, detached wings do detach properly and wing spars and things like that can be seen with the shipped product right? So why the need for users to take on damage modelling? The reason I do it is because I want to "advance" the DM. That is, make it even more realistic. Sure, the shipped planes in SDOE get damaged fairly realistically, however have you ever suffered from brake failure? How about landing gear seizure? Cockpit damage? Visual body damage? I think not. I don't mean to put SDOE or its developers down by saying this, I am simply stating fact. The developers (IMO) of SDOE could have made extremely advanced DMs for the planes with what they had to play with, the Openplane system and all, but you have to draw the line somewhere especially when you're working with a deadline and I respect that. Me, as a modder, have pretty much all the time I want when I do have free time, so I can spend my time modelling every little thing (almost) that I feel would go wrong in the real plane! Whatever that may be ;)

At the end of every section in this tutorial, I will 'test' the user on how well he/she has learned the concept by asking him/her to do it himself.

ANYONE having troubles, wanting to ask questions, or comment, insult, praise, please be my guest.

NOTE: This tutorial comes with several sm files that are included for tutorial purposes. In the sm files folder of the tutorial download, you will find:

Ju88A4.sm = This is YOUR Ju88A4! A clean Ju88 with no modifications for use with this tutorial. You will be modding this Ju88.

Ju88A4 Damage Model Version 6.sm = This is MY Ju88A4! ;) You can use this for reference if you have difficulty grasping the more complex concepts.

Drag.sm = Assuming you will complete the whole tutorial from top to toe, this file is used to add drag to the Ju88 and will be called upon in the more advanced DM sections.

NOTE: Those last two sm files are read-only in Windows to prevent you from accidentally doing something wrong to them and ruining them. You can disable their read-only attributes if desired.

 

SECTION 1.0 -

DAMAGE MODELLING BASICS:

Before we jump right in, you will need some basic software and understanding first. Fortunately, apart from having SDOE, any software you need is free and only the image editors will need your money however there are some evaluation versions out there so you can at least try your skills out for now. From the software point of view, Bryan Russell's Openplane Studio Version 1.0.2 (what I use) is essential. This handy program will enable you to open sm files directly and edit them and display the plane in all its 3D Glory! Openplane editing is done through this program too. Next, Openplane tools. Visit openplane.org and download the Bigmunger and associated programs. Pick up the Openplane documentation while you're there, Very handy indeed. Oh yes, if you intend to model visual damage such as bullet holes and fire/oil/burn damage (with textures), a good paint program such as Adobe Photoshop or the lesser Jasc PaintShop Pro will help in making/modifying the textures. Thankfully, modelling DM at this level does not require the use and knowledge of a 3D Modeller to achieve believable effects (although this can be done to simulate even more realistic DM effects like actual see-through holes, gaps and torn-away panels , it will not be covered in this tutorial).

Assuming you have the above tools and software, all you need now is some directions! Bear in mind that what I describe here is how I would do it. Other people have achieved similar results by using entirely different modding methods. Openplane is just that: OPEN. While there are some no-no's to watch out for, you need to be open-minded and be willing to experiment A LOT. A lot of the times you will be surprised some of the wackiest ideas work over the more reasonable ones so be prepared to throw all logic out the window when the time comes!!! (don't go too far though ;)

Included in this download is my latest Damage Model for the Ju88A4 in SDOE: Ju88 DM Version 6. I will use this DM as a sample of how to create your very own damage model. Later, you will be given the oppurtunity to do it all by yourself (it's not tooo hard!) using a 'clean' Ju88A4 sm file included with the tutorial download. Please note that if you can't do something in this tutorial, don't worry, skip it, and carry on, however the later sections build on what I've described (and what you should know) in the earlier sections of this tutorial so at leasthave a crack at everything once before giving up! Make sure the mentioned sm files included in this download are in an easy to access place before continuing, and place the "Ju88A4.sm" file in your Ju88A4 aircraft folder (don't worry if it overwrites, you can install other DMs later over it again).

1.0a. Opening the sm file:

For all those thinking: "Oh God no! Get a move on already! I know this stuff!!!" Please bear with me, or just skip this section to the one below. There are people who don't know this stuff and are willing to learn (I Hope). I will attempt to cover as much as I can regarding DM editing.

All planes (and objects for that matter) in SDOE have their 3D Models and properties for the behaviour of the 3D Models bound up in an sm file. If you have installed my Ju88 DM Version 6, go to C:\Program Files\Fighter Squadron\Media\Aircraft\Ju88A4\. Notice the "Ju88A4 Damage Model Version 6.sm" file there. This is the file you will need to edit using Openplane Studio (OPS).

Go ahead and start OPS. Load the sm file by selecting File | Open. Locate the correct sm file and hit OK.

END OF SECTION 1.0a

If you can do the above, and a Ju88A4 appears as in the image below in OPS, then move on to the next section.

 

1.0b. OPS Basics/Openplane Basics

This section will teach the user the very basics of using OPS, and allow them to model visual damage to ANY aircraft using my methods. There will be a test at the end of this section so the user can try doing it him/her self. Before I continue, my methods of producing visual damage modelling are quite tedious and there is only one limitation: Users wanting to change skins from the original will have to re-damage their new skins and save them as damaged skins. Now, this can be worked around by creating layers in the damage texture and then just pasting the damage parts of the texture onto the new skin. This is being worked on though and I hope to work around this issue.

Notice the aircraft in the centre of the screen. Now, without attempting to teach you OPS as to much, look at the right hand panel in the program window. Notice the "LOD" tab. Click it and make it is showing whenever you click and select different parts of the aircraft otherwise OPS may crash. Click and select one of the engines. Now, look to the right of the LOD tab and select "Properties". This is the tab you will use the most while editing the DM for aircraft. Notice the data for the engine. This fairly self-explanatory however I strongly recommend you study the Openplane documentation to understand why everything is as it is.

Now click the LOD tab again (always do this before selecting another part of the aircraft). Click on another part of the aircraft. Let's click on the base object of the Ju88, the centre fuselage (the base or "parent" object will be selected when you first load any aircraft sm file). Click the Properties tab again to view the properties for the centre fuselage. Now, most of the stuff visible here you don't need to worry about because this data tells SDOE how the plane itself reacts, as well as a small portion telling it how the plane takes damage. Please see the screenshot from OPS below:

Before we ANY further, let me explain some things in OPS you will need to know:

I will be refering to properties or prop lists in this tutorial and this is a "Property List" or "Prop List" in short below:

Prop Lists vary from object to object but you can edit them in the same way.

Here's the Model panel in OPS. All 3D hidden or unhidden objects show up in a Windows folder-like hierarcy indicating parent and child objects:

As you can see circled in the largest image above, the obDamage property defines the damage properties for the object selected ONLY. Obdamage is a Openplane "keyword" that SDOE reads regarding damage modelling. For example, the centre fuse is selected above (yellow box around it), and it has its own damage properties. All other parts have their unique damage properties (among others) too. Click the + next to obDamage. (if you're wondering what obDamage means, please refer to the Openplane Documentation)

You should now have this:

Now, the Openplane documentation will define what the above "keywords" such as obHits and such mean, but I realise I will have to, for the sake of this tutorial, give you some idea too. Obhits describes how many hits the selected object can take before it carries out whatever is listed on the next line/s. Please note that hits property and its associated value has nothing to do with bullet or cannon hits. Hits simply refers to beating the object can take. Hits register in SDOE from anything including bullet fire, the object scraping on the ground, colliding with another object or the ground almost anything. In this example, upon reaching 200 hits, the main fuse will explode. The force in pounds (x) and visual size (y) of the explosion is defined here also as x=2 y=20. You may notice that some objects have a "obKillDelay" property with a value representing seconds in time. This means that SDOE will delay deleting or "killing" that object by the time specified. This is useful on engines when damaged so they stay put on the plane instead of being deleted. If an object has a obKillDelay value of 0, it will never be deleted and this is ideal for object that shouldn't detach when damaged fully. Got that? I hope so. I will go through everything again at the end of this tutorial just to refresh your mind.

Now, in addition to the above damage effect (taking 200 hits and exploding), this part also has what I call "step damage modelling" or "step DM". What this means is that on its way to reaching full damage, the object will peform several other minor damage effects. Still looking at the small image above, you will see another Openplane keyword, "onDmg". This I assume means "On Damage", that is, on taking so much hits, I will do whatever is defined under me. So, in this example, upon the fuse taking 1, it will perform the damage effects described underneath it (this can be seen by clicking the + next to it. Now, here's the important part: notice I didn't say "upon the fuse taking 1 hit" above. I left out hit because that is not its definition. The onDmg property is defined in percentagesof the obHits value above. For example, the total damage the fuse can take is 200 hits. Upon reaching (onDmg) "1", or 10% of 200 hits (20 hits), it will perform the stated effects. That is, the numbers in the above image: "1", "2" and "4" next to the onDmg values indicate percentages of the obHits value above them. 1 = 10% 2= 20% and so on up 10 which = 100%. Thus, the onDmg value shouldn't exceed 10 (100%). You can have up to ten onDmg properties on one object with 1 to 10 values in ascending order (it is importan they are in ASCENDING ORDER), but no two onDmg properties on the same object should have the same hit percentage value. Go ahead and expand the first onDmg property...

Now as you can see in the next image above, you will see the following under the first obDmg property. What does this mean? Let me explain. This means that upon the fuselage reaching 10% damage or 20 hits, the object "mainpanel1" will "unhide". Usually, if I want to simulate visual damage, I will re-texture a copy of a part and hide it. When an object is damaged to a certain extent, it will unhide that hidden part. I will usually position the 3D damaged part just over the undamaged normal panel so when it is unhidden, it will give the impression the undamaged part has taken hits and is damaged visually. If you're familiar with my Ju88 DM, you will probably guess that this means the damaged cockpit will appear over the normal functioning cockpit panel and you'd be right. You will notice later that some objects have more 'commands' under their onDmg properties. Also notice that the value for obUnhide has a little ' in front of it. This is a sort of quote. Whenever a specific object is specified in Openplane, it should have a ' in front of it, example: 'mainpanel1. Also remember to consult your Openplane documentation for the definitions of obHits, onDmg, obUnhide, and so on as needed. PS: You may be wondering how I made the damaged cockpit...the answer is, I didn't. I just copied the original cockpit, and deleted the copy's instruments so it looks blank. Then, I moved it into position (something you'll learn how to do later) just over the original cockpit and hid it. I then made a call to unhide it when the cabin takes damage (which can be seen in the image above). Simple!

Now collapse the onDmg 1 property and expand the next one. It should like like the image below:

As you can see, when the fuse takes 20 hits, it will perform the following: Unhide 3 damage parts and execute a right wheel brake failure function. Functions and executing them will be covered later in the advanced DM section. For now, though, let's examine in further detail this hiding and unhiding procedure. As stated above, visual damage I achieve by hiding the damaged parts and then unhiding them when the normal part takes enough damage. But this is only a visual thing, the Flight Model is not affected in any way. So, in my DM, whenever a part unhides, I also execute a function to affect the planes flight model in that part's area(FM) or fail one of its systems it is related to as seen above. The above image states that upon taking 20% of 200 hits, two damage panels will unhide (over the front fuselage) and a brake failure will be called on the right side landing gear. Why brake fail? What has that got to do with the fuselage? I just assume a brake line to that side from the cockpit has been cut. If it can happen in the real world, why not include it?

Now, you've learned how to make the damaged objects unhide at certain damage levels, but how the heck do you get the damaged part in there in the first place!! OK, listen carefully, this is important and quite challenging...

Close OPS and restart it. Locate the unzipped download archive of this tutorial download and open the "Section 1.0b Test.sm" file in OPS. This is a normal unmodded Ju88A4 that you will use to model your very own DM!

Load the file, look at the left panel in OPS.

You will see a part list. Notice that there are "Parent" and "Child" objects in OPS and Openplane. As you can see, "Ju88A4" is the parent of all its children under it. Example: The wings are children of the Ju88A4 Fuselage. Just like folders in Windows, Child objects may have additional children and this is indicated by a + sign next to the parent. Now, we are going to model damage to the left inner wing!

Click on "leftWing". Click the + next to it. You will now see its "children" as below:

As can be seen above, you will notice that the left engine and wingtip are also children of the left inner wing. You may also notice a yellow border around the selected part, the leftWing.

Now, in order to simulate visual damage to this part (as bordered by the yellow box), we will need to make a copy of it and hide the copy until it is ready to be unhidden to simulate damage. Making sure the leftWing is still selected as above, click the copy button in OPS. This can be done by selecting: Edit | Copy in the toolbar. Another important point: whenever you copy a parent object which you have done now, all its children are copied and will be pasted too. Now, minimize OPS. DO NOT CLOSE IT! Start another instance of OPS (without closing the minimized one). With the second OPS open, select File and open another plane, any plane! P51, B17 ANY PLANE EXCEPT THE JU88A4. Right, with it open, Save As... immediately onto the Desktop as "PARTS.sm". Why? Because we are going to export the copied Ju88 leftWing into this file. Why? Because we need to give it a new texture so to do that we need to paste it into another aircraft file that doesn't use the Ju88A4.tif texture. Now, without selecting another part of the 'other' plane, (make sure the main fuse is selected) paste the leftWing into this PARTS.sm file. Click Edit | Paste. A huge left wing complete with engine and landing gear should have just appeared near the other plane. Also notice in the left panel that this part is renamed from "leftWing" to "leftWing1". OPS does this when a part of the same name already exists in the sm file. Now, we only need the left INNER section as in the yellow box around it above. Click and select the Ju88 Engine as seen below:

Now press "Delete" on your keyboard. POOF! Gone! Because the gear was a child of the engine, that too was deleted! Now select the wingtip and the wing flap and do the same. You should now end up like the image below:

Also, move to the left panel and make sure all other hidden parts attached as children to the wing are gone to. In the end, the "leftWing1" part should have no + next to it as below:

Now, making sure you are saving it as PARTS.sm on the desktop, click Save. Why PARTS.sm? The name does't matter, but I do recommend you save it where SDOE can not access it otherwise next time you fly a plane, you may be in for a shock! Remember, the only reason you paste the parts into another planes sm is to re-assign the texture of that part. Why re-assign a texture? You will need to give that pasted part a "damaged" texture so when it unhides on the Ju88, it will look the part!

Close the PARTS.sm file and OPS. Restart another OPS again. (be sure you still have the Ju88 OPS minimized though). With the PARTS.sm file reloaded, click the "Names" tab in the left panel and locate the new texture used by the new wing you pasted. NOTE: If you have a newer version of OpenPlane Studio, simply double-click the model names in the "Models" tab and edit them directly from there.

Double-click on the texture line circled above. Now add "damage" to the end of the Ju88A4 texture name. The texture should now be "Ju88A4Damage.tif". Save the file. Close OPS, restart OPS, reload PARTS.sm. (don't close original minimized Section 1.0b Test.sm OPS file) You may now notice that the inner part is completely white! Why? well, OPS looked for "Ju88A4Damage.tif" and couldn't find it!! That is, you now need to start your favorite paint program, load a Ju88 Skin and start altering! Close PARTS.sm OPS and do this now. Open any Ju88A4.tif file in your image editor. Now, find the left inner wing section, the part that will be textured onto the inner wing part you just pasted. Add some damage effects like bullet holes, burn marks and whatever you fancy, if you are no good at doing artistic stuff, just color it some outrageous color, just to see whether it will show up in OPS. Save the edited damaged texture file as "Ju88Damage.tif" in the "textures" folder under "Ju88A4" in the "aircraft" folder. That is, save it in: "Media\Aircraft\Ju88A4\textures\". Now, start another OPS, (still keeping that original OPS minimized), load PARTS.sm again. TA DA!! You should notice the inner wing floating above the 'other' plane as shown not too far above but this time with a nice (or not nice) damaged texture! Now, all you need to do is put this re-textured part back into the original Ju88 OPS file you have minimized. But first, let's 'clean up' the inner wing of PARTS.sm. Click and select the damaged INNER wing you pasted with its new texture, and click the "Properties" tab in the bottom of the right OPS Panel. You should see this:

Now, the fun part! Because this wing is just a "dummy" and is there for visual damage purposes only, you will need to strip it of ALL its existing airfoil and body part properties, otherwise this wing will register as a normal wing and add extra drag. Starting from the bottom of the list seen above, right click on a property and select "Delete". Do this to all the properties until you have only "Comment" remaining at the top of the list as seen below:

That's all!! The new "damaged" wing is now ready to be put back into the Ju88! With the part selected as above, click Edit | Copy. Close PARTS.sm. Restore ORIGINAL Ju88 OPS file from the taskbar. You minimized it earlier remember? Good. Now, Click the Ju88s left inner wing again as seen below, and click Edit | Paste. An important note about pasting objects in OPS. Make sure you have an object selected before hitting Paste. If you don't, the object may not appear and/or will not have a parent or child. When making your own damage panels in the future, try pasting the damage panels as children of the undamaged part. Remember that whatever you have selected when you hit paste in OPS, the psated object will become a child of the object selected when you pasted. That is, in this case, we are pasting the damaged version of the left inner wing. We should select the original undamaged left wing inner and THEN paste so that the pasted damaged object will be a child of the undamaged wing. This is important, because if you, for example, select the main fuselage and paste the damaged wing as its child and then move the damaged wing inner into place, when the original wing becomes damaged, the damaged wing will be commanded to be unhidden, and this will work, however, when the left inner wing original undamaged becomes damaged, the damaged version will still stay in place because it has nothing to do with the undamaged wing, it is not a child of the undamaged wing. If you are still confused, think of it like this, when you move the wing inner in OPS, the wing as well as the engine and the wing tip moves with it. Now, if you move, say, the tail, it has nothing to with the wing, it will move on its own. Same applies in SDOE. If the damaged version of the wing is not a child of the undamaged version, then when either one tries to detach, the other won't because they are not related! Got it? Good. If not, read it over again.

The new damaged wing should have appeared somewhere near the Ju88! See below:

(NOTE: Right-click and drag an empty background area to view the viewpoint around)

Now, you will need to re-position this damaged wing so it is*just* above the original wing. To do this, click the movement controls as seen below:

Make sure the controls are selected as above. Now, click the damaged wing to select it. Now drag it around to its new position! be careful not to get it too close to the original wing otherwise you will get "flickering" in SDOE because the two models are too close together. You may have to zoom in using the magnifying glass control and left clicking dragging to zoom. And also right click and empty area and move the mouse to rotate the view. Remember to select the control to move instead of zoom again. When the damaged part is in position, great! It should like below:

WARNING: If when you are moving a part, you accidently select a different part and move it, even slightly, UNDO THAT CHANGE! As I've learned rather harshly from experience, if you move a flap or propellor or any object that is animated (has a DOF), then it MAY lose its animation (DOF) properties! This is not desirable! Be careful when moving a new part into place. If you move it under another part, where you cannot see or move it, then undo your changes. Ctrl Z undos in OPS quite a few times too, so multiple mistakes can be reversed.

 

If the new texture doesn't show up, or appears mixed up, then try the whole above procedure again. If everything looks fine, great! Now, all you need to do is hide this damaged part and make a command to make it appear when the original wing takes damage. To hide the damaged wing inner, click on it or select it from the left panel in OPS. Click the properties tab on the right panel. Right click on the "Comment" property, and select "Add" from the menu. In the dialog, type in "obHidden" in the "Name" field. Leave the "Value" field blank. Save the file regularly. Once you reload the file, it will be hidden. Once it is hidden, you won't see it in OPS and the only way you can select it is if you move to the left panel and select the part. You can then move to the right panel in the OPS and observe and edit its properties. To unhide it in OPS, just delete the "obHidden" value by right clicking it and selecting "Delete" from the menu. Reload OPS and the part is back! But for now, it should be hidden. You've already learned the concepts above about unhiding on damage and such, but let's go over it again.

Move to the left panel and select "leftWing". This is the original wing. Now, move to the right panel in OPS, select the "Properties" tab. Move to the "obDamage". Click the + next to it. Now, the wing already has an onDmg property that states that on 10 (100% Damage) it will detach. We need to add another onDmg property above this (onDmg properties should ascend according to their values from 1 to 10). Right click on the existing onDmg property. Select "Add". See below:

Now, you will see a dialog box. In the "Name" field with the drop down menu, type "onDmg" without the quotes of course. Leave the "Value" field blank. Hit OK. You should now see a new onDmg property. See below:

But because our onDmg will have a lower value than the one above it with 10, we will need to move it above it. Right click on the new onDmg value and click "Move Up". Now, double click the new onDmg value and type 1 or 2. The higher the number, the more hits the wing will take before it unhides our damaged wing. I usually make it around 1 to 3. Now, in order to make a new value underneath our new onDmg value (that is, create a + plus mark next to it), right click the new onDmg property, and click "Append". In the resulting box, type obUnhide and 'leftWing1 (which is the name of our new wing) in the value field. See below:

Now the onDmg property should be like this:

So, when the left wing inner takes 20% of 50 hits, it will unhide our new wing!! Save the file as "Ju88A4.sm" so SDOE can read it.

CONGRATULATIONS!!

Now, fire up SDOE and see how you go! Please keep this sm file you made now as you will add to it in the following section.

END OF SECTION 1.0b

As you've just learnt (hopefully), objects in Openplane have their own individual damage properties. Also, parts have a limit to the hits they can take as defined by the obHits property. Objects can also have step DM to define what how they will react when they receive more and more hits on the way to the maximum allowed.

Now for the test. I believe I have covered enough of the basics. You should have learned enough to model your own visual damage to an aircraft!!

To test yourself, and apply the knowledge you have learnt here and try to make a Damage Model for the entire left wing, not just the inner. You may want to start with the "clean" Ju88 and go from there, or just continue with the one you just worked on. (be sure you back up the one you worked on though)Happy Modding!!

2.0. Advanced Openplane Damage Modelling

2.0a. Engine performance damage modelling:

Now, you've managed to make visual damage occur right? If you have, then consider yourself very bright :). If not, then it doesn't hurt to try again, the results are well worth it. The damage modelling you have learnt so far has only taught you how to see visual damage, and while this is not a bad thing at all, anyone with a desire for realism will want to advance. By the end of this tutorial, you will learn how to add drag to that damaged wing or engine and gear failure and much more! This section assumes you know basically how to Open and Save files in OPS, move parts around, export and re-texture parts then re-import them again, and basically that you are familiar with OPS and Openplane.

If you thought section 1 was hard, then brace yourself for section 2! Although this section involves more data entry work in OPS than moving parts around and re-texturing them, the stuff can be quite complex. Anyway, you're still reading, so let's begin:

Before beginning this section, please read the Openplane Documentation as much as you can. It doesn't matter if you don't understand some things, just try to concentrate on the damage section of the documentation. Take in as much as you can. Also, since we are dealing with damage modelling, read up on engine properties, what each property means in the engine section, things like smoke trails including colors and densitys, engSFC (engine fuel consumption), engGearRatio (just that) engMaxHP (engine maximum horsepower) and so on. These properties can be added to the step damage section with reduced or increased or new values and it will work! Also read up on tires, their behaviours and properties in SDOE, and related material.

In this section, we will be modelling damage to the left engine. After, you will be tested by being tasked to apply your knowledge to the right engine. Please retreive your sm file you modified earlier with the left wing inner damage. We are now going to add to it. As in my Ju88 DM v6, we will model coolant leaks and engine splutters. Open your Ju88A4.sm file in OPS.

Select the left engine. Click the Properties tab. View the obDamage properties and values. You won't see much, just one step damage level (onDmg 1), and that has a smoke trail for the engine. The engine itself will not lose power or splutter when damaged or leak coolant. Let's change that :)

Your right Properties panel should look like this:

OK, examine the area boxed in by the red lines above. This is the area we will be dealing with since it is the section dealing with damage and this is, after all, a damage modelling tutorial. By looking at the above, you should be able to see that the engine has a 300 hit count, will explode with a force of .7 LBs and 30 visual units. And, it also has a obKillDelay property. The value for this should be changed. As it is now, the engine would become deleted after 2 minutes (120 seconds) of receiving its full damage. So let's clean up the upper section before venturing into the onDmg section below it. First, we don't want the engine to become deleted or "killed" at all. Your plane would look like a glider after severe damage if we did. So, double click the obKillDelay line and in the "Value" field, change the number from 120 (seconds) to 0. Click OK. If you've been studying your Openplane Documentation, you'd know that a value of 0 means the object will never be deleted and a number with a negative in front of it won't start the timer until that part hits collides with another or the ground. If you didn't, you know now! Also, moving up slightly, the obhits value needs to be changed. 300 hits is WAAAAAYYYY too high! Most fighters have an engine hit count of 40, and the B17F has 50 for each engine. Radial engines should be allowed to have a slightly higher hit count because they have no coolant to leak. My Ju88 DM version 6 has 40 per engine. So, change this to a more respective number. Next, the obExplodes property. Now, I'm not too sure about you, but I reckon the engines should explode so much that they throw off course when they give in. Although my current DM has this, the update coming up will not have the obExplodes property. I will leave this up to you, you may want to tone down the explosion though (the first value, .7). Something like .3 or .4 is not too bad, or you too can just delete it and see how you go.

Now, with the engine properties refined, let's put some step DM into it! Before we do though, let's append the existing one. It states that after 10% damage, a smoke trail with a fire will break out. In my opinion, this seems a little harsh, especially after 10% damage. I'm sure you know your way around now, so I'll lose the instructions slightly OK? Change the onDmg value from 10% to say, 90%. Also, append a engMaxHp property to the onDmg property. By looking at the engine horsepower values above, reckon what they should be after the engine is 90% damaged and enter this in too with a comma and then the rpm value it will be produced at. Next, increase the smoke diameter to 5 and reduce the lifetime to about 20, and delete the smoke origin value and property. Done? Dont worry, here's a pic of what it should be like below. If your values for power and some others are a little different don't worry, just make sure the structure is correct:

We've now refined the last stage of the step dm for the left engine. Now, let's make some more steps above it defining more minor damage. Go ahead, add some more onDmg properties above the existing one. Just right click the obKillDelay property and select "Add", and type in onDmg. Do this another four times. Now, starting with the top-most onDmg property, type in 1. Next 2, 4, 6 in that order. To do this, double click each onDmg property and type in a value in the box, hit OK. See below:

Notice that the values for onDmg properties are in ascending order, from 1 to 9. This is important. Now, let's assign some things to happen when the engine takes 10% damage (onDmg 1). For starters, when the engine intially takes damage, what do you will occur, this question depends on the plane and type of engine. The Ju88A4 has water cooled engines so coolant leaks should be modelled. But before the coolant leaks, let's make the engine lose just a tiny bit of power. It has 1340HP, so append to onDmg 1 (right click it, select "Append") and type in engMaxHP in the top field and in the bottom field, type in 1200, 2300. This means that the engine will reduce power to 1200HP @ 2300 RPM when damaged 10%. That was simple wasn't it?! Now, collapse the onDmg property (click the - symbol next to onDmg 1) and append to onDmg 2. This time, reduce the power to 930, 2000. Collapse onDmg 2. Select onDmg 4. Append and add a smoketrail. How? Simple, if you've been reading the Openplane documentation, you may be beginning to understand now, but here goes anyway, append and select obSmokeTrail. Hit OK. Append to the obSmokeTrail property and smkDiameter of 3. smkColor of 180, 205, 165. Those three numbers 180, 205, 165 are RGB values so by opening you image program and choosing your color, read it's RGB values and input them! Note, if you don't add a smkColor property, SDOE will default to black, 0,0,0 RGB. Next, add smkLifetime of 15 seconds. That means after 15 seconds, it'll go out. Don't add a smkFire value, the engine is not damaged enough yet :). You've just added a smoke trail, but that's all that'll happen after 30% damage. Let's collapse the smoke trail property, and add a engGearRatio under it. Make it 6. This will make the engine run erratic as well as leak coolant. OK, collapse onDmg 4, select onDmg 6. Add a eng power rating of 500HP @ 1000 RPM. Give it a black smoke trail that lasts 30 seconds and is 5 in diameter. Give it a fire also. Save. OK, if you're property list (prop list) looks like the one below, give yerself a HUGE pat on the back!! If you are wondering how to model engine seizes as I have in my latest Ju88A4 DM, learn as much as you can about the stuff below and then come back here to see this: Simply hide a "dummy" propellor with no airfoil or DOF propeties on the front of the engine (make the dummy prop a child of the engine itself, not the original propellor )and give the original propellor a function to kill itself real quick and unhide the hidden dummy prop. Tell the related engine to call this function when it reaches severe damage. Don't forget to register this function with the main Ju88A4 model as with all the other functions. You may have not understood that yet, but finish this tutorial and come back and read it again, I bet you'll know how to do it then!! Or, just open my DM v6 and see how I did it! There are still many other concepts of engine DM I haven't introduced to you since I haven't tested them out myself and the stuff here is 101% correct to me, as it has been working on my Ju88 DMs up 'til version 6!

Now, we've covered most of the engine damage aspects of damage modelling, however, please note that there MANY other concepts out there CAN be modelled, from oil lines cut to engine cylinder failure! In this tutorial, there is still FM DM to go and activating airfoils with damage prop lists and activating brake and gear failures with functions (obFunc). Have a go at these:

END OF SECTION 2.0a

As part of the end of this section, the test is here once again! You are tasked with working on engine two's DM as above, but vary some damage values slightly so every engine won't get damaged in exactly the same way, for example, you may have a whole list of onDmg properties from 1 to 10 with different things in each, experiment with the engSFC value to simulate fuel leaks, and so on, whatever you do, don't copy the engine 1 above! You can choose to, but I don't to vary the engine DM outcome. Good Luck.

2.0b. Functions (obFunc), executions (obExec) and airfoil drag damage modelling:

Now we're getting somewhere!! If you've read this far and taken it all in, you might as well go ahead and start DM-ing all over the place!!

Right, Open OPS once again. Load your file you've been experimenting with. Hopefully, by now, you'd have the left inner wing AND the left wingtip showing visual damage, and the left engine leaking coolant like no tomorrow! Excellent. Now, that work you did on the wingtip, make sure it's working and all in order, now, we are going to take that one step further, and add drag to it when it becomes damaged. Afterwards, we will model brake failures for the left engine's gear and tire punctures. After all this, you'll be tasked with doing it all again for the right side of the plane (!). Don't give up now!

obFunc and obExec work hand in hand. obFunc stands for Object Function. obExec = Object Execution. These concepts are also fairly new to me, however I have had quite a few hours working on them and I feel I know enough to teach others at my level of knowledge. Why use obFunc and obExec? Well, there are times when the step damage prop list won't perform the more advanced functions like gear failure and such. There are some values that won't be activated when placed under onDmg. Namely, airfoils. This is where obFunc and obExec come in. The MOST important thing to remember about obFunc and ObExec is that they will refer to model names and function name. Make sure the names match so SDOE knows where to find them!!

With your Ju88A4.sm open in OPS, click the Properties tab. We are now going to add some drag to that left wingtip when it becomes damaged. Before we continue, let's get acquainted with airfoils. What the heck are airfoils?? If you know your physics, you would know that they are specially shaped objects that are designed to make sue of the air flowing around them and perform such as lift or downforce. A spoiler on a racing car is an airfoil. A wing on a plane is an airfoil, hell, if you stick your arm right out the car window while its moving at a reasonable speed (be careful ;) and rotate you palm its angle of attack changes as the wing goes hits it, you will notice it too will rise and fall like a wing, and it too can be considered as an airfoil!! So, in conclusion, an airfoil is any object properly shaped designed to use the airflow around it to perform such tasks like lift, downforce or in this tutorial, drag. SDOE uses airfoils extensively in aircraft and weapons however you don't need to model a nicely shaped object for it to be recognised as an airfoil! If you managed to fly extremely fast in SDOE (about 600mph) and fire a rocket or drop a bomb, you will notice the weapon 'overspeed' because its airfoil properties are not designed to handle the air ramming against it so fast! The weapon will begin shaking erratically, or in the case of a rocket, fly completely somewhere else! The Drag.sm file in the sm files folder of this tutorial download will be used tosimulate drag in this section. It is actually a mk82 bomb renamed to Drag! Its airfoil properties will be reduced slightly to cause less drag but, you will learn how to copy and paste airfoils too.

Assuming your Ju88A4.sm file is loaded and ready in OPS, select the ultimate parent object of the Ju88, that is, the front main fuselage. Hit the properties tab and scroll all the way down. Right click the last property. Click "Add". Type in "obFunc" in the "Name" field. Hit OK.The functions to be carried out must be listed in the main parent object and information regarding which part and function on that particular part will be called is entered here too. The specific commands to be carried out are entered into the prop list (property list) of the object set to use them. More info later. Right click the new obFunc property (prop). Click append, and type "obExec". Hit OK. Right click the obExec prop and click append again. Type in Name in the name field. Hit OK. Right click on the Name value you just made and add another name, called Func.

Now we will move to the wingtip. It needs an extra airfoil. Minimize this OPS session, open another OPS session. Open the Drag.sm file. We will now copy one of the airfoils from this bomb and paste it near the left wingtip of the Ju88. It will remain inactive until a body part takes damage and a function calls it to spring into action. In OPS, the airfoils are represented as tubes. The positioning of these tubes dictates how much drag they will cause too. The airfoil "tubes" are invisible in SDOE and at times, you will have to add a smoke trail to the function to activate the airfoil, so when the function to activate the foil is called, you will see a smoke trail and know that the airfoil is in use. Later, when you're sure everything works, delete the test smoke trail and you're done! But for now, we have a while to go. So, let's get right back into it! With the Drag.sm file open in OPS, expand the bombs model list on the left panel until you see "Airfoil1" and "Airfoil2". We only need one of these airfoils. Rotate the bomb so you're looking at it rear-on. Zoom right in. You should see some orange tubes embedded in the centre of the bomb. Click the move button in the OPS toolbar and select the "Part" mouse mode (little yellow wing icon). Click and drag one of the airfoils out of the bomb. See below:

Now, click the Copy button to copy the airfoil selected. Close this session of OPS without saving. Un-minimize the other Ju88A4.sm OPS session. Click the left wingtip and hit paste. There you go! One more airfoil for you! If you can't see the airfoil, try turning the plane upside down, you may see it near the rocket pods! As before move the airfoil into position as seen below. The "air" will flow through this "orange tube" wherever it is positioned on the plane and I think the angle it is positioned at also affects the drag characteristics. This airfoil has too much drag data in it though, but we won't be tweaking with that yet.

By making sure the left wingtip is selected before pasting, we are ensuring that the new airfoil will be a child of the leftwing tip. Now, Go to the prop list of the airfoil. See below:

Double click obProto and erase anything already in there and type in "CAirfoil". Expand the rest of the prop list to see how things are. You will notcie how there are already obFunc in there! Although I renamed the obFunc ID from "activate" to some more specific such as lwtdrag (left wing tip drag), you don't have to if you don't want to. Now, this airfoil will remain inactive until, as stated before a part calls its function and kicks it into action! This is all you need to do with this airfoil now. OK, go back to the Ju88 main fuse. Go to the prop list and scroll down the obFunc you made. We will know fill in the Name and Func fields you left blank. In the name field, type the name of the object to be called. In this case, as can be seen in the model list under "WingTipL" in the Ju88, "airfoil1". In the func section, type "activate" as seen in the airfoils obFunc. OK, now the airfoil is ready to be used, its functions are registered with the Ju88A4 base model, but it needs some part to tell it when to activate! Click the main left wing tip. Open the prop list. Add an onDmg prop. Append to it as "obExec" and append again as name. Give the name a value of 'Ju88A4. Add to the Name prop as Func. Give Func a value of 'activate. In case you're lost completely, here's some pics below!

I renamed my "activate" values to "LeftWingTipDrag" as seen below. I you are wondering how I renamed the activate value to something else, I didn't technically. I just added another obFunc below the original one and copied the airfoil data but named the function LeftWingTipDrag instead. That's the only way I know I renaming function names anyway, just make a copy the function data and give it a name of your choice, then delete the original. I did this twice, one for each obFunc and then deleted the original "activate" airfoils! Simple!

Then in the Ju88 Fuse, the function is registered like so:

Be sure that your function names and IDs match otherwise SDOE will give you a no go! Notice that I renamed the model of the airfoil from "airfoil1" to "lwtdrag". This is done by first saving then reloading the file in OPS, switching to Names tab in the left panel in OPS and finding "airfoil1". Double click it and edit its name to what I've done: lwtdrag. The Ju88 obFunc tells SDOE which model to carry a function. In this case, lwtdrag. Then the next line "Func" tells SDOE which function to carry out on that specific model, in this case, LeftWingTipDrag as renamed in the airfoil prop list (it would have been "activate" if I didn't rename it).

Next, I choose a part to call the function when damaged, the left wingtip:

As you can see above, upon reaching 20% hits, the left wingtip will unhide a damaged version showing damage. This is a visual thing only. For the Flight Model to be affected, I've called the Left Wing Tip Drag function using obExec to pull the plane to left to simulate severe wing tip damage. The prop list can be seen above. The prop list first calls the Ju88A4 model and specifies the function to be carried out. The Ju88A4 model then specifies which body part the function is contained in as well as the function name. This all happens in a split second in SDOE! Got it? I hope so.

I don't expect you to understand it all or any of it straight away, but open my DM and see how things are and then read this section over and over until you get it. It works. If you still need help, contact me. Next up, flat tires, gear failure and brake failures!

When you do understand it, play around with the drag airfoil properties. Refer to the Openplane documentation for definitions of airfoil properties. You can even open my DM and see how I've adjusted the values.

END OF SECTION 2.0b

2.0c. Gear Failure damage modelling:

This section isn't any easier than the ones above, but it can be quite exciting to work with. Please note I did NOT come up with the idea and procedure for the brake failures and flat tires, however I did some tweaking on my own and my methods may be slightly different from others who forunded these concepts nevertheless, they DO work just as well.

Before we venture down to the wheels, let's start with gear failure, a concept I discovered on my own while toying with obFunc and obExec. This is really quite a simple procedure and anyone can do it their existing planes without much work:

Start OPS and load your Ju88A4.sm file you've been working on during this tutorial. With your mouse, select the left upper gear strut as seen below:

Now, we need to give this part a function (using obFunc) that tells it to "kill" itself straight away when damaged and then unhide another "dummy" gear strut that we will place in the gear well to show that the gear has failed. Remember, this is MY way of doing it, you may well discover other ways even, better ways of achieving these effects, but here's how I do them. Now, with the upper left gear strut selected as above image, go to its prop list (property list). All you do now is right click the comment property and select "Add". Type in obFunc in the top field. Hit OK. Now right click the new obFunc prop you made. Select "Append". Type in a unique ID for this function. For example, in my DM, I called it "Stuck" as in left gear stuck. You may call it anything, but keep it short, one word if possible for clarity. Now, the next thing to do is specify the command that is to be carried out. Obviously, we want the gear to be gone when damaged, so using obKillDelay is very useful. Also, because the dummy gear will unhide to make it look like it's stuck, we need to get rid of this normal strut as quickly as possible so no one sees two struts at the same time! Make the value for obKillDelay .1 seconds. Append to "Stuck" and type in obKillDelay and hit OK. Make the value for obKillDelay .1 as said before. Now, we need to make a copy of the existing gear strut and paste it in the gear well as the "dummy" damaged gear strut to unhide when this damage occurs. With the upper strut still selected, click Edit | Copy in OPS. Now, move to the left panel in OPS and select "gearLeft" model in the model window. See the image below:

Why select "gearLeft"? Because we want to make the new dummy gear strut a child of "gearLeft" just as the original one is. Now, hit Edit | Paste. You will notice a new model appear in the list under the gear door models. See below:

Notice also that is has a 1 attached to its name because there is already another model with the same name. You can change this name to anything you like such as "damagedgearstrut" or similar, just remember that you have to change the obFunc reference to the name. Now, we are not done with the dummy gear yet. Select the dummy gear you selected and move it out of place into the open. Be sure the model list on the left doesn't change to select the original gear! We only want to move the new dummy gear. See below:

Now, select the dummy strut's wheel, and hit Delete on your keyboard, we only want the strut of the dummy gear, not its wheel. You should end up with a strut below:

The dummy gear still has all the properties of the original gear. We don't need or want these properties as the dummy is just that, a DUMMY strut. It is only there for visual purposes to show the strut stuck in the gear well. Just as you deleted all the properties for the left wing inner earlier in this tutorial, go ahead and delete all the props for the dummy EXCEPT for the "Comment" property as before. I'm sure you know how to do this by now so no image will be shown. Done? OK, we now need to position this dummy strut in the gear well. You can select the lower dummy strut and rotate it as I've done to show it's been damaged if you like. Just make sure it doesn't protrude through the gear doors when the gear gets damaged and the doors close. See how I've positioned it below:

Now, all we need to do now is hide this dummy strut so it will only unhide when the gear is damaged and thus, stuck. Give the leftGearStrut1 (the dummy gear) model a "obHidden" value. Also, click the "DOF" tab in the right OPS panel and delete any DOFs in here by right clicking the base of the DOF tree and clicking delete. Do this until the DOF window shows no data. DOF stands for "Degree Of Freedom" and is used for animation of objects in SDOE such as gear and flaps. Ailerons and elevators also use DOFs. But since our dummy gear is just meant to be stuck, we don't need any DOFs for it. Once this is, select the main left upper gear strut that you added an obFunc to not too long ago. In the Stuck (or whatever you called it) function properties, under the obKillDelay, add "obUnhide"and make it unhide the dummy strut we just pasted and put into position. Remember to put a ' in front of the model name. Also, you can choose to leave the dummy tire on the dummy gear strut but just make sure you maintain the disguise! That is, if people see a tire being deleted and being thrown in the air as the gear gets damaged, then they will find it hard to believe that 'same' tire is still sitting in the gear bay when they try to retract the damaged (dummy) gear!! You can of course make a new function to kill the tire as soon as possible (obKillDelay .1) when the gear gets damaged and then most people won't see it drop from the plane (it will be killed by then) and will believe a tire remaining in the gear well when they see it. See the image below:

Now we need only register this function with the base Ju88A4 model and then make an object call this function when it becomes damaged. Select the base Ju88A4 model as seen below:

Now go the prop list. Scroll all the way to the bottom. Add another obFunc as you did before to the left wing inner:

Make sure its properties and values match those in the image above (unless you renamed the models or functions). Use "Append" to make a plus below the existing prop or value in OPS and "Add" to add a new property below an existing one (on the next line). Now, all you need to do is make a part of the Ju88A4, any part, call this function (activate it) in its step DM onDmg property list. In my DM, I make the engine damage call the gear stuck function because the gear sits near the engine. You can put a call to this gear stuck function on any part though but in my experience, try not make the part that has the obFunc call that same obFunc (as obExec) in its damage property list, conflicts may result. For example, if a tire has a function kill it, (as obFunc) then don't make that function execute in THAT SAME tire's onDmg list. Tyr it, maybe it DOES work, but I've never recommended it. Here's what my DMs left engine damage prop list looks like:

NOTE: Your prop list DOES NOT HAVE TO MATCH THE ABOVE IN EVERY WAY. However, look at the 40% onDmg value boxed in the image. Notice my engines calling the gear stuck function as well as showing visual damage (obUnhide 'engLeft1,2,5) . Also notice I have increased the engine gear ratio to make the engine run erracticly. There is also a smoke trail added. You too can take the above as an example for you DM work.

END OF SECTION 2.0c

OK, did you understand that fairly well? Do you think you can do the same for the right gear?? Try and see. Refer back to this tutorial and the Openplane Documentation as much as possible. Make sure you read up on tire and brakes before continuing if you haven't already.

2.0d. Brake Failure damage modelling

Assuming you're quite skilled with OPS now and have a reasonable understanding of how to create functions and execute them. We will move down to the wheels and model damage to them. obFunc and obExec will still be used extensively.

Start OPS, load your Ju88A4.sm. The reason I am going to show you the brake failure DM first is that brake failures are considered more minor than flat tires and in my DMs, usually happen before punctures so here goes.

Select the left main wheel on the Ju88A4. View its prop list. Now, if you read your Openplane Documentation, you'd know tires can have a brake property known as tireBrake. Any tire with this property (no value needed), SDOE will apply brakes to it when you give the wheel brake command. Tires can also have ABS! (Anti-Lock Braking) But we will not be altering the existing tires in any way, we will just give them functions. So how will we achieve brake failures? Simple. We will create a copy of the existing tire, and paste it back onto the lower gear strut. We will then remove new tires tireBrake property and hide it. A hidden tire will still roll on the ground so be careful you get your functions right people don't notice an invisible tire on the ground ever! We will then give the original tires functions to kill themselves with a 10th of a second and unhide the new hidden tires! Simple! When you want your brakes to fail, get a part to call the function described and voila! This way, you won't see many tires bouncing everywhere, because everything will tidy itself up, tires that detach will be killed instantly and the hidden tires will take their place instantly. Openplane is quicker than the eye!!

If you're really bright, you may be jumping right into this now, if so, great! If not, don't worry, We'll start now. Make a copy of the left wheel. Now select the "leftGearPiston" model from the model in the left OPS panel (the lower gear strut). Now paste. The new tire will be placed EXACTLY where the existing one is! DO NOT MOVE IT! Never move objects with animations such as tires or flaps or gear struts (unless you are modelling dummy objects that won't ever move animate again). Once moved, the animations for those objects will be off-balance or have gone completely! Of course, this is what I know, if you think you can do it, go ahead, but there's no need to. The new tire is in the correct position. Now, view the prop list for the new tire (most probably called: leftWheel1). Remove its "tireBrake" property. This tire will be our brake failure tire. Notice the phyLBS property. Be careful with this, because as you start adding tires (even if they are hidden), then you will start adding weight if there is a phyLBS prop. Make sure you reduce each tires weight to match the original total tire weight otherwise you will have one slow Ju88! These things add up so be careful when making copies of objects with phyIBS props. Also, make sure you add a "obHidden" prop to the new tire so it won't show up until its supposed to.

OK, now we have our brake-challenged tire in place, we need to inform the original tire that it should pack up and move on when called upon to and unhide this hidden tire. In other words, let's give the original tire a function. Just below phyLBS, add a obFunc prop. Append to that as the image shows below. You can use any name for the function, however I've called mine LeftBrakeFail which is fairly specific. Now, as in the image, append an obKillDelay of .1 to the original tire and tell it to unhide our hidden brake challenged tire....

Now, just go to the Ju88A4 base model, make an obFunc with a name and func, and add the values as seen below:

As you can see, you are specifying the model name and what function on that model to use. Now, just make a part call this Ju88A4 base model and execute this function. I've made the left engine again activate brake failure as its most minor damage, then flat tires and then gear failure:

Focus on the red box above, with the brake failure command. This is what yours should look like. You can of course put this function anywhere in the prop list at dmg level 1 2 3 or 10! But try to keep it real!! As you may also notice from the above image, onDmg props can handle more than just one obExec (object execution). If you are wondering why I have "LeftTyreFlat" and "LeftTyreFlat2", the first function unhides the flat tire, and the second one cleans up the other brake failure tire so they don't both show up at the same time. It is very important you maintain the disguise that only one tire exists on each strut while in fact, SDOE and Openplane is switching them around, deleting them and unhiding them crazy, but all the while keeping one tire showing on each strut at a time!!

END OF SECTION 2.0c

Now, you are ready to test it out! Hopefully, you understood fairly much what I am saying and you can put a brake failure on the right wheel too!

2.0e. Tire Puncture damage modelling

Flat tires in SDOE as a rule don't really have their air taken out of them! This is still a game remember, a very advanced and kick-ass game, but still, a game. So, how do we achieve flat tires? It's really quite simple, and I must point out once again that I DID NOT found this concept, I credit where credit's due, so credit must go to Raider from the FSIC forum for originally founding it. However you may find that Raider's concept and structure of achieving flat tires will differ slightly from mine. Why? Well, I don't like to copy other people's work "word for word" or "value for value". So I some tweaking around and I came up with a slightly different way of achieving these effects with the same results. By reading OPP Documentation, you may have also noticed that tires have radiuses. The 3D model of the tire itself does not dictate whether the tire will sit on the ground where it is supposed to, thankfully, otherwise we would need a 3D modelling program to alter the tire and even then, it wouldn't turn out like this. Instead a prop called tireRadius is used to determinehow much the tire will "sink" into the ground. This is perfect for modelling flat tires! So, make a copy of the first original tire on the left strut just as you did before.

Now you either go two ways:

1. Export the tire and give it a punctured texture then re-import it, OR

2. Just re-paste and don't worry about texture, keep it original. If number 2, read on...

In my earlier DMs, flat tires had the same texture as the original tire. This is not a big deal, however if you are a hard-core DMer, you may to choose option 1, as I did in my latest DM. BE WARNED: Option 1 is very complex, because we are dealing with an object with a DOF and must be careful when importing-exporting it! You may be wondering what the point is of having a damaged texture on the flat tire, but the answer is obvious, everything else is modelled when textured, why not the tire? And besides, wouldn't you like to be able to tell whether your tire is flat just by looking at it, instead of having to land on the ground and find out?? I think so.

OK, you are certain you want option 2 ay? Go ahead and open OPS, and load your Ju88A4.sm file. Select the left tire again, the original left tire, not the brake failure tire. Now copy it. Select the lower gear strut as you did before and paste. The new tire will most probably be called "leftWheel2" in the model list in OPS. This is fine. You can change to this to something more meaningful like "leftflattire" by going to the "Names" section on the left panel in OPS and double clicking the name you want to change. Be warned however, if you change ANY models name, be sure that the references made to that model by other parts or functions are appended as in the name change, otherwise the 'old' name for the model won't exist and the function associated with it won't work! Now, go to the prop list and remove the "tireBrake" prop. Also, delete the obFunc prop, we don't need that. Why? Well, you can keep it, however I delete it so that a flat tire doesn't have brakes either making things more interesting for the player! All we have to do now is change the tire radius to a lower number. I use .92 or similar. The radius value for a normal tire is 1.75 in case you're wondering. The radius value as said before, dictates how much the tire "sinks" into the ground. See the image below (note, in the image, tireBrake is not deleted, make sure it is in your DM if desired):

OK, we are getting closer to finishing this! As before, switch to the Ju88A4 base model and register two obFuncs that looks like this:

You may be wondering why we are registering 2 functions above in the image and not just one, it is now, that I should point out that if you are going to have brake failure and tyre punctures as well, make sure you add an addition obFunc to the brake failing tire (or the flat tire, whichever tire is unhidden first) to delete it and unhide our flat tire (leftWheel2) (or the other way round, unhide our brake failure tire). You may STILL be wondering why we are making two functions? Well, it is all part of the "disguise". How? As stated above, in Openplane, several parts are sometimes needed to work in conjunction to achieve, what would in the real world, involve only one part. Huh? For example, with these tires. In real, the normal tire just gets holes in it and loses its air. Simple! In SDOE, there's no air in the tires! So, hidden "flat" tires are used to unhide when the normal tire is assumed to be flat. But, we need to get rid of the original 'normal' tire somehow otherwise you'd have two tires on one gear post!! And then, if you're getting a brake failure, the flat tire needs to be gotten rid of too so the brake-challenged tire can make its appearance! If you don't do these things, you'll have 3 or more tires bouncing everywhere in SDOE when one landing wheel gets damaged and you'll effectively "blow the disguise!". So, we need to maintain to the users that only one tire is being used and switchin and out the unneeded tires when, well...unneeded! This also doesn't just apply to tires! As said before: It is very important you maintain the disguise that only one tire exists on each strut while in fact, SDOE and Openplane is switching them around, deleting them and unhiding them crazy, but all the while keeping one tire showing on each strut at a time!! See below:

This is of course assuming you are going to make brakes fail FIRST, and THEN, make flats happen. Now, just get engine 1 to call a flat tire function AFTER its brake fail function (further down in the onDmg prop list). Also notice in the above image how I've reduced the weight for this tire from 50 to 16.6 LBs. Why? well, the original Ju88A4 had two main wheels right? 50LBs each = 100LBs. Now, my Ju88A4 has 6 main wheels! How? Two normal undamaged main wheels, and two flat tires (wheels). Plus two more brake-failed tires. So that's a combined weight of 300LBs!! Instead of 100LBs!! That's a 200LB increase on the original Ju88A4! See how the weights add up? To fix this, I've divided the weight of each of the tires in the original Ju88A4 (50LB) by the number of tires on each gear post in my Ju88A4 DM (3). This = 16.6LBs. Now, having a total of 6 tires x 16.6LBs = 99.6LBs, compared to the Ju88A4 original 100LBs. Not too far off. The only downside to this workaround is that each tire has now effectively lost around 33.4LBs!! This means that they will bounce around a little more happier than before, but it is not outrageous.

Notice how I'm calling two functions at once in the same onDmg prop. This is OK. What will happen now is this, engine 1 gets damaged 10%, original tire deleted, brake fail tire unhidden. Engine takes 20% damage, brake failing tire gets deleted, flat appears. Since the flat is the last tire to appear, and no other tires will become unhidden after it, it doesn't need an obFunc to tell it 'get lost' as it were. Only the very last tire to appear shouldn't have a obFunc. All tires before it (above it in the model list) should if you get my drift. Test it out and see how you go.

OK, my friends, that's it! I hope this tutorial has enlightened you to the wide world of Openplane. There are MANY people out there who know much more than I've explained, but I've decided to at least make my knowledge be known to the world, and it's all above! Just a few words before we finish, be careful when Openplaning, if you make serious mistakes that the Openplane code can't interpret or understand, SDOE may freeze or crash when handling your plane, so be careful and do VIGOROUS testing before releasing your prized labor of love to the community!!!

And you're done!!!!!!!!!!!!!!!!!! CONGRATULATIONS!!!!!!!!!!!!!!!!!

YOU HAVE REACHED THE END OF THIS TUTORIAL!! I HOPE IT HAS HELPED YOU!!!!!!!

*****************************************************************

© 2001 Harman_5. This tutorial and images were created by Harman_5. Activision or Parsoft have NO affiliation WHATSOEVER with this tutorial. You are modding at your own risk. I cannot assume responsibility for damage to you or your computer as a result of you using this tutorial and/or applying its concepts. The concepts described here have ALL been thoroughly tested and DO WORK!

That's about all folks...I think I'll go lie dowwwwn foraa a fewwww yeeeaaaaars....CRASSSHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!!