nyrath

Orion aka "Ol' Boom-boom"

Recommended Posts

MOD EDIT : Appears to be licensed according to this post. Nyrath, please confirm or deny as soon as you see this.

What is Project Orion?

A totally insane propulsion system. It is based on the old "firecracker under a tin can" principle. Except the tin can is a spacecraft and the firecracker is a nuclear bomb.

And it was real. The project was cancelled in 1963 due to the nuclear test ban treaty.

Details here:

http://www.projectrho.com/public_html/rocket/enginelist.php#id--Pulse--Orion

http://en.wikipedia.org/wiki/Project_Orion_%28nuclear_propulsion%29

http://www.projectrho.com/public_html/rocket/sealofapproval.php#id--Computer_Simulation--Kerbal_Space_Program--Orion_nuclear_pulse

Why a Kerbal Orion mod?

Because everybody wants one. I found no less than four prior Orion projects, all of which ended in failure.

Which means there is a demand, but it is freaking hard to do.

Since the mod is based on actual project Orion data, it is very scientifically accurate. You will find that it can boost absurd amounts of payload into orbit, and it has shocking amounts of delta V. Of course Kerbals are immune to radiation, which is why this engine is not used by NASA.

Why Me?

Because I'm the Atomic Rocket guy, and my life will not be complete without KSP equipped with the ultimate insane atomic rocket.

I used this document as my primary reference for the mod.

Alpha version ready for test

Download here

https://copy.com/LneJa01RWgJv

version 0.18 (9.7MB)

Instructions and history are in the readme file

WARNING:

This version is broken in KSP 0.90

As a temporary fix, after you install the mod, get the modified DLL here and install it

https://github.com/cerebrate/USAFOrion/releases

I will merge the fix as soon as I get some free time.

With version 0.12, mod is now in KSP 0.20 format. Before installing, be sure you have removed any pre-0.12 Orion mods.

[1] from \Kerbal Space Program\Plugins\ delete the file USAFOrion.dll

[2] from \Kerbal Space Program\Plugins\, delete entire folders

\USAFOrion3Engine\

\USAFOrionEngine\

\USAFOrionMag0_8kt0_88mn\

\USAFOrionMag15kt400mn\

\USAFOrionMag1kt2mn\

\USAFOrionMag1kt3_5mn\

\USAFOrionMag5kt80mn\

\USAFOrionMagazine\

Bug fixes:

With KSP version 0.21, suddenly the Orion vessels were blowing up on the launch pads. This is a fix for that.

WARNING: if your ship is "tippy", that is if it is massive enough so that if it rests on its bare Orion pusher plate you see the ship gently swaying back and forth, launching under Orion power will make the ship explode despite the bug fix. To avoid this, launch with the vessel supported by TT18-A Launch Stability Enhancers or with LT-2 Landing Struts that have been extended by pressing the G key.

If anybody is interested, the problem was the little bomb module that you see shooting through the pusher plate and exploding. Trouble was it was programmed to detonate 23 meters below the pusher plate. Which is a problem if the plate is resting flat on the ground. So the little bomb hit the launch pad at high speed, and the resulting shock broke the vessel apart. This is because as far as the physics engine is concerned the little bomb and the Orion engine are the same thing, it thought the entire engine hit the launch pad at high speed.

Now the plug in is smart enough to check the bomb's travel path for obstacles, like planets.

------------

If you load a .craft file and get an error about missing part USAFOrionmag1kt2mn, that was removed in version 0.14. It is present in version 0.13

old version 0.13

http://ubuntuone.com/44qIfp6I86yoWzHtAwNW1b

If version 0.18 breaks revert to version 0.17

old version 0.17

http://ubuntuone.com/6Xmgy59yKQ2FgSBxPMaSUq

-------------------------

(SketchFab image below, if your browser does not support it, you will just see a blank space)

-------------------------

Quick video

Scott Manley's review of the mod

orionFlag.jpgtriOrion01.jpghotStuff02.jpgtriOrion07.jpgaq1OO1iSm.jpgorionBoom02.jpg

Edited by DuoDex
License?

Share this post


Link to post
Share on other sites

Nice model, but to be even slightly realistic, it would need to be at least 4 or 5 times the size.

I'm not sure you need to code anything. You could use a "Pellets" ressource that uses one unit on each pulse and calculate the Isp accordingly. Thrust vectoring should be disabled.

Share this post


