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.63 by root, Fri Mar 31 21:06:47 2006 UTC vs.
Revision 1.69 by root, Thu Aug 3 10:51:26 2006 UTC

4 4
5=cut 5=cut
6 6
7package Crossfire; 7package Crossfire;
8 8
9our $VERSION = '0.1'; 9our $VERSION = '0.9';
10 10
11use strict; 11use strict;
12 12
13use base 'Exporter'; 13use base 'Exporter';
14 14
199 if (defined (my $v = delete $ob->{slow_move})) { 199 if (defined (my $v = delete $ob->{slow_move})) {
200 $ob->{move_slow} |= MOVE_WALK; 200 $ob->{move_slow} |= MOVE_WALK;
201 $ob->{move_slow_penalty} = $v; 201 $ob->{move_slow_penalty} = $v;
202 } 202 }
203 if (defined (my $v = delete $ob->{walk_on})) { 203 if (defined (my $v = delete $ob->{walk_on})) {
204 $ob->{move_on} = MOVE_ALL unless exists $ob->{move_on};
204 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_WALK 205 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_WALK
205 : $ob->{move_on} & ~MOVE_WALK; 206 : $ob->{move_on} & ~MOVE_WALK;
206 } 207 }
207 if (defined (my $v = delete $ob->{walk_off})) { 208 if (defined (my $v = delete $ob->{walk_off})) {
209 $ob->{move_off} = MOVE_ALL unless exists $ob->{move_off};
208 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_WALK 210 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_WALK
209 : $ob->{move_off} & ~MOVE_WALK; 211 : $ob->{move_off} & ~MOVE_WALK;
210 } 212 }
211 if (defined (my $v = delete $ob->{fly_on})) { 213 if (defined (my $v = delete $ob->{fly_on})) {
214 $ob->{move_on} = MOVE_ALL unless exists $ob->{move_on};
212 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_FLY_LOW 215 $ob->{move_on} = $v ? $ob->{move_on} | MOVE_FLY_LOW
213 : $ob->{move_on} & ~MOVE_FLY_LOW; 216 : $ob->{move_on} & ~MOVE_FLY_LOW;
214 } 217 }
215 if (defined (my $v = delete $ob->{fly_off})) { 218 if (defined (my $v = delete $ob->{fly_off})) {
219 $ob->{move_off} = MOVE_ALL unless exists $ob->{move_off};
216 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_FLY_LOW 220 $ob->{move_off} = $v ? $ob->{move_off} | MOVE_FLY_LOW
217 : $ob->{move_off} & ~MOVE_FLY_LOW; 221 : $ob->{move_off} & ~MOVE_FLY_LOW;
218 } 222 }
219 if (defined (my $v = delete $ob->{flying})) { 223 if (defined (my $v = delete $ob->{flying})) {
224 $ob->{move_type} = MOVE_ALL unless exists $ob->{move_type};
220 $ob->{move_type} = $v ? $ob->{move_type} | MOVE_FLY_LOW 225 $ob->{move_type} = $v ? $ob->{move_type} | MOVE_FLY_LOW
221 : $ob->{move_type} & ~MOVE_FLY_LOW; 226 : $ob->{move_type} & ~MOVE_FLY_LOW;
222 } 227 }
223 228
224 # convert idiotic event_xxx things into objects 229 # convert idiotic event_xxx things into objects
298 } 303 }
299 304
300 \%pak 305 \%pak
301} 306}
302 307
303sub read_arch($) { 308sub read_arch($;$) {
304 my ($path) = @_; 309 my ($path, $toplevel) = @_;
305 310
306 my %arc; 311 my %arc;
307 my ($more, $prev); 312 my ($more, $prev);
308 313
309 open my $fh, "<:raw:perlio:utf8", $path 314 open my $fh, "<:raw:perlio:utf8", $path
310 or Carp::croak "$path: $!"; 315 or Carp::croak "$path: $!";
311 316
312 binmode $fh; 317# binmode $fh;
313 318
314 my $parse_block; $parse_block = sub { 319 my $parse_block; $parse_block = sub {
315 my %arc = @_; 320 my %arc = @_;
316 321
317 while (<$fh>) { 322 while (<$fh>) {
328 } elsif (/^msg$/i) { 333 } elsif (/^msg$/i) {
329 while (<$fh>) { 334 while (<$fh>) {
330 last if /^endmsg\s*$/i; 335 last if /^endmsg\s*$/i;
331 $arc{msg} .= $_; 336 $arc{msg} .= $_;
332 } 337 }
338 } elsif (/^anim$/i) {
339 while (<$fh>) {
340 last if /^mina\s*$/i;
341 chomp;
342 push @{ $arc{anim} }, $_;
343 }
333 } elsif (/^(\S+)\s*(.*)$/) { 344 } elsif (/^(\S+)\s*(.*)$/) {
334 $arc{lc $1} = $2; 345 $arc{lc $1} = $2;
335 } elsif (/^\s*($|#)/) { 346 } elsif (/^\s*($|#)/) {
336 # 347 #
337 } else { 348 } else {
366 } else { 377 } else {
367 push @{ $arc{arch} }, $arc; 378 push @{ $arc{arch} }, $arc;
368 } 379 }
369 $prev = $arc; 380 $prev = $arc;
370 $more = undef; 381 $more = undef;
382 } elsif ($toplevel && /^(\S+)\s+(.*)$/) {
383 if ($1 eq "lev_array") {
384 while (<$fh>) {
385 last if /^endplst\s*$/;
386 push @{$toplevel->{lev_array}}, $_+0;
387 }
388 } else {
389 $toplevel->{$1} = $2;
390 }
371 } elsif (/^\s*($|#)/) { 391 } elsif (/^\s*($|#)/) {
372 # 392 #
373 } else { 393 } else {
374 warn "$path: unparseable top-level line '$_'"; 394 die "$path: unparseable top-level line '$_'";
375 } 395 }
376 } 396 }
377 397
378 undef $parse_block; # work around bug in perl not freeing $fh etc. 398 undef $parse_block; # work around bug in perl not freeing $fh etc.
379 399

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines