Beale

Beginners Part Modding Tutorial

Recommended Posts

Part Modding For Beginners

This is part one of a part modding tutorial. This series will take you from creating the model, painting a texture and getting the part into the game.

No previous experience is required!

Part 1

This tutorial will focus on the use of Wings 3D.

What is Wings 3D? It's a piece of 3D modeling software, comparable to Blender, 3DS Max, SketchUp and Maya, for example.

Why Wings 3D?
The software has some great advantages for a beginner:

  • Easy to learn, easy to use
  • Suitable for any part-modeling needs you can imagine

Why not?
There are a few disadvantages to consider, but in this tutorial series, I will demonstrate how to work around them. The disadvantages are:

  • Practically, Wings 3D cannot pre-bake ambient occlusion, it must be painted on the texture manually.
  • Any animation needed by the part must be made in Unity

So, lets begin...

Modeling

So, what are we going to make?

The outcome of the tutorial series will be a part in-game that looks something like this.

gjn74xT.png

It's really basic, but that's a good thing! No need to start too complicated.

This little engine only has two major components.

  • The "Disk", which will connect the engine to a fuel tank
  • The "Nozzle", where the thrust comes out of!


Let's start modeling...

Step 1.
Open Wings 3D, you'll be seeing something like this.

  • A few controls to get familiar with:
  • Space - De-select anything selected
  • Middle Mouse Button - Rotate camera
  • Left Mouse Button - Select
  • Right Mouse Button - Menu
  • Arrow Keys - Pan camera


c56gE8n.png

Step 2.
Right click anywhere, select the small box next to "Cylinder".

CZ0FLBy.png

Step 3.
We're making the disk first, so lets define the dimensions.

The cylinder should have 24 sections, a height of 0.1 and the radius values set to 0.625.

8RZr976.png

Step 4.
Click the "smooth view" button.

JwhyY2p.png

Step 5.
That doesn't look right! This is because the edges are "soft", under lighting they will try to appear as a curve, rather than a hard edge.

1PqSFaG.png

Step 6.
Get into face-select mode, by clicking the face select tool.

2GoOAdg.png

Step 7.
Select both the top and bottom of the disk, with this new tool.

wVPwMn8.png

Step 8.
Now, get into edge-select mode, by clicking the edge select tool.

RcShIWz.png

Step 9.
Now, there we go! We have selected the edges of the top and bottom.

You could select all edges manually, of course, but this is a faster method.

c2He5ag.png

Step 10.
Right click anywhere and select the "Hardness" option.

YiwbHJA.png

Step 11.
Select "Hard" in the new window that appears.
Now, see the results!

The disk now has hard edges!

TetUTz8.png

Step 12.
Now, go back to the face select tool and select the top face only.

The green line in the centre of the application represents "up", so select the face that corresponds to that line.

Once selected, right click and choose the "inset" option.

dU8Jm7X.png

Step 13.
Now as you drag your mouse left and right, you will see the inset marker moving inwards and outwards.

But, we want to be accurate! Press the TAB key to bring up the input menu.

Input 20%.

VamtoJB.png

Step 14.
Like before, select the newly created face in the middle, get the edges selected and turn them into hard edges.

fPRuqXT.png

Step 15.
Now, select the face in the middle, right click and choose the "extrude" option.

L1u27kY.png

Step 16.
In the new window, select "Normal".

ObcfRqZ.png

Step 17.
Like with the inset tool, we can manually extrude by moving the mouse left and right. But, again, let's press TAB.

In the new window, enter "-0.05".

efhCgpM.png

Step 18.
Select the bottom face of this newly created "pit".

Again, grab the edges of this face and turn them into hard edges.

RCrhcdA.png

Step 19.
So, that's the disk done!

Now, we need to work on the nozzle.

1oDwk8S.png

Step 20.
Like we did with at the beginning, create another cylinder.

This one will be the nozzle.

Again, 24 sections. A height of 0.8, a top radius of 0.1 and a bottom radius of 0.4.

xObYGUV.png

Step 21.
Now, with the face select tool, move the camera underneath the disk, hover over the underside face of the disk.

It will glow green, notice in the top left corner, some values have appeared "<0.0, -0.05, 0.0>".

That second value, is Y (Or the up/down height value). This means the bottom of the disk is at Y -0.05.

So, we want the top of the nozzle to be at Y -0.05!

4EiBpmL.png

Step 22.

Face-select the top of the nozzle, select "Absolute Commands".

wPZzF7g.png

Step 23.

Select "Move" for your absolute command, a new window will appear.

Make sure that "Move Object" is ticked.

Enter -0.05 as the Y value for the top of the nozzle.

With "Move Object" ticked, this ensures that the top of the nozzle will move to Y -0.05 and the rest of the nozzle will move with it.

Without "Move Object" ticked, only the top face of the nozzle would move.

XOXIcJz.png

Step 24.

Now, think of this: Nobody is ever going to see the top of the nozzle, are they? It's exactly where the bottom of the disk is.

Move the camera until you are able to see the top of the nozzle again, face select it, right click and select "Hole".

The top face of the nozzle will vanish. This practice of hiding things the player will never see is a good one, stick to it!

qGVwS5X.png

Step 25.
Now, use the face select tool and grab the bottom of the nozzle.

Like we have done quite a few times before, make these into hard edges.

bNx04Qg.png

Step 26.
Well, what we have so far is not quite recognizable as a "Nozzle" yet, more of a cone.

Let's fix that!

vcLyYNm.png

Step 27.
Select the "Object Select" tool. This will let you grab the entire nozzle.

R8UKdKQ.png

Step 28.
Select the entire nozzle, right click anywhere and select the "Slice" option.

In the window that appears, we're going to want to slice the object along the Y axis, so select Y.

In the following window, leave it as default, 2 slices is good enough.

eRlQQI6.png

Step 29.
You'll find the nozzle is now split in half.

Suddenly, you now have this new "split" selected.

Don't un-select it! We're going to use it straight away!