Link to post
Share on other sites
Nice model, but to be even slightly realistic, it would need to be at least 4 or 5 times the size.

I'm not sure you need to code anything. You could use a "Pellets" ressource that uses one unit on each pulse and calculate the Isp accordingly. Thrust vectoring should be disabled.

Five times. For the NASA-USAF Orion study, the pusher plate was 10 meters in diameter, the one I have is only two. I used two because that is the standard stack element diameter. And because I was unsure if it would break anything if I made it 10 meters in diameter. Because I am a total noob at this sort of thing.

I'm sure this thing is going to undergo plenty of revision.

Thanks for the tip about the "pellet" resource, and thrust vectoring. But I wanted to see if I could animate a series of explosions synchronized with the pusher-plate animation.

Can you please tell me the relationship between heatProduction and maxTemp? The emissive texture tutorial I read said that the emission animation should be 60 seconds long, and the view at 30 second should be "normal" operational heat. Is the animation at 60 seconds what you get when temp = maxTemp? I assume that the temp has heatProduction added to it periodically, but how often, and what level triggers overheating?

So far I have failed to find this info in the wiki or in the forum.

Edited by nyrath

Share this post


Link to post
Share on other sites

Yes! I have waited so long for such a mod:D Thank you nyrath:)

Share this post


Link to post
Share on other sites
Yes! I have waited so long for such a mod:D Thank you nyrath:)

Don't thank me yet, this is going to take a while to get it working. But I'm glad you are eager for it.

Share this post


Link to post
Share on other sites

A good start, I can offer you no help however, in getting the details worked out, but I am sure others will lend a hand.

<marked thread to watch>

as to 10m parts, there are a few out there, they don't break the game <generally>.

Share this post


Link to post
Share on other sites

I actually started making a plugin to do exactly this way before I joined the team... I wonder if it still works. It didn't use any of the existing engine code, it directly applied a velocity change to the vessel, and shook it violently so anything that was poorly built wouldn't last long. If you timed it right, you could even land on other bodies with it. I never got it to the point of making effects for it sadly, and the model was just a placeholder.

As for the size, remember, the Kerbal universe has slightly different laws of physics - nuclear bombs may just work at tiny sizes here.

Share this post


Link to post
Share on other sites

I think a 3meter version is the biggest you need to make. There are only a few bigger mods than that.(A bigger version would still be nice:))

Share this post


Link to post
Share on other sites

Just a note- the Orion drive would only be feasible if in space already.

Share this post


Link to post
Share on other sites
Just a note- the Orion drive would only be feasible if in space already.
Kerbals don't care:)

Share this post


Link to post
Share on other sites
Just a note- the Orion drive would only be feasible if in space already.

Depends on how you define "feasible".

It will take off from Earth or Kerbal and travel into low orbit just fine.

It is just that some people have a problem with how it pops off 200 or so five-kiloton nukes in the process.

It actually is not utterly hideous, if you take off from a huge steel plate covered in graphite, with the lift-off point located near the north or south magnetic pole.

Share this post


Link to post
Share on other sites
Kerbals don't care:)

I was talking about, well, shock waves. The Orion engine requires a directed pulse of energy in the form of high-speed ions generated by the explosion in the direction of the pusher plate, right? A nuke, going off in-atmos generates a large shock wave, but less 'push' from the perspective of the plate. That also would damage the ship, as the shock waves would ripple around the plate... Causing explosions.

Very kerbal indeed :D

I will be WAYYYYY over there, watching this experiment. :cool:

Share this post


Link to post
Share on other sites
I was talking about, well, shock waves. The Orion engine requires a directed pulse of energy in the form of high-speed ions generated by the explosion in the direction of the pusher plate, right? A nuke, going off in-atmos generates a large shock wave, but less 'push' from the perspective of the plate. That also would damage the ship, as the shock waves would ripple around the plate... Causing explosions.

Very kerbal indeed :D

Orion drive ships use nuclear shaped charges. The blast is not isotropic, it is directed.

http://www.projectrho.com/public_html/rocket/enginelist.php#id--Pulse--Orion

Also, while in the atmosphere, the charges are much smaller. For example, the 4,000 ton Orion would use five kiloton nuclear charges while in space, but during the climb out of the atmosphere it would use charges that were only 0.15 kilotons. The atmo charges would also not need the tungsten propellant required on the vacuum charges, the atmosphere would provide the propellant.

Share this post


Link to post
Share on other sites
Just a note- the Orion drive would only be feasible if in space already.

Meanwhile in Kerbin...

Share this post


Link to post
Share on other sites

In my quest to make the series of explosions I did run across this

http://forum.kerbalspaceprogram.com/showthread.php/16497-0-16-Oi3-Demolition-Inc-TNT-Pack

However, examining the source code, it apparently just calls the

 part.explode()

function on a part. I guess if I can create a new part to represent each new explosive charge, I can explode it and send a message to the pusher plate to run one cycle of the pusher animation. I guess.

Meanwhile in Kerbin...

Yes, Captain Kalawang, I respect the purists who do everything with only stock plain vanilla. I will try that.

But any hacker gets an itchy feeling with something doesn't quite do what they want. Currently there is no stock Project Orion engine.

Edited by nyrath

Share this post


Link to post
Share on other sites

Recovered the code! Certain not to work with the latest version of ksp and woefully unfinished, but it should serve as a starting point!

OrionPusherPlate.cs

using System;
using UnityEngine;
public class OrionPusherPlate : Part
{
public float bombImpulse = 1000f;
public float bombHeat = 200f;
public float bombVariation = 100f;
public float plateOffset = 0.5f;
public float plateSpeed = 0.5f;
private int numBombs;
private FXGroup explosionGroup;
private Transform pusherPlate;
private bool canFire = true;
private OrionMagazine magazine;
protected override void onFlightStart()
{
this.pusherPlate = base.get_transform().FindChild("model").FindChild("obj_pusherplate");
this.explosionGroup = base.findFxGroup("explosionGroup");
this.magazine = (this.parent as OrionMagazine);
if (this.magazine)
{
this.numBombs = this.magazine.bombStockpile;
MonoBehaviour.print("OrionPusherPlate: Found magazine to draw bombs from! Available bombs now at: " + this.numBombs);
}
else
{
MonoBehaviour.print("Oh dear god! OrionPusherPlate couldn't find an attached magazine!");
this.numBombs = 0;
}
base.onFlightStart();
}
protected override void onPartLoad()
{
this.fxGroups.Add(new FXGroup("explosionGroup"));
base.onPartLoad();
}
protected void launchBomb()
{
float num = 0f;
if (this.vessel.get_isCommandable() && this.numBombs > 0)
{
foreach (Part current in this.vessel.parts)
{
num += current.mass;
}
this.numBombs--;
MonoBehaviour.print(string.Concat(new object[]
{
"Firing bomb! Bomb count is now: ",
this.numBombs,
", container mass is ",
this.magazine.mass,
this.magazine.dryMass
}));
this.pusherPlate.set_localPosition(new Vector3(0f, this.plateOffset, 0f));
this.vessel.ChangeWorldVelocity(base.get_transform().get_up() * ((this.bombImpulse + Random.Range(0f, this.bombVariation)) / num));
base.get_rigidbody().AddRelativeForce(new Vector3(0f, this.bombImpulse + Random.Range(0f, this.bombVariation), 0f));
this.temperature += this.bombHeat;
this.explosionGroup.set_Power(5f);
this.explosionGroup.Burst();
base.get_gameObject().get_audio().set_pitch(1f);
base.get_gameObject().get_audio().PlayOneShot(this.explosionGroup.sfx);
}
}
protected override bool onPartActivate()
{
this.launchBomb();
return base.onPartActivate();
}
protected override void onActiveFixedUpdate()
{
if (Input.GetKey(122) && this.canFire)
{
this.canFire = false;
this.launchBomb();
}
float num = this.pusherPlate.get_localPosition().y;
if (this.pusherPlate.get_localPosition().y > 0.01f)
{
this.canFire = false;
num -= this.plateSpeed * Time.get_deltaTime();
}
else
{
this.canFire = true;
num = 0f;
}
this.pusherPlate.set_localPosition(new Vector3(0f, num, 0f));
this.magazine.bombStockpile = this.numBombs;
base.onActiveFixedUpdate();
}
}

OrionMagazine.cs

