VesselInfo: Changed resource mass line to new combat stage/total resource mass.
VesselInfo: Changed resource mass line to new combat stage/total resource mass.

--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -39,7 +39,7 @@
 // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("0.11.0.*")]
+[assembly: AssemblyVersion("0.12.0.*")]
 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.
 //[assembly: AssemblyDelaySign(false)]

--- a/VOID.csproj
+++ b/VOID.csproj
@@ -9,6 +9,7 @@
     <RootNamespace>VOID</RootNamespace>
     <AssemblyName>VOID</AssemblyName>
     <CodePage>65001</CodePage>
+    <UseMSBuildEngine>False</UseMSBuildEngine>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ReleaseVersion>0.11</ReleaseVersion>
@@ -94,7 +95,6 @@
     <Compile Include="VOID_Localization.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="VOID_HUDAdvanced.cs" />
-    <Compile Include="VOID_EditorTWR.cs" />
   </ItemGroup>
   <ProjectExtensions>
     <MonoDevelop>

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -81,7 +81,7 @@
 		 * Fields
 		 * */
 		protected string VoidName = "VOID";
-		protected string VoidVersion = "0.11.0";
+		protected string VoidVersion;
 
 		protected bool _factoryReset = false;
 
@@ -992,6 +992,10 @@
 		{
 			this._Name = "VOID Core";
 
+			System.Version version = this.GetType().Assembly.GetName().Version;
+
+			this.VoidVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.MajorRevision);
+
 			this._Active.value = true;
 
 			this._skinName = this.defaultSkin;

file:a/VOID_EditorTWR.cs (deleted)
--- a/VOID_EditorTWR.cs
+++ /dev/null
@@ -1,187 +1,1 @@
-// VOID © 2014 toadicus
-//
-// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a
-// copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/
 
