VOID_CareerStatus: Quick update to event handler signatures to make things compile against 0.25.
VOID_CareerStatus: Quick update to event handler signatures to make things compile against 0.25.

--- a/VOID_CBInfoBrowser.cs
+++ b/VOID_CBInfoBrowser.cs
@@ -50,6 +50,9 @@
 
 		[AVOID_SaveValue("togglePhysical")]
 		protected VOID_SaveValue<bool> togglePhysical = false;
+
+		[AVOID_SaveValue("toggleScience")]
+		protected VOID_SaveValue<bool> toggleScience = false;
 
 		public VOID_CBInfoBrowser()
 		{
@@ -208,6 +211,72 @@
 				GUILayout.EndHorizontal();
 			}
 
+			if (GUILayout.Button("Scientific Parameters", GUILayout.ExpandWidth(true)))
+			{
+				toggleScience.value = !toggleScience;
+			}
+
+			if (toggleScience)
+			{
+				GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+
+				//begin physical info value label column
+				GUILayout.BeginVertical(GUILayout.Width(150));
+
+
+				/*
+				 *  public float RecoveryValue = 1f;
+
+					public float InSpaceHighDataValue = 1f;
+
+					public float spaceAltitudeThreshold = 250000f;
+
+					public float flyingAltitudeThreshold = 18000f;
+
+					public float InSpaceLowDataValue = 1f;
+
+					public float SplashedDataValue = 1f;
+
+					public float LandedDataValue = 1f;
+
+					public float FlyingHighDataValue = 1f;
+
+					public float FlyingLowDataValue = 1f;
+					*/
+
+				GUILayout.Label("Surface Multiplier:");
+				GUILayout.Label("Ocean Multiplier:");
+				GUILayout.Label("Flying-Low Multiplier:");
+				GUILayout.Label("Flying-High Multiplier:");
+				GUILayout.Label("Low Orbit Multiplier:");
+				GUILayout.Label("High Orbit Multiplier:");
+				GUILayout.Label("'Flying-High' Altitude:");
+				GUILayout.Label("'High Orbit' Altitude:");
+				GUILayout.Label("Recovery Multiplier:");
+
+				//end physical info value label column
+				GUILayout.EndVertical();
+
+				//begin primary physical values column
+				GUILayout.BeginVertical(GUILayout.Width(150));
+
+				this.cbColumnScience(selectedBody1);
+
+				//end primary physical column
+				GUILayout.EndVertical();
+
+				//begin secondary physical values column
+				GUILayout.BeginVertical(GUILayout.Width(150));
+
+				this.cbColumnScience(selectedBody2);
+
+				//end target physical values column
+				GUILayout.EndVertical();
+
+				//end physical value horizontal chunk
+				GUILayout.EndHorizontal();
+			}
+
 			GUI.DragWindow();
 		}
 
@@ -323,5 +392,61 @@
 			if (body.ocean == true) ocean = "Yes";
 			GUILayout.Label(ocean, this.core.LabelStyles["right"], GUILayout.ExpandWidth(true));
 		}
