--- deliantra/Deliantra/Deliantra.pm 2007/02/06 22:27:44 1.81 +++ deliantra/Deliantra/Deliantra.pm 2007/02/06 23:53:26 1.82 @@ -201,10 +201,45 @@ } } +my %MATERIAL = reverse + paper => 1, + iron => 2, + glass => 4, + leather => 8, + wood => 16, + organic => 32, + stone => 64, + cloth => 128, + adamant => 256, + liquid => 512, + tin => 1024, + bone => 2048, + ice => 4096, +; + # object as in "Object xxx", i.e. archetypes sub normalize_object($) { my ($ob) = @_; + # convert material bitset to materialname, if possible + if (exists $ob->{material}) { + if (!$ob->{material}) { + delete $ob->{material}; + } elsif (exists $ob->{materialname}) { + if ($MATERIAL{$ob->{material}} eq $ob->{materialname}) { + delete $ob->{material}; + } else { + warn "object $ob->{_name} has both materialname ($ob->{materialname}) and material ($ob->{material}) set.\n"; + delete $ob->{material}; # assume materilname is more specific and nuke material + } + } else { + if (my $name = $MATERIAL{$ob->{material}}) { + delete $ob->{material}; + $ob->{materialname} = $name; + } + } + } + # nuke outdated or never supported fields delete @$ob{qw( can_knockback can_parry can_impale can_cut can_dam_armour