h5usOvS.png

Step 30.
Right click anywhere and select "Scale Uniform"

fYs2LpR.png

Step 31.
Like Inset and Extrude before, we can scale manually by moving the mouse left and right.

But, again, open the input menu with TAB.

Enter 120%

twpuHku.png

Step 32.
With that split still selected, right click anywhere again and select the "Bevel" option.

vgE9wUr.png

Step 33.
Finally, some manual stuff!

Pull the mouse left and right until the nozzle is split into three roughly equal sections.

Of course, you can press TAB to input exact numbers (Vaguely around 0.16), experiment and play around!

0zSOuGW.png

Step 34.
It's going well!

We have a reasonable, smooth nozzle shape now.

If you haven't already, make sure to save your work.

Mz3CWgm.png

Step 35.
Select the underside of the nozzle, right click anywhere and select "Inset".

9wXnPfz.png

Step 36.

Inset a small amount (by dragging the mouse to the right). Select The new central face, right click and select "collapse". This will collapse this face into a single point.

7dd6cd0d95.jpg

Step 37.
It's good practice now to "cleanup" the model.
Though it is unlikely that anything needs to be cleaned up, you never know!

Use the object select tool, right click anywhere and select "cleanup".
This will remove and duplicate vertices (For example, two points occupying the same space) and other nasty things that can cause problems later on.

Step 38.
Now, select the point select tool.

CJSHwdT.png

Step 39.
Select the point that is now in the centre of the nozzle underside.

Right click anywhere and select "Move".

When asked, choose the option "Normal".

FgeEzF0.png

aKxQUoj.png

Step 40.
Like every other operation we've done so far, you can move manually, or accurately, using TAB.

Press TAB, enter "-0.4".

VcpLGK9.png

Step 41.
Well done! You've completed the modeling!

It is a basic design for an engine, true. But, hopefully you've got a taste of how Wings 3D works.

Now, go make yourself a cup of coffee, have a break.

Because, up next, I will show you how to Unwrap the object in order to paint a texture on it, and it isn't so easy!

HAYssqO.png

Edited by Beale

Share this post


Link to post
Share on other sites

Part 2

Previous Tutorial

By the end of this tutorial, we will have a blank slate, with which we can draw our texture over.
Currently, we have an un-textured model.

Without any delay, let's jump straight into it.

Step 1.

Use the object-select tool, select both the nozzle and disk you made in the previous tutorial.

Right click anywhere and select "Combine".

omCUBxM.png

Step 2.

Before we can begin the UV-Unwrap, our engine object needs a proper name.

Again with the object-select tool, select the object, right click anywhere and select "Rename".

You can call it whatever you want, for this tutorial I have chosen "engine".

qYxWEh0.png

Step 3.

Right click again, select UV Mapping.

pAkWY4i.png

Step 4.

And, we are now in the UV Mapping Window!

A quick run-down of how it works, in this window, use the face-select tool to select a face, right click that face to assign a colour.

Xdbhpwh.png

Step 5.

For starters, let's divide the side of the nozzle into 4x3 sections.

Each of these sections will be an "object" you will be able to drag around on the UV map later.
But that will become apparent as we get there!

For the sake of the tutorial, I recommend using the same colours for sectioning as I do.

1fevLGc.png

Step 6.

For the side of the disk, let's divide it up into 2x1 sections.

P9YU6ys.png

Step 7.

For the underside of the disk, orange!

7moocyx.png

Step 8.

For the nozzle exhaust, let's do one big circle!

AJP0TYo.png

Step 9.

For the top of the disk, let's split it into 1x1 sections

f4AQu7t.png

Step 10.

For the walls inside the "pit" of the disk, let's do it like the outside walls, 2x1 sections, green and purple.

ruPenjS.png

Step 11.

Finally, for the bottom of the "pit", bright orange again.

FXCzcsS.png

Step 12.

De-select everything, right click anywhere and select "Continue".

AI8KqL5.png

Step 13.

When prompted, select "Projection Normal".

QDXP3lV.png

Step 14.

Oh! There is our UV map!

But, it's a bit of a mess isn't it?

Let's tidy it up.

y1jD0QP.png

Step 15.

First, in the UV window, turn off the colourful background, it will make your life easier.

t1jhHyH.png

Weosmax.png

Step 16.

With the edge-select tool, select the centre line of all the nozzle sections.

Right click, select "Rotate".

When prompted, select "Chart To Y".

n0nuIRN.png

Step 17.

So, the nozzle sections are all facing the same way now, let's cluster them together.

With the object-select tool, select all the nozzle sections, right click and select "Move To".

When prompted, select "Centre".

0JbU8fi.png

Step 18.

They will all snap to the centre!

Move the newly clustered nozzle sections to some clean space.

uacy7p9.png

Step 19.

You may notice the nozzles lines are curvy, this will be a problem when coming to texture them, so lets straighten that out.

With the point-select tool, select, one at a time, each row of points on the nozzle.
You can select a whole row by dragging a the mouse while clicking, drag a box around the desired row.

Right click, select "Flatten", when prompted, select Y.

Z5lFvRm.png

viqrFlX.png

Step 20.

That's the nozzle done! Put it away to one side.

yCjSRCO.png

Step 21.

Select all the parts that make up the outer walls of the disk.

Combine them, like we did with the nozzle sections and move them off to one side.

TLdDJpw.png

9I14pAs.png

Step 22.

For the top of the disk, you may notice that all the 1x1 sections we created are rotated to odd angles.

This is no good.

With the edge-select tool, grab all the longest edges of each section (Make sure to only grab one edge per section).

Right click anywhere, select "Rotate", when prompted, select "Chart to X".

d4CLuxK.png

hqwOGnm.png

Step 23.

Grab all the newly rotated sections with the object-select tool, move them to centre, like the nozzle sections.

Oh dear, though they are all roughly rotated the same way, some are upside down, at 180° angles.

hBHbgON.png

Step 24.

