--- deliantra/server/lib/cf.pm 2007/04/10 09:35:23 1.235 +++ deliantra/server/lib/cf.pm 2007/04/12 14:18:05 1.236 @@ -2309,36 +2309,50 @@ warn "loading facedata from $path\n"; - my $faces; - 0 < aio_load $path, $faces + my $facedata; + 0 < aio_load $path, $facedata or die "$path: $!"; Coro::cede; - $faces = Storable::thaw $faces; + $facedata = Storable::thaw $facedata; Coro::cede; - my $meta = delete $faces->{""}; - $meta->{version} == 1 + $facedata->{version} == 2 or cf::cleanup "$path: version mismatch, cannot proceed."; - while (my ($face, $info) = each %$faces) { - my $idx = (cf::face::find $face) || cf::face::alloc $face; - cf::face::set $idx, $info->{visibility}, $info->{magicmap}; - cf::face::set_data $idx, 0, $info->{data32}, $info->{chksum32}; - cf::face::set_data $idx, 1, $info->{data64}, $info->{chksum64}; - Coro::cede; + { + my $faces = $facedata->{faceinfo}; + + while (my ($face, $info) = each %$faces) { + my $idx = (cf::face::find $face) || cf::face::alloc $face; + cf::face::set $idx, $info->{visibility}, $info->{magicmap}; + cf::face::set_data $idx, 0, $info->{data32}, $info->{chksum32}; + cf::face::set_data $idx, 1, $info->{data64}, $info->{chksum64}; + Coro::cede; + } + + while (my ($face, $info) = each %$faces) { + next unless $info->{smooth}; + my $idx = cf::face::find $face + or next; + if (my $smooth = cf::face::find $info->{smooth}) { + cf::face::set_smooth $idx, $smooth, $info->{smoothlevel}; + } else { + warn "smooth face '$info->{smooth}' not found for face '$face'"; + } + Coro::cede; + } } - while (my ($face, $info) = each %$faces) { - next unless $info->{smooth}; - my $idx = cf::face::find $face - or next; - if (my $smooth = cf::face::find $info->{smooth}) { - cf::face::set_smooth $idx, $smooth, $info->{smoothlevel}; - } else { - warn "smooth face '$info->{smooth}' not found for face '$face'"; + { + my $anims = $facedata->{animinfo}; + + while (my ($anim, $info) = each %$anims) { + cf::anim::set $anim, $info->{frames}, $info->{facings}; + Coro::cede; } - Coro::cede; + + cf::anim::invalidate_all; # d'oh } 1