use Data::Dumper;
use Getopt::Long 2.33 qw(HelpMessage :config bundling);
-our $VERSION = '1.00';
+our $VERSION = '1.01';
GetOptions(\my %opt,
'raw|r',
],
);
+my @OBJTYPE = ('none', 'line', 'fat line', 'bar', 'circle');
+my @ENDTYPE = ('none', 'message', 'small message');
+
+sub objsummary {
+ my ($objects) = @_;
+ my @objtypes = map { $_->{type} } @$objects;
+ my %count;
+ $count{$_}++ for @objtypes;
+ return (@objtypes > 1 && keys %count == 1 && 'all ') . join(', ',
+ map { $OBJTYPE[$_] ? $OBJTYPE[$_] . ($count{$_} > 1 && 's') : $_ }
+ sort keys %count
+ );
+}
+
# read and parse all input data
local $/;
my @rawdata = unpack Shiar_Parse::Nested->template(\@FORMAT).'a*', readline;
}
else {
print "$data->{name} ($data->{description})\n";
+ printf "File version: %s\n", "WormEdit v$data->{version}";
+ printf "Defaults: %s\n", join('; ',
+ 'sprite ' . scalar @{ $data->{sprite} },
+ 'hiscore by ' . $data->{hiname},
+ );
+
my $startnr = 0;
for my $variant (qw/single multi race ctf/) {
print "\n";
printf "\u$variant ($count)";
$count or next;
print ":";
- printf("\n- %-22s (%3sx%3s, %d objects)",
- $_->{id}, $_->{width}, $_->{height}, scalar @{ $_->{objects} },
+ printf("\n- %-22s%4s:%3s+%2s%3s %3sx%-3s%s",
+ $_->{id} || $_->{name},
+ @$_{qw/size bsize growth/},
+ $variant eq 'single' && "x$_->{peas}",
+ @$_{qw/width height/},
+ join(';', map {" $_"} grep {$_}
+ @{$_->{objects}} && sprintf('%2d object%s (%s)',
+ scalar @{$_->{objects}}, @{$_->{objects}} != 1 && 's',
+ objsummary($_->{objects}),
+ ),
+ @{$_->{sprite}} && sprintf('sprite %d',
+ scalar @{$_->{sprite}},
+ ),
+ ),
) for map { $data->{levels}->[$_ + $startnr] }
0 .. $count - 1;
$startnr += $count;
}
continue {
print "\n";
+ printf("-- %-21s%4d: %s (%s)\n",
+ '(ending)',
+ length $data->{enddata},
+ $ENDTYPE[$data->{endtype}] || 'unknown', $data->{endstr},
+ ) if $variant eq 'single';
}
}