Using the object-select tool, use the click and drag selection method to grab only the sections rotated at the wrong angle.

Right click anywhere, select rotate.

Remember in the first tutorial? We can do things manually, or we can press TAB for accurate input.

Press TAB and enter 180.

The 1x1 upper disk sections will now all be aligned and combined!

Kk4qHIx.png

UzbsbYz.png

x0OleJX.png

Step 25.

For the inner disk wall sections, do the same as you did for the outer wall.

You should now have a sheet of objects aligned straight and combined together, something like this.

W4yjb3v.png

Step 26.

Using the object-select tool's "Move" and "Scale" functions, move each group of sections around.

Arrange them so there is as little un-used space as possible!

VPbHn6a.png

Step 27.
This is what I ended up with, there is a fairly large amount of un-used space, but for the purpose of this tutorial, it is good enough.

w4Bl6tK.png

Step 28.

Nearly there!

Right click anywhere and select "Create Texture"

PY0jOCp.png

Step 29.

For a part this simple, a "256x256" texture will almost certainly be good enough, so select that.

q2uBEEn.png

Step 30.

Your model will probably now look something like this.

Do you see that? Those are pixels!

Your model has a texture map, ready to be painted over!

rKUWWQC.png

Step 31.

Close the UV window, in the main window, open the "Outliner" window, from the window menu.

O9c1mDy.png

Step 32.

In the "Outliner" window, find your texture.

It will be a small checkerboard icon, with <YourObjectName>_auv printed to the side of it.

Right click this and select "Make External".

Save this texture as a .PNG, in the same location as your 3D model.

BCzzZsM.png

Step 33.

And, that's it!

What you have now is a plain .PNG image sitting in the same directory as your 3D model.

You can edit this .PNG with your favourite image editor, and reload the model in Wings 3D to see the changes.

b22a95d97c.png
 

Edited by Beale

Share this post


Link to post
Share on other sites

Part 3

Previous Tutorial

First of all, let me say:

This tutorial will be vague.

I can't really teach people how to texture, I can't really teach people how I texture, it is mainly motor memory at this point.

But, what I can do, is demonstrate some of the general methodology I use, and how this can be put into practice!