+
+		private void cbColumnScience(CelestialBody body)
+		{
+			/*GUILayout.Label("Surface Science Multiplier:");
+			GUILayout.Label("Ocean Science Multiplier:");
+			GUILayout.Label("Low-Atmosphere Science Multiplier:");
+			GUILayout.Label("High-Atmosphere Science Multiplier:");
+			GUILayout.Label("Low Orbit Science Multiplier:");
+			GUILayout.Label("High Orbit Science Multiplier:");
+			GUILayout.Label("'In Space' Altitude:");
+			GUILayout.Label("'Flying' Altitude:");
+			GUILayout.Label("Recovery Multiplier:");*/
+
+			var scienceValues = body.scienceValues;
+
+			GUILayout.Label(scienceValues.LandedDataValue.ToString("0.0#"),
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(
+				body.ocean ? scienceValues.SplashedDataValue.ToString("0.0#") : "N/A",
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(
+				body.atmosphere ? scienceValues.FlyingLowDataValue.ToString("0.0#") : "N/A",
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(
+				body.atmosphere ? scienceValues.FlyingHighDataValue.ToString("0.0#") : "N/A",
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(scienceValues.InSpaceLowDataValue.ToString("0.0#"),
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(scienceValues.InSpaceHighDataValue.ToString("0.0#"),
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(
+				body.atmosphere ? scienceValues.flyingAltitudeThreshold.ToString("N0") : "N/A",
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(
+				scienceValues.spaceAltitudeThreshold.ToString("N0"),
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+
+			GUILayout.Label(scienceValues.RecoveryValue.ToString("0.0#"),
+				this.core.LabelStyles["right"],
+				GUILayout.ExpandWidth(true));
+		}
 	}
 }

--- a/VOID_CareerStatus.cs
+++ b/VOID_CareerStatus.cs
@@ -166,19 +166,20 @@
 			GUI.DragWindow();
 		}
 
-		private void onFundsChange(double newValue)
+		// TODO: Update event handlers to do something useful with the new "reasons" parameter.
+		private void onFundsChange(double newValue, TransactionReasons reasons)
 		{
 			this.lastFundsChange = newValue - this.currentFunds;
 			this.currentFunds = newValue;
 		}
 
-		private void onRepChange(float newValue)
+		private void onRepChange(float newValue, TransactionReasons reasons)
 		{
 			this.lastRepChange = newValue - this.currentReputation;
 			this.currentReputation = newValue;
 		}
 
-		private void onScienceChange(float newValue)
+		private void onScienceChange(float newValue, TransactionReasons reasons)
 		{
 			this.lastScienceChange = newValue - this.currentScience;
 			this.currentScience = newValue;

--- a/VOID_DataLogger.cs
+++ b/VOID_DataLogger.cs
@@ -29,6 +29,7 @@
 using KSP;
 using System;
 using System.Collections.Generic;
+using System.Text;
 using ToadicusTools;
 using UnityEngine;
 
@@ -139,7 +140,10 @@
 			GUILayout.EndHorizontal();
 
 			float new_log_interval;
-			if (Single.TryParse(csv_log_interval_str, out new_log_interval)) csv_log_interval = new_log_interval;
+			if (float.TryParse(csv_log_interval_str, out new_log_interval))
+			{
+				csv_log_interval = new_log_interval;
+			}
 
 			GUILayout.EndVertical();
 			GUI.DragWindow();
@@ -206,41 +210,92 @@
 			//called if logging is on and interval has passed
 			//writes one line to the csvList
 
-			string line = "";
+			StringBuilder line = new StringBuilder();
+
 			if (first_write && !KSP.IO.File.Exists<VOID_Core>(vessel.vesselName + "_data.csv", null))
 			{
 				first_write = false;
-				line += "Mission Elapsed Time (s);Altitude ASL (m);Altitude above terrain (m);Orbital Velocity (m/s);Surface Velocity (m/s);Vertical Speed (m/s);Horizontal Speed (m/s);Gee Force (gees);Temperature (°C);Gravity (m/s²);Atmosphere Density (g/m³);\n";
-			}
+				line.Append(
+					"Mission Elapsed Time (s);" +
+					"Altitude ASL (m);" +
+					"Altitude above terrain (m);" +
+					"Surface Latitude (°);" +
+					"Surface Longitude (°);" +
+					"Orbital Velocity (m/s);" +
+					"Surface Velocity (m/s);" +
+					"Vertical Speed (m/s);" +
+					"Horizontal Speed (m/s);" +
+					"Gee Force (gees);" +
+					"Temperature (°C);" +
+					"Gravity (m/s²);" +
+					"Atmosphere Density (g/m³);" +
+					"\n"
+				);
+			}
+
 			//Mission time
-			line += vessel.missionTime.ToString("F3") + ";";
+			line.Append(vessel.missionTime.ToString("F3"));
+			line.Append(';');
+
 			//Altitude ASL
-			line += vessel.orbit.altitude.ToString("F3") + ";";
+			line.Append(vessel.orbit.altitude.ToString("F3"));
+			line.Append(';');
+
 			//Altitude (true)
 			double alt_true = vessel.orbit.altitude - vessel.terrainAltitude;
 			if (vessel.terrainAltitude < 0) alt_true = vessel.orbit.altitude;
-			line += alt_true.ToString("F3") + ";";
+			line.Append(alt_true.ToString("F3"));
+			line.Append(';');
+
+			// Surface Latitude
+			line.Append(VOID_Data.surfLatitude.Value);
+			line.Append(';');
+
+			// Surface Longitude
+			line.Append(VOID_Data.surfLongitude.Value);
+			line.Append(';');
+
 			//Orbital velocity
-			line += vessel.orbit.vel.magnitude.ToString("F3") + ";";
+			line.Append(vessel.orbit.vel.magnitude.ToString("F3"));
+			line.Append(';');
+
 			//surface velocity
-			line += vessel.srf_velocity.magnitude.ToString("F3") + ";";
+			line.Append(vessel.srf_velocity.magnitude.ToString("F3"));
+			line.Append(';');
+
 			//vertical speed
-			line += vessel.verticalSpeed.ToString("F3") + ";";
+			line.Append(vessel.verticalSpeed.ToString("F3"));
+			line.Append(';');
+
 			//horizontal speed
-			line += vessel.horizontalSrfSpeed.ToString("F3") + ";";
+			line.Append(vessel.horizontalSrfSpeed.ToString("F3"));
+			line.Append(';');
+
 			//gee force
-			line += vessel.geeForce.ToString("F3") + ";";
+			line.Append(vessel.geeForce.ToString("F3"));
+			line.Append(';');
+
 			//temperature
-			line += vessel.flightIntegrator.getExternalTemperature().ToString("F2") + ";";
+			line.Append(vessel.flightIntegrator.getExternalTemperature().ToString("F2"));
+			line.Append(';');
+
 			//gravity
 			double r_vessel = vessel.mainBody.Radius + vessel.mainBody.GetAltitude(vessel.findWorldCenterOfMass());
 			double g_vessel = (VOID_Core.Constant_G * vessel.mainBody.Mass) / (r_vessel * r_vessel);
-			line += g_vessel.ToString("F3") + ";";
+			line.Append(g_vessel.ToString("F3"));
+			line.Append(';');
+
 			//atm density
-			line += (vessel.atmDensity * 1000).ToString("F3") + ";";
-			line += "\n";
-			if (csvList.Contains(line) == false) csvList.Add(line);
+			line.Append((vessel.atmDensity * 1000).ToString("F3"));
+			line.Append(';');
+
+			line.Append('\n');
+
+			csvList.Add(line.ToString());
+
 			csvCollectTimer = 0f;
 		}
 	}
 }
+
+