-using KSP;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using ToadicusTools;
-using UnityEngine;
-
-namespace VOID
-{
-	public class VOID_EditorTWR : VOID_WindowModule, IVOID_EditorModule
-	{
-		private Dictionary<string, double> bodyGeeValues;
-		private List<CelestialBody> sortedBodyList;
-
-		public VOID_EditorTWR() : base()
-		{
-			this._Name = "IP Thrust-to-Weight Ratios";
-		}
-
-		public override void ModuleWindow(int _)
-		{
-			if (Event.current.type != EventType.Layout)
-			{
-				return;
-			}
-
-			Engineer.VesselSimulator.SimManager.RequestSimulation();
-
-			GUILayout.Label(
-				this._Name,
-				VOID_EditorCore.Instance.LabelStyles["center_bold"],
-				GUILayout.ExpandWidth(true));
-
-			if (bodyGeeValues == null)
-			{
-				if (FlightGlobals.Bodies != null && FlightGlobals.Bodies.Count > 0)
-				{
-					this.bodyGeeValues = new Dictionary<string, double>();
-
-					foreach (CelestialBody body in FlightGlobals.Bodies)
-					{
-						this.bodyGeeValues[body.name] = body.GeeASL;
-					}
-
-					this.sortedBodyList = new List<CelestialBody>(FlightGlobals.Bodies);
-					this.sortedBodyList.Sort(new CBListComparer());
-					this.sortedBodyList.Reverse();
-
-					Debug.Log(string.Format("sortedBodyList: {0}", string.Join("\n\t", this.sortedBodyList.Select(b => b.bodyName).ToArray())));
-				}
-				else
-				{
-					GUILayout.BeginVertical();
-					GUILayout.BeginHorizontal();
-					GUILayout.Label("Unavailable.");
-					GUILayout.EndHorizontal();
-					GUILayout.EndVertical();
-				}
-			}
-			else
-			{
-				GUILayout.BeginVertical();
-
-				foreach (CelestialBody body in this.sortedBodyList)
-				{
-					Tools.PostDebugMessage(this, "Doing label for {0}", body.bodyName);
-					GUILayout.BeginHorizontal();
-
-					GUILayout.Label(body.bodyName);
-					GUILayout.FlexibleSpace();
-					GUILayout.Label(
-						(VOID_Data.currThrustWeight.Value / this.bodyGeeValues[body.bodyName]).ToString("0.0##"),
-						GUILayout.ExpandWidth(true)
-					);
-
-					GUILayout.EndHorizontal();
-				}
-
-				GUILayout.EndVertical();
-			}
-
-			GUI.DragWindow();
-		}
-	}
-
-	public class CBListComparer : IComparer<CelestialBody>
-	{
-		public int Compare(CelestialBody bodyA, CelestialBody bodyB)
-		{
-			Tools.PostDebugMessage(this, "got bodyA: {0} & bodyB: {1}", bodyA, bodyB);
-
-			if (bodyA == null && bodyB == null)
-			{
-				Tools.PostDebugMessage(this, "both bodies are null, returning 0");
-				return 0;
-			}
-			if (bodyA == null)
-			{
-				Tools.PostDebugMessage(this, "bodyA is null, returning -1");
-				return -1;
-			}
-			if (bodyB == null)
-			{
-				Tools.PostDebugMessage(this, "bodyB is null, returning 1");
-				return 1;
-			}
-
-			Tools.PostDebugMessage(this, "bodies are not null, carrying on");
-
-			if (object.ReferenceEquals(bodyA, bodyB))
-			{
-				Tools.PostDebugMessage(this, "bodies are equal, returning 0");
-				return 0;
-			}
-
-			Tools.PostDebugMessage(this, "bodies are not equal, carrying on");
-
-			if (bodyA.orbitDriver == null)
-			{
-				Tools.PostDebugMessage(this, "bodyA.orbit is null (bodyA is the sun, returning 1");
-				return 1;
-			}
-			if (bodyB.orbitDriver == null)
-			{
-				Tools.PostDebugMessage(this, "bodyB.orbit is null (bodyB is the sun, returning -1");
-				return -1;
-			}
-
-			Tools.PostDebugMessage(this, "orbits are not null, carrying on");
-
-			if (bodyA.orbit.referenceBody == bodyB.orbit.referenceBody)
-			{
-				Tools.PostDebugMessage(this, "bodies share a parent, comparing SMAs");
-				return -bodyA.orbit.semiMajorAxis.CompareTo(bodyB.orbit.semiMajorAxis);
-			}
-
-			Tools.PostDebugMessage(this, "orbits do not share a parent, carrying on");
-
-			if (bodyA.hasAncestor(bodyB))
-			{
-				Tools.PostDebugMessage(this, "bodyA is a moon or sub-moon of bodyB, returning -1");
-				return -1;
-			}
-			if (bodyB.hasAncestor(bodyA))
-			{
-				Tools.PostDebugMessage(this, "bodyA is a moon or sub-moon of bodyB, returning 1");
-				return 1;
-			}
-
-			Tools.PostDebugMessage(this, "bodies do not have an obvious relationship, searching for one");
-
-			if (VOID_Tools.NearestRelatedParents(ref bodyA, ref bodyB))
-			{
-				Tools.PostDebugMessage(this, "good relation {0} and {1}, comparing", bodyA.bodyName, bodyB.bodyName);
-				return this.Compare(bodyA, bodyB);
-			}
-
-			Tools.PostDebugMessage(this, "bad relation {0} and {1}, giving up", bodyA.bodyName, bodyB.bodyName);
-
-			return 0;
-		}
-	}
-
-	public static partial class VOID_Data
-	{
-		public static readonly VOID_DoubleValue nominalThrustWeight = new VOID_DoubleValue(
-			"Thrust-to-Weight Ratio",
-			delegate()
-		{
-			if (HighLogic.LoadedSceneIsEditor || currThrustWeight.Value == 0d)
-			{
-				return maxThrustWeight.Value;
-			}
-
-			return currThrustWeight.Value;
-		},
-			""
-		);
-	}
-}
-
-

