… | |
… | |
20 | use Crossfire; |
20 | use Crossfire; |
21 | use Coro; |
21 | use Coro; |
22 | use Coro::AIO; |
22 | use Coro::AIO; |
23 | use POSIX (); |
23 | use POSIX (); |
24 | use Digest::MD5; |
24 | use Digest::MD5; |
25 | use Storable; $Storable::canonical = 1; |
25 | use Coro::Storable; $Storable::canonical = 1; |
26 | |
26 | |
27 | sub usage { |
27 | sub usage { |
28 | warn <<EOF; |
28 | warn <<EOF; |
29 | Usage: cfutil [-v] [-q] [--force] [--cache] |
29 | Usage: cfutil [-v] [-q] [--force] [--cache] |
30 | [--install-arch path] |
30 | [--install-arch path] |
… | |
… | |
276 | my $x = $o->{x} - $dx; |
276 | my $x = $o->{x} - $dx; |
277 | my $y = $o->{y} - $dy; |
277 | my $y = $o->{y} - $dy; |
278 | |
278 | |
279 | my $ext = $x|$y ? "+$x+$y" : ""; |
279 | my $ext = $x|$y ? "+$x+$y" : ""; |
280 | |
280 | |
281 | $o->{face} .= $ext unless /^blank.x11$|^empty.x11$/; |
281 | $o->{face} .= $ext unless /^blank.x11$|^empty.x11$/ || !$o->{face}; |
282 | |
282 | |
283 | my $visibility = delete $o->{visibility} if exists $o->{visibility}; |
283 | my $visibility = delete $o->{visibility} if exists $o->{visibility}; |
284 | my $magicmap = delete $o->{magicmap} if exists $o->{magicmap}; |
284 | my $magicmap = delete $o->{magicmap} if exists $o->{magicmap}; |
285 | |
285 | |
286 | my $anim = delete $o->{anim}; |
286 | my $anim = delete $o->{anim}; |
… | |
… | |
419 | } |
419 | } |
420 | |
420 | |
421 | open my $fh, ">:perlio", "$DATADIR/facedata~" |
421 | open my $fh, ">:perlio", "$DATADIR/facedata~" |
422 | or die "$DATADIR/facedata~: $!"; |
422 | or die "$DATADIR/facedata~: $!"; |
423 | |
423 | |
424 | print $fh Storable::nfreeze { |
424 | print $fh freeze { |
425 | version => 2, |
425 | version => 2, |
426 | faceinfo => \%FACEINFO, |
426 | faceinfo => \%FACEINFO, |
427 | animinfo => \%ANIMINFO, |
427 | animinfo => \%ANIMINFO, |
428 | }; |
428 | }; |
429 | } |
429 | } |