#!/usr/bin/perl
###############################################
# leaders_fix.pl
# by Shawn Moore
# Free to distribute and modify
#
# Looks at the Leaders.txt file for Hearts of Iron 2 and 
# converts all names to the format [specialty] Name so they 
# are easy to see in the game while playing.
# Handles already converted files (drops [ ] and recreates).
#
# Usage: leaders_fix.pl <old_filename> > new_filename
#
#
#Name;ID;Country;Rank 3 Year;Rank 2 Year;Rank 1 Year;Rank 0 Year;Ideal Rank;Max Skill;Traits;Skill;Experience;Loyalty;Type;Picture;Start Year;End Year;x
#Abraham;1;GER;1943;1944;1990;1990;3;5;0;2;0;5;0;L1;1943;1960;x
#Allmendinger;2;GER;1940;1943;1990;1990;3;6;0;2;0;5;0;L2;1940;1945;x
#Andersen;3;GER;1945;1990;1990;1990;3;5;32;1;0;5;0;L3;1945;1960;x
#Anton;4;GER;1942;1944;1990;1990;3;6;2;2;0;5;0;L4;1942;1960;x
#Arndt;5;GER;1942;1943;1990;1990;2;6;4;2;0;5;0;L5;1942;1960;x
#Auleb;6;GER;1939;1943;1990;1990;2;8;0;2;0;5;0;L6;1939;1960;x
#Baade;7;GER;1943;1944;1990;1990;3;6;3;2;0;5;0;L7;1943;1945;x
#Bader;8;GER;1930;1939;1990;1990;2;7;577;2;0;5;0;L8;1930;1944;x
#Balck;9;GER;1942;1943;1990;1990;3;9;128;3;0;5;0;L9;1942;1960;x
#Balla;10;GER;1942;1990;1990;1990;3;5;4;1;0;5;0;L10;1942;1944;x
#Barenthin;11;GER;1943;1990;1990;1990;3;6;256;1;0;5;0;L11;1943;1960;x

if(!$ARGV[0]){
	print "Usage: leader_fix <filename>\n\n";
	exit;
}
$FILE = $ARGV[0];
open (LEADERFILE,"$FILE");
	while (<LEADERFILE>) {
	(	$name,$id,$country,$rank3,$rank2,$rank1,$rank0,$ideal,$maxskill,$traits,$skill,$xp,$loyalty,$type,$picture,$start,$end,$x) = split(/;/,$_);

#		if($name =~ /([^A-z]\.)|([^A-z])|([^A-z] )/){
#			($junk,$name)=split(/] /,$name);
#			if($junk =~ /[ ]/){
#				$name=$junk;
#			}
				

#		}
		
#		else {
			$list = "";
			$once=0;
			$worktraits =$traits;
####Fleet Destroyer 131072
			$code=131072;
			$letters="fd";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
####Nightflyer 65536
			$code = 65536;
			$letters = "nf";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Carpet Bomber 32768
			$code = 32768;
                        $letters = "cb";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Tank buster 16384
                        $code = 16384;
                        $letters = "tb";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Spotter
                        $code = 8192;
                        $letters = "sp";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Superior Tactition 4096
                        $code = 4096;
                        $letters = "st";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Blockade Runner 2048
                        $code = 2048;
                        $letters = "br";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Sea Wolf 1024
                        $code = 1024;
                        $letters = "sw";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Old guard 512
                        $code = 512;
                        $letters = "og";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Commando
                        $code = 256;
                        $letters = "co";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Panzer Leader 128
                        $code = 128;
                        $letters = "pl";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Fortress Buster
                        $code = 64;
                        $letters = "fb";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);
##### Engineer 32
                        $code = 32;
			$letters="en";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);

#### Trickster 16
                        $code = 16;
                        $letters = "tr";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);

##### Winter Specialist 8
                        $code = 8;
                        $letters = "ws";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);

##### Offensive Doctrine 4
                        $code = 4;
                        $letters = "od";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);

##### Defensive Doctrine 2
                        $code = 2;
	                $letters = "dd";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);


##### Logistics Wizard 1
                        $code = 1;
                        $letters = "lw";
			($list,$worktraits,$once)=&calculate($code,$lettes,$worktraits,$once,$list);


			if($list){
				print "[$list] ";
			}
			print "$name;$id;$country;$rank3;$rank2;$rank1;$rank0;$rank;$maxskill;$traits;$skill;$xp;$loyalty;$type;$picture;$start;$end;x\n";
		
	}

exit;


sub calculate($code,$lettes,$worktraits,$once,$list){
	if($worktraits >= $code){
                                if($once){
                                        $list = $list . ",$letters";
                                }
                                else {
                                        $list = "$letters";
                                }
                                $once = 1;
                                $worktraits = $worktraits - $code;
	}
	return($list,$worktraits,$once);
}