--- a/VOID_HUDAdvanced.cs
+++ b/VOID_HUDAdvanced.cs
@@ -249,7 +249,7 @@
 					this.rightHUDPos.value = GUI.Window(
 						VOID_Core.Instance.windowID,
 						this.rightHUDPos,
-						VOID_Tools.GetWindowHandler(this.leftHUDWindow),
+						VOID_Tools.GetWindowHandler(this.rightHUDWindow),
 						GUIContent.none,
 						GUIStyle.none
 					);
@@ -589,6 +589,11 @@
 			}
 
 			double interval = (node.UT - currentNodeBurnDuration) - Planetarium.GetUniversalTime();
+
+			if (double.IsNaN(interval))
+			{
+				return string.Intern("NaN");
+			}
 
 			int sign = Math.Sign(interval);
 			interval = Math.Abs(interval);

--- a/VOID_Tools.cs
+++ b/VOID_Tools.cs
@@ -35,64 +35,6 @@
 {
 	public static partial class VOID_Tools
 	{
-		#region CelestialBody Utilities
-		public static bool hasAncestor(this CelestialBody bodyA, CelestialBody bodyB)
-		{
-			if (bodyA == null || bodyB == null)
-			{
-				return false;
-			}
-
-			while (bodyA.orbitDriver != null)
-			{
-				if (bodyA.orbit.referenceBody == bodyB)
-				{
-					return true;
-				}
-
-				bodyA = bodyA.orbit.referenceBody;
-			} 
-
-			return false;
-		}
-
-		public static bool NearestRelatedParents(ref CelestialBody bodyA, ref CelestialBody bodyB)
-		{
-			if (bodyA == null || bodyB == null || bodyA.orbitDriver == null || bodyB.orbitDriver == null)
-			{
-				throw new ArgumentException(string.Concat(
-					"CelestialBody::FindRelatedParents: ",
-					"Neither body may be null, and both bodies must have orbits."
-				));
-			}
-
-			CelestialBody a, b;
-
-			a = bodyA;
-
-			while (bodyA.orbitDriver != null)
-			{
-				b = bodyB;
-
-				while (b.orbitDriver != null)
-				{
-					if (a.orbit.referenceBody == b.orbit.referenceBody)
-					{
-						bodyA = a;
-						bodyB = b;
-						return true;
-					}
-
-					b = b.orbit.referenceBody;
-				}
-
-				a = a.orbit.referenceBody;
-			}
-
-			return false;
-		}
-		#endregion
-
 		#region VESSEL_EXTENSIONS_SCIENCE
 		public static CBAttributeMap.MapAttribute GetBiome(this Vessel vessel)
 		{

--- a/VOID_VesselInfo.cs
+++ b/VOID_VesselInfo.cs
@@ -66,7 +66,7 @@
 
 			VOID_Data.totalMass.DoGUIHorizontal ("F3");
 
-			VOID_Data.resourceMass.DoGUIHorizontal ("F3");
+			VOID_Data.comboResourceMass.DoGUIHorizontal ();
 
 			VOID_Data.stageDeltaV.DoGUIHorizontal (3, false);
 
@@ -128,6 +128,28 @@
 				return SimManager.LastStage.totalMass - SimManager.LastStage.totalBaseMass;
 			},
 			"tons"
+		);
+
+		public static readonly VOID_DoubleValue stageResourceMass = new VOID_DoubleValue(
+			"Resource Mass (Current Stage)",
+			delegate()
+			{
+				if (SimManager.LastStage == null)
+				{
+					return double.NaN;
+				}
+
+				return SimManager.LastStage.mass - SimManager.LastStage.baseMass;
+			},
+			"tons"
+		);
+
+		public static readonly VOID_StrValue comboResourceMass = new VOID_StrValue(
+			"Resource Mass (curr / total)",
+			delegate()
+		{
+			return string.Format("{0} / {1}", stageResourceMass.ValueUnitString(), resourceMass.ValueUnitString());
+		}
 		);
 
 		public static readonly VOID_DoubleValue stageDeltaV = new VOID_DoubleValue(