Jump to content

[1.8.x] KSPWheel - Physics Based Alternate Wheel Collider [API Only]


Shadowmage

Recommended Posts

10 hours ago, Corax said:

While the searching brought about ways to select individual files and directories, it appears as if in order to do that, git actually does have to download the entire repository regardless.

Indeed. :P

Missing features is just a minor addition to existing major dislikes. a) It's owned by microsoft and b) It's restricting devs in countries sanctioned by the US... Like those devs have anything to do with politics.
Git (the CLI tool) I can dig, and if Github was actually free and open to all, I'd be all for that too. It's clearly not, so I refuse to use it.

 

Link to comment
Share on other sites

Well, I got it working. This is much better, it took a little tweaking, and I did end up doubling the performance  of some wheels in the config, but I can finally go roving through the hills again. Thanks!
QESC4AS.png

The Eve Explorer feels like a landrover again, not a pedal car. 
Setting it up manually was tricky at first, and while driving, having to adjust gears per wheel seemed a bit weird. But I made it work.
The wheel scaling function is really clever - It's a great way to fit the wheel to your vehicle.

I like the way it handles electricity. I demand higher performing wheels, it wants more power. Seems a fair trade, 

The dust effect is pretty cool too

c5RdjlO.pngIt's built for Eve, hence the large amount of wheels.
Although I think someone needs to go sweep the paths around the space center...

The only thing that's a little annoying is mechjeb autopilot doesn't seem to recognise the wheels,  would be nice if fixed someday, but on balance I think the change is still worth it

Edited by Tw1
Link to comment
Share on other sites

On 4/22/2019 at 9:11 AM, Shadowmage said:

https://github.com/shadowmage45/KerbalFoundries2/tree/master/KerbalFoundries-Patches/Stock

The above patches apply the KSPWheel modules to the stock wheels.  Download them and place them somewhere in your GameData/ folder.  Note:  They haven't been tested or updated in quite some time, so I cannot guarantee how well they work.  At the very least, it is a good place to start though :)

Would patching Wheels/Legs from other mods follow a similar structure to these? Or is additional work needed?

Link to comment
Share on other sites

16 hours ago, Incarnation of Chaos said:

Would patching Wheels/Legs from other mods follow a similar structure to these?

Fairly similar.  I've had good success on patching every other mod leg that I've seen.  If it can work with the stock modules, it will certainly be able to work with the KSPWheel modules.

The precise settings/configuration needed will of course depend on the specific model, but they should all be able to be converted.

Link to comment
Share on other sites

1 hour ago, Shadowmage said:

Fairly similar.  I've had good success on patching every other mod leg that I've seen.  If it can work with the stock modules, it will certainly be able to work with the KSPWheel modules.

The precise settings/configuration needed will of course depend on the specific model, but they should all be able to be converted.

Awesome

Link to comment
Share on other sites

On 8/9/2019 at 7:09 AM, Tw1 said:

Setting it up manually was tricky at first, and while driving, having to adjust gears per wheel seemed a bit weird.

If you use the 'wheel group' function, you can change gears on multiple wheels at the same time.  In the PAW for each wheel there is a selection for 'wheel group'.  Setting this to '0' means 'no group', any other value specified (e.g. 1, 2, etc) will create a 'group' of all wheels that are assigned that number.  Most of the functions in the PAW will then effect the entire group when activated (spring/damper changes, gear changes, enable/disable motor...likely others I'm forgetting).

On 8/9/2019 at 7:09 AM, Tw1 said:

The wheel scaling function is really clever - It's a great way to fit the wheel to your vehicle.

Yeah, I really don't understand why stock doesn't include some sort of scaling functions for most parts.  The least I could do was solve the issues for wheels while I was working on them :)

On 8/9/2019 at 7:09 AM, Tw1 said:

I like the way it handles electricity. I demand higher performing wheels, it wants more power. Seems a fair trade, 

Should be quite... physically based... as well.  The amount of EC input, and torque output, is all based on standard brushless motor equations.  More power output demands more power input, all consistent and logical.

 

On 8/9/2019 at 7:09 AM, Tw1 said:

The only thing that's a little annoying is mechjeb autopilot doesn't seem to recognise the wheels,  would be nice if fixed someday, but on balance I think the change is still worth it

