… | |
… | |
57 | } |
57 | } |
58 | |
58 | |
59 | if ($msg->{do_erase}) { |
59 | if ($msg->{do_erase}) { |
60 | if ($pl->ob->flag (cf::FLAG_WIZ)) { |
60 | if ($pl->ob->flag (cf::FLAG_WIZ)) { |
61 | my ($top) = reverse $pl->ob->map->at ($x, $y); |
61 | my ($top) = reverse $pl->ob->map->at ($x, $y); |
62 | if ($top) { $top->remove; $top->free } |
62 | $top->destroy if $top; |
63 | |
|
|
64 | } else { |
63 | } else { |
65 | for my $ob ($pl->ob->map->at ($x, $y)) { |
64 | for my $ob ($pl->ob->map->at ($x, $y)) { |
66 | unless ($ob->type == cf::WALL || $ob->type == cf::FLOOR || $ob->flag (cf::FLAG_IS_FLOOR)) { |
65 | unless ($ob->type == cf::WALL || $ob->type == cf::FLOOR || $ob->flag (cf::FLAG_IS_FLOOR)) { |
67 | $ob->remove; |
66 | $ob->destroy; |
68 | $ob->free; |
|
|
69 | } |
67 | } |
70 | } |
68 | } |
71 | } |
69 | } |
72 | } |
70 | } |
73 | |
71 | |
… | |
… | |
79 | if ($arch->clone->subtype == cf::ST_MAT_FLOOR) { |
77 | if ($arch->clone->subtype == cf::ST_MAT_FLOOR) { |
80 | my $above_floor; |
78 | my $above_floor; |
81 | for my $ob ($pl->ob->map->at ($x, $y)) { |
79 | for my $ob ($pl->ob->map->at ($x, $y)) { |
82 | if ($ob->type == cf::WALL) { |
80 | if ($ob->type == cf::WALL) { |
83 | undef $above_floor if $above_floor == $ob; |
81 | undef $above_floor if $above_floor == $ob; |
84 | $ob->remove; |
82 | $ob->destroy; |
85 | $ob->free; |
|
|
86 | } elsif ($ob->type == cf::FLOOR || $ob->flag (cf::FLAG_IS_FLOOR)) { |
83 | } elsif ($ob->type == cf::FLOOR || $ob->flag (cf::FLAG_IS_FLOOR)) { |
87 | undef $above_floor if $above_floor == $ob; |
84 | undef $above_floor if $above_floor == $ob; |
88 | $above_floor = $ob->above; |
85 | $above_floor = $ob->above; |
89 | $ob->remove; |
86 | $ob->destroy; |
90 | $ob->free; |
|
|
91 | } |
87 | } |
92 | } |
88 | } |
93 | |
89 | |
94 | my $floor = cf::object::new $arch->clone->slaying; |
90 | my $floor = cf::object::new $arch->clone->slaying; |
95 | $floor->flag (cf::FLAG_IS_BUILDABLE, 1); |
91 | $floor->flag (cf::FLAG_IS_BUILDABLE, 1); |
… | |
… | |
122 | my $wall = cf::object::new $arch->clone->slaying; |
118 | my $wall = cf::object::new $arch->clone->slaying; |
123 | $wall->type (cf::WALL); |
119 | $wall->type (cf::WALL); |
124 | $wall->flag (cf::FLAG_IS_BUILDABLE, 1); |
120 | $wall->flag (cf::FLAG_IS_BUILDABLE, 1); |
125 | $wall->insert_ob_in_map_at ($pl->ob->map, undef, cf::INS_ABOVE_FLOOR_ONLY, $x, $y); |
121 | $wall->insert_ob_in_map_at ($pl->ob->map, undef, cf::INS_ABOVE_FLOOR_ONLY, $x, $y); |
126 | if ($prev_wall) { |
122 | if ($prev_wall) { |
127 | $prev_wall->remove; |
123 | $prev_wall->destroy; |
128 | $prev_wall->free; |
|
|
129 | $pl->ob->map->fix_walls ($pl->ob->x + $dx, $pl->ob->y + $dy); |
124 | $pl->ob->map->fix_walls ($pl->ob->x + $dx, $pl->ob->y + $dy); |
130 | } else { |
125 | } else { |
131 | $pl->ob->map->fix_walls_around ($pl->ob->x + $dx, $pl->ob->y + $dy); |
126 | $pl->ob->map->fix_walls_around ($pl->ob->x + $dx, $pl->ob->y + $dy); |
132 | } |
127 | } |
133 | |
128 | |