… | |
… | |
154 | (map { |
154 | (map { |
155 | ( |
155 | ( |
156 | "(", |
156 | "(", |
157 | "+clone", |
157 | "+clone", |
158 | -crop => (sprintf "%dx%d+%d+%d", $T, $T, $_->[0] * $T, $_->[1] * $T), |
158 | -crop => (sprintf "%dx%d+%d+%d", $T, $T, $_->[0] * $T, $_->[1] * $T), |
|
|
159 | "+repage", |
159 | -write => "png:$_->[2]~", |
160 | -write => "png:$_->[2]~", |
160 | "+delete", |
161 | "+delete", |
161 | ")", |
162 | ")", |
162 | ) |
163 | ) |
163 | } @todo), |
164 | } @todo), |
… | |
… | |
218 | my $x = $o->{x} - $dx; |
219 | my $x = $o->{x} - $dx; |
219 | my $y = $o->{y} - $dy; |
220 | my $y = $o->{y} - $dy; |
220 | |
221 | |
221 | my $ext = $x|$y ? "+$x+$y" : ""; |
222 | my $ext = $x|$y ? "+$x+$y" : ""; |
222 | |
223 | |
223 | $o->{face} .= $ext; |
224 | $o->{face} .= $ext unless /^blank.x11$|^empty.x11$/; |
224 | |
225 | |
225 | my $visibility = delete $o->{visibility} if exists $o->{visibility}; |
226 | my $visibility = delete $o->{visibility} if exists $o->{visibility}; |
226 | my $magicmap = delete $o->{magicmap} if exists $o->{magicmap}; |
227 | my $magicmap = delete $o->{magicmap} if exists $o->{magicmap}; |
227 | |
228 | |
228 | my $anim = delete $o->{anim}; |
229 | my $anim = delete $o->{anim}; |
229 | |
230 | |
230 | if ($anim) { |
231 | if ($anim) { |
231 | $o->{animation} = "$o->{_name}$ext"; |
232 | $o->{animation} = "$o->{_name}"; |
232 | |
233 | |
233 | for (@$anim) { |
234 | for (@$anim) { |
234 | $_ .= $ext unless /^facings\s/; |
235 | $_ .= $ext unless /^facings\s|^blank.x11$|^empty.x11$/; |
235 | } |
236 | } |
236 | |
237 | |
237 | $ANIM{"$o->{_name}$ext"} = |
238 | $ANIM{"$o->{_name}$ext"} = |
238 | join "", map "$_\n", |
239 | join "", map "$_\n", |
239 | "anim $o->{_name}$ext", |
240 | "anim $o->{_name}", |
240 | @$anim, |
241 | @$anim, |
241 | "mina"; |
242 | "mina"; |
242 | } |
243 | } |
243 | |
244 | |
244 | for my $face ($o->{face} || (), @{$anim || []}) { |
245 | for my $face ($o->{face} || (), @{$anim || []}) { |
245 | next if /^facings\s/; |
246 | next if $face =~ /^facings\s|^blank.x11$|^empty.x11$/; |
246 | |
247 | |
247 | my $info = $FACEINFO{$face} ||= {}; |
248 | my $info = $FACEINFO{$face} ||= {}; |
248 | |
249 | |
249 | $info->{visibility} = $visibility if defined $visibility; |
250 | $info->{visibility} = $visibility if defined $visibility; |
250 | $info->{magicmap} = $magicmap if defined $magicmap; |
251 | $info->{magicmap} = $magicmap if defined $magicmap; |
… | |
… | |
320 | while (my ($k, $v) = each %FACEINFO) { |
321 | while (my ($k, $v) = each %FACEINFO) { |
321 | $v->{data32} ||= delete $PNG32{$k}; |
322 | $v->{data32} ||= delete $PNG32{$k}; |
322 | } |
323 | } |
323 | |
324 | |
324 | while (my ($k, $v) = each %FACEINFO) { |
325 | while (my ($k, $v) = each %FACEINFO) { |
325 | exists $v->{data32} or warn "$k: face has no png32. this will crash the server.\n"; |
326 | length $v->{data32} or warn "$k: face has no png32. this will crash the server.\n"; |
326 | |
327 | |
327 | $v->{chksum32} = Digest::MD5::md5 $v->{data32}; |
328 | $v->{chksum32} = Digest::MD5::md5 $v->{data32}; |
328 | } |
329 | } |
329 | |
330 | |
330 | open my $fh, ">:perlio", "$DATADIR/faces~" |
331 | open my $fh, ">:perlio", "$DATADIR/faces~" |