Yeah, that is unfortunately nothing that I can solve on this end of the code.  Any solution would have to come from MechJeb in the form of special-case handling code -- the same kind special handling code that was written for the stock wheels would need to be duplicated to work with these wheels.  Without looking at MJ's stock wheel interop code, I would wager that it would be doable for KSPWheel, but time consuming.  Certainly would be nice at some point though.

Link to comment
Share on other sites

They work alright, they're not without imperfections though. Large rovers, like this one, often bounce with any physicswarp. 

0LJKFlPa.png

There are also struggles in low gravity, lack of traction (not that unexpected here), which ends with the wheels spinning and breaking, I end up just making the wheels really strong so they can be used. 

UBYPQ4i.png

I've only really experimented with the two wheels above, this is the CFC settings I've got currently. 

/roverWheelTR-2L - truck wheels
@PART[wheelMed]
{
	-MODULE[ModuleWheelBase]{}
	-MODULE[ModuleWheelSuspension]{}
	-MODULE[ModuleWheelSteering]{}
	-MODULE[ModuleWheelMotor]{}
	-MODULE[ModuleWheelBrakes]{}
	-MODULE[ModuleWheelDamage]{}
		
	MODULE
	{
		name = KSPWheelBase
		wheelColliderName = WheelCollider
		wheelColliderOffset = 0.125
		wheelRadius = 0.58
		wheelMass = 0.07
		suspensionTravel = 0.125
		loadRating = 3
		minLoadRating = 0.25
		maxLoadRating = 5.5
		maxSpeed = 64
		groundHeightOffset = 0.78
	}
	MODULE
	{
		name = KSPWheelRotation
		wheelMeshName = WheelPivot
		rotationAxis = 1,0,0
	}
	MODULE
	{
		name = KSPWheelSuspension
		suspensionName = SuspensionPivot
		suspensionOffset = -0.10
		suspensionAxis = 0, 1, 0
	}
	MODULE
	{
		name = KSPWheelSteering
		steeringName = SteeringPivot
		maxSteeringAngle = 30
		steeringAxis = 0, 1, 0
	}
	MODULE
	{
		name = KSPWheelMotor
		maxMotorTorque = 3.5
		maxRPM = 2050
	}
	MODULE
	{
		name = KSPWheelBrakes
		maxBrakeTorque = 12
	}
	MODULE
	{
		name = KSPWheelDamage
		wheelName = wheel
		bustedWheelName = bustedwheel
	}
	MODULE
	{
		name = KSPWheelDustEffects
	}
	MODULE
	{
		name = KSPWheelSounds
	}
}

 

/roverWheelS2 - the probe wheels
@PART[roverWheel2]
{
	-MODULE[ModuleWheelBase]{}
	-MODULE[ModuleWheelSuspension]{}
	-MODULE[ModuleWheelSteering]{}
	-MODULE[ModuleWheelMotor]{}
	-MODULE[ModuleWheelBrakes]{}
	-MODULE[ModuleWheelDamage]{}
	MODULE
	{
		name = KSPWheelBase
		wheelColliderName = WheelCollider
		wheelColliderOffset = 0.1939
		wheelRadius = 0.1575
		wheelMass = 0.030
		suspensionTravel = 0.195
		loadRating = 0.3
		minLoadRating = 0.01
		maxLoadRating = 2
		maxSpeed = 11.5
		groundHeightOffset = 0.175
	}
	MODULE
	{
		name = KSPWheelRotation
		wheelMeshName = WheelPivot
		rotationAxis = 1,0,0
	}
	MODULE
	{
		name = KSPWheelSuspension
		suspensionName = SuspensionPivot
		suspensionOffset = -0.18
		suspensionAxis = 0, 1, 0
	}
	MODULE
	{
		name = KSPWheelSteering
		steeringName = SteeringPivot
		maxSteeringAngle = 40
		steeringAxis = 0, 1, 0
		steeringResponse = 10
	}
	MODULE
	{
		name = KSPWheelMotor
		maxMotorTorque = 1.24
		maxRPM = 1300
	}
	MODULE
	{
		name = KSPWheelBrakes
		maxBrakeTorque = 2.5
	}
	MODULE
	{
		name = KSPWheelDamage
		wheelName = wheel
		bustedWheelName = bustedwheel
	}
	MODULE
	{
		name = KSPWheelDustEffects
	}
	MODULE
	{
		name = KSPWheelSounds
	}
}