Another thing, this tutorial will assume you are using Adobe Photoshop (Really any version higher than CS3 will be fine) and that you are reasonably able to use it (Though, I won't be doing anything too complex).

All of these techniques can be used in alternatives such as GIMP and Paint.NET, but unfortunately I cannot write such a tutorial for each application.

So, that said, let's begin!

Step 1.

First things first, duplicate the one and only layer of the PNG file.

VLxBM33.png

Step 2.

Now, rename the top layer "Outline" and the lower layer "Base".

Outline will always remain the UV map you created in the second tutorial, it will exist as a guide to help you "Paint within the lines".

Base will be the "base coat", flat colours which you can add further detail to through more layers.

Important: Never actually directly work on the .PNG file, as soon as you have two layers, save this as a .PSD file. This PSD file will be your "master copy", with layers and such. You will overwrite the .PNG file with this "master copy" from time to time, to see changes.

MtAk0Sx.png

Step 3.

Now, with the base layer selected, choose the "Stroke" tool from the "Edit" menu.

gdfleUD.png

Step 4.

In the Stroke window, select a stroke width, I would reccomend 3 pixels for a 256x256 texture.

Make sure "Outside" is selected.

For the colour, absolute black, (0,0,0) !

TEchp90.png

Step 5.

Whoa, those thin lines of the base layer are now thick lines!

Now, use the paint can tool to fill in-between the thick lines, with the same black colour.

9MJCvy8.png

Step 6.

Now you have a nice plain black base coat, you can start to choose out some colours!

Feel free to improvise here!

Myself, a basic light grey for the "Disk" and a much darker grey for the "Nozzle".

jgkoRbJ.png

Step 7.

Okay, now, save over you .PNG that you originally created through Wings 3D.

37wYBVQ.png

Step 8.

Now, load up your 3D model.

Not bad eh?

It's starting to look like something.

But, lets get on with the detailed stuff.

GMZ9M3v.png

Step 9.

First thing, let's make a "black hole" on the inside of the nozzle.

Select the paint brush tool and then select the "Soft Brush" shape.

9HdWE21.png

Step 10.

Make a new layer for this "hole".

6hoY2l3.png

Step 11.

Where the Nozzle's underside is on the UV map, and in the newly created layer, make a single "click" and create this "black hole".

Again, then save over and overwrite your .PNG texture.

eCZfvdQ.png

Step 12.

Back in Wings 3D, open the "Outliner" window, find your texture, right click the icon and hit "Refresh".

This is a whole lot quicker than re-loading the model everytime you want to see changes.

5YqABVZ.png

Step 13.

Great! The bottom of the nozzle now looks like it has a bit of depth!

YzJNM0j.png

Step 14.

Cast your mind back to the first tutorial.

Remember when I said Ambient Occlusion had to be done manually through texture-work in Wings 3D?

What is Ambient Occlusion? A basic description, the "Shadow" that appears when one corner meets another.

Or in a more general sense, shadows.

Hopefully what exactly AO is, and how it will improve the look of your model will become intuitive by the time you complete these next few steps...

jZMC9bC.png

Step 15.

First, use Wings 3D to find out where the Disk underside is on the texture.

F8HZd6F.png

Step 16.

Make a new layer for this.

lTaLRw0.png

Step 17.

Using the same technique as the Nozzle underside, paint a smaller black blob, in this new layer.

8P7CdsD.png

Save over your .PNG, once more.

Step 18.

Reload the texture and...

Well, that looks better, doesn't it?

But we still need a shadow on the top of the nozzle, where it comes into contact with the disk.

RsIbikw.png

Step 19.

Make a new layer, and using the square-select tool, grab the area that makes up the top of the nozzle.

R4DcbbN.png

Step 20.

In this selected area, use the Gradient tool, make sure the colour selected is absolute black, drag straight down (must be at an exact 90° angle).

This will create a black gradient moving down over your nozzle.

IrkTeAy.png

Save over your original .PNG texture.

Step 21.

Reload and...

You see we now have a form of "hand-made" ambient occlusion, where the nozzle meets the disk.

uGiTSlQ.png

Hopefully you now have a general idea of how to work within Photoshop, how to preview changes in Wings 3D and how to compensate for Wings 3D's lack of automatic Ambient-Occlusion generation.

This ends the step-by-step portion of this tutorial, now we move onto general "tips" which I hope will allow you to develop the texture further.

General Methods

Coming Soon
 

Edited by Beale

Share this post


Link to post
Share on other sites

Part 4

Previous Tutorial

So, are you ready to actually get your engine in game and take it for a spin?

Well, first of all, you will need Unity installed, so get that done!

With all that finished, let's begin...

Step 1.

Let's centre our model, this will make it easier to use in the VAB, and is just good practice overall.

Select the highest and lowest points on the model.
Right click anywhere and select "Absolute Commands", then select "Move".

w0yfRwy.png

Step 2.

In the "Move" window, replace the value for Y with zero, make sure that "Move Object" is ticked.

7tkvy3S.png

Step 3.

Our object is now in the centre of the space.

Now, select the whole object, right click and select "Absolute Commands" again, but this time, choose scale.

NmJslZj.png

Step 4.

See those values?
That's our scale values for this model, in other words, how big it is.

Take a note of these!

djRbjjU.png

Step 5.

Now, we need to create a collider for the engine!

In Wings 3D, select new.

In the new model space, create a custom cylinder, as we did in the very first tutorial.

The values I choose here correspond to the size of the "Real" model.

JOseMOS.png

Step 6.

Now, select the entire object, right click and choose "Rotate", when prompted, choose the "Y" axis.

Once again, press TAB and input "11.25".

Why?

Well, this is hard to explain. But, you may notice that the faces on the side of the collider are now aligned to the X and Z axis.

This is good, when you want to make a collider for an object that can have things attached to it (I.E. a fuel tank), but for our little engine, it doesn't really matter.

lP4ZRbV.png

Step 7.

Okay, save this collider file, don't overwrite your original engine file!

6SyQTv8.png

Step 8.

Now, for your collider model and your original engine model.

Select export and export an .OBJ file.

YAY7792.png

Step 9.

Now!

Unity time!

First of all, you will need to download:

0.20 Part Tools

and

0.23 Part Tools

Now, in Unity, create a new project for your Kerbal Part Modding.

In this new project, import the 0.20 PartTools.unitypackage.

hdxmfXE.png

tmVCcUe.png

Step 10.

When asked, just check "Import".

KIh3oyQ.png

Step 11.

Now, find the 0.23 part tools folder you downloaded.

Copy "Editor", "Lib" and "Shaders".

TbCxy4g.png

Step 12.

Navigate to where you saved your Unity project, inside the "Assets" folder, overwrite the "Editor", "Lib" and "Shaders" folder that are already there.

This will upgrade your Part Tools to 0.23!

If you haven't guessed already, part tools is what will allow you to create your part.

KpeqlnR.png

Step 13.

In Unity, select "KSP Part Tools".

YYAdqXV.png

Step 14.

Then, "Set Data Dir".

po8UGR7.png

Step 15.

Find your KSP "GameData" folder, highlight it and press the "Select Folder" button.

Step 16.

So, that is Part Tools set up correctly, now lets actually start creating our engine.

In the "Assets" window at the bottom of the Unity window, create a new folder for our engine.

3CQfAz9.png

xU1nESz.png

Step 17.

In this new folder drag in your model.OBJ, your collider.OBJ and the .PSD texture!

mhiMpQZ.png

Step 18.

Now, go inside this "Materials" folder that has appeared.

Select the material for your engine's "Real" model, not the material for the collider, we don't need to worry about that.

0C8Xl58.png

Step 19.

On the right, change the "Shader".

For now, we will change it to KSP/Diffuse.

Remember, you can only use KSP shaders!

z9IW7ca.png

Step 20.

Click "Select" and assign your texture to this material.

WKQZDJI.png

Step 21.

Okay!

That's materials done...

Now, finally let's make the engine.

Create an empty game object.

3ZAPirk.png

Step 22.

Select this newly created "Blank" object and make sure it is set at position 0, 0 and 0.

Give it a name.

Iq0gnGo.png

Step 23.

Now, on the left you will see your named game object sitting in the hierarchy window.

From the asset window below, drag your model onto this game object. This will make the model a "child" of the game object.

It will now appear in the scene.

fUb34ia.png

Step 24.

Create a new game object, position it at 0, 0 and 0.

Call it "Collider".

Make sure that it is a child of the first game object you created.

rtAOED9.png

Step 25.

Select "Collider", on the right, select "Add Component".

Add a "Mesh Collider", it's found in the physics category.

dlHlTNb.png

Step 26.

In the "Mesh Collider" component that is now sitting there, select the little circle next to "Mesh", choose your Collider model you made earlier, when prompted.

L8x4dqF.png

Step 27.

Hey, this is real important!

Make sure "Convex" is ticked.

Otherwise, you will have a bad time later on.

nsvjS2Q.png

Step 28.

Now, like with that "Collider" game object, create a new empty game object and make it a child of the first game object.

Call it "thrustTransform", pay attention to the upper case and lower case characters here, it's important.

x7p1vTc.png

Step 29.

Position the position of thrustTransform at 0, -0.4 and 0.

See it's now at the tip of the nozzle? This is where the thrust will come out of!

The blue arrow represents the direction of thrust, so set the "X" Rotation value to "90", so that the blue arrow is now pointing down.

W3ApWKr.png

Step 30.

Select the "Parent" game object, the first game object you made!

B06vbFT.png

Step 31.

"Add Component" and select "Part Tools", it's in the KSP category.

YSxrfHb.png

Step 32.

Ehm, well, we have done quite a lot in Unity, haven't we?

Before we proceed, let's save the scene, so we can revisit this engine later if anything needs changing.

2S4Czcc.png

Step 33.

Okay, back to the Part Tools component!

On the "File URL" property, select "Set".

Right now, create a folder in KSP GameData and give it whatever name you want, I've chosen "myMod" here.

Select this folder, then press the "Select Folder" button.

6600023d98.png
EApYXAg.png

Step 34.

Set the "Model Name" value to "model".

Set the "Texture Format" value to "MBM".

Click write.

That's it, you've exported a model from Unity!

Step 35.

Okay, create a config in the same directory as the model you just exported.

4zuHWo9.png

Well, I'm sure you will have some idea how to make a config, but here is mine, as a template.



Few things to notice!


The values for thrust, ISP, etcetera, that's for you to decide.

Step 36.

Now, boot up the game!

With any luck, you'll find the engine happily inside the VAB (Sandbox).

Make a quick craft, try to fly the thing.

With any luck it will work just fine.

If it doesn't work: I am available by PM for help. Also, the modelling forum is a good place to get help.

cb37e0006a.jpg

Step 37.

Well, that's it.

You've put a part in game, from start to finish.

We've laughed, we've cried and we've seen the fruits of our labour.

Hopefully you've found this tutorial helpful, if not, constructive criticism is always appreciated.

For now, ciao!


PART
{

name = MyEngine
module = Part
author = Me

mesh = model.mu
scale = 1
rescaleFactor = 1.0

node_stack_bottom = 0.0, -0.45, 0.0, 0.0, -1.0, 0.0, 1
node_stack_top = 0.0, 0.45, 0.0, 0.0, 1.0, 0.0, 1


TechRequired = start
entryCost = 525
cost = 525

category = Propulsion
subcategory = 0
title = Liquid Beale Rocket
manufacturer = Cruelty Against Bread Corp.
description = This engine runs on liquid bread, or LF and OX, your choice.

attachRules = 1,0,1,1,0

EFFECTS
{
running_closed
{
AUDIO
{
channel = Ship
clip = sound_rocket_spurts
volume = 0.0 0.0
volume = 3.0 3.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
}
engage
{
AUDIO
{
channel = Ship
clip = sound_vent_soft
volume = 1.0
pitch = 2.0
loop = false
}
}
flameout
{
PREFAB_PARTICLE
{
prefabName = fx_exhaustSparks_flameout_2
transformName = thrustTransform
oneShot = true
}
AUDIO
{
channel = Ship
clip = sound_explosion_low
volume = 1.0
pitch = 2.0
loop = false
}
}
}

mass = 0.35

dragModelType = default
maximum_drag = 0.20
minimum_drag = 0.15
angularDrag = 2
crashTolerance = 10
maxTemp = 3400

stagingIcon = LIQUID_ENGINE

MODULE
{
name = ModuleEnginesFX
engineID = ClosedCycle
runningEffectName = running_closed

thrustVectorTransformName = thrustTransform
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 39
heatProduction = 200
fxOffset = 0, 0, 0.0
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 410
key = 1 280
}

}

MODULE
{
name = ModuleGimbal
gimbalTransformName = thrustTransform
gimbalRange = 0.5
}

}

  • "rescaleFactor", this needs to be set to 1.0!
  • "thrustVectorTransformName = thrustTransform", that game object was named "thrustTransform" for a good reason!
Edited by Beale

Share this post


Link to post
Share on other sites
Good to see this preserved... This was the best, simplest, easiest tute that I was able to find when I made my 1st part with Blender.. I highly recommend this for anyone who has ZERO modelling experience.
Thanks, Beale!!

Share this post


Link to post
Share on other sites
Beale did you forget apart on the thrustTransform or is unity just funny ? For me, I would have to add a Part Tools Library to it to get the FX ?

Share this post


Link to post
Share on other sites
[quote name='Stone Blue']Good to see this preserved... This was the best, simplest, easiest tute that I was able to find when I made my 1st part with Blender.. I highly recommend this for anyone who has ZERO modelling experience.
Thanks, Beale!![/QUOTE]

Nice to hear, thanks! :)

