home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / d / d-linux.zip / dm-dist / spells1.c < prev    next >
C/C++ Source or Header  |  1991-03-01  |  8KB  |  303 lines

  1. /* ************************************************************************
  2. *  file: spells1.c , handling of magic.                   Part of DIKUMUD *
  3. *  Usage : Procedures handling all offensive magic.                       *
  4. *  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
  5. ************************************************************************* */
  6.  
  7. #include <stdio.h>
  8.  
  9. #include "structs.h"
  10. #include "utils.h"
  11. #include "comm.h"
  12. #include "db.h"
  13. #include "interpreter.h"
  14. #include "spells.h"
  15. #include "handler.h"
  16.  
  17.  
  18. /* Global data */
  19.  
  20. extern struct room_data *world;
  21. extern struct char_data *character_list;
  22.  
  23. /* Extern functions */
  24.  
  25. void spell_burning_hands(byte level, struct char_data *ch, 
  26.   struct char_data *victim, struct obj_data *obj);
  27. void spell_call_lightning(byte level, struct char_data *ch,
  28.   struct char_data *victim, struct obj_data *obj);
  29. void spell_chill_touch(byte level, struct char_data *ch,
  30.   struct char_data *victim, struct obj_data *obj);
  31. void spell_shocking_grasp(byte level, struct char_data *ch,
  32.   struct char_data *victim, struct obj_data *obj);
  33. void spell_colour_spray(byte level, struct char_data *ch,
  34.   struct char_data *victim, struct obj_data *obj);
  35. void spell_earthquake(byte level, struct char_data *ch,
  36.   struct char_data *victim, struct obj_data *obj);
  37. void spell_energy_drain(byte level, struct char_data *ch,
  38.   struct char_data *victim, struct obj_data *obj);
  39. void spell_fireball(byte level, struct char_data *ch,
  40.   struct char_data *victim, struct obj_data *obj);
  41. void spell_harm(byte level, struct char_data *ch,
  42.   struct char_data *victim, struct obj_data *obj);
  43. void spell_lightning_bolt(byte level, struct char_data *ch,
  44.   struct char_data *victim, struct obj_data *obj);
  45. void spell_magic_missile(byte level, struct char_data *ch,
  46.   struct char_data *victim, struct obj_data *obj);
  47.  
  48.  
  49.  
  50. void cast_burning_hands( byte level, struct char_data *ch, char *arg, int type,
  51.   struct char_data *victim, struct obj_data *tar_obj )
  52. {
  53.     switch (type) {
  54.         case SPELL_TYPE_SPELL:
  55.             spell_burning_hands(level, ch, victim, 0); 
  56.             break;
  57.     default : 
  58.       log("Serious screw-up in burning hands!");
  59.       break;
  60.     }
  61. }
  62.  
  63.  
  64. void cast_call_lightning( byte level, struct char_data *ch, char *arg, int type,
  65.   struct char_data *victim, struct obj_data *tar_obj )
  66. {
  67.   extern struct weather_data weather_info;
  68.  
  69.     switch (type) {
  70.         case SPELL_TYPE_SPELL:
  71.             if (OUTSIDE(ch) && (weather_info.sky>=SKY_RAINING)) {
  72.                 spell_call_lightning(level, ch, victim, 0);
  73.             } else {
  74.                 send_to_char("You fail to call upon the lightning from the sky!\n\r", ch);
  75.             }
  76.             break;
  77.       case SPELL_TYPE_POTION:
  78.             if (OUTSIDE(ch) && (weather_info.sky>=SKY_RAINING)) {
  79.                 spell_call_lightning(level, ch, ch, 0);
  80.             }
  81.             break;
  82.       case SPELL_TYPE_SCROLL:
  83.             if (OUTSIDE(ch) && (weather_info.sky>=SKY_RAINING)) {
  84.                 if(victim) 
  85.                     spell_call_lightning(level, ch, victim, 0);
  86.                 else if(!tar_obj) spell_call_lightning(level, ch, ch, 0);
  87.             }
  88.             break;
  89.       case SPELL_TYPE_STAFF:
  90.             if (OUTSIDE(ch) && (weather_info.sky>=SKY_RAINING)) {
  91.                 for (victim = world[ch->in_room].people ;
  92.                  victim ; victim = victim->next_in_room )
  93.                     if(victim != ch)
  94.                         spell_call_lightning(level, ch, victim, 0);
  95.             }
  96.             break;
  97.       default : 
  98.          log("Serious screw-up in call lightning!");
  99.          break;
  100.     }
  101. }
  102.  
  103.  
  104. void cast_chill_touch( byte level, struct char_data *ch, char *arg, int type,
  105.   struct char_data *victim, struct obj_data *tar_obj )
  106. {
  107.   switch (type) {
  108.     case SPELL_TYPE_SPELL:
  109.             spell_chill_touch(level, ch, victim, 0);
  110.             break;
  111.       default : 
  112.          log("Serious screw-up in chill touch!");
  113.          break;
  114.     }
  115. }
  116.  
  117.  
  118. void cast_shocking_grasp( byte level, struct char_data *ch, char *arg, int type,
  119.   struct char_data *victim, struct obj_data *tar_obj )
  120. {
  121.   switch (type) {
  122.     case SPELL_TYPE_SPELL:
  123.             spell_shocking_grasp(level, ch, victim, 0);
  124.             break;
  125.       default : 
  126.          log("Serious screw-up in shocking grasp!");
  127.          break;
  128.     }
  129. }
  130.  
  131.  
  132. void cast_colour_spray( byte level, struct char_data *ch, char *arg, int type,
  133.   struct char_data *victim, struct obj_data *tar_obj )
  134. {
  135.   switch (type) {
  136.     case SPELL_TYPE_SPELL:
  137.             spell_colour_spray(level, ch, victim, 0);
  138.          break; 
  139.     case SPELL_TYPE_SCROLL:
  140.          if(victim) 
  141.             spell_colour_spray(level, ch, victim, 0);
  142.          else if (!tar_obj)
  143.                 spell_colour_spray(level, ch, ch, 0);
  144.          break;
  145.     case SPELL_TYPE_WAND:
  146.          if(victim) 
  147.             spell_colour_spray(level, ch, victim, 0);
  148.          break;
  149.     default : 
  150.          log("Serious screw-up in colour spray!");
  151.          break;
  152.     }
  153. }
  154.  
  155.  
  156. void cast_earthquake( byte level, struct char_data *ch, char *arg, int type,
  157.   struct char_data *victim, struct obj_data *tar_obj )
  158. {
  159.   switch (type) {
  160.     case SPELL_TYPE_SPELL:
  161.     case SPELL_TYPE_SCROLL:
  162.     case SPELL_TYPE_STAFF:
  163.             spell_earthquake(level, ch, 0, 0);
  164.           break;
  165.     default : 
  166.          log("Serious screw-up in earthquake!");
  167.          break;
  168.     }
  169. }
  170.  
  171.  
  172. void cast_energy_drain( byte level, struct char_data *ch, char *arg, int type,
  173.   struct char_data *victim, struct obj_data *tar_obj )
  174. {
  175.   switch (type) {
  176.     case SPELL_TYPE_SPELL:
  177.             spell_energy_drain(level, ch, victim, 0);
  178.             break;
  179.     case SPELL_TYPE_POTION:
  180.          spell_energy_drain(level, ch, ch, 0);
  181.          break;
  182.     case SPELL_TYPE_SCROLL:
  183.          if(victim)
  184.                 spell_energy_drain(level, ch, victim, 0);
  185.          else if(!tar_obj)
  186.             spell_energy_drain(level, ch, ch, 0);
  187.          break;
  188.     case SPELL_TYPE_WAND:
  189.          if(victim)
  190.                 spell_energy_drain(level, ch, victim, 0);
  191.          break;
  192.     case SPELL_TYPE_STAFF:
  193.          for (victim = world[ch->in_room].people ;
  194.               victim ; victim = victim->next_in_room )
  195.             if(victim != ch)
  196.                spell_energy_drain(level, ch, victim, 0);
  197.          break;
  198.     default : 
  199.          log("Serious screw-up in energy drain!");
  200.          break;
  201.     }
  202. }
  203.  
  204.  
  205. void cast_fireball( byte level, struct char_data *ch, char *arg, int type,
  206.   struct char_data *victim, struct obj_data *tar_obj )
  207. {
  208.   switch (type) {
  209.     case SPELL_TYPE_SPELL:
  210.           spell_fireball(level, ch, victim, 0);
  211.         break;
  212.     case SPELL_TYPE_SCROLL:
  213.          if(victim)
  214.                 spell_fireball(level, ch, victim, 0);
  215.          else if(!tar_obj)
  216.             spell_fireball(level, ch, ch, 0);
  217.          break;
  218.     case SPELL_TYPE_WAND:
  219.          if(victim)
  220.                 spell_fireball(level, ch, victim, 0);
  221.          break;
  222.     default : 
  223.          log("Serious screw-up in fireball!");
  224.          break;
  225.  
  226.     }
  227. }
  228.  
  229.  
  230. void cast_harm( byte level, struct char_data *ch, char *arg, int type,
  231.   struct char_data *victim, struct obj_data *tar_obj )
  232. {
  233.     switch (type) {
  234.     case SPELL_TYPE_SPELL:
  235.          spell_harm(level, ch, victim, 0);
  236.          break;
  237.     case SPELL_TYPE_POTION:
  238.          spell_harm(level, ch, ch, 0);
  239.          break;
  240.     case SPELL_TYPE_STAFF:
  241.          for (victim = world[ch->in_room].people ;
  242.               victim ; victim = victim->next_in_room )
  243.             if(victim != ch)
  244.                spell_harm(level, ch, victim, 0);
  245.          break;
  246.     default : 
  247.          log("Serious screw-up in harm!");
  248.          break;
  249.  
  250.   }
  251. }
  252.  
  253.  
  254. void cast_lightning_bolt( byte level, struct char_data *ch, char *arg, int type,
  255.   struct char_data *victim, struct obj_data *tar_obj )
  256. {
  257.   switch (type) {
  258.     case SPELL_TYPE_SPELL:
  259.          spell_lightning_bolt(level, ch, victim, 0);
  260.          break;
  261.     case SPELL_TYPE_SCROLL:
  262.          if(victim)
  263.                 spell_lightning_bolt(level, ch, victim, 0);
  264.          else if(!tar_obj)
  265.             spell_lightning_bolt(level, ch, ch, 0);
  266.          break;
  267.     case SPELL_TYPE_WAND:
  268.          if(victim)
  269.                 spell_lightning_bolt(level, ch, victim, 0);
  270.          break;
  271.     default : 
  272.          log("Serious screw-up in lightning bolt!");
  273.          break;
  274.  
  275.   }
  276. }
  277.  
  278.  
  279. void cast_magic_missile( byte level, struct char_data *ch, char *arg, int type,
  280.   struct char_data *victim, struct obj_data *tar_obj )
  281. {
  282.   switch (type) {
  283.     case SPELL_TYPE_SPELL:
  284.       spell_magic_missile(level, ch, victim, 0);
  285.       break;
  286.     case SPELL_TYPE_SCROLL:
  287.          if(victim)
  288.                 spell_magic_missile(level, ch, victim, 0);
  289.          else if(!tar_obj)
  290.             spell_magic_missile(level, ch, ch, 0);
  291.          break;
  292.     case SPELL_TYPE_WAND:
  293.          if(victim)
  294.                 spell_magic_missile(level, ch, victim, 0);
  295.          break;
  296.     default : 
  297.          log("Serious screw-up in magic missile!");
  298.          break;
  299.  
  300.   }
  301. }
  302.  
  303.