1 | /* |
1 | /* |
2 | * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Crossfire TRT is free software: you can redistribute it and/or modify |
8 | * Deliantra is free software: you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by |
9 | * it under the terms of the GNU General Public License as published by |
10 | * the Free Software Foundation, either version 3 of the License, or |
10 | * the Free Software Foundation, either version 3 of the License, or |
11 | * (at your option) any later version. |
11 | * (at your option) any later version. |
12 | * |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
13 | * This program is distributed in the hope that it will be useful, |
… | |
… | |
16 | * GNU General Public License for more details. |
16 | * GNU General Public License for more details. |
17 | * |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
20 | * |
20 | * |
21 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
21 | * The authors can be reached via e-mail to <support@deliantra.net> |
22 | */ |
22 | */ |
23 | |
23 | |
24 | /* Eneq(@csd.uu.se): Added weight-modifiers in environment of objects. |
24 | /* Eneq(@csd.uu.se): Added weight-modifiers in environment of objects. |
25 | sub/add_weight will transcend the environment updating the carrying |
25 | sub/add_weight will transcend the environment updating the carrying |
26 | variable. */ |
26 | variable. */ |
… | |
… | |
448 | // allow objects which own objects |
448 | // allow objects which own objects |
449 | if (owner) |
449 | if (owner) |
450 | while (owner->owner) |
450 | while (owner->owner) |
451 | owner = owner->owner; |
451 | owner = owner->owner; |
452 | |
452 | |
|
|
453 | if (flag [FLAG_FREED]) |
|
|
454 | { |
|
|
455 | LOG (llevError | logBacktrace, "tried to set owner of %s to %s\n", debug_desc (), owner->debug_desc ()); |
|
|
456 | return; |
|
|
457 | } |
|
|
458 | |
453 | this->owner = owner; |
459 | this->owner = owner; |
454 | } |
460 | } |
455 | |
461 | |
456 | int |
462 | int |
457 | object::slottype () const |
463 | object::slottype () const |
… | |
… | |
1952 | * activate recursively a flag on an object inventory |
1958 | * activate recursively a flag on an object inventory |
1953 | */ |
1959 | */ |
1954 | void |
1960 | void |
1955 | flag_inv (object *op, int flag) |
1961 | flag_inv (object *op, int flag) |
1956 | { |
1962 | { |
1957 | if (op->inv) |
|
|
1958 | for (object *tmp = op->inv; tmp != NULL; tmp = tmp->below) |
1963 | for (object *tmp = op->inv; tmp; tmp = tmp->below) |
1959 | { |
1964 | { |
1960 | SET_FLAG (tmp, flag); |
1965 | SET_FLAG (tmp, flag); |
1961 | flag_inv (tmp, flag); |
1966 | flag_inv (tmp, flag); |
1962 | } |
1967 | } |
1963 | } |
1968 | } |
1964 | |
1969 | |
1965 | /* |
1970 | /* |
1966 | * deactivate recursively a flag on an object inventory |
1971 | * deactivate recursively a flag on an object inventory |
1967 | */ |
1972 | */ |
1968 | void |
1973 | void |
1969 | unflag_inv (object *op, int flag) |
1974 | unflag_inv (object *op, int flag) |
1970 | { |
1975 | { |
1971 | if (op->inv) |
|
|
1972 | for (object *tmp = op->inv; tmp != NULL; tmp = tmp->below) |
1976 | for (object *tmp = op->inv; tmp; tmp = tmp->below) |
1973 | { |
1977 | { |
1974 | CLEAR_FLAG (tmp, flag); |
1978 | CLEAR_FLAG (tmp, flag); |
1975 | unflag_inv (tmp, flag); |
1979 | unflag_inv (tmp, flag); |
1976 | } |
1980 | } |
1977 | } |
1981 | } |
1978 | |
1982 | |
1979 | /* |
1983 | /* |
1980 | * find_free_spot(object, map, x, y, start, stop) will search for |
1984 | * find_free_spot(object, map, x, y, start, stop) will search for |
1981 | * a spot at the given map and coordinates which will be able to contain |
1985 | * a spot at the given map and coordinates which will be able to contain |
… | |
… | |
2014 | |
2018 | |
2015 | /* However, often |
2019 | /* However, often |
2016 | * ob doesn't have any move type (when used to place exits) |
2020 | * ob doesn't have any move type (when used to place exits) |
2017 | * so the AND operation in OB_TYPE_MOVE_BLOCK doesn't work. |
2021 | * so the AND operation in OB_TYPE_MOVE_BLOCK doesn't work. |
2018 | */ |
2022 | */ |
2019 | if (ob->move_type == 0 && ms.move_block != MOVE_ALL) |
2023 | if (ob && ob->move_type == 0 && ms.move_block != MOVE_ALL) |
2020 | { |
2024 | { |
2021 | altern [index++] = i; |
2025 | altern [index++] = i; |
2022 | continue; |
2026 | continue; |
2023 | } |
2027 | } |
2024 | |
2028 | |