Here's the script by itself. Sorry it's long.
Code:
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 = "headers.txt";}
/^#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;
# 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.
(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;
pmode = 0;
}
# nations
(ARGIND > num_files && $2+0 >= 68) && (/^#selectnation/ || /^#restrictedgod/){
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
#(ARGIND > num_files){
#}
# 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 = "footers.txt";}