using System;
using System.Collections.Generic;
using UnityEngine;
internal class OrionMagazine : Part
{
public int bombStockpile = 200;
public float bombMass = 0.25f;
public float dryMass = 1f;
private VInfoBox bombCounter;
private int initialBombs;
protected override void onPartLoad()
{
base.onPartLoad();
this.mass = (float)this.bombStockpile * this.bombMass;
this.initialBombs = this.bombStockpile;
}
protected override void onPartFixedUpdate()
{
this.mass = (float)this.bombStockpile * this.bombMass;
if (this.bombCounter == null)
{
this.bombCounter = this.stackIcon.DisplayInfo();
this.bombCounter.SetMsgBgColor(XKCDColors.get_DarkGreen());
this.bombCounter.SetMsgTextColor(XKCDColors.get_ElectricLime());
this.bombCounter.SetProgressBarBgColor(new Color(0f, 0f, 0f, 0f));
this.bombCounter.SetProgressBarColor(new Color(0f, 0f, 0f, 0f));
}
else
{
this.bombCounter.SetMessage("Bombs: " + this.bombStockpile);
}
base.onPartFixedUpdate();
}
public override void onFlightStateSave(Dictionary<string, KSPParseable> partDataCollection)
{
partDataCollection.Add("bombs", new KSPParseable((float)this.bombStockpile, 2));
}
public override void onFlightStateLoad(Dictionary<string, KSPParseable> parsedData)
{
if (parsedData.ContainsKey("bombs"))
{
this.bombStockpile = parsedData["bombs"].get_value_int();
}
}
}

Share this post


Link to post
Share on other sites

Well, I was starting on an Orion project as well, and failed because of the pulsed thrust / ?ammo? issue. Thanks for the starting stuff, Nova

Share this post


Link to post
Share on other sites
Recovered the code! Certain not to work with the latest version of ksp and woefully unfinished, but it should serve as a starting point!

NovaSilisko thank you so much! This will be a huge help!

Share this post


Link to post
Share on other sites
Yes, Captain Kalawang, I respect the purists who do everything with only stock plain vanilla. I will try that.

But any hacker gets an itchy feeling with something doesn't quite do what they want. Currently there is no stock Project Orion engine.

Thats just his signature in which he makes fun of purists who think they are better than anybody else:) Nobody should respect them.

Share this post


Link to post
Share on other sites
Orion drive ships use nuclear shaped charges. The blast is not isotropic, it is directed.

http://www.projectrho.com/public_html/rocket/enginelist.php#id--Pulse--Orion

Also, while in the atmosphere, the charges are much smaller. For example, the 4,000 ton Orion would use five kiloton nuclear charges while in space, but during the climb out of the atmosphere it would use charges that were only 0.15 kilotons. The atmo charges would also not need the tungsten propellant required on the vacuum charges, the atmosphere would provide the propellant.

This is true.

Just remember 1 thing: there is no such thing as a perfect shaped charge.

Share this post


Link to post
Share on other sites

Kerbals are much less likely to consider the whole "safety" aspect and just focus on the "oh my god we should totally blow up nuclear bombs behind a spaceship to make it go fast" aspect.

Share this post


Link to post
Share on other sites
However, examining the source code, it apparently just calls the
 part.explode()

function on a part. I guess if I can create a new part to represent each new explosive charge, I can explode it and send a message to the pusher plate to run one cycle of the pusher animation. I guess.

Use FXMonger.Explode() instead of part.explode and you don't need to spawn new parts.

Share this post


Link to post
Share on other sites
Use FXMonger.Explode() instead of part.explode and you don't need to spawn new parts.

Great! Thank you so much, that would have taken me weeks to find in the docs.

I think a 3meter version is the biggest you need to make. There are only a few bigger mods than that.(A bigger version would still be nice:))

Hrrmph. You might be right. I tried a version with a full 10 meter plate. Perhaps a bit excessive...

orionVAB01.jpgorionVAB02.jpgorionVAB03.jpg

Landing gear is going to be a bit of a problem. Not to mention getting the Kerbals down to the ground. I'll have to think about this.

Share this post


Link to post
Share on other sites

Actually... It looks about right. The only thing I would recommend is a custom fuel tank , and some other things. I personally think it looks very similar to this video:

...

Maybe we can make a deadalus....

Share this post


Link to post
Share on other sites
Actually... It looks about right. The only thing I would recommend is a custom fuel tank , and some other things. I personally think it looks very similar to this video:

Yes, that animation is from my friend Rhys Taylor, who is quite interested in this mod.

A custom fuel tank will be created, the exemplar I'm using for this project had flat cylindrical magazines. Each magazine held 92 nuclear bombs (90 plus two spares). On each level six magazines were arranged around a central core. There were about three levels of magazines.

NovaSilisko's code had a dll for the magazines.

What other things would you suggest?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now