ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/spell_util.C
(Generate patch)

Comparing deliantra/server/server/spell_util.C (file contents):
Revision 1.105 by root, Tue Nov 10 04:38:46 2009 UTC vs.
Revision 1.109 by root, Sun Nov 29 17:41:08 2009 UTC

83 */ 83 */
84void 84void
85spell_effect (object *spob, int x, int y, maptile *map, object *originator) 85spell_effect (object *spob, int x, int y, maptile *map, object *originator)
86{ 86{
87 if (spob->other_arch) 87 if (spob->other_arch)
88 map->insert (arch_to_object (spob->other_arch), x, y, originator); 88 map->insert (spob->other_arch->instance (), x, y, originator);
89} 89}
90 90
91static int 91static int
92attuned_bonus (object *caster, object *spell, int level) 92attuned_bonus (object *caster, object *spell, int level)
93{ 93{
659 * insert multipart monsters properly 659 * insert multipart monsters properly
660 */ 660 */
661 //TODO: use expand_tail + ... 661 //TODO: use expand_tail + ...
662 while (at != NULL) 662 while (at != NULL)
663 { 663 {
664 tmp = arch_to_object (at); 664 tmp = at->instance ();
665 tmp->x = op->x + freearr_x[dir] + at->x; 665 tmp->x = op->x + freearr_x[dir] + at->x;
666 tmp->y = op->y + freearr_y[dir] + at->y; 666 tmp->y = op->y + freearr_y[dir] + at->y;
667 tmp->map = op->map; 667 tmp->map = op->map;
668 if (head) 668 if (head)
669 { 669 {
892 { 892 {
893 LOG (llevError, "cast_party_spell: empty other arch\n"); 893 LOG (llevError, "cast_party_spell: empty other arch\n");
894 return 0; 894 return 0;
895 } 895 }
896 896
897 object *spell = arch_to_object (spell_ob->other_arch); 897 object *spell = spell_ob->other_arch->instance ();
898 898
899 /* Always cast spell on caster */ 899 /* Always cast spell on caster */
900 int success = cast_spell (op, caster, dir, spell, spellparam); 900 int success = cast_spell (op, caster, dir, spell, spellparam);
901 901
902 if (!op->contr || !op->contr->party) 902 if (!op->contr || !op->contr->party)
1126 * the player any time. 1126 * the player any time.
1127 * Ignore casting time for firewalls 1127 * Ignore casting time for firewalls
1128 */ 1128 */
1129 if (caster == op && caster->type != FIREWALL) 1129 if (caster == op && caster->type != FIREWALL)
1130 { 1130 {
1131 op->speed_left -= spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * fabs (op->speed); 1131 op->speed_left -= spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * op->speed;
1132 /* Other portions of the code may also decrement the speed of the player, so 1132 /* Other portions of the code may also decrement the speed of the player, so
1133 * put a lower limit so that the player isn't stuck here too long 1133 * put a lower limit so that the player isn't stuck here too long
1134 */ 1134 */
1135 if ((spell_ob->casting_time > 0) && op->speed_left < -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * fabs (op->speed)) 1135 if ((spell_ob->casting_time > 0) && op->speed_left < -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * op->speed)
1136 op->speed_left = -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * fabs (op->speed); 1136 op->speed_left = -spell_ob->casting_time * PATH_TIME_MULT (op, spell_ob) * op->speed;
1137 } 1137 }
1138 else if (caster->type == WAND || caster->type == HORN || caster->type == ROD || caster->type == POTION || caster->type == SCROLL) 1138 else if (caster->type == WAND || caster->type == HORN || caster->type == ROD || caster->type == POTION || caster->type == SCROLL)
1139 op->speed_left -= 2 * fabs (op->speed); 1139 op->speed_left -= 2 * op->speed;
1140 1140
1141 if (op->type == PLAYER && op == caster) 1141 if (op->type == PLAYER && op == caster)
1142 { 1142 {
1143 op->stats.grace -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_GRACE); 1143 op->stats.grace -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_GRACE);
1144 op->stats.sp -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_MANA); 1144 op->stats.sp -= SP_level_spellpoint_cost (caster, spell_ob, SPELL_MANA);
1468 break; 1468 break;
1469 1469
1470 case SP_MOVING_BALL: 1470 case SP_MOVING_BALL:
1471 if (QUERY_FLAG (victim, FLAG_ALIVE)) 1471 if (QUERY_FLAG (victim, FLAG_ALIVE))
1472 hit_player (victim, spell->stats.dam, spell, spell->attacktype, 1); 1472 hit_player (victim, spell->stats.dam, spell, spell->attacktype, 1);
1473 else 1473 else if (victim->material != MATERIAL_NULL)
1474 save_throw_object (victim, spell->attacktype, spell); 1474 save_throw_object (victim, spell->attacktype, spell);
1475 1475
1476 break; 1476 break;
1477 } 1477 }
1478} 1478}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines