… | |
… | |
1106 | } |
1106 | } |
1107 | } |
1107 | } |
1108 | |
1108 | |
1109 | print "processing resources...\n" if $VERBOSE; |
1109 | print "processing resources...\n" if $VERBOSE; |
1110 | my $enc = JSON::XS->new->utf8->canonical->relaxed; |
1110 | my $enc = JSON::XS->new->utf8->canonical->relaxed; |
1111 | while (my ($k, $v) = each %RESOURCE) { |
1111 | for my $k (sort keys %RESOURCE) { |
|
|
1112 | my $v = $RESOURCE{$k}; |
1112 | |
1113 | |
1113 | if ($v->{meta} && $v->{meta}{datadir}) { |
1114 | if ($v->{meta} && $v->{meta}{datadir}) { |
1114 | delete $RESOURCE{$k}; |
1115 | delete $RESOURCE{$k}; |
1115 | |
1116 | |
1116 | $k =~ s/^res\/// or die "$k: datadir files must be in res/"; |
1117 | $k =~ s/^res\/// or die "$k: datadir files must be in res/"; |
… | |
… | |
1135 | |
1136 | |
1136 | make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients |
1137 | make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients |
1137 | } |
1138 | } |
1138 | } |
1139 | } |
1139 | |
1140 | |
|
|
1141 | printf "writing facedata...\n" if $VERBOSE; |
|
|
1142 | |
|
|
1143 | { |
|
|
1144 | open my $fh, ">:perlio", "$DATADIR/facedata~" |
|
|
1145 | or die "$DATADIR/facedata~: $!"; |
|
|
1146 | |
|
|
1147 | print $fh "FACEDATA"; |
|
|
1148 | my $fofs = 8; |
|
|
1149 | |
|
|
1150 | my $put = sub { |
|
|
1151 | my $len = length $_[0]; |
|
|
1152 | my $ofs = $fofs; |
|
|
1153 | |
|
|
1154 | print $fh $_[0]; |
|
|
1155 | $fofs += $len; |
|
|
1156 | |
|
|
1157 | ($len, $ofs) |
|
|
1158 | }; |
|
|
1159 | |
|
|
1160 | for (values %FACEINFO) { |
|
|
1161 | ($_->{size32}, $_->{fofs32}) = $put->(delete $_->{data32}); |
|
|
1162 | ($_->{size64}, $_->{fofs64}) = $put->(delete $_->{data64}); |
|
|
1163 | } |
|
|
1164 | |
|
|
1165 | for (values %RESOURCE) { |
|
|
1166 | ($_->{size}, $_->{fofs}) = $put->(delete $_->{data}); |
|
|
1167 | } |
|
|
1168 | |
|
|
1169 | close $fh; |
|
|
1170 | } |
|
|
1171 | |
1140 | printf "writing facedata (%d faces, %d anims, %d resources)...\n", |
1172 | printf "writing faceinfo (%d faces, %d anims, %d resources)...\n", |
1141 | scalar keys %FACEINFO, |
1173 | scalar keys %FACEINFO, |
1142 | scalar keys %ANIMINFO, |
1174 | scalar keys %ANIMINFO, |
1143 | scalar keys %RESOURCE |
1175 | scalar keys %RESOURCE |
1144 | if $VERBOSE; |
1176 | if $VERBOSE; |
1145 | |
1177 | |
1146 | open my $fh, ">:perlio", "$DATADIR/facedata~" |
1178 | open my $fh, ">:perlio", "$DATADIR/faceinfo~" |
1147 | or die "$DATADIR/facedata~: $!"; |
1179 | or die "$DATADIR/faceinfo~: $!"; |
1148 | |
1180 | |
1149 | print $fh nfreeze { |
1181 | print $fh nfreeze { |
1150 | version => 2, |
1182 | version => 2, |
1151 | faceinfo => \%FACEINFO, |
1183 | faceinfo => \%FACEINFO, |
1152 | animinfo => \%ANIMINFO, |
1184 | animinfo => \%ANIMINFO, |
… | |
… | |
1154 | }; |
1186 | }; |
1155 | } |
1187 | } |
1156 | |
1188 | |
1157 | print "committing files...\n" if $VERBOSE; |
1189 | print "committing files...\n" if $VERBOSE; |
1158 | |
1190 | |
1159 | for (qw(archetypes facedata treasures), @COMMIT) { |
1191 | for (qw(archetypes faceinfo facedata treasures), @COMMIT) { |
1160 | chmod 0644, "$DATADIR/$_~"; |
1192 | chmod 0644, "$DATADIR/$_~"; |
1161 | rename "$DATADIR/$_~", "$DATADIR/$_" |
1193 | rename "$DATADIR/$_~", "$DATADIR/$_" |
1162 | or die "$DATADIR/$_: $!"; |
1194 | or die "$DATADIR/$_: $!"; |
1163 | } |
1195 | } |
1164 | |
1196 | |