#!/usr/bin/perl -w use Data::Dumper; ##SKILL #Name acetum primus~ #Type Spell #Info 909 #Flags 0 #Target 1 #Minpos 105 #Slot 302 #Mana 15 #Rounds 8 #Code spell_acetum_primus #Dammsg Acetum Primus~ #Wearoff !WEAROFF!~ #Minlevel 37 #End my $file = ''; my $lines = 0; my %sn = (); open FP, "smaug_skills.dat" or die "Cannot open smaug_skills.dat"; while(<FP>) { $lines++; $file .= $_; } close FP; printf STDERR "smaug_skills.dat - %d lines, %d bytes\n", $lines, length($file); foreach my $sk (split /^\#SKILL$/ms, $file) { my ($name, $slot) = (undef,undef); foreach my $line (split /\n/, $sk) { my @word = split /\s+/, $line, 2; next if !(defined $word[0]) or !(defined $word[1]); $name = $word[1] if $word[0] eq 'Name'; $slot = $word[1] if $word[0] eq 'Slot'; $name =~ s/~$// if (defined $name); $sn{$name} = $slot if (defined $name) and (defined $slot); next if (defined $name) and (defined $slot) and (defined $sn{$name}); } } #printf("%s:%d\n", $_, $sn{$_}) foreach (sort keys %sn); my @tmp = (sort{ $a <=> $b } (values %sn)); my ($lowest, $highest) = ($tmp[0], $tmp[-1]); @tmp = (sort{ ((defined $a) ? length $a : 0) <=> ((defined $b) ? length $b: 0) } (keys %sn)); my $longest = $tmp[-1]; open FP, ">include/smaug_skills.h"; my %rev = (reverse %sn); printf FP "char * const smaug_skill_names [] =\n{\n"; for(my $i = 0; $i <= $highest; $i++) { printf FP " \"%s\",%s/* %s */\n", (defined $rev{$i}) ? $rev{$i} : "NONE", (defined $rev{$i}) ? (" "x((length $longest) - (length $rev{$i}))) : (" "x((length $longest) - 4)), (defined $rev{$i}) ? $i : ""; } printf FP " \"END\"\n};\n"; close FP;