… | |
… | |
74 | my $VERBOSE = 1; |
74 | my $VERBOSE = 1; |
75 | my $CACHE = 0; |
75 | my $CACHE = 0; |
76 | my $FORCE; |
76 | my $FORCE; |
77 | my $TMPDIR = "/tmp/cfutil$$~"; |
77 | my $TMPDIR = "/tmp/cfutil$$~"; |
78 | my $TMPFILE = "aaaa0"; |
78 | my $TMPFILE = "aaaa0"; |
|
|
79 | my @COMMIT; |
79 | |
80 | |
80 | our %COLOR = ( |
81 | our %COLOR = ( |
81 | black => 0, |
82 | black => 0, |
82 | white => 1, |
83 | white => 1, |
83 | navy => 2, |
84 | navy => 2, |
… | |
… | |
802 | |
803 | |
803 | print "processing resources...\n" if $VERBOSE; |
804 | print "processing resources...\n" if $VERBOSE; |
804 | my $enc = JSON::XS->new->utf8->canonical->relaxed; |
805 | my $enc = JSON::XS->new->utf8->canonical->relaxed; |
805 | while (my ($k, $v) = each %RESOURCE) { |
806 | while (my ($k, $v) = each %RESOURCE) { |
806 | |
807 | |
|
|
808 | if ($v->{meta} && $v->{meta}{datadir}) { |
|
|
809 | delete $RESOURCE{$k}; |
|
|
810 | |
|
|
811 | $k =~ s/^res\/// or die "$k: datadir files must be in res/"; |
|
|
812 | |
|
|
813 | printf "writing $k (%d octets)...\n", length $v->{data} if $VERBOSE; |
|
|
814 | open my $fh, ">:raw", "$DATADIR/$k~" |
|
|
815 | or die "$DATADIR/$k~: $!"; |
|
|
816 | syswrite $fh, $v->{data}; |
|
|
817 | push @COMMIT, $k; |
|
|
818 | |
|
|
819 | } else { |
807 | if ($v->{type} & 1) { |
820 | if ($v->{type} & 1) { |
808 | # prepend meta info |
821 | # prepend meta info |
809 | |
822 | |
810 | my $meta = $enc->encode ({ |
823 | my $meta = $enc->encode ({ |
811 | name => $k, |
824 | name => $k, |
812 | %{ $v->{meta} || {} }, |
825 | %{ $v->{meta} || {} }, |
813 | }); |
826 | }); |
814 | |
827 | |
815 | $v->{data} = pack "(w/a*)*", $meta, $v->{data}; |
828 | $v->{data} = pack "(w/a*)*", $meta, $v->{data}; |
816 | } |
829 | } |
817 | |
830 | |
818 | make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients |
831 | make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients |
|
|
832 | } |
819 | } |
833 | } |
820 | |
834 | |
821 | printf "writing facedata (%d faces, %d anims, %d resources)...\n", |
835 | printf "writing facedata (%d faces, %d anims, %d resources)...\n", |
822 | scalar keys %FACEINFO, |
836 | scalar keys %FACEINFO, |
823 | scalar keys %ANIMINFO, |
837 | scalar keys %ANIMINFO, |
… | |
… | |
836 | |
850 | |
837 | } |
851 | } |
838 | |
852 | |
839 | print "committing files...\n" if $VERBOSE; |
853 | print "committing files...\n" if $VERBOSE; |
840 | |
854 | |
841 | for (qw(archetypes facedata treasures)) { |
855 | for (qw(archetypes facedata treasures), @COMMIT) { |
842 | chmod 0644, "$DATADIR/$_~"; |
856 | chmod 0644, "$DATADIR/$_~"; |
843 | rename "$DATADIR/$_~", "$DATADIR/$_" |
857 | rename "$DATADIR/$_~", "$DATADIR/$_" |
844 | or die "$DATADIR/$_: $!"; |
858 | or die "$DATADIR/$_: $!"; |
845 | } |
859 | } |
846 | |
860 | |