#!/usr/bin/awk -f 
BEGIN{
	#print ARGC;
	num_files = ARGC-1;
	for (i = 1; i <= num_files; i++){
		ARGV[ARGC] = ARGV[i];
		ARGC++;
	}
	#print ARGC;
	cweapon = 600;
	carmor = 200;
	cmonster = 2000;
	csite = 750;
	cnation = 68;
	fout = "headers.txt";
	print "-- Mod combined by The Notorious Doctor Praetorious, Prince of Men's Fates, God of the Pole Star, Lord of Courage." >> fout;
}

## First pass
/^#newweapon/ && (ARGIND <= num_files){
	wmap[ARGIND+num_files,$2] = cweapon;
	cweapon++;
}

/^#newarmor/ && (ARGIND <= num_files){
	amap[ARGIND+num_files,$2] = carmor;
	carmor++;
}

/^#newmonster/ && (ARGIND <= num_files){
	mmap[ARGIND+num_files,$2] = cmonster;
	cmonster++;
}

/^#newsite/ && (ARGIND <= num_files){
	smap[ARGIND+num_files,$2] = csite;
	csite++;
}

/^#selectnation/ && (ARGIND <= num_files){
	if ($2 < 68){
		nmap[ARGIND+num_files,$2] = $2;
	} else {
		nmap[ARGIND+num_files,$2] = cnation;
		cnation++;
	}
}

### Second pass
## Choose output file.
(FNR == 1){fout = substr(ARGV[ARGIND],1,length(ARGV[ARGIND])-3) "_fixed.dm";}


##/^#newweapon/ || /^#selectweapon/{
##	fout = "weapons.txt";
##}
##
##/^#newarmor/ || /^#selectarmor/{
##	fout = "armors.txt";
##}
##
##/^#newmonster/ || /^#selectmonster/{
##	fout = "monsters.txt";
##}
##
##/^#newsite/ || /^#selectsite/{
##	fout = "sites.txt";
##}
##
##/^#selectspell/ || /^#newspell/{
##	fout = "spells.txt";
##}
##
##/^#selectnation/{
##	fout = "nations.txt";
##}
##
## Process individual lines.
# By default, we're going to print the line unmolested.
{pmode = 2;}
#	cweapon = 600;
#	carmor = 200;
#	cmonster = 2000;
#	csite = 750;
#	cnation = 68;

# mod name
(ARGIND > num_files) && /^#modname/{
	print substr($0,1,length($0)-1) " FIXED\"" >> fout;
	pmode = 0;
}

# weapons
(ARGIND > num_files && $2+0 >= 600) && (/^#weapon/ || /^#newweapon/){
	print $1 " " wmap[ARGIND,$2] >> fout;
	pmode = 0;
}

# armor
(ARGIND > num_files  && $2+0 >= 200) && /^#newarmor/{
	print $1 " " amap[ARGIND,$2] >> fout;
	pmode = 0;
}

# monsters
# NOTE - if a spell does >=2000 damage, I'm going to assume that it is referencing a monster ID. That's the only way I can tell.
# in case spells need to be changed back by hand, this also dumps the original bitcode.
(ARGIND > num_files  && $2+0 >= 2000) && (/^#newmonster/ || /^#firstshape/ || /^#secondshape/ || /^#secondtmpshape/ || /^#shapechange/ || /^#homemon/ || /^#homecom/ || /^#addrecunit/ || /^#addreccom/ || /^#defcom/ || /^#defunit/ || /^#hero/ || /^#multihero/ || /^#startcom/ || /^#startscout/ || /^#startunittype/ || /^#damage/){
	print $1 " " mmap[ARGIND,$2] >> fout;
	print "--" substr($0,2) >> fout;
	pmode = 0;
}

# nations
(ARGIND > num_files  && $2+0 >= 68) && (/^#selectnation/ || /^#restricted/){
	print $1 " " nmap[ARGIND,$2] >> fout;
	pmode = 0;
}

# sites
(ARGIND > num_files  && $2+0 >= 750) && (/^#startsite/ || /^#newsite/){
	print $1 " " smap[ARGIND,$2] >> fout;
	pmode = 0;
}

# sprites
#/\.tga\"$/ || /\.rgb\"$/{
#	print $1 " \"./MEGAMOD" substr($2,2) >> fout;
#	pmode = 0;
#}

# If we didn't have to map anything on this line, we just spit it out.
(pmode == 2 && ARGIND > num_files){print >> fout;}

# End lines indicate that the *next* line may be filler, but we still need teh end line in the correct file.
#/^#end/{print "" >> fout; fout = "headers.txt";}
