diff --git a/GeneralMods/StardustCore/Math/Hex.cs b/GeneralMods/StardustCore/Math/Hex.cs
new file mode 100644
index 00000000..03d4ae35
--- /dev/null
+++ b/GeneralMods/StardustCore/Math/Hex.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StardustCore.Math
+{
+ ///
+ /// Base class for hex representation.
+ ///
+ public class Hex
+ {
+ ///
+ /// The hex value represented as a string.
+ ///
+ public string hexValue;
+
+ ///
+ /// Default constructor.
+ ///
+ public Hex()
+ {
+
+ }
+ ///
+ /// Empty Constructor;
+ ///
+ ///
+ public Hex(string HexValue)
+ {
+
+ }
+
+ ///
+ /// Verifies that the hex is of the specified length.
+ ///
+ ///
+ public virtual bool verifyHexLength()
+ {
+ return true;
+ }
+
+ ///
+ /// Trims the hex value by removing the leading 0x;
+ ///
+ ///
+ public virtual string trimHex()
+ {
+ return this.hexValue.Split('x')[1];
+ }
+
+ ///
+ /// A virtual function to be overriden.
+ ///
+ ///
+ public virtual List getBytes()
+ {
+ return new List();
+ }
+
+ ///
+ /// Converts a Hex byte (represented as a length two string) to an int equal or less than 255. Ex ff=255;
+ ///
+ /// The length two value to be converted.
+ ///
+ public virtual int convertHexByteTo255Int(string value)
+ {
+ int val1 = convertHexValueToInt(value[0]);
+ int val2 = convertHexValueToInt(value[1]);
+ val1 *= 16;
+ val2 *= 16;
+ return val1 + val2;
+ }
+
+ ///
+ /// Converts a hex char to an int.
+ ///
+ ///
+ ///
+ public virtual int convertHexValueToInt(char c)
+ {
+ if (c == 'a') return 10;
+ else if (c == 'b') return 11;
+ else if (c == 'c') return 12;
+ else if (c == 'd') return 13;
+ else if (c == 'e') return 14;
+ else if (c == 'f') return 15;
+ else return Convert.ToInt32(c);
+ }
+
+ ///
+ /// Gets the associated byte from the hex positioning.
+ ///
+ ///
+ ///
+ public virtual string getByte(int index)
+ {
+ string hex = this.trimHex();
+ int val = index * 2 + 1;
+ char str1 = hex[index * 2];
+ char str2 = hex[val];
+ return (str1.ToString() + str2.ToString());
+ }
+ }
+}
diff --git a/GeneralMods/StardustCore/Math/Hex32.cs b/GeneralMods/StardustCore/Math/Hex32.cs
new file mode 100644
index 00000000..25da9ed0
--- /dev/null
+++ b/GeneralMods/StardustCore/Math/Hex32.cs
@@ -0,0 +1,90 @@
+using Microsoft.Xna.Framework;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StardustCore.Math
+{
+ ///
+ /// A Class that helps represents 32 bit hex.
+ ///
+ class Hex32 : Hex
+ {
+ ///
+ /// A default constructor.
+ ///
+ public Hex32()
+ {
+ this.hexValue = "0x00000000";
+ }
+
+ ///
+ /// Constructor.
+ ///
+ /// A string in hex representation. Ex) 0x00000000
+ public Hex32(string hexValue)
+ {
+ this.hexValue = hexValue;
+ if (verifyHexLength() == false) this.hexValue = "0x00000000";
+ }
+ ///
+ /// Constructor.
+ ///
+ /// An int to be converted into Hex.
+ public Hex32(int value)
+ {
+ this.hexValue= value.ToString("X");
+ if (verifyHexLength() == false) this.hexValue = "0x00000000";
+ }
+
+
+ ///
+ /// Makes sure the hex value is the appropriate length.
+ ///
+ ///
+ public override bool verifyHexLength()
+ {
+ if (this.hexValue.Length != 10) return false;
+ else return true;
+ }
+
+ ///
+ /// Trims the hex to get rid of the leading 0x;
+ ///
+ ///
+ public override string trimHex()
+ {
+ return base.trimHex();
+ }
+
+ ///
+ /// Converts a hex value to a string.
+ ///
+ ///
+ public Color toColor()
+ {
+ var bytes = getBytes();
+ int red = convertHexByteTo255Int(bytes[0]);
+ int green = convertHexByteTo255Int(bytes[1]);
+ int blue = convertHexByteTo255Int(bytes[2]);
+ int alpha = convertHexByteTo255Int(bytes[3]);
+ return new Color(red, green, blue, alpha);
+ }
+
+ ///
+ /// Get the individual byte strings associated with this hex value.
+ ///
+ ///
+ public override List getBytes()
+ {
+ List bytes = new List();
+ bytes.Add(getByte(0));
+ bytes.Add(getByte(1));
+ bytes.Add(getByte(2));
+ bytes.Add(getByte(3));
+ return bytes;
+ }
+ }
+}