1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * the terms of the Affero GNU General Public License as published by the |
9 | * the terms of the Affero GNU General Public License as published by the |
… | |
… | |
919 | { |
919 | { |
920 | if (op->type == POTION) |
920 | if (op->type == POTION) |
921 | /* Handle healing and magic power potions */ |
921 | /* Handle healing and magic power potions */ |
922 | if (op->stats.sp && !op->randomitems) |
922 | if (op->stats.sp && !op->randomitems) |
923 | { |
923 | { |
924 | object *tmp = get_archetype (spell_mapping [op->stats.sp]); |
924 | object *tmp = archetype::get (spell_mapping [op->stats.sp]); |
925 | insert_ob_in_ob (tmp, op); |
925 | insert_ob_in_ob (tmp, op); |
926 | op->stats.sp = 0; |
926 | op->stats.sp = 0; |
927 | } |
927 | } |
928 | } |
928 | } |
929 | else if (!op->title) /* Only modify object if not special */ |
929 | else if (!op->title) /* Only modify object if not special */ |
… | |
… | |
947 | } |
947 | } |
948 | break; |
948 | break; |
949 | |
949 | |
950 | case POTION: |
950 | case POTION: |
951 | { |
951 | { |
952 | int too_many_tries = 0, is_special = 0; |
952 | int too_many_tries = 0; |
953 | |
953 | |
954 | /* Handle healing and magic power potions */ |
954 | /* Handle healing and magic power potions */ |
955 | if (op->stats.sp && !op->randomitems) |
955 | if (op->stats.sp && !op->randomitems) |
956 | { |
956 | { |
957 | object *tmp = get_archetype (spell_mapping[op->stats.sp]); |
957 | object *tmp = archetype::get (spell_mapping[op->stats.sp]); |
958 | insert_ob_in_ob (tmp, op); |
958 | insert_ob_in_ob (tmp, op); |
959 | op->stats.sp = 0; |
959 | op->stats.sp = 0; |
960 | } |
960 | } |
961 | |
961 | |
962 | while (!(is_special = special_potion (op)) && !op->inv) |
962 | while (!special_potion (op) && !op->inv) |
963 | { |
963 | { |
964 | generate_artifact (op, difficulty); |
964 | generate_artifact (op, difficulty); |
965 | if (too_many_tries++ > 10) |
965 | if (too_many_tries++ > 10) |
966 | break; |
966 | break; |
967 | } |
967 | } |
… | |
… | |
1489 | name = tmp->name + 1, neg = 1; |
1489 | name = tmp->name + 1, neg = 1; |
1490 | else |
1490 | else |
1491 | name = tmp->name, neg = 0; |
1491 | name = tmp->name, neg = 0; |
1492 | |
1492 | |
1493 | /* If we match name, then return the opposite of 'neg' */ |
1493 | /* If we match name, then return the opposite of 'neg' */ |
1494 | if (!strcmp (name, op->name) || (op->arch && !strcmp (name, op->arch->archname))) |
1494 | if (!strcmp (name, op->arch->archname)) |
1495 | return !neg; |
1495 | return !neg; |
1496 | |
1496 | |
1497 | /* Set success as true, since if the match was an inverse, it means |
1497 | /* Set success as true, since if the match was an inverse, it means |
1498 | * everything is allowed except what we match |
1498 | * everything is allowed except what we match |
1499 | */ |
1499 | */ |