… | |
… | |
161 | my $msg = join "", @_; |
161 | my $msg = join "", @_; |
162 | |
162 | |
163 | $msg .= "\n" |
163 | $msg .= "\n" |
164 | unless $msg =~ /\n$/; |
164 | unless $msg =~ /\n$/; |
165 | |
165 | |
166 | $msg =~ s/([\x00-\x09\x0b-\x1f])/sprintf "\\x%02x", ord $1/ge; |
166 | $msg =~ s/([\x00-\x08\x0b-\x1f])/sprintf "\\x%02x", ord $1/ge; |
167 | |
167 | |
168 | utf8::encode $msg; |
168 | utf8::encode $msg; |
169 | LOG llevError, $msg; |
169 | LOG llevError, $msg; |
170 | }; |
170 | }; |
171 | } |
171 | } |
… | |
… | |
1352 | |
1352 | |
1353 | # the original (read-only) location |
1353 | # the original (read-only) location |
1354 | sub load_path { |
1354 | sub load_path { |
1355 | my ($self) = @_; |
1355 | my ($self) = @_; |
1356 | |
1356 | |
1357 | "$MAPDIR($self->{path}" |
1357 | "$MAPDIR/$self->{path}.map" |
1358 | } |
1358 | } |
1359 | |
1359 | |
1360 | # the temporary/swap location |
1360 | # the temporary/swap location |
1361 | sub save_path { |
1361 | sub save_path { |
1362 | my ($self) = @_; |
1362 | my ($self) = @_; |
1363 | |
1363 | |
1364 | (my $path = $_[0]{path}) =~ s/\//$PATH_SEP/g; |
1364 | (my $path = $_[0]{path}) =~ s/\//$PATH_SEP/g; |
1365 | "$TMPDIR/$path" |
1365 | "$TMPDIR/$path.map" |
1366 | } |
1366 | } |
1367 | |
1367 | |
1368 | # the unique path, undef == no special unique path |
1368 | # the unique path, undef == no special unique path |
1369 | sub uniq_path { |
1369 | sub uniq_path { |
1370 | my ($self) = @_; |
1370 | my ($self) = @_; |
… | |
… | |
1490 | my ($self) = @_; |
1490 | my ($self) = @_; |
1491 | |
1491 | |
1492 | local $self->{deny_reset} = 1; # loading can take a long time |
1492 | local $self->{deny_reset} = 1; # loading can take a long time |
1493 | |
1493 | |
1494 | my $path = $self->{path}; |
1494 | my $path = $self->{path}; |
|
|
1495 | |
|
|
1496 | { |
1495 | my $guard = cf::lock_acquire "map_load:$path"; |
1497 | my $guard = cf::lock_acquire "map_load:$path"; |
1496 | |
1498 | |
1497 | return if $self->in_memory != cf::MAP_SWAPPED; |
1499 | return if $self->in_memory != cf::MAP_SWAPPED; |
1498 | |
1500 | |
1499 | $self->in_memory (cf::MAP_LOADING); |
1501 | $self->in_memory (cf::MAP_LOADING); |
1500 | |
1502 | |
1501 | $self->alloc; |
1503 | $self->alloc; |
1502 | |
1504 | |
1503 | $self->pre_load; |
1505 | $self->pre_load; |
1504 | Coro::cede; |
|
|
1505 | |
|
|
1506 | $self->_load_objects ($self->{load_path}, 1) |
|
|
1507 | or return; |
|
|
1508 | |
|
|
1509 | $self->set_object_flag (cf::FLAG_OBJ_ORIGINAL, 1) |
|
|
1510 | if delete $self->{load_original}; |
|
|
1511 | |
|
|
1512 | if (my $uniq = $self->uniq_path) { |
|
|
1513 | utf8::encode $uniq; |
|
|
1514 | if (aio_open $uniq, O_RDONLY, 0) { |
|
|
1515 | $self->clear_unique_items; |
|
|
1516 | $self->_load_objects ($uniq, 0); |
|
|
1517 | } |
|
|
1518 | } |
|
|
1519 | |
|
|
1520 | Coro::cede; |
|
|
1521 | # now do the right thing for maps |
|
|
1522 | $self->link_multipart_objects; |
|
|
1523 | Coro::cede; |
|
|
1524 | |
|
|
1525 | unless ($self->{deny_activate}) { |
|
|
1526 | $self->decay_objects; |
|
|
1527 | $self->fix_auto_apply; |
|
|
1528 | $self->update_buttons; |
|
|
1529 | Coro::cede; |
1506 | Coro::cede; |
1530 | $self->set_darkness_map; |
1507 | |
|
|
1508 | $self->_load_objects ($self->{load_path}, 1) |
|
|
1509 | or return; |
|
|
1510 | |
|
|
1511 | $self->set_object_flag (cf::FLAG_OBJ_ORIGINAL, 1) |
|
|
1512 | if delete $self->{load_original}; |
|
|
1513 | |
|
|
1514 | if (my $uniq = $self->uniq_path) { |
|
|
1515 | utf8::encode $uniq; |
|
|
1516 | if (aio_open $uniq, O_RDONLY, 0) { |
|
|
1517 | $self->clear_unique_items; |
|
|
1518 | $self->_load_objects ($uniq, 0); |
|
|
1519 | } |
|
|
1520 | } |
|
|
1521 | |
|
|
1522 | Coro::cede; |
|
|
1523 | # now do the right thing for maps |
|
|
1524 | $self->link_multipart_objects; |
1531 | $self->difficulty ($self->estimate_difficulty) |
1525 | $self->difficulty ($self->estimate_difficulty) |
1532 | unless $self->difficulty; |
1526 | unless $self->difficulty; |
1533 | Coro::cede; |
1527 | Coro::cede; |
|
|
1528 | |
|
|
1529 | unless ($self->{deny_activate}) { |
|
|
1530 | $self->decay_objects; |
|
|
1531 | $self->fix_auto_apply; |
|
|
1532 | $self->update_buttons; |
|
|
1533 | Coro::cede; |
|
|
1534 | $self->set_darkness_map; |
|
|
1535 | Coro::cede; |
1534 | $self->activate; |
1536 | $self->activate; |
1535 | Coro::cede; |
1537 | } |
|
|
1538 | |
|
|
1539 | $self->in_memory (cf::MAP_IN_MEMORY); |
1536 | } |
1540 | } |
1537 | |
1541 | |
1538 | $self->post_load; |
1542 | $self->post_load; |
1539 | Coro::cede; |
|
|
1540 | |
|
|
1541 | $self->in_memory (cf::MAP_IN_MEMORY); |
|
|
1542 | } |
1543 | } |
1543 | |
1544 | |
1544 | sub customise_for { |
1545 | sub customise_for { |
1545 | my ($self, $ob) = @_; |
1546 | my ($self, $ob) = @_; |
1546 | |
1547 | |