--- cfmaps/cfmap2png 2007/06/21 12:30:10 1.24 +++ cfmaps/cfmap2png 2009/10/22 08:19:15 1.28 @@ -1,7 +1,7 @@ #!/opt/bin/perl -# cfarch2png - convert crossfire maps to png+metadata -# Copyright (C) 2005,2007 Marc Lehmann +# cfmap2png - convert deliantra maps to png+metadata +# Copyright (C) 2005,2007,2008,2009 Marc Lehmann # # CFARCH2PNG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,19 +30,19 @@ # ... I believe that anytime, but it still doesn't mention the smoothlevel # interaction :( -our $VERSION = '2.001'; +our $VERSION = '2.012'; use strict; -use Crossfire 1.0; +use Deliantra; use List::Util qw(max); use Gtk2; sub T (){ 32 } -Crossfire::load_archetypes; -Crossfire::load_tilecache; +Deliantra::load_archetypes; +Deliantra::load_tilecache; sub cfmap_render($;$) { my ($mapa, $mapname) = @_; @@ -96,6 +96,9 @@ my $face = $a->{face} || $o->{face}; $FACE{$face} + or $face =~ s/\.1(\d\d)$/.x$1/; + + $FACE{$face} or (warn "$mapname: face '$face' not found for arch '$a->{_name}' at ($x|$y)\n"), last; my $idx = $FACE{$face}{idx}; @@ -219,18 +222,38 @@ } for my $file (@ARGV) { - my $mapa = read_arch $file; + my $stderr; + $SIG{__WARN__} = sub { + $stderr .= $_[0]; + print STDERR $_[0]; + }; + $file =~ s/\.map$//; - my ($pb, $meta) = cfmap_render $mapa, $file; - $pb->save ("$file.png~~", "png"); - system "gm", "convert", "$file.png~~", "-filter" => "lanczos", "-geometry" => "3.125%", "-quality" => 85, "$file.jpg"; - #system "mogrify", "-colors" => 65536, "$file.png~"; # destroys transparency - system "optipng", "-q", "-out", "$file.png~", "$file.png~~"; + + eval { + my $mapa = read_arch "$file.map"; + my ($pb, $meta) = cfmap_render $mapa, $file; + $pb->save ("$file.png~~", "png"); + system "gm", "convert", "$file.png~~", "-filter" => "lanczos", "-geometry" => "3.125%", "-quality" => 85, "$file.jpg"; + #system "mogrify", "-colors" => 65536, "$file.png~"; # destroys transparency + system "optipng", "-q", "-out", "$file.png~", "$file.png~~"; # system "pngnq <\Q$file.png~\E >\Q$file.png\E"; - unlink "$file.png~~"; - utime +(stat $file)[8,9], "$file.jpg"; - utime +(stat $file)[8,9], "$file.png~"; - rename "$file.png~", "$file.png"; + unlink "$file.png~~"; + utime +(stat "$file.map")[8,9], "$file.jpg" or die "$file.jpg: $!"; + utime +(stat "$file.map")[8,9], "$file.png~" or die "$file.png~: $!"; + rename "$file.png~", "$file.png"; + 1 + } or $stderr .= $@; + + if (length $stderr) { + open my $fh, ">$file.png.err~" + or die "$file.png.err~: $!"; + syswrite $fh, $stderr; + close $fh; + rename "$file.png.err~", "$file.png.err"; + } else { + unlink "$file.png.err"; + } }