[quote name='Cpt. Kipard']Beale are you interested in developing this guide more?[/QUOTE]

Hi!

I'd like to touch on a few more Unity parts (animations, etc.) if I get a chance :)

It will also need a slight update when the new partTools get released.

[quote name='MeCripp']Beale did you forget apart on the thrustTransform or is unity just funny ? For me, I would have to add a Part Tools Library to it to get the FX ?[/QUOTE]

Not sure I understand, sorry? Edited by Beale

Share this post


Link to post
Share on other sites
The way you show it, I would have the thrust but no FX the only way, I can get the FX to show and that's if, I put Part Tools Library on the thrustTransform ?

Share this post


Link to post
Share on other sites
[quote name='MeCripp']The way you show it, I would have the thrust but no FX the only way, I can get the FX to show and that's if, I put Part Tools Library on the thrustTransform ?[/QUOTE]

Nope, FX is unrelated to your Unity setup. You need only the thrustTransform in there :)

Share this post


Link to post
Share on other sites
I not sure what, I was doing wrong that time it did work but, I had to change the cfg to run in ( running_closed ) where if, I added the Part Tools Library on the thrustTransform then don't have to run in ( running_closed ) is there a draw back or a + to running a engine is ( running_closed ) or other ( guess you could say running_open ) or doesn't really matter ?

EDIT- And do you have a Tutorial on adding the heat look to the engine ? Edited by Mecripp2

Share this post


Link to post
Share on other sites
[quote name='MeCripp']I not sure what, I was doing wrong that time it did work but, I had to change the cfg to run in ( running_closed ) where if, I added the Part Tools Library on the thrustTransform then don't have to run in ( running_closed ) is there a draw back or a + to running a engine is ( running_closed ) or other ( guess you could say running_open ) or doesn't really matter ?

EDIT- And do you have a Tutorial on adding the heat look to the engine ?[/QUOTE]

Running_closed is from the effect definition in the config, you can name it whatever you like. Take a look at the stock R.A.P.I.E.R engine config for a bit more context (that has a running_open, being dual cycle).

I'll probably tackle heat animations at some point, but its quite a lengthy tutorial to write. There is a good tutorial on this already by cardboardboxprocessor, find it in capt. Kipards modding development compendium.

Share this post


Link to post
Share on other sites
Sorry we are talking in a circle you are missing the point on Running_closed here is a cfg running closed [code]PART
{
// Kerbal Space Program - Part Config
// mkbEngine
//

// --- general parameters ---
name = mkbEngine
module = Part
author = aacu

// --- asset parameters ---
mesh = model.mu
scale = 1
rescaleFactor = 1

// --- node definitions ---
node_stack_top = 0.0, 0.181, 0.0, 0.0, 1.0, 0.0, 1
node_stack_bottom = 0.0, -0.183, 0.0, 0.0, -1.0, 0.0, 1

// --- editor parameters ---
TechRequired = start
entryCost = 3500
cost = 1200
category = Engine
subcategory = 0
title = MKBL E-160
manufacturer = Munar Institute of Technology
description = Designed for the Munar Kebabl Landing system the MKBL E-160 has the power output required to make fast corrections under the high stress environment of a munar landing, this engine is smoke free to improve pilots visibility in atmospheric trainning.

// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
attachRules = 1,0,1,0,0

// --- standard part parameters ---
mass = 0.06
dragModelType = default
maximum_drag = 0.2
minimum_drag = 0.2
angularDrag = 2
crashTolerance = 5
maxTemp = 2000 // = 3600
bulkheadProfiles = size1
// --- liquid engine parameters ---
EFFECTS
{
running_closed
{
AUDIO
{
channel = Ship
clip = sound_rocket_spurts
volume = 0.0 0.0
volume = 3.0 3.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
}
engage
{
AUDIO
{
channel = Ship
clip = sound_vent_soft
volume = 1.0
pitch = 2.0
loop = false
}
}
flameout
{
PREFAB_PARTICLE
{
prefabName = fx_exhaustSparks_flameout_2
transformName = thrustTransform
oneShot = true
}
AUDIO
{
channel = Ship
clip = sound_explosion_low
volume = 1.0
pitch = 2.0
loop = false
}
}
}

MODULE
{
name = ModuleEnginesFX
engineID = ClosedCycle
runningEffectName = running_closed

thrustVectorTransformName = thrustTransform
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 160
heatProduction = 80
fxOffset = 0, 0, 0.21
EngineType = LiquidFuel
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 345
key = 1 85
key = 3 0.001
}
}
MODULE
{
name = ModuleSurfaceFX
thrustProviderModuleIndex = 0
fxMax = 0.3
maxDistance = 30
falloff = 1.7
thrustTransformName = thrustTransform
}

// thrustVectoringCapable = True
// gymbalRange = 10

}[/code]
If, I added a FX like [code]fx_exhaustFlame_blue = 0.0, -0.3, 0.0, 0.0, 1.0, 0.0, running
fx_exhaustLight_blue = 0.0, -0.3, 0.0, 0.0, 0.0, 1.0, running
fx_smokeTrail_light = 0.0, -2, 0.0, 0.0, 1.0, 0.0, running

sound_vent_medium = engage
sound_rocket_hard = running
sound_vent_soft = disengage
sound_explosion_low = flameout
[/code]
They run all the time even when throttle is off doing it that way but by adding Part Tools Library to the thrustTransform you can us a cfg like below and FX are set with throttle that is what, I didn't know why some engine have to run closed and some not but now, I know how to change that is what, I was getting at and thanks again :)

[code]PART
{
// Kerbal Space Program - Part Config
// mkbEngine
//

// --- general parameters ---
name = mkbEngine
module = Part
author = aacu

// --- asset parameters ---
mesh = model.mu
scale = 1

// --- node definitions ---
node_stack_top = 0.0, 0.181, 0.0, 0.0, 1.0, 0.0
node_stack_bottom = 0.0, -0.183, 0.0, 0.0, -1.0, 0.0

fx_exhaustFlame_blue = 0.0, -0.3, 0.0, 0.0, 1.0, 0.0, running
fx_exhaustLight_blue = 0.0, -0.3, 0.0, 0.0, 0.0, 1.0, running
fx_smokeTrail_light = 0.0, -2, 0.0, 0.0, 1.0, 0.0, running

sound_vent_medium = engage
sound_rocket_hard = running
sound_vent_soft = disengage
sound_explosion_low = flameout

TechRequired = heavierRocketry
entryCost = 8000
cost = 4500
category = Engine
subcategory = 0
title = MKBL E-160
manufacturer = Munar Institute of Technology
description = Designed for the Munar Kebabl Landing system the MKBL E-160 has the power output required to make fast corrections under the high stress environment of a munar landing, this engine is smoke free to improve pilots visibility in atmospheric trainning.

// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
attachRules = 1,0,1,0,0

// --- standard part parameters ---
mass = 1.25
// heatConductivity = 0.06 // half default
skinInternalConductionMult = 4.0
emissiveConstant = 0.8 // engine nozzles are good at radiating
dragModelType = default
maximum_drag = 0.2
minimum_drag = 0.2
angularDrag = 2
crashTolerance = 5
maxTemp = 2000 // = 3600
stagingIcon = LIQUID_ENGINE
bulkheadProfiles = size1
// --- liquid engine parameters ---

MODULE
{
name = ModuleEngines
thrustVectorTransformName = thrustTransform
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 215
heatProduction = 192
fxOffset = 0, 0, 0.8
EngineType = LiquidFuel
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 300
key = 1 280
key = 7 0.001
}
}
MODULE
{
name = ModuleAlternator
RESOURCE
{
name = ElectricCharge
rate = 7
}
}
MODULE
{
name = ModuleSurfaceFX
thrustProviderModuleIndex = 0
fxMax = 0.5
maxDistance = 30
falloff = 1.5
thrustTransformName = thrustTransform
}
RESOURCE
{
name = ElectricCharge
amount = 0
maxAmount = 0
isTweakable = false
hideFlow = true
}

}
[/code]