Apart from in low gravity, and the mechjeb thing, they are an improvement over stock.

Edited by Tw1
Link to comment
Share on other sites

1 hour ago, Agustin said:

I dont have bouncing with the wheels either... maybe try kerbal Foundries mod wheels?

Part of the bounce is just a part of Unity joint physics, and mostly 'unsolvable' (without resorting to silly stuff like stock's 'locked autostruts').

But yes, part of the bounce is due to the stock models themselves, not being created with Unity physics in mind, with extremely short suspension ranges.  Combine a short suspension range with a high spring value (for a scaled up wheel), and you'll get something that will want to bounce around a bit, esp. when combined with the previously mentioned joint issues.  Creative use of (auto)struts can often mitigate most of the bounce (if caused by joints), and playing with spring/damper settings on the wheels can generally get them into a stable regime from there (if caused by model suspension length).


To note, I don't get bouncing on my craft either.  I've noticed on all the craft where it has been reported, that the craft has wheels mounted out on some skinny / light / long thing with many joints between the wheel and the root part.  All the joints add slop, which causes bouncing when physics interaction starts up.  Most of my craft have the wheels mounted directly to a fuselage / main structural element, which then applies the forces directly to the fuselage; no extra joints = no extra bounce/jitter/slop.

But yeah, the wheel code isn't perfect (I don't think it can be with the limited access to the PhysX side of things that I have), but in most cases it is more reliable and less 'wierd' than the stock wheel code :)

Link to comment
Share on other sites

1 hour ago, Shadowmage said:

I've noticed on all the craft where it has been reported, that the craft has wheels mounted out on some skinny / light / long thing with many joints between the wheel and the root part.  All the joints add slop, which causes bouncing when physics interaction starts up.  Most of my craft have the wheels mounted directly to a fuselage / main structural element, which then applies the forces directly to the fuselage; no extra joints = no extra bounce/jitter/slop.

Huh. Sounds like it's time for me to go download whatever the modern equivalent of the old wielding mod is.  The one thing I still find weird is I don't remember any of this happening with the older versions of KSP's stock wheels. I'd  gladly trade some realism for wheels which actually worked. 

Edited by Tw1
Link to comment
Share on other sites

1 hour ago, Tw1 said:

The one thing I still find weird is I don't remember any of this happening with the older versions of KSP's stock wheels.

Back in the Pre KSP 1.1 days, these problems didn't exist.  It was only with the upgrade to Unity 5+, where Unity upgraded to a new PhysX version, that these problems started occurring.  PhysX changed their wheel-collider system, and Unity didn't re-implement their end with equivalent features of the old version (if it was even possible).

Unfortunately it isn't even a 'KSP' problem, but one that exists in the game engine and its use of the physics library; it is not a problem caused by KSP code, nor is it one that can be solved by KSP code.

Link to comment
Share on other sites

3 hours ago, Shadowmage said:

But yes, part of the bounce is due to the stock models themselves, not being created with Unity physics in mind, with extremely short suspension ranges.  Combine a short suspension range with a high spring value (for a scaled up wheel), and you'll get something that will want to bounce around a bit, esp. when combined with the previously mentioned joint issues.  Creative use of (auto)struts can often mitigate most of the bounce (if caused by joints), and playing with spring/damper settings on the wheels can generally get them into a stable regime from there (if caused by model suspension length).


To note, I don't get bouncing on my craft either.  I've noticed on all the craft where it has been reported, that the craft has wheels mounted out on some skinny / light / long thing with many joints between the wheel and the root part.  All the joints add slop, which causes bouncing when physics interaction starts up.  Most of my craft have the wheels mounted directly to a fuselage / main structural element, which then applies the forces directly to the fuselage; no extra joints = no extra bounce/jitter/slop.

But yeah, the wheel code isn't perfect (I don't think it can be with the limited access to the PhysX side of things that I have), but in most cases it is more reliable and less 'wierd' than the stock wheel code :)

Re: the stock wheels, or more specifically the Unity VP wheel code: Not 100% sure of this but where their documentation says that piston forces are in newtons.... I think as implemented (again, on the Unity side) that it's actually behaving as an acceleration rather than as a 'force'....

Link to comment
Share on other sites

