$data->{moderef}->{offset}->{single} == $offsetbase
or warn "First singleplayer level is not in front\n";
+ my $slots = sum(
+ $data->{moderef}->{end}->{single} > 0, # singleplayer slot if any levels
+ $data->{moderef}->{end}->{peaworm}, # one for each peaworm arena
+ $data->{moderef}->{end}->{tron}, # idem for tron
+ );
+ $data->{hinames} = [ unpack '(x2a3)*', substr($data->{leveldata}, -5 * $slots) ];
+ $data->{format} = '86s';
+
my @VARMODES = (
[qw'single single'],
[qw'multi peaworm tron deathmatch foodmatch multifood timematch'],
$data->{levels} = [];
for my $modes (@VARMODES) {
my $variant = shift @$modes;
- $offset = min(map { $data->{moderef}->{offset}->{$_} } @$modes) - $offsetbase;
+ $offset = min(grep {$_} map { $data->{moderef}->{offset}->{$_} } @$modes)
+ or next;
+ $offset -= $offsetbase;
my $amount = $variant eq 'single' ? 100 : max(map { $data->{moderef}->{end}->{$_} } @$modes);
my @varform = @LEVELFORM;
$offset += ++$size;
last if ++$data->{levelcount}->{$variant} >= $amount;
}
+
+ if ($variant eq 'single') {
+ $data->{finish}->{code} = substr(
+ delete($data->{leveldata}), $offset, -5 * $slots
+ );
+ }
}
- my $slots = sum(
- $data->{moderef}->{end}->{single} > 0, # singleplayer slot if any levels
- $data->{moderef}->{end}->{peaworm}, # one for each peaworm arena
- $data->{moderef}->{end}->{tron}, # idem for tron
- );
- $data->{hinames} = [ unpack '(x2a3)*', substr($data->{leveldata}, -5 * $slots) ];
- $data->{finish}->{code} = substr delete($data->{leveldata}), $offset, -5 * $slots; #XXX
- $data->{format} = '86s';
return $data;
}