- printf("\n- %-22s (%3sx%3s, %d objects)",
- $_->{id}, $_->{width}, $_->{height}, scalar @{ $_->{objects} },
- ) for map { $data->{levels}->[$_ + $startnr] }
- 0 .. $count - 1;
- $startnr += $count;
- }
- continue {
- print "\n";
- }
-}
-
-package Shiar_Parse::Nested;
-
-sub template {
- my ($self, $format) = @_;
- # total (flattened) unpack template from nested format definitions
- return join '', map {
- my $value = $format->[-($_ << 1) - 1];
- if (ref $value eq 'ARRAY') {
- my $count = $value->[0];
- $value = $self->template($value);
- $value = $count =~ s/^([*\d]+)// ? "$count($value)$1"
- : $count."X[$count]$count/($value)";
+ for (0 .. $count - 1) {
+ my $level = $data->{levels}->[$_ + $startnr];
+ printf("\n- %-22s%4s:%3s+%2s%3s %3sx%-3s%s",
+ $level->{id} || $level->{name} || '#'.($_+1),
+ @$level{qw/size bsize growth/},
+ $variant eq 'single' && "x$level->{peas}",
+ @$level{qw/width height/},
+ join(';', map {" $_"} grep {$_}
+ @{$level->{objects}} && sprintf('%2d object%s (%s)',
+ scalar @{$level->{objects}}, @{$level->{objects}} != 1 && 's',
+ objsummary($level->{objects}),
+ ),
+ $level->{sprite} && @{$level->{sprite}} && sprintf('sprite %d',
+ scalar @{$level->{sprite}},
+ ),
+ $level->{balls} && @{$level->{balls}} && sprintf('%d bounc%s',
+ scalar @{$level->{balls}}, @{$level->{balls}} == 1 ? 'y' : 'ies',
+ ),
+ ),
+ );