One last thing I should report in trying out the stock replacer configs: The big wheel model gets messed up,  might be something to do with the scaling thing.  These I might just leave stock.A7UH8Kh.png

Link to comment
Share on other sites

13 minutes ago, Tw1 said:

One last thing I should report in trying out the stock replacer configs: The big wheel model gets messed up,  might be something to do with the scaling thing.

Thanks for the report.  Indeed -- likely related to the scaling feature and some improper configs for that part.

36 minutes ago, Starwaster said:

Re: the stock wheels, or more specifically the Unity VP wheel code: Not 100% sure of this but where their documentation says that piston forces are in newtons.... I think as implemented (again, on the Unity side) that it's actually behaving as an acceleration rather than as a 'force'....

Yeah, that was about the behaviour I saw when I was testing the Unity WheelCollider functionality when developing KSPWheel.  If you took a rigidbody and configured wheels for it, you could change the mass of the rigidbody and the wheel behavior would not change as expected (e.g. would not change at all) -- the suspension would maintain the same compression even with body mass changes (whereas, if it were newtons, the compression should change with changes to mass).  Which would lead me to believe that they are using some abstracted specification, not using newtons directly, but some body-mass-scaled value;  more of a 'ratio' than an actual specification of a physical force.

That was one of the reasons I decided to roll my own.  When you can't even get physically correct specifications for the 'stock' systems... time to look somewhere else.

Link to comment
Share on other sites

  • 1 month later...

@Shadowmage

Hi, thank you for the module! It has motivated me to try and revive an old project of mine. I see that it has worked for others.

I was hoping someone could help me as I am having some problems trying to convert my project from the old CleverBobCat / ToshCart mod to this one, unfortunately I can't seem to get my head around getting the deployment, suspension, and motor working. Specifically with getting the wheels to start at the RETRACTED state for placing inside a fairing or such, getting the constraints to keep the rotating lever to stay in place while only rotating as the suspension action, and getting the wheel collider to follow the wheel deployment animation transform path without using a parent object. The problems I face is misalignment of the base lever attached to the cart itself, bouncing / jittering when attempting to use the motors (jitter stops if I remove the motors), and suspension that only transforms y+ (detaching from the model) and not rotating around x-axis.

Here's some screenshots and dev build of my Unity project and an example of my config.

Image Samples

https://imgur.com/a/coaO42l

Unity Project

https://www.dropbox.com/s/hkijv7ltdc8agse/RTV-Cart.7z?dl=0

MODULE
{
	name = KSPWheelBase
	WHEEL
	{
		colliderName = wheelcolliderFL
		radius = 0.41
		mass = 0.10
		travel = 0.30
		load = 0.200
	}
	WHEEL
	{
		colliderName = wheelcolliderFR
		radius = 0.41
		mass = 0.10
		travel = 0.30
		load = 0.200
	}
	WHEEL
	{
		colliderName = wheelcolliderRL
		radius = 0.42
		mass = 0.10
		travel = 0.30
		load = 0.200
	}
	WHEEL
	{
		colliderName = wheelcolliderRR
		radius = 0.42
		mass = 0.10
		travel = 0.30
		load = 0.200
	}
	loadRating = 0.2
	minLoadRating = 0.2
	maxLoadRating = 2.5
	maxSpeed = 200
	forwardFriction = 1.25
	sidewaysFriction = 2
}

MODULE
{
	name = KSPWheelSuspension
	suspensionName = rotatingJointFL
	suspensionOffset = -0.3
	suspensionAxis = 0, 1, 0
}

MODULE
{
	name = KSPWheelSuspension
	suspensionName = rotatingJointFR
	suspensionOffset = -0.3
	suspensionAxis = 0, 1, 0
}

MODULE
{
	name = KSPWheelSuspension
	suspensionName = rotatingJointRL
	suspensionOffset = -0.3
	suspensionAxis = 0, 1, 0
}

MODULE
{
	name = KSPWheelSuspension
	suspensionName = rotatingJointRR
	suspensionOffset = -0.3
	suspensionAxis = 0, 1, 0
}

MODULE
{
	name = KSPWheelDeployment
	animationName = deploywheels
	retractEffect = retract
	retractedEffect = retracted
	deployEffect = deploy
	deployedEffect = deployed
	useResourceDeploy = true
	useResourceRetract = true
	deployResourceCost = 1
	retractResourceCost = 1
	deployResourceName = ElectricCharge
	retractResourceName = ElectricCharge
}

