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.51 by root, Mon Mar 20 01:15:10 2006 UTC vs.
Revision 1.52 by root, Mon Mar 20 02:15:36 2006 UTC

71 close $fh; 71 close $fh;
72 rename "$path~", $path 72 rename "$path~", $path
73 or die "$path: $!"; 73 or die "$path: $!";
74} 74}
75 75
76sub normalize_arch($) { 76sub normalize_object($) {
77 my ($ob) = @_; 77 my ($ob) = @_;
78
79 my $arch = $ARCH{$ob->{_name}}
80 or (warn "$ob->{_name}: no such archetype", return $ob);
81 78
82 delete $ob->{$_} for qw( 79 delete $ob->{$_} for qw(
83 can_knockback can_parry can_impale can_cut can_dam_armour 80 can_knockback can_parry can_impale can_cut can_dam_armour
84 can_apply pass_thru can_pass_thru 81 can_apply pass_thru can_pass_thru
85 ); 82 );
83
84 for my $attr (qw(move_type move_block move_allow move_on move_off move_slow)) {
85 next unless exists $ob->{$attr};
86 next if $ob->{$attr} =~ /^\d+$/;
87
88 my $flags = 0;
89
90 # assume list
91 for my $flag (map lc, split /\s+/, $ob->{$attr}) {
92 $flags |= MOVE_WALK if $flag eq "walk";
93 $flags |= MOVE_FLY_LOW if $flag eq "fly_low";
94 $flags |= MOVE_FLY_HIGH if $flag eq "fly_high";
95 $flags |= MOVE_FLYING if $flag eq "flying";
96 $flags |= MOVE_SWIM if $flag eq "swim";
97 $flags |= MOVE_BOAT if $flag eq "boat";
98 $flags |= MOVE_ALL if $flag eq "all";
99
100 $flags &= ~MOVE_WALK if $flag eq "-walk";
101 $flags &= ~MOVE_FLY_LOW if $flag eq "-fly_low";
102 $flags &= ~MOVE_FLY_HIGH if $flag eq "-fly_high";
103 $flags &= ~MOVE_FLYING if $flag eq "-flying";
104 $flags &= ~MOVE_SWIM if $flag eq "-swim";
105 $flags &= ~MOVE_BOAT if $flag eq "-boat";
106 $flags &= ~MOVE_ALL if $flag eq "-all";
107 }
108
109 $ob->{$attr} = $flags;
110 }
111
112 if (defined (my $v = delete $ob->{no_pass})) {
113 $ob->{move_block} = $v ? MOVE_ALL : 0;
114 }
115 if (defined (my $v = delete $ob->{slow_move})) {
116 $ob->{move_slow} |= MOVE_WALK;
117 $ob->{move_slow_penalty} = $v;
118 }
119 if (defined (my $v = delete $ob->{walk_on})) {
120 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_WALK
121 : $ob->{move_on} & ~MOVE_WALK;
122 }
123 if (defined (my $v = delete $ob->{walk_off})) {
124 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_WALK
125 : $ob->{move_off} & ~MOVE_WALK;
126 }
127 if (defined (my $v = delete $ob->{fly_on})) {
128 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_FLY_LOW
129 : $ob->{move_on} & ~MOVE_FLY_LOW;
130 }
131 if (defined (my $v = delete $ob->{fly_off})) {
132 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_FLY_LOW
133 : $ob->{move_off} & ~MOVE_FLY_LOW;
134 }
135 if (defined (my $v = delete $ob->{flying})) {
136 $ob->{move_type} = $v ? $ob->{move_type} | MOVE_FLY_LOW
137 : $ob->{move_type} & ~MOVE_FLY_LOW;
138 }
139
140 $ob
141}
142
143sub normalize_arch($) {
144 my ($ob) = @_;
145
146 normalize_object $ob;
147
148 my $arch = $ARCH{$ob->{_name}}
149 or (warn "$ob->{_name}: no such archetype", return $ob);
86 150
87 if ($arch->{type} == 22) { # map 151 if ($arch->{type} == 22) { # map
88 my %normalize = ( 152 my %normalize = (
89 "enter_x" => "hp", 153 "enter_x" => "hp",
90 "enter_y" => "sp", 154 "enter_y" => "sp",
100 while (my ($k2, $k1) = each %normalize) { 164 while (my ($k2, $k1) = each %normalize) {
101 if (defined (my $v = delete $ob->{$k1})) { 165 if (defined (my $v = delete $ob->{$k1})) {
102 $ob->{$k2} = $v; 166 $ob->{$k2} = $v;
103 } 167 }
104 } 168 }
105 } 169 } else {
106
107 for my $attr (qw(move_type move_block move_allow move_on move_off move_slow)) {
108 next unless exists $ob->{$attr};
109 next if $ob->{$attr} =~ /^\d+$/;
110
111 my $flags = 0;
112
113 # assume list
114 for my $flag (map lc, split /\s+/, $ob->{$attr}) {
115 $flags |= MOVE_WALK if $flag eq "walk";
116 $flags |= MOVE_FLY_LOW if $flag eq "fly_low";
117 $flags |= MOVE_FLY_HIGH if $flag eq "fly_high";
118 $flags |= MOVE_FLYING if $flag eq "flying";
119 $flags |= MOVE_SWIM if $flag eq "swim";
120 $flags |= MOVE_BOAT if $flag eq "boat";
121 $flags |= MOVE_ALL if $flag eq "all";
122
123 $flags &= ~MOVE_WALK if $flag eq "-walk";
124 $flags &= ~MOVE_FLY_LOW if $flag eq "-fly_low";
125 $flags &= ~MOVE_FLY_HIGH if $flag eq "-fly_high";
126 $flags &= ~MOVE_FLYING if $flag eq "-flying";
127 $flags &= ~MOVE_SWIM if $flag eq "-swim";
128 $flags &= ~MOVE_BOAT if $flag eq "-boat";
129 $flags &= ~MOVE_ALL if $flag eq "-all";
130 }
131
132 $ob->{$attr} = $flags;
133 }
134
135 if (defined (my $v = delete $ob->{no_pass})) {
136 $ob->{move_block} = $v ? MOVE_ALL : 0;
137 }
138 if (defined (my $v = delete $ob->{slow_move})) {
139 $ob->{move_slow} |= MOVE_WALK;
140 $ob->{move_slow_penalty} = $v;
141 }
142 if (defined (my $v = delete $ob->{walk_on})) {
143 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_WALK
144 : $ob->{move_on} & ~MOVE_WALK;
145 }
146 if (defined (my $v = delete $ob->{walk_off})) {
147 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_WALK
148 : $ob->{move_off} & ~MOVE_WALK;
149 }
150 if (defined (my $v = delete $ob->{fly_on})) {
151 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_FLY_LOW
152 : $ob->{move_on} & ~MOVE_FLY_LOW;
153 }
154 if (defined (my $v = delete $ob->{fly_off})) {
155 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_FLY_LOW
156 : $ob->{move_off} & ~MOVE_FLY_LOW;
157 }
158 if (defined (my $v = delete $ob->{flying})) {
159 $ob->{move_type} = $v ? $ob->{move_type} | MOVE_FLY_LOW
160 : $ob->{move_type} & ~MOVE_FLY_LOW;
161 }
162
163 # if value matches archetype default, delete 170 # if value matches archetype default, delete
164 while (my ($k, $v) = each %$ob) { 171 while (my ($k, $v) = each %$ob) {
165 if (exists $arch->{$k} and $arch->{$k} eq $v) { 172 if (exists $arch->{$k} and $arch->{$k} eq $v) {
166 next if $k eq "_name"; 173 next if $k eq "_name";
167 delete $ob->{$k}; 174 delete $ob->{$k};
175 }
168 } 176 }
169 } 177 }
170 178
171 $ob 179 $ob
172} 180}
234 s/\s+$//; 242 s/\s+$//;
235 if (/^more$/i) { 243 if (/^more$/i) {
236 $more = $prev; 244 $more = $prev;
237 } elsif (/^object (\S+)$/i) { 245 } elsif (/^object (\S+)$/i) {
238 my $name = $1; 246 my $name = $1;
239 my $arc = $parse_block->(_name => $name); 247 my $arc = normalize_object $parse_block->(_name => $name);
240 248
241 if ($more) { 249 if ($more) {
242 $more->{more} = $arc; 250 $more->{more} = $arc;
243 } else { 251 } else {
244 $arc{$name} = $arc; 252 $arc{$name} = $arc;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines