DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦04bbb7231⟧ TextFile

    Length: 5981 (0x175d)
    Types: TextFile
    Names: »magic.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Umoria/magic.c« 

TextFile

#include "constants.h"
#include "config.h"
#include "types.h"
#include "externs.h"


/* Throw a magic spell					-RAK-	*/
cast()
{
  int i, j, item_val, dir;
  int choice, chance, result;
  int dumy, y_dumy, x_dumy;
  int redraw;
  register struct flags *f_ptr;
  register struct misc *p_ptr;
  register treasure_type *i_ptr;
  register spell_type *m_ptr;

  reset_flag = TRUE;
  if (py.flags.blind > 0)
    msg_print("You can't see to read your spell book!");
  else if (no_light())
    msg_print("You have no light to read by.");
  else if (py.flags.confused > 0)
    msg_print("You are too confused...");
  else if (class[py.misc.pclass].mspell)
    if (inven_ctr > 0)
      {
 	if (find_range(90, -1, &i, &j))
	  {
	    redraw = FALSE;
	    if (get_item(&item_val, "Use which spell-book?",
			 &redraw, i, j))
	      {
		if ((result = cast_spell("Cast which spell?", item_val,
			       &choice, &chance, &redraw)) == TRUE)
		  {
		    m_ptr = &magic_spell[py.misc.pclass][choice];
		    reset_flag = FALSE;
		
		    if (randint(100) < chance)
		      msg_print("You failed to get the spell off!");
		    else 		
		      {
 			y_dumy = char_row;
 			x_dumy = char_col;
 			/* Spells...  */
			choice++;
			switch(choice) 		
			  {
			  case 1:
			    if (get_dir("Which direction?", &dir, 	
					&dumy, &y_dumy, &x_dumy)) 	
			      fire_bolt(0, dir, char_row, char_col,
					damroll("2d6")+1, "Magic Missile");
			    break;
			  case 2:
			    (void) detect_monsters();
			    break;
			  case 3:
			    teleport(10);
			    break;
			  case 4:
			    (void) light_area(char_row, char_col);
			    break;
			  case 5:
			    (void) hp_player(damroll("4d4"), "a magic spell.");
			    break;
			  case 6:
			    (void) detect_sdoor();
			    (void) detect_trap();
			    break;
			  case 7:
			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy)) 	
			      fire_ball(2, dir, char_row, char_col, 9,
					"Stinking Cloud");
			    break;
			  case 8:
			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))
			      (void) confuse_monster(dir, char_row, char_col);
			    break;
			  case 9:
			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))
			      fire_bolt(1, dir, char_row, char_col,
					damroll("3d8")+1, "Lightning Bolt");
			    break;
			  case 10:
			    (void) td_destroy();
			    break;
			  case 11:
			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))
			      (void) sleep_monster(dir, char_row, char_col);
			    break;
			  case 12:
			    (void) cure_poison();
			    break;
			  case 13:
			    teleport((int)(py.misc.lev*5));
			    break;
			  case 14:
			    for (i = 22; i < INVEN_MAX; i++)
			      {
 				i_ptr = &inventory[i];
 				i_ptr->flags = (i_ptr->flags & 0x7FFFFFFF);
			      }
			    break;
			  case 15:
			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))
 			      fire_bolt(4, dir, char_row, char_col,
 					damroll("4d8")+1, "Frost Bolt");
 			    break;
 			  case 16:
 			    if (get_dir("Which direction?", &dir,
 					&dumy, &y_dumy, &x_dumy))  	
			      (void) wall_to_mud(dir, char_row, char_col);
 			    break;
 			  case 17:
 			    (void) create_food();
 			    break;
 			  case 18:
 			    (void) recharge(20);
 			    break;
 			  case 19:
 			    (void) sleep_monsters1(char_row, char_col);
 			    break;
 			  case 20:
 			    if (get_dir("Which direction?", &dir,
 					&dumy, &y_dumy, &x_dumy))  	
			      (void) poly_monster(dir, char_row, char_col);
 			    break;
 			  case 21:
 			    (void) ident_spell();
 			    break;
 			  case 22:
  			    (void) sleep_monsters2();
 			    break;
 			  case 23:
 			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))  	
			      fire_bolt(5, dir, char_row, char_col,  	
					damroll("6d8")+1, "Fire Bolt");
 			    break;
 			  case 24:
 			    if (get_dir("Which direction?", &dir,  	
					&dumy, &y_dumy, &x_dumy))
			      (void)speed_monster(dir, char_row, char_col, -1);
 			    break;
			  case 25:
 			    if (get_dir("Which direction?", &dir,
					&dumy, &y_dumy, &x_dumy))  	
			      fire_ball(4, dir, char_row, char_col, 33,
					"Frost Ball");
 			    break;
 			  case 26:
 			    (void) recharge(60);
 			    break;
 			  case 27:
 			    if (get_dir("Which direction?", &dir,
 					&dumy, &y_dumy, &x_dumy))
			      (void) teleport_monster(dir, char_row, char_col);
 			    break;
 			  case 28:
 			    f_ptr = &py.flags;
 			    f_ptr->fast += randint(20) + py.misc.lev;
 			    break;
 			  case 29:
 			    if (get_dir("Which direction?", &dir,
 					&dumy, &y_dumy, &x_dumy))  	
			      fire_ball(5, dir, char_row, char_col, 49,
					"Fire Ball");
 			    break;
 			  case 30:
 			    (void) destroy_area(char_row, char_col);
 			    break;
 			  case 31:
 			    (void) genocide();
 			  default:
 			    break;
 			  }
 			/* End of spells...                              */
			if (!reset_flag)  			
			  {
 			    p_ptr = &py.misc;
 			    p_ptr->exp += m_ptr->sexp;
 			    prt_experience();
 			    m_ptr->sexp = 0;
 			  }
 		      }
 		    p_ptr = &py.misc;
 		    if (!reset_flag)
		      {
 			if (m_ptr->smana > p_ptr->cmana)
			  {
 			    msg_print("You faint from the effort!");
 			    py.flags.paralysis =
			      randint(5*(int)(m_ptr->smana-(int)p_ptr->cmana));
 			    p_ptr->cmana = 0.0;
 			    if (randint(3) == 1)
			      {
 				msg_print("You have damaged your health!");
 				py.stats.ccon = de_statp(py.stats.ccon);
 				prt_constitution();
 			      }
 			  }
 			else
			  p_ptr->cmana -= (double)m_ptr->smana;
 			prt_cmana();
 		      }
 		  }
		else if (result == -1)
		  msg_print("You don't know any spells in that book.");
 	      }
 	    else
	      if (redraw)  draw_cave();
 	  }
 	else
	  msg_print("But you are not carrying any spell-books!");
      }
    else
      msg_print("But you are not carrying any spell-books!");
  else
    msg_print("You can't cast spells!");
}