- my $tile = $tileset->tileavg($_);
- my $div = 1;#$tile->{walk} > 1 ? 1 : 1.8;
- my @rgb = map {int($_ / $div)} @{ $tile->{col} };
- if ($tile->{walk} & 16) {
- $rgb[1] += 48; # green for ramps
- }
- elsif ($tile->{walk} & 8) {
- $rgb[0] = 255; # red for obstructions
- }
- elsif (($tile->{walk} & 1) == 0) {
-# $rgb[2] += 128;
- $rgb[0] *= 3;
- $rgb[1] *= 3;
- $rgb[2] *= 3;
- } elsif ($tile->{build}) {
- $rgb[0] += 48;
-# $rgb[$_] = int($rgb[$_] / 1.5) for 0..2;
+ # 128x128 ~ 6s
+# my $tile = $tileset->tileavg($_);
+# $img->setpixel(x => $x, y => $y, color => $tile->{col});
+
+ # 512x512 ~ 7s
+ my $tile = $tileset->tile($_);
+ $img->setscanline(
+ x => $x*4, y => $y*4 + $_, pixels => pack('(CCCx)*',
+ map { @$_ } @{ $tile->{subcol} }[$_*4 .. $_*4 + 3]
+ ),
+ ) for 0..3;
+
+ # 4096x4096 ~ 75s
+# my $tile = $tileset->sprite($tileset->{map}->[$_]);
+# $img->setscanline(
+# x => $x*32, y => $y*32 + $_, pixels => pack('(CCCx)*',
+# map { @{ $tileset->{palette}->[$_] } } @$tile[$_*32 .. $_*32+31]
+# ),
+# ) for 0..31;
+ }
+ continue {
+ $x++;
+ if ($x >= $map->width) {
+ $y++;
+ $x = 0;