MODULE
{
	name = KSPWheelDeployCollider
	colliderNames = wheelcolliderFL, wheelcolliderFR, wheelcolliderRL, wheelcolliderRR
	colliderRadius = 0.40
	
}

MODULE
{
	name = KSPWheelAdjustableDeployment
	controlName = Deploy Gear
	useDeployModule = true
	TRANSFORM
	{
		transformName = rotatorFL
		localRotation = 45, 0, 0
	}
	TRANSFORM
	{
		transformName = rotatorFR
		localRotation = 45, 0, 0
	}
	TRANSFORM
	{
		transformName = rotatorRL
		localRotation = 135, 0, 0
	}
	TRANSFORM
	{
		transformName = rotatorRR
		localRotation = 135, 0, 0
	}
}

MODULE
{
	name = KSPWheelRotation
	wheelIndex = 0
	wheelMeshName = wheel1_ms
	rotationAxis = 1, 0, 0
}

MODULE
{  
	name = KSPWheelRotation
	wheelIndex = 1
	wheelMeshName = wheel2_ms
	rotationAxis = 1, 0, 0
}

MODULE
{
	name = KSPWheelRotation
	wheelIndex = 2
	wheelMeshName = wheel3_m
	rotationAxis = 1, 0, 0
}

MODULE
{
	name = KSPWheelRotation
	wheelIndex = 3
	wheelMeshName = wheel4_m
	rotationAxis = 1, 0, 0
}

MODULE
{
	name = KSPWheelSteering
	steeringName = steeringFL
	maxSteeringAngle = 10
	steeringAxis = 0, 1, 0
	steeringResponse = 0.05
}

MODULE
{
	name = KSPWheelSteering
	steeringName = steeringFR
	maxSteeringAngle = 10
	steeringAxis = 0, 1, 0
	steeringResponse = 0.05
}

MODULE
{
	name = KSPWheelSteering
	steeringName = steeringRL
	maxSteeringAngle = 10
	steeringAxis = 0, 1, 0
	steeringResponse = 0.05
}

MODULE
{
	name = KSPWheelSteering
	steeringName = steeringRR
	maxSteeringAngle = 10
	steeringAxis = 0, 1, 0
	steeringResponse = 0.05
}

MODULE
{
	name = KSPWheelBrakes
	maxBrakeTorque = 20
	brakeResponse = 2
}

MODULE
{
	name = KSPWheelDustEffects
}

}

If someone could just point me in the right direction I would be eternally grateful.

Edited by Space ghöst
Spacing.
Link to comment
Share on other sites

22 hours ago, Space ghöst said:

If someone could just point me in the right direction I would be eternally grateful.

There is a way to invert/reverse the animation within the configs, so it should be able to be made to work regardless of which direction the actual animation is setup for in the model.  I'll try and dig up which config settings are needed (just handled this when helping someone else, but don't remember.... seemed 'common sense' when looking at the module defs).

Constraints -- I can't really help much there as it is entirely model specific.  I'm not seeing any constraints modules listed in the config though?

I'm certain we can get it all working for you, might just take a bit to get it all sorted out.

 

Link to comment
Share on other sites

I'll watch a tutorial on how wheels are made in U5 and follow that. Besides not using the actual colliders and making sure not to make the collider a child object of the suspension or steering, it should work with your code. 

I did try and invert the animation, but the wheels would fall through the ground on deployment. The constraints were removed because my rotating lever would snap back to my anchor after animating to deployed. The deployment slider would only rotate my wheels in the VAB also.

Perhaps I'm just making it more difficult than it really is, and have neglected proper object transform alignment / hierarchy / etc. I figured a cursory glance may reveal something, but I don't want anyone to spend too much time on my account.

I'll give it another go. Going to fix some pivot orientations in Blender as the rotator lever in the rear point Z down, although the wheels all point Z forward / Y up (old ToshCart implementation).

Thank you for the reply! I really appreciate it.

Edited by Space ghöst
Spelling
Link to comment
Share on other sites

19 minutes ago, Space ghöst said:

I'll watch a tutorial on how wheels are made in U5 and follow that. Besides not using the actual colliders and making sure not to make the collider a child object, it should work with your code. 

