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-2003 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002-2003 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 |
… | |
… | |
1109 | int |
1109 | int |
1110 | cast_smite_spell (object *op, object *caster, int dir, object *spell) |
1110 | cast_smite_spell (object *op, object *caster, int dir, object *spell) |
1111 | { |
1111 | { |
1112 | object *effect, *target; |
1112 | object *effect, *target; |
1113 | object *god = find_god (determine_god (op)); |
1113 | object *god = find_god (determine_god (op)); |
1114 | int range; |
|
|
1115 | |
1114 | |
1116 | range = spell->range + SP_level_range_adjust (caster, spell); |
|
|
1117 | target = get_pointed_target (op, dir, 50, spell->stats.grace ? SPELL_GRACE : SPELL_MANA); |
1115 | target = get_pointed_target (op, dir, 50, spell->stats.grace ? SPELL_GRACE : SPELL_MANA); |
1118 | |
1116 | |
1119 | /* Bunch of conditions for casting this spell. Note that only |
1117 | /* Bunch of conditions for casting this spell. Note that only |
1120 | * require a god if this is a cleric spell (requires grace). |
1118 | * require a god if this is a cleric spell (requires grace). |
1121 | * This makes this spell much more general purpose - it can be used |
1119 | * This makes this spell much more general purpose - it can be used |
… | |
… | |
1264 | { |
1262 | { |
1265 | /* some things are unaffected... */ |
1263 | /* some things are unaffected... */ |
1266 | if (op->path_denied & PATH_LIGHT) |
1264 | if (op->path_denied & PATH_LIGHT) |
1267 | return 0; |
1265 | return 0; |
1268 | |
1266 | |
1269 | object *tmp = get_archetype (FORCE_NAME); |
1267 | object *tmp = archetype::get (FORCE_NAME); |
1270 | tmp->set_speed (0.01); |
1268 | tmp->set_speed (0.01); |
1271 | tmp->stats.food = time; |
1269 | tmp->stats.food = time; |
1272 | tmp->set_flag (FLAG_IS_USED_UP); |
1270 | tmp->set_flag (FLAG_IS_USED_UP); |
1273 | tmp->set_glow_radius (min (MAX_LIGHT_RADIUS, radius)); |
1271 | tmp->set_glow_radius (min (MAX_LIGHT_RADIUS, radius)); |
1274 | tmp = insert_ob_in_ob (tmp, op); |
1272 | tmp = insert_ob_in_ob (tmp, op); |
… | |
… | |
1362 | } |
1360 | } |
1363 | } |
1361 | } |
1364 | |
1362 | |
1365 | if (!force) |
1363 | if (!force) |
1366 | { |
1364 | { |
1367 | force = get_archetype (FORCE_NAME); |
1365 | force = archetype::get (FORCE_NAME); |
1368 | force->subtype = FORCE_CHANGE_ABILITY; |
1366 | force->subtype = FORCE_CHANGE_ABILITY; |
1369 | |
1367 | |
1370 | if (spell_ob->race) |
1368 | if (spell_ob->race) |
1371 | force->name = spell_ob->race; |
1369 | force->name = spell_ob->race; |
1372 | else |
1370 | else |
… | |
… | |
1461 | unordered_mapwalk (buf, op, -range, -range, range, range) |
1459 | unordered_mapwalk (buf, op, -range, -range, range, range) |
1462 | { |
1460 | { |
1463 | mapspace &ms = m->at (nx, ny); |
1461 | mapspace &ms = m->at (nx, ny); |
1464 | |
1462 | |
1465 | /* If there is nothing living on this space, no need to go further */ |
1463 | /* If there is nothing living on this space, no need to go further */ |
1466 | if (!ms.flags () & P_IS_ALIVE) |
1464 | if (!(ms.flags () & P_IS_ALIVE)) |
1467 | continue; |
1465 | continue; |
1468 | |
1466 | |
1469 | // players can only affect spaces that they can actually see |
1467 | // players can only affect spaces that they can actually see |
1470 | if (caster |
1468 | if (caster |
1471 | && caster->contr |
1469 | && caster->contr |
… | |
… | |
2008 | if (infect_object (walk, disease, 1)) |
2006 | if (infect_object (walk, disease, 1)) |
2009 | { |
2007 | { |
2010 | op->statusmsg (format ("You inflict %s on %s!", &disease->name, &walk->name)); |
2008 | op->statusmsg (format ("You inflict %s on %s!", &disease->name, &walk->name)); |
2011 | |
2009 | |
2012 | disease->destroy (); /* don't need this one anymore */ |
2010 | disease->destroy (); /* don't need this one anymore */ |
2013 | walk->map->insert (get_archetype (shstr_detect_magic), x, y, op); |
2011 | walk->map->insert (archetype::get (shstr_detect_magic), x, y, op); |
2014 | return 1; |
2012 | return 1; |
2015 | } |
2013 | } |
2016 | |
2014 | |
2017 | disease->destroy (); |
2015 | disease->destroy (); |
2018 | } |
2016 | } |