--- deliantra/Deliantra/Deliantra.pm 2006/02/23 13:15:22 1.28 +++ deliantra/Deliantra/Deliantra.pm 2006/02/23 15:47:50 1.33 @@ -13,7 +13,6 @@ use base 'Exporter'; use Carp (); -use Storable; use File::Spec; use List::Util qw(min max); @@ -47,21 +46,34 @@ sub MOVE_SWIM (){ 0x8 } sub MOVE_ALL (){ 0xf } +BEGIN { + if ($^O eq "MSWin32") { + eval "use Data::Dumper"; + } else { + eval "use Storable qw(freeze thaw)"; + } +} + sub load_ref($) { my ($path) = @_; - open my $fh, ">:raw", "$path~" - or die "$path~: $!"; + open my $fh, "<", $path + or die "$path: $!"; + binmode $fh; local $/; - Storable::thaw <$fh> + + $^O eq "MSWin32" ? eval <$fh> : thaw (<$fh>) } sub save_ref($$) { my ($ref, $path) = @_; - open my $fh, ">:raw", "$path~" + open my $fh, ">", "$path~" or die "$path~: $!"; - print $fh Storable::nfreeze $ref; + binmode $fh; + print $fh $^O eq "MSWin32" + ? Data::Dumper->new ([$ref])->Deepcopy (1)->Purity (1)->Terse (1)->Indent (0)->Dump + : freeze ($ref); close $fh; rename "$path~", $path or die "$path: $!"; @@ -140,8 +152,9 @@ } or do { my %pak; - open my $fh, "<:raw", $path + open my $fh, "<", $path or Carp::croak "$_[0]: $!"; + binmode $fh; while (<$fh>) { my ($type, $id, $len, $path) = split; $path =~ s/.*\///; @@ -166,9 +179,11 @@ my %arc; my ($more, $prev); - open my $fh, "<:raw", $path + open my $fh, "<", $path or Carp::croak "$path: $!"; + binmode $fh; + my $parse_block; $parse_block = sub { my %arc = @_; @@ -401,7 +416,7 @@ *ARCH = read_arch "$LIB/archetypes", "$cachedir/archetypes.pst"; } -$VARDIR ||= $ENV{HOME} ? "$ENV{HOME}/crossfire" : File::Spec->tmpdir; +$VARDIR ||= $ENV{HOME} ? "$ENV{HOME}/.crossfire" : File::Spec->tmpdir . "/crossfire"; init $VARDIR;