I did try and invert the animation, but the wheels would fall through the ground on deployment. The constraints were removed because my rotating lever would snap back to my anchor after animating to deployed. The deployment slider would only rotate my wheels in the VAB also.

Perhaps I'm just making it more difficult than it really is, and have neglected proper object transform alignment / hierarchy / etc. I figured a cursory glance may reveal something, but I don't want anyone to spend too much time on my account.

I'll give it another go. Going to fix some pivot orientations in Blender as the rotator lever in the rear point Z down, although the wheels all point Z forward / Y up (old ToshCart implementation).

Thank you for the reply! I really appreciate it.

 

To set the starting state:

	MODULE
	{
		name = KSPWheelBase
        [....existing stuff....]
		persistentState = RETRACTED
	}


If the animation is 'backwards' (allowing control when retracted), invert the animation in the deployment module:


	MODULE
	{
		name = KSPWheelDeployment
        [.... existing stuff ....]
        invertAnimation = true
	}

 

A bit later in the week, if you are still having problems, try packing up your configs + model files into a .zip and send them my way.  99% certain I can get it working, but I'll have to dig into what is currently going on / how the model is rigged. 

(Really wish there was someone else who could wrap their head around the wheel system so I didn't have to do all of these myself....  any volunteers?  I really don't have time to keep working through other peoples models' configs, and could use some assistance if anyone is knowledgeable enough)


Further note -- KSPWheel actually works closer to the old Unity 4 wheel system (in fact, it was designed around that interface), so trying to utilize tutorials for making wheels in KSP for Unity 5+ might point you in the wrong direction (at the very least it'll make things needlessly complex).  (I have no idea how to use the new stock system, so can't give any more precise information...)

Edited by Shadowmage
Link to comment
Share on other sites

Ok, gotcha! Sorry my C# skills need sharpening :confused:

I was confused looking at this part:

public string persistentState = KSPWheelState.DEPLOYED.ToString();

 

Btw, I will look into U4 wheel system instead. Also, when I get my head around your system I will gladly volunteer to help out. I will be experimenting with different wheel styles, orientations, and familiarizing myself with all the settings, and try and get a refresher on coding. I recently got a lot of free time on my hands.

Thank you for the correction. I know you're very busy so please don't let me take up anymore of your time. You've been extremely helpful!

I'll be back in around a week with the correct solution.

Update: Rookie mistake with the wheel collider. For some reason I read the post wrong and assumed your couldn't make the wheel collider a child of anything (empty gameObjects work just fine). Now to tackle the suspension / constraints.

Update2: Motors working great. Fine tuning everything now. Constraints are kinda strange. Was hoping to get the wheel suspension to move not just vertically, but also follow the rotation of the suspension / lever it looks at. For now the wheels have a little play to give a feel of a suspension, but it's not optimal. Still investigating...

 
Edited by Space ghöst
Addendum
Link to comment
Share on other sites

  • 1 month later...
5 hours ago, Stone Blue said:

@Dundrogen  OwO ...wow... that..is...AWESOME :D

@TiktaalikDreaming Just tagging you for FYI... you gotta see that vid... :D

Thank you.

The KSPwheel plugin allows multiple calls of certain modules. The wheel turning module is called three times in this rig. One to spin the wheel and two others to spin the 2 CV arms. 

Edited by Dundrogen
Typo
Link to comment
Share on other sites

Just now, Dundrogen said:

Thank you.

The KSPwheel mod allows multiple calls of certain modules. The wheel turning module is called three times in this rig. One to spin the wheel and two others to spin the 2 CV arms. 

Hehe, the art of illusion, at its heart.  Glad I could convey that bit of understanding regarding model rigging.  Now only your imagination will limit your rigging (and obscure technical issues, as always) :)

 

Link to comment
Share on other sites

1 minute ago, Shadowmage said:

Hehe, the art of illusion, at its heart.  Glad I could convey that bit of understanding regarding model rigging.  Now only your imagination will limit your rigging (and obscure technical issues, as always) :)

 

Much gratitude for the imparted wisdom and even more so for KSPwheel. I imagine this would be impossible to pull off with the stock wheel module. Also because of KSPwheel, LOOKLOCK can be set to track in all axes which was vital for this rigs Steering hydraulics and CV joint. 

Link to comment
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.

×
×
  • Create New...