void spell_bless(byte level, struct char_data *ch,
  struct char_data *victim, struct obj_data *obj)
{
  struct affected_type af;

  if(ch && (victim || obj)){

    if (obj) {
      if ( (5*GET_LEVEL(ch) > GET_OBJ_WEIGHT(obj)) &&
	(GET_POS(ch) != POSITION_FIGHTING) &&
	!IS_OBJ_STAT(obj, ITEM_EVIL)) {
	  SET_BIT(obj->obj_flags.extra_flags, ITEM_BLESS);
	  act("$p briefly glows.",FALSE,ch,obj,0,TO_CHAR);
      }
    } else {
      if(!victim)return;
      if (affected_by_spell(victim, SPELL_BLESS))
	affect_from_char(victim, SPELL_BLESS);

      send_to_char("You feel righteous.\n\r", victim);
      af.type      = SPELL_BLESS;
      af.duration  = 6+level;
      af.modifier  = 5;
      af.location  = APPLY_HITROLL;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      
      af.location = APPLY_SAVING_SPELL;
      af.modifier = -1;                 /* Make better */
      affect_to_char(victim, &af);
    }
  }
}

