summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6c599c6)
- Do not try to read levels if none are declared (common for
singleplayer-only episodes).
- Read episode finish code after parsing singleplayer levels,
so that the starting offset is correct.
$data->{moderef}->{offset}->{single} == $offsetbase
or warn "First singleplayer level is not in front\n";
$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'],
my @VARMODES = (
[qw'single single'],
[qw'multi peaworm tron deathmatch foodmatch multifood timematch'],
$data->{levels} = [];
for my $modes (@VARMODES) {
my $variant = shift @$modes;
$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;
my $amount = $variant eq 'single' ? 100 : max(map { $data->{moderef}->{end}->{$_} } @$modes);
my @varform = @LEVELFORM;
$offset += ++$size;
last if ++$data->{levelcount}->{$variant} >= $amount;
}
$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';