--- deliantra/Deliantra/Deliantra.pm 2006/03/20 01:15:10 1.51 +++ deliantra/Deliantra/Deliantra.pm 2006/03/20 02:15:36 1.52 @@ -73,37 +73,14 @@ or die "$path: $!"; } -sub normalize_arch($) { +sub normalize_object($) { my ($ob) = @_; - my $arch = $ARCH{$ob->{_name}} - or (warn "$ob->{_name}: no such archetype", return $ob); - delete $ob->{$_} for qw( can_knockback can_parry can_impale can_cut can_dam_armour can_apply pass_thru can_pass_thru ); - if ($arch->{type} == 22) { # map - my %normalize = ( - "enter_x" => "hp", - "enter_y" => "sp", - "width" => "x", - "height" => "y", - "reset_timeout" => "weight", - "swap_time" => "value", - "difficulty" => "level", - "darkness" => "invisible", - "fixed_resettime" => "stand_still", - ); - - while (my ($k2, $k1) = each %normalize) { - if (defined (my $v = delete $ob->{$k1})) { - $ob->{$k2} = $v; - } - } - } - for my $attr (qw(move_type move_block move_allow move_on move_off move_slow)) { next unless exists $ob->{$attr}; next if $ob->{$attr} =~ /^\d+$/; @@ -160,11 +137,42 @@ : $ob->{move_type} & ~MOVE_FLY_LOW; } - # if value matches archetype default, delete - while (my ($k, $v) = each %$ob) { - if (exists $arch->{$k} and $arch->{$k} eq $v) { - next if $k eq "_name"; - delete $ob->{$k}; + $ob +} + +sub normalize_arch($) { + my ($ob) = @_; + + normalize_object $ob; + + my $arch = $ARCH{$ob->{_name}} + or (warn "$ob->{_name}: no such archetype", return $ob); + + if ($arch->{type} == 22) { # map + my %normalize = ( + "enter_x" => "hp", + "enter_y" => "sp", + "width" => "x", + "height" => "y", + "reset_timeout" => "weight", + "swap_time" => "value", + "difficulty" => "level", + "darkness" => "invisible", + "fixed_resettime" => "stand_still", + ); + + while (my ($k2, $k1) = each %normalize) { + if (defined (my $v = delete $ob->{$k1})) { + $ob->{$k2} = $v; + } + } + } else { + # if value matches archetype default, delete + while (my ($k, $v) = each %$ob) { + if (exists $arch->{$k} and $arch->{$k} eq $v) { + next if $k eq "_name"; + delete $ob->{$k}; + } } } @@ -236,7 +244,7 @@ $more = $prev; } elsif (/^object (\S+)$/i) { my $name = $1; - my $arc = $parse_block->(_name => $name); + my $arc = normalize_object $parse_block->(_name => $name); if ($more) { $more->{more} = $arc;