You should give it a try :)

Share this post


Link to post
Share on other sites
[quote name='MeCripp']Sorry we are talking in a circle you are missing the point on Running_closed here is a cfg running closed [code]PART
{
// Kerbal Space Program - Part Config
// mkbEngine
//

// --- general parameters ---
name = mkbEngine
module = Part
author = aacu

// --- asset parameters ---
mesh = model.mu
scale = 1
rescaleFactor = 1

// --- node definitions ---
node_stack_top = 0.0, 0.181, 0.0, 0.0, 1.0, 0.0, 1
node_stack_bottom = 0.0, -0.183, 0.0, 0.0, -1.0, 0.0, 1

// --- editor parameters ---
TechRequired = start
entryCost = 3500
cost = 1200
category = Engine
subcategory = 0
title = MKBL E-160
manufacturer = Munar Institute of Technology
description = Designed for the Munar Kebabl Landing system the MKBL E-160 has the power output required to make fast corrections under the high stress environment of a munar landing, this engine is smoke free to improve pilots visibility in atmospheric trainning.

// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
attachRules = 1,0,1,0,0

// --- standard part parameters ---
mass = 0.06
dragModelType = default
maximum_drag = 0.2
minimum_drag = 0.2
angularDrag = 2
crashTolerance = 5
maxTemp = 2000 // = 3600
bulkheadProfiles = size1
// --- liquid engine parameters ---
EFFECTS
{
running_closed
{
AUDIO
{
channel = Ship
clip = sound_rocket_spurts
volume = 0.0 0.0
volume = 3.0 3.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
}
engage
{
AUDIO
{
channel = Ship
clip = sound_vent_soft
volume = 1.0
pitch = 2.0
loop = false
}
}
flameout
{
PREFAB_PARTICLE
{
prefabName = fx_exhaustSparks_flameout_2
transformName = thrustTransform
oneShot = true
}
AUDIO
{
channel = Ship
clip = sound_explosion_low
volume = 1.0
pitch = 2.0
loop = false
}
}
}

MODULE
{
name = ModuleEnginesFX
engineID = ClosedCycle
runningEffectName = running_closed

thrustVectorTransformName = thrustTransform
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 160
heatProduction = 80
fxOffset = 0, 0, 0.21
EngineType = LiquidFuel
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 345
key = 1 85
key = 3 0.001
}
}
MODULE
{
name = ModuleSurfaceFX
thrustProviderModuleIndex = 0
fxMax = 0.3
maxDistance = 30
falloff = 1.7
thrustTransformName = thrustTransform
}

// thrustVectoringCapable = True
// gymbalRange = 10

}[/code]
If, I added a FX like [code]fx_exhaustFlame_blue = 0.0, -0.3, 0.0, 0.0, 1.0, 0.0, running
fx_exhaustLight_blue = 0.0, -0.3, 0.0, 0.0, 0.0, 1.0, running
fx_smokeTrail_light = 0.0, -2, 0.0, 0.0, 1.0, 0.0, running

sound_vent_medium = engage
sound_rocket_hard = running
sound_vent_soft = disengage
sound_explosion_low = flameout
[/code]
They run all the time even when throttle is off doing it that way but by adding Part Tools Library to the thrustTransform you can us a cfg like below and FX are set with throttle that is what, I didn't know why some engine have to run closed and some not but now, I know how to change that is what, I was getting at and thanks again :)

[code]PART
{
// Kerbal Space Program - Part Config
// mkbEngine
//

// --- general parameters ---
name = mkbEngine
module = Part
author = aacu

// --- asset parameters ---
mesh = model.mu
scale = 1

// --- node definitions ---
node_stack_top = 0.0, 0.181, 0.0, 0.0, 1.0, 0.0
node_stack_bottom = 0.0, -0.183, 0.0, 0.0, -1.0, 0.0

fx_exhaustFlame_blue = 0.0, -0.3, 0.0, 0.0, 1.0, 0.0, running
fx_exhaustLight_blue = 0.0, -0.3, 0.0, 0.0, 0.0, 1.0, running
fx_smokeTrail_light = 0.0, -2, 0.0, 0.0, 1.0, 0.0, running

sound_vent_medium = engage
sound_rocket_hard = running
sound_vent_soft = disengage
sound_explosion_low = flameout

TechRequired = heavierRocketry
entryCost = 8000
cost = 4500
category = Engine
subcategory = 0
title = MKBL E-160
manufacturer = Munar Institute of Technology
description = Designed for the Munar Kebabl Landing system the MKBL E-160 has the power output required to make fast corrections under the high stress environment of a munar landing, this engine is smoke free to improve pilots visibility in atmospheric trainning.

// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
attachRules = 1,0,1,0,0

// --- standard part parameters ---
mass = 1.25
// heatConductivity = 0.06 // half default
skinInternalConductionMult = 4.0
emissiveConstant = 0.8 // engine nozzles are good at radiating
dragModelType = default
maximum_drag = 0.2
minimum_drag = 0.2
angularDrag = 2
crashTolerance = 5
maxTemp = 2000 // = 3600
stagingIcon = LIQUID_ENGINE
bulkheadProfiles = size1
// --- liquid engine parameters ---

MODULE
{
name = ModuleEngines
thrustVectorTransformName = thrustTransform
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 215
heatProduction = 192
fxOffset = 0, 0, 0.8
EngineType = LiquidFuel
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 300
key = 1 280
key = 7 0.001
}
}
MODULE
{
name = ModuleAlternator
RESOURCE
{
name = ElectricCharge
rate = 7
}
}
MODULE
{
name = ModuleSurfaceFX
thrustProviderModuleIndex = 0
fxMax = 0.5
maxDistance = 30
falloff = 1.5
thrustTransformName = thrustTransform
}
RESOURCE
{
name = ElectricCharge
amount = 0
maxAmount = 0
isTweakable = false
hideFlow = true
}

}
[/code]

You should give it a try :)[/QUOTE]

Those are old FX definitions, they won't work with moduleEnginesFx, but instead work with module engines.

So, instead define your FX in running_closed, or remove the "FX" from the Engine module, so it's just moduleEngines :)

Share this post


Link to post
Share on other sites
LOL this is to funny Beale lol, Them are the 2 cfg, I use and, I can make them both work one way engine has to run-closed and one it doesn't lol to funny and the only change was what you see in the cfg and one MU has parts tool script on the thrust and one don't.

And you can use moduleEnginesFx with the old fx lol it doesn't care lol one man thanks you crack me up :) we has long has your not running closed :)

Share this post


Link to post
Share on other sites
[quote name='MeCripp']LOL this is to funny Beale lol, Them are the 2 cfg, I use and, I can make them both work one way engine has to run-closed and one it doesn't lol to funny and the only change was what you see in the cfg and one MU has parts tool script on the thrust and one don't.
And you can use moduleEnginesFx with the old fx lol it doesn't care lol one man thanks you crack me up :) we has long has your not running closed :)[/QUOTE]

I really do not understand what you are asking.

Share this post


Link to post
Share on other sites
[quote name='Beale']
Hi!

I'd like to touch on a few more Unity parts (animations, etc.) if I get a chance :)

It will also need a slight update when the new partTools get released.[/QUOTE]

Back before I became completely disillusioned with Squad I had a thread asking moders and beginners what they would want from a complete tutorial like this. I can post the list I made if you want.

[B]edit[/B]

The links in your OP still point to the blogs. Edited by Cpt. Kipard

Share this post


Link to post
Share on other sites
[quote name='MeCripp']LOL this is to funny Beale lol, Them are the 2 cfg, I use and, I can make them both work one way engine has to run-closed and one it doesn't lol to funny and the only change was what you see in the cfg and one MU has parts tool script on the thrust and one don't.

And you can use moduleEnginesFx with the old fx lol it doesn't care lol one man thanks you crack me up :) we has long has your not running closed :)[/QUOTE]

I imagine a great deal is being lost in translation here, but yes, those two configs are (from a cursory glance) correct for their respective engine module, but the point you're trying to make is not clear.

However, you never need to add a script to the thrustTransform under any circumstance for those to function, and ModuleEnginesFX [U][I][B]will not[/B][/I][/U] display effects without an EFFECTS definition. Edited by Randazzo

Share this post


Link to post
Share on other sites
[quote name='Randazzo']I imagine a great deal is being lost in translation here, but yes, those two configs are (from a cursory glance) correct for their respective engine module, but the point you're trying to make is not clear.

However, you never need to add a script to the thrustTransform under any circumstance for those to function, and ModuleEnginesFX [U][I][B]will not[/B][/I][/U] display effects without an EFFECTS definition.[/QUOTE]

I'm not good with words but let try this, Why do some engine have to run closed ? and some not ? ok It's one step in unity and was asking is there + side or - side to either ?

[code]However, you never need to add a script to the thrustTransform under any circumstance for those to function, and ModuleEnginesFX will not display effects without an EFFECTS definition. [/code]
Like I said it's one step and with it the engines run more less open verses running closed again is there a upside or downside :confused:

Share this post


Link to post
Share on other sites
[quote name='MeCripp']I'm not good with words but let try this, Why do some engine have to run closed ? and some not ? ok It's one step in unity and was asking is there + side or - side to either ?

[code]However, you never need to add a script to the thrustTransform under any circumstance for those to function, and ModuleEnginesFX will not display effects without an EFFECTS definition. [/code]
Like I said it's one step and with it the engines run more less open verses running closed again is there a upside or downside :confused:[/QUOTE]

I'm still not quite with you unfortunately...

But, running_closed doesn't mean anything. It could be called running_cheesecake, or closed_running, or nearly any ASCII string.

Share this post


Link to post
Share on other sites
[quote name='Beale']I'm still not quite with you unfortunately...

But, running_closed doesn't mean anything. It could be called running_cheesecake, or closed_running, or nearly any ASCII string.[/QUOTE]

So really it's just how you want to write the cfg for the FX ?


So if, I wanted to use the old stock FX I use the MU number 1 that, I add a script to the thrustTransform and all works great

And by using MU number 2 which is how you show to set one up, I can't use the old ones and you can see a have a cfg for that MU file and you have to tell it to run closed or what ever.

so really just matters how you want to write the cfg is what it's looking like, And thanks to all that makes these Tutorial :D

Share this post


Link to post
Share on other sites
[quote name='Beale']It could be called running_cheesecake, or closed_running, or nearly any ASCII string.[/QUOTE]

I'm sorry for not adding anything to the conversation, but this just made me laugh so hard :P

Share this post


Link to post
Share on other sites
Yes, to clarify, you can name the effect anything you want, as long as the name matches in both ModuleEnginesFX and in the EFFECTS section.

The only reason it's usually named "running_closed" is because the first engine to need more than one effect was the RAPIER, which has a "closed cycle" mode in addition to its air-breathing mode, so they called it "running_closed" for the closed-cycle mode.

Share this post


Link to post
Share on other sites
In regard to multi particle, how would one change the size of the exhaust FX?

This for example...
[CODE]
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
[/CODE]

Share this post


Link to post
Share on other sites
[quote name='Eskandare']In regard to multi particle, how would one change the size of the exhaust FX?

This for example...
[CODE]
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
[/CODE][/QUOTE]

I'm not actually sure you can to be honest, [URL="http://forum.kerbalspaceprogram.com/threads/65754-HotRockets!-Particle-FX-Replacement-Tutorial"]you might have to create a new FX of the correct size.[/URL]

Share this post


Link to post
Share on other sites
This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.