sub new
{
	my $class = shift;
	my $gender;
	my $fname;
	my $lname;
	my $gender_mode;
	my $name_mode;
	
	if (@_ == 0)
	{ # Generate random gender & random name
		$gender = RandomGender();
		$fname = RandomFirstName($gender);
		$lname = RandomLastName($gender);
		$name_mode = 1;
		$gender_mode = 1;
	}
	elsif (@_ == 1 && ( uc($_[0]) eq "MALE" || uc($_[0]) eq "FEMALE" ) )
	{ # Generate random name for specified gender
		($gender) = @_;
		$fname = RandomFirstName($gender);
		$lname = RandomLastName($gender);
		$name_mode = 1;
		$gender_mode = 0;
	}
	elsif (@_ == 2)
	{ # Use specified names, generate random gender
		$gender = RandomGender();
		($fname,$lname) = @_;
		$name_mode = 0;
		$gender_mode = 1;
	}
	elsif (@_ == 3)
	{ # Use specified gender and names
		($gender,$fname,$lname) = @_;
		$name_mode = 0;
		$gender_mode = 0;
	}
	else
	{
		die "Invalid arguments to new Character in Traveller::Character\n";
	}
		
	chomp(my $_DC = `date /T`);
	my $_DateID = substr ($_DC,4,2) . substr ($_DC,7,2) . substr ($_DC,10,4);
	
	chomp(my $_TC = `time /T`);
	
	my $_TimeID = substr($_TC,0,2).substr($_TC,3,2);	
	
	my $_RandomID = int(rand(10000));
	my $_CharID = $_DateID.$_TimeID.$_RandomID;
	my $self =	{
				CharID		=> $_CharID,
				DateCreated => $_DC,
				TimeCreated => $_TC,
				Name =>	{
						Title =>	"",
						First =>	$fname,
						Last  =>	$lname
						},
				RandomName		=> $name_mode,
				Gender			=> $gender,
				RandomGender	=> $gender_mode,
				Service			=> "",
				Age				=> 18,
				Commissioned	=> 0,
				Drafted			=> 0,		# 1 = Drafted
				Died			=> 0,		# 1 = Died during character generation
				Retired			=> 0,		# 1 = Retired from service
				Terms			=> 0,		# Number of terms served
				Rank			=> 0,		# Rank (1-6, Book 1 Rank)
				KickedOut		=> 0,		# 1 = Forced out (failed to reenlist)
				TotalSkills		=> 0,		# Total Skill Rolls
				ForcedService	=> 0,		# Mandatory reenlistment (Rolled a 12)			
				Cash			=> 0		# Cash on hand
				};
			
	return $self;
}