ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/Deliantra.pm
(Generate patch)

Comparing deliantra/Deliantra/Deliantra.pm (file contents):
Revision 1.113 by root, Tue Jul 3 00:16:49 2007 UTC vs.
Revision 1.114 by root, Sun Sep 16 13:28:41 2007 UTC

946=cut 946=cut
947 947
948sub load_tilecache() { 948sub load_tilecache() {
949 require Gtk2; 949 require Gtk2;
950 950
951 if (-e "$LIB/facedata") { # Crossfire TRT faces
952 cache_file "$LIB/facedata", "$VARDIR/tilecache.pst", \&use_tilecache, 951 cache_file "$LIB/facedata", "$VARDIR/tilecache.pst", \&use_tilecache,
953 sub { 952 sub {
954 my %cache; 953 my %cache;
955 my $facedata = Storable::retrieve "$LIB/facedata"; 954 my $facedata = Storable::retrieve "$LIB/facedata";
956 955
957 $facedata->{version} == 2 956 $facedata->{version} == 2
958 or die "$LIB/facedata: version mismatch, cannot proceed."; 957 or die "$LIB/facedata: version mismatch, cannot proceed.";
959 958
960 my $faces = $facedata->{faceinfo}; 959 my $faces = $facedata->{faceinfo};
961 my $idx = 0; 960 my $idx = 0;
962 961
963 for (sort keys %$faces) { 962 for (sort keys %$faces) {
964 my ($face, $info) = ($_, $faces->{$_}); 963 my ($face, $info) = ($_, $faces->{$_});
965 964
966 my $pb = new Gtk2::Gdk::PixbufLoader; 965 my $pb = new Gtk2::Gdk::PixbufLoader;
967 $pb->write ($info->{data32}); 966 $pb->write ($info->{data32});
968 $pb->close; 967 $pb->close;
969 my $pb = $pb->get_pixbuf; 968 my $pb = $pb->get_pixbuf;
970 969
971 my $tile = $cache{$face} = { 970 my $tile = $cache{$face} = {
972 pb => $pb, 971 pb => $pb,
973 idx => $idx, 972 idx => $idx,
974 w => int $pb->get_width / TILESIZE, 973 w => int $pb->get_width / TILESIZE,
975 h => int $pb->get_height / TILESIZE, 974 h => int $pb->get_height / TILESIZE,
976 }; 975 };
977 976
978 $idx += $tile->{w} * $tile->{h}; 977 $idx += $tile->{w} * $tile->{h};
979 } 978 }
980 979
981 construct_tilecache_pb $idx, \%cache; 980 construct_tilecache_pb $idx, \%cache;
982 981
983 \%cache 982 \%cache
984 }; 983 };
985
986 *FACEDATA = Storable::retrieve "$LIB/facedata";
987
988 } elsif (-e "$LIB/crossfire.0") { # Crossfire1 version
989 cache_file "$LIB/crossfire.0", "$VARDIR/tilecache.pst", \&use_tilecache,
990 sub {
991 my $tile = read_pak "$LIB/crossfire.0";
992
993 my %cache;
994
995 my $idx = 0;
996
997 for my $name (sort keys %$tile) {
998 my $pb = new Gtk2::Gdk::PixbufLoader;
999 $pb->write ($tile->{$name});
1000 $pb->close;
1001 my $pb = $pb->get_pixbuf;
1002
1003 my $tile = $cache{$name} = {
1004 pb => $pb,
1005 idx => $idx,
1006 w => int $pb->get_width / TILESIZE,
1007 h => int $pb->get_height / TILESIZE,
1008 };
1009
1010 $idx += $tile->{w} * $tile->{h};
1011 }
1012
1013 construct_tilecache_pb $idx, \%cache;
1014
1015 \%cache
1016 };
1017
1018 *FACEDATA = { };
1019 }
1020} 984}
1021 985
1022=head1 AUTHOR 986=head1 AUTHOR
1023 987
1024 Marc Lehmann <schmorp@schmorp.de> 988 Marc Lehmann <schmorp@schmorp.de>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines