X-Git-Url: http://git.shiar.net/perl/schtarr.git/blobdiff_plain/576f66c9fde876c86b20c3da21ce254cd3f3ba78..3cf62787f6c8f6d7a7972bc3f09e5e3ddc92447e:/Data-StarCraft/lib/Data/StarCraft/Map.pm diff --git a/Data-StarCraft/lib/Data/StarCraft/Map.pm b/Data-StarCraft/lib/Data/StarCraft/Map.pm index cb5dc0f..e51674c 100644 --- a/Data-StarCraft/lib/Data/StarCraft/Map.pm +++ b/Data-StarCraft/lib/Data/StarCraft/Map.pm @@ -30,8 +30,16 @@ sub open { or die "Couldn't chunk header\n"; $type =~ s/ +$//; #printf STDERR "%s: %s\n", $type, $size; - defined $self->{$type} and warn "duplicate map chunk $type\n"; - $self->{$type} = $self->_read($file, $size); + if (defined $self->{$type}) { + # redefinitions (partially) override earlier data from start + warn "duplicate map chunk $type\n"; + my $prepend = $self->_read($file, $size); + substr($self->{$type}, 0, length($prepend)) = $prepend; + next; + } + else { + $self->{$type} = $self->_read($file, $size); + } } return $self; } @@ -54,12 +62,19 @@ sub width { return $_[0]->info->{x}; } +sub height { + return $_[0]->info->{y}; +} + sub tiles { my $self = shift; my @map = unpack 'v*', $self->{MTXM}; @map == $#map + 1 or warn(sprintf - "couldn't parse map: only %d tiles\n", scalar @map + "Couldn't parse map: only %d tiles\n", scalar @map ), return; + warn sprintf("Only %d tiles in MTXM, but expecting %dx%d", + scalar @map, $self->width, $self->height + ) if scalar @map != $self->width * $self->height; return \@map; }