Crossfire Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CF: spell level fixes



Hi,

The arch patch adds a level of 1 to all archetypes that are alive but
didn't have a level.  This fixes the cause of some AT_DEATH problems.
The checkarch.pl script can be used to check a archetypes file for
archetypes that are alive but don't have a level.

Attacking a earthwall or a door with AT_DEATH kills it immediately.  I
think there is a more general problem in that new attack types were
added without adjusting immunities of existing archetypes.

The patch to the server fixes several problems related to spell levels
and AT_DEATH.

server/input.c, show_matching_spells():
Don't try to calculate spellpoint costs for denied spells, because
these are undefined and are now causing lots of BUG messages.

Also improved formatting: spellpoint costs can be > 99, and don't fill
everything with zeros, use spaces instead.

server/skill_util.c:
Fixed some log messages that were lacking a newline at the end.

SK_level():
Rewrite of this function to simplify its structure.
Print error message if we find an invalid level.

server/spell_effect.c, finger_of_death():
Use path_level_mod() correctly, i.e. don't add the modifier to a
different level than path_level_mod() was assuming.

server/spell_util.c:

path_level_mod():
Fixed _many_ bugs.  Interface changed to allow arbritary base level
(needed for finger_of_death()).

casting_level():
New function that returns the level at which a spell is cast after
considering attuned and repelled paths.

fire_arch_from_position():
Set level of fired arch.  This fixes cause wounds of Devourers (that
attacks with AT_DEATH).

cast_cone():
Use casting_level() instead of SK_level().  Attuned: death with face of
death spell is now working correctly with a +5 level bonus.

move_cone():
Don't recalculate level every time.  Just copy the level.

SP_level_dam_adjust(), SP_level_strength_adjust(),
SP_level_spellpoint_cost():
Take advantage of new casting_level() function.

cast_smite_spell():
Use casting_level() instead of SK_level.

-- 
Jan
diff -rc orig/crossfire-0.95.5-patch4/include/sproto.h crossfire-0.95.5/include/sproto.h
*** orig/crossfire-0.95.5-patch4/include/sproto.h	Fri Apr  7 14:32:54 2000
--- crossfire-0.95.5/include/sproto.h	Thu Apr 13 00:22:23 2000
***************
*** 556,562 ****
  extern void dump_spells ( void );
  extern void spell_effect ( int spell_type, int x, int y, mapstruct *map );
  extern spell *find_spell ( int spelltype );
! extern int path_level_mod ( object *op, int sp );
  extern int check_spell_known ( object *op, int sp );
  extern int cast_spell ( object *op, object *caster, int dir, int type, int ability, SpellTypeFrom item, char *stringarg );
  extern int cast_create_obj ( object *op, object *caster, object *new_op, int dir );
--- 556,563 ----
  extern void dump_spells ( void );
  extern void spell_effect ( int spell_type, int x, int y, mapstruct *map );
  extern spell *find_spell ( int spelltype );
! extern int path_level_mod ( object *op, int base_level, int sp );
! extern int casting_level ( object *op, int sp );
  extern int check_spell_known ( object *op, int sp );
  extern int cast_spell ( object *op, object *caster, int dir, int type, int ability, SpellTypeFrom item, char *stringarg );
  extern int cast_create_obj ( object *op, object *caster, object *new_op, int dir );
diff -rc orig/crossfire-0.95.5-patch4/server/input.c crossfire-0.95.5/server/input.c
*** orig/crossfire-0.95.5-patch4/server/input.c	Wed Mar 22 08:56:48 2000
--- crossfire-0.95.5/server/input.c	Thu Apr 13 01:01:57 2000
***************
*** 684,690 ****
  static void show_matching_spells(object *op, char *params, int cleric)
  {
      int i,spnum,first_match=0;
!     char lev[80];
  
      for (i=0; i<(QUERY_FLAG(op, FLAG_WIZ)?NROFREALSPELLS:op->contr->nrofknownspells); i++) {	
  	if (QUERY_FLAG(op,FLAG_WIZ)) spnum=i;
--- 684,690 ----
  static void show_matching_spells(object *op, char *params, int cleric)
  {
      int i,spnum,first_match=0;
!     char lev[80], cost[80];
  
      for (i=0; i<(QUERY_FLAG(op, FLAG_WIZ)?NROFREALSPELLS:op->contr->nrofknownspells); i++) {	
  	if (QUERY_FLAG(op,FLAG_WIZ)) spnum=i;
***************
*** 699,715 ****
  		new_draw_info(NDI_UNIQUE, 0, op, "Mage spells");
  	    else
  		new_draw_info(NDI_UNIQUE, 0, op, "Priest spells");
! 	    new_draw_info(NDI_UNIQUE, 0,op,"[sp] [lev] spell name");
  	}
! 	if (spells[spnum].path & op->path_denied)
  	    strcpy(lev,"den");
! 	else
! 	    sprintf(lev," %02d",spells[spnum].level);
  
! 	new_draw_info_format(NDI_UNIQUE,0,op,"[%02d] [%s] %s",
! 		SP_level_spellpoint_cost(op,op,spnum),
! 		lev,
! 		spells[spnum].name);
      }
  }
  
--- 699,716 ----
  		new_draw_info(NDI_UNIQUE, 0, op, "Mage spells");
  	    else
  		new_draw_info(NDI_UNIQUE, 0, op, "Priest spells");
! 	    new_draw_info(NDI_UNIQUE, 0,op,"[ sp] [lev] spell name");
  	}
! 	if (spells[spnum].path & op->path_denied) {
  	    strcpy(lev,"den");
!             strcpy(cost,"den");
! 	} else {
! 	    sprintf(lev,"%3d",spells[spnum].level);
!             sprintf(cost,"%3d",SP_level_spellpoint_cost(op,op,spnum));
!         }
  
! 	new_draw_info_format(NDI_UNIQUE,0,op,"[%s] [%s] %s",
! 		cost, lev, spells[spnum].name);
      }
  }
  
diff -rc orig/crossfire-0.95.5-patch4/server/skill_util.c crossfire-0.95.5/server/skill_util.c
*** orig/crossfire-0.95.5-patch4/server/skill_util.c	Wed Mar 22 08:56:48 2000
--- crossfire-0.95.5/server/skill_util.c	Thu Apr 13 00:46:41 2000
***************
*** 628,635 ****
          shoottype = range_horn;
          break;
        default:
!         LOG(llevDebug,"Warning: bad call of check_skill_to_apply()");
!         LOG(llevDebug,"No skill exists for item: %s",query_name(item));
          return 0;
      }
   
--- 628,635 ----
          shoottype = range_horn;
          break;
        default:
!         LOG(llevDebug,"Warning: bad call of check_skill_to_apply()\n");
!         LOG(llevDebug,"No skill exists for item: %s\n",query_name(item));
          return 0;
      }
   
***************
*** 740,746 ****
    object *op=skillop?skillop->env:NULL;
  
    if(!op||op->type!=PLAYER) { 
! 	LOG(llevError,"Error: unlink_skill() called for non-player!");
  	return;
    }
  
--- 740,746 ----
    object *op=skillop?skillop->env:NULL;
  
    if(!op||op->type!=PLAYER) { 
! 	LOG(llevError,"Error: unlink_skill() called for non-player!\n");
  	return;
    }
  
***************
*** 1457,1471 ****
   * level.
   */
  
! int SK_level(object *op) {  
!   int level = op->head?op->head->level:op->level;
  
  #ifdef ALLOW_SKILLS
!   if(op->type==PLAYER && op->chosen_skill && op->chosen_skill->level!=0) {
! 	level = op->chosen_skill->level;
    }
  #endif
!   if(level<=0) level = 1;	 /* safety */
  
    return level;
  }
--- 1457,1483 ----
   * level.
   */
  
! int SK_level(object *op)
! {
!   object *head = op->head ? op->head : op;
!   int level;
  
  #ifdef ALLOW_SKILLS
!   if(head->type==PLAYER && head->chosen_skill && head->chosen_skill->level!=0) {
! 	level = head->chosen_skill->level;
!   } else {
! 	level = head->level;
    }
+ #else
+   level = head->level;
  #endif
! 
!   if(level<=0)
!   {
!     LOG (llevError, "BUG: SK_level(arch %s, name %s): level <= 0\n",
!          op->arch->name, op->name);
!     level = 1;	 /* safety */
!   }
  
    return level;
  }
diff -rc orig/crossfire-0.95.5-patch4/server/spell_effect.c crossfire-0.95.5/server/spell_effect.c
*** orig/crossfire-0.95.5-patch4/server/spell_effect.c	Thu Apr 13 01:06:17 2000
--- crossfire-0.95.5/server/spell_effect.c	Thu Apr 13 00:30:41 2000
***************
*** 2934,2942 ****
   
    /* we create a hitter object -- the spell */
    hitter=get_archetype("face_of_death");
!   hitter->level=SP_PARAMETERS[SP_FINGER_DEATH].bdam + 
!         3*SP_level_dam_adjust(op,caster,SP_FINGER_DEATH) + 
! 	path_level_mod(caster, SP_FINGER_DEATH);
    set_owner(hitter,op);
    hitter->x=target->x;
    hitter->y=target->y;
--- 2934,2941 ----
   
    /* we create a hitter object -- the spell */
    hitter=get_archetype("face_of_death");
!   hitter->level = path_level_mod (caster, SP_PARAMETERS[SP_FINGER_DEATH].bdam + 
!         3*SP_level_dam_adjust(op,caster,SP_FINGER_DEATH), SP_FINGER_DEATH);
    set_owner(hitter,op);
    hitter->x=target->x;
    hitter->y=target->y;
diff -rc orig/crossfire-0.95.5-patch4/server/spell_util.c crossfire-0.95.5/server/spell_util.c
*** orig/crossfire-0.95.5-patch4/server/spell_util.c	Thu Apr 13 01:06:17 2000
--- crossfire-0.95.5/server/spell_util.c	Thu Apr 13 01:05:40 2000
***************
*** 105,124 ****
    return &spells[spelltype];
  }
  
! int path_level_mod(object *op, int sp) {
   spell *s = find_spell(sp);
!  int val;
  
   if (op->path_denied & s->path)
!   return -100;				/* shouldn't get here, but ... */
!  val = (op->path_repelled & s->path) ? -5 : 0
!    +   (op->path_attuned & s->path) ? 5 : 0;
!  if (op->level - val < 1)
!   return op->level-1;
!  else
!   return val;
  }
  
  int check_spell_known(object *op,int sp) {
    int i;
    for(i=0; i < (int)op->contr->nrofknownspells; i++)
--- 105,137 ----
    return &spells[spelltype];
  }
  
! /*
!  * base_level: level before considering attuned/repelled paths
!  * Returns modified level.
!  */
! int path_level_mod (object *op, int base_level, int sp)
! {
   spell *s = find_spell(sp);
!  int new_level;
  
   if (op->path_denied & s->path)
!  {
!    LOG (llevError, "BUG: path_level_mod (arch %s, name %s): casting denied "
!         "spell\n", op->arch->name, op->name);
!    return 1;
!  }
!  new_level = base_level
!              + ((op->path_repelled & s->path) ? -5 : 0)
!              + ((op->path_attuned & s->path) ? 5 : 0);
!  return (new_level < 1) ? 1 : new_level;
! }
! 
! int casting_level (object *op, int sp)
! {
!   return path_level_mod (op, SK_level (op), sp);
  }
  
+ 
  int check_spell_known(object *op,int sp) {
    int i;
    for(i=0; i < (int)op->contr->nrofknownspells; i++)
***************
*** 992,997 ****
--- 1005,1011 ----
    tmp->x=x, tmp->y=y;
    tmp->direction=dir;
    set_owner(tmp,op);
+   tmp->level = casting_level (op, type);
  #ifdef MULTIPLE_GODS /* needed for AT_HOLYWORD,AT_GODPOWER stuff */
    if(tmp->attacktype&AT_HOLYWORD||tmp->attacktype&AT_GODPOWER) {
  	      if(!tailor_god_spell(tmp,op)) return 0; 
***************
*** 1042,1050 ****
      success=1;
      tmp=arch_to_object(spell_arch);
      set_owner(tmp,op);
! /*  Make face of death work? */
!     /* tmp->level=op->level;  */
!     tmp->level=SK_level(op); /* need to use the cleric level, not overall value -b.t. */ 
      tmp->x=x,tmp->y=y;
  #ifdef MULTIPLE_GODS /* holy word stuff */                
      if((tmp->attacktype&AT_HOLYWORD)||(tmp->attacktype&AT_GODPOWER)) {
--- 1056,1062 ----
      success=1;
      tmp=arch_to_object(spell_arch);
      set_owner(tmp,op);
!     tmp->level = casting_level (op, spell_type);
      tmp->x=x,tmp->y=y;
  #ifdef MULTIPLE_GODS /* holy word stuff */                
      if((tmp->attacktype&AT_HOLYWORD)||(tmp->attacktype&AT_GODPOWER)) {
***************
*** 1127,1133 ****
  	    tmp->x=x, tmp->y=y;
  
  	    /* added to make face of death work,and counterspell */
! 	    tmp->level=SK_level(op);  
  
  #ifdef MULTIPLE_GODS /* holy word stuff */
  	    if(tmp->attacktype&AT_HOLYWORD||tmp->attacktype&AT_GODPOWER) 
--- 1139,1145 ----
  	    tmp->x=x, tmp->y=y;
  
  	    /* added to make face of death work,and counterspell */
! 	    tmp->level = op->level;
  
  #ifdef MULTIPLE_GODS /* holy word stuff */
  	    if(tmp->attacktype&AT_HOLYWORD||tmp->attacktype&AT_GODPOWER) 
***************
*** 1684,1689 ****
--- 1696,1705 ----
  most of the following adjustments are for damage only, some are
  for turning undead and whatnot.  
  
+   The following functions assume that casting the spell is not
+ denied.  Denied spells have an undefined path level modifier.
+ There wouldn't be a meaningful result anyway.
+ 
    The arrays are defined in spells.h*/
  
  /* July 1995 - I changed the next 3 functions slightly by replacing
***************
*** 1694,1707 ****
   * path modifiers. 	--DAMN						*/
  
  int SP_level_dam_adjust(object *op, object *caster, int spell_type)
! {  int adj;
! #ifdef ALLOW_SKILLS
!    int level=SK_level(caster)+path_level_mod(caster, spell_type);
! #else
!    int level=caster->level+path_level_mod(caster, spell_type);
! #endif
! 
!     adj=(level-spells[spell_type].level);
      if(adj < 0) adj=0;
      if(SP_PARAMETERS[spell_type].ldam)
  	adj/=SP_PARAMETERS[spell_type].ldam;
--- 1710,1718 ----
   * path modifiers. 	--DAMN						*/
  
  int SP_level_dam_adjust(object *op, object *caster, int spell_type)
! {
!     int level = casting_level (caster, spell_type);
!     int adj = (level-spells[spell_type].level);
      if(adj < 0) adj=0;
      if(SP_PARAMETERS[spell_type].ldam)
  	adj/=SP_PARAMETERS[spell_type].ldam;
***************
*** 1713,1725 ****
  /* now based on caster's level instead of on op's level and caster's	*
   * path modifiers. 	--DAMN						*/
  int SP_level_strength_adjust(object *op, object *caster, int spell_type)
! {  int adj;
! #ifdef ALLOW_SKILLS
!    int level=SK_level(caster)+path_level_mod(caster, spell_type);
! #else
!    int level=caster->level+path_level_mod(caster, spell_type);
! #endif
!     adj= (level-spells[spell_type].level);
      if(adj < 0) adj=0;
      if(SP_PARAMETERS[spell_type].ldur)
  	adj/=SP_PARAMETERS[spell_type].ldur;
--- 1724,1732 ----
  /* now based on caster's level instead of on op's level and caster's	*
   * path modifiers. 	--DAMN						*/
  int SP_level_strength_adjust(object *op, object *caster, int spell_type)
! {
!     int level = casting_level (caster, spell_type);
!     int adj = (level-spells[spell_type].level);
      if(adj < 0) adj=0;
      if(SP_PARAMETERS[spell_type].ldur)
  	adj/=SP_PARAMETERS[spell_type].ldur;
***************
*** 1738,1748 ****
  int SP_level_spellpoint_cost(object *op, object *caster, int spell_type)
  {
    spell *s=find_spell(spell_type);
! # ifdef ALLOW_SKILLS 
!   int level=SK_level(op)+path_level_mod(caster, spell_type);
! #else
!   int level=op->level+path_level_mod(caster, spell_type);
! #endif /* ALLOW_SKILLS */
  #ifdef SPELLPOINT_LEVEL_DEPEND
    int sp;
    if(SP_PARAMETERS[spell_type].spl)
--- 1745,1751 ----
  int SP_level_spellpoint_cost(object *op, object *caster, int spell_type)
  {
    spell *s=find_spell(spell_type);
!   int level = casting_level (caster, spell_type);
  #ifdef SPELLPOINT_LEVEL_DEPEND
    int sp;
    if(SP_PARAMETERS[spell_type].spl)
***************
*** 2153,2159 ****
        return 0;
  
    /* tailor the effect by priest level and worshipped God */
!    effect->level=SK_level(op);
  #ifdef MULTIPLE_GODS
     if(effect->attacktype&AT_HOLYWORD||effect->attacktype&AT_GODPOWER) {
          if(tailor_god_spell(effect,op))
--- 2156,2162 ----
        return 0;
  
    /* tailor the effect by priest level and worshipped God */
!    effect->level = casting_level (op, type);
  #ifdef MULTIPLE_GODS
     if(effect->attacktype&AT_HOLYWORD||effect->attacktype&AT_GODPOWER) {
          if(tailor_god_spell(effect,op))
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/Naming.doc arch/Naming.doc
*** ../../orig/crossfire-0.95.5-arch-patch1/Naming.doc	Mon Mar 29 06:46:43 1999
--- arch/Naming.doc	Wed Apr 12 14:20:17 2000
***************
*** 29,35 ****
  		4 5 6
  	2x3
  		1 2
! 		2 3
  		5 6
  codings:
  	direction:
--- 29,35 ----
  		4 5 6
  	2x3
  		1 2
! 		3 4
  		5 6
  codings:
  	direction:
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/door/Door/door.arc arch/door/Door/door.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/door/Door/door.arc	Mon Mar 29 06:51:34 1999
--- arch/door/Door/door.arc	Wed Apr 12 23:14:48 2000
***************
*** 12,17 ****
--- 12,18 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_1_1
***************
*** 28,33 ****
--- 29,35 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_1_3
***************
*** 44,49 ****
--- 46,52 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_2_1
***************
*** 60,65 ****
--- 63,69 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_1_2
***************
*** 76,81 ****
--- 80,86 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_1_1
***************
*** 92,97 ****
--- 97,103 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_2_2
***************
*** 108,113 ****
--- 114,120 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_3_2
***************
*** 124,129 ****
--- 131,137 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_1_4
***************
*** 140,145 ****
--- 148,154 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_2_4
***************
*** 156,161 ****
--- 165,171 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_1_2
***************
*** 172,177 ****
--- 182,188 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_3_1
***************
*** 188,193 ****
--- 199,205 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_2_2_3
***************
*** 204,209 ****
--- 216,222 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_3_4
***************
*** 220,225 ****
--- 233,239 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_3_3
***************
*** 236,241 ****
--- 250,256 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
  Object door_4
***************
*** 252,256 ****
--- 267,272 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/door/odoor_1.arc arch/door/odoor_1.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/door/odoor_1.arc	Mon Mar 29 06:51:31 1999
--- arch/door/odoor_1.arc	Wed Apr 12 23:15:24 2000
***************
*** 12,16 ****
--- 12,17 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/door/odoor_2.arc arch/door/odoor_2.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/door/odoor_2.arc	Mon Mar 29 06:51:31 1999
--- arch/door/odoor_2.arc	Wed Apr 12 23:15:37 2000
***************
*** 12,16 ****
--- 12,17 ----
  material 16
  no_pick 1
  alive 1
+ level 1
  editable 16
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/door/wooddoor_1.arc arch/door/wooddoor_1.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/door/wooddoor_1.arc	Mon Mar 29 06:51:31 1999
--- arch/door/wooddoor_1.arc	Wed Apr 12 23:15:57 2000
***************
*** 11,16 ****
--- 11,17 ----
  material 2
  no_pick 1
  alive 1
+ level 1
  pass_thru 1
  editable 16
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/door/wooddoor_2.arc arch/door/wooddoor_2.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/door/wooddoor_2.arc	Mon Mar 29 06:51:31 1999
--- arch/door/wooddoor_2.arc	Wed Apr 12 23:16:05 2000
***************
*** 11,16 ****
--- 11,17 ----
  material 2
  no_pick 1
  alive 1
+ level 1
  pass_thru 1
  editable 16
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/acid/acid_pool.arc arch/monster/acid/acid_pool.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/acid/acid_pool.arc	Mon Mar 29 06:55:59 1999
--- arch/monster/acid/acid_pool.arc	Wed Apr 12 23:17:02 2000
***************
*** 2,7 ****
--- 2,8 ----
  name acid pool
  generator 1
  alive 1
+ level 1
  no_pick 1
  face acid_pool.111
  anim
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/bat_gen.arc arch/monster/animal/bat_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/bat_gen.arc	Mon Mar 29 06:59:27 1999
--- arch/monster/animal/bat_gen.arc	Wed Apr 12 23:17:27 2000
***************
*** 5,10 ****
--- 5,11 ----
  generator 1
  no_pick 1
  alive 1
+ level 1
  exp 20
  speed 0.015
  hp 100
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/bird_gen.arc arch/monster/animal/bird_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/bird_gen.arc	Mon Mar 29 06:59:27 1999
--- arch/monster/animal/bird_gen.arc	Wed Apr 12 23:17:36 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 5
  speed 0.01
  alive 1
+ level 1
  maxsp 1
  weight 1000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/farmyard/chicken.arc arch/monster/animal/farmyard/chicken.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/farmyard/chicken.arc	Mon Mar 29 06:59:43 1999
--- arch/monster/animal/farmyard/chicken.arc	Wed Apr 12 23:18:52 2000
***************
*** 11,16 ****
--- 11,17 ----
  monster 1
  Wis 1
  alive 1
+ level 1
  ac 9
  hp 3
  maxhp 3
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/mouse_gen.arc arch/monster/animal/mouse_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/mouse_gen.arc	Mon Mar 29 06:59:29 1999
--- arch/monster/animal/mouse_gen.arc	Wed Apr 12 23:17:41 2000
***************
*** 5,10 ****
--- 5,11 ----
  face mouse_gen.111
  color_fg brown
  alive 1
+ level 1
  speed 0.006
  hp 30
  maxhp 30
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/panthergen.arc arch/monster/animal/panthergen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/panthergen.arc	Mon Mar 29 06:59:21 1999
--- arch/monster/animal/panthergen.arc	Wed Apr 12 23:17:46 2000
***************
*** 4,9 ****
--- 4,10 ----
  face panthergen.111
  generator 1
  alive 1
+ level 1
  hp 100
  speed 0.004
  exp 50
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/scorpi_gen.arc arch/monster/animal/scorpi_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/animal/scorpi_gen.arc	Mon Mar 29 06:59:29 1999
--- arch/monster/animal/scorpi_gen.arc	Wed Apr 12 23:17:56 2000
***************
*** 5,10 ****
--- 5,11 ----
  face scorpi_gen.111
  color_fg red
  alive 1
+ level 1
  speed 0.002
  hp 50
  maxhp 50
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/beholder/behold_gen.arc arch/monster/beholder/behold_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/beholder/behold_gen.arc	Mon Mar 29 06:56:09 1999
--- arch/monster/beholder/behold_gen.arc	Wed Apr 12 23:19:13 2000
***************
*** 11,16 ****
--- 11,17 ----
  speed -0.001
  immune 2
  alive 1
+ level 1
  maxsp 1
  weight 90000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/demon/devil_gen.arc arch/monster/demon/devil_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/demon/devil_gen.arc	Mon Mar 29 06:56:12 1999
--- arch/monster/demon/devil_gen.arc	Wed Apr 12 23:21:03 2000
***************
*** 12,17 ****
--- 12,18 ----
  immune 4
  vulnerable 48
  alive 1
+ level 1
  maxsp 1
  weight 300000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/gnoll_gen.arc arch/monster/goblin/gnoll_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/gnoll_gen.arc	Mon Mar 29 06:57:19 1999
--- arch/monster/goblin/gnoll_gen.arc	Wed Apr 12 23:21:21 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 10
  speed 0.004
  alive 1
+ level 1
  maxsp 1
  weight 1000000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/goblin_gen.arc arch/monster/goblin/goblin_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/goblin_gen.arc	Mon Mar 29 06:57:19 1999
--- arch/monster/goblin/goblin_gen.arc	Wed Apr 12 23:21:27 2000
***************
*** 9,14 ****
--- 9,15 ----
  ac 8
  exp 100
  alive 1
+ level 1
  no_pick 1
  speed 0.02
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/kobold_gen.arc arch/monster/goblin/kobold_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/kobold_gen.arc	Mon Mar 29 06:57:19 1999
--- arch/monster/goblin/kobold_gen.arc	Wed Apr 12 23:21:32 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 15
  speed 0.02
  alive 1
+ level 1
  maxsp 1
  weight 1000000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/ogre_gen.arc arch/monster/goblin/ogre_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/ogre_gen.arc	Mon Mar 29 06:57:19 1999
--- arch/monster/goblin/ogre_gen.arc	Wed Apr 12 23:21:37 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 7
  speed 0.002
  alive 1
+ level 1
  maxsp 1
  weight 1000000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/orc_gen.arc arch/monster/goblin/orc_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/goblin/orc_gen.arc	Mon Mar 29 06:57:19 1999
--- arch/monster/goblin/orc_gen.arc	Wed Apr 12 23:21:46 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 9
  speed 0.006
  alive 1
+ level 1
  maxsp 1
  weight 1000000
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/Town/crone.arc arch/monster/human/Town/crone.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/Town/crone.arc	Mon Mar 29 06:54:33 1999
--- arch/monster/human/Town/crone.arc	Wed Apr 12 23:25:34 2000
***************
*** 7,12 ****
--- 7,13 ----
  monster 1
  unaggressive 1
  alive 1
+ level 1
  ac 9
  wc 18
  dam 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/Town/postman/postman_gen.arc arch/monster/human/Town/postman/postman_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/Town/postman/postman_gen.arc	Mon Mar 29 06:54:35 1999
--- arch/monster/human/Town/postman/postman_gen.arc	Wed Apr 12 23:24:21 2000
***************
*** 10,15 ****
--- 10,16 ----
  ac 13
  speed -0.08
  alive 1
+ level 1
  sp 1
  maxsp 1
  weight 90000
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/arabic/big_slave.arc arch/monster/human/arabic/big_slave.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/arabic/big_slave.arc	Mon Mar 29 06:55:03 1999
--- arch/monster/human/arabic/big_slave.arc	Wed Apr 12 23:26:19 2000
***************
*** 3,8 ****
--- 3,9 ----
  name big slave
  face big_slave.111
  alive 1
+ level 1
  monster 1
  hp 30
  maxhp 30
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/arabic/slave.arc arch/monster/human/arabic/slave.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/arabic/slave.arc	Mon Mar 29 06:55:03 1999
--- arch/monster/human/arabic/slave.arc	Wed Apr 12 23:26:33 2000
***************
*** 4,9 ****
--- 4,10 ----
  face slave.111
  speed 0.10
  alive 1
+ level 1
  monster 1
  no_pick 1
  hp 10
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/madman_gen.arc arch/monster/human/madman_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/madman_gen.arc	Mon Mar 29 06:54:26 1999
--- arch/monster/human/madman_gen.arc	Wed Apr 12 23:22:17 2000
***************
*** 8,13 ****
--- 8,14 ----
  ac 2
  exp 100
  alive 1
+ level 1
  no_pick 1
  speed 0.01
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/human/pyro_gen.arc arch/monster/human/pyro_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/human/pyro_gen.arc	Mon Mar 29 06:54:24 1999
--- arch/monster/human/pyro_gen.arc	Wed Apr 12 23:23:23 2000
***************
*** 10,15 ****
--- 10,16 ----
  speed 0.001
  weight -1
  alive 1
+ level 1
  sp 130
  maxsp 1
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/ant_gen.arc arch/monster/insect/ant_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/ant_gen.arc	Mon Mar 29 06:59:49 1999
--- arch/monster/insect/ant_gen.arc	Wed Apr 12 23:26:55 2000
***************
*** 8,13 ****
--- 8,14 ----
  ac 20
  exp 35
  alive 1
+ level 1
  no_pick 1
  speed 0.03
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/bee_gen.arc arch/monster/insect/bee_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/bee_gen.arc	Mon Mar 29 06:59:48 1999
--- arch/monster/insect/bee_gen.arc	Wed Apr 12 23:27:02 2000
***************
*** 8,13 ****
--- 8,14 ----
  ac 4
  exp 20
  alive 1
+ level 1
  no_pick 1
  speed 0.02
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/beehive.arc arch/monster/insect/beehive.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/beehive.arc	Mon Mar 29 06:59:48 1999
--- arch/monster/insect/beehive.arc	Wed Apr 12 23:27:30 2000
***************
*** 13,18 ****
--- 13,19 ----
  mina
  color_fg light_blue
  alive 1
+ level 1
  exp 50
  ac 12
  hp 30
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/spider_gen.arc arch/monster/insect/spider_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/spider_gen.arc	Mon Mar 29 06:59:47 1999
--- arch/monster/insect/spider_gen.arc	Wed Apr 12 23:27:11 2000
***************
*** 13,18 ****
--- 13,19 ----
  speed 0.01
  weight -1
  alive 1
+ level 1
  sp 130
  maxsp 1
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/xan_gen.arc arch/monster/insect/xan_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/insect/xan_gen.arc	Mon Mar 29 06:59:49 1999
--- arch/monster/insect/xan_gen.arc	Wed Apr 12 23:27:18 2000
***************
*** 4,9 ****
--- 4,10 ----
  name Mosquito eggs
  generator 1
  alive 1
+ level 1
  no_pick 1
  face xan_gen.111
  hp 30
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/firechest.arc arch/monster/misc/firechest.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/firechest.arc	Mon Mar 29 06:58:26 1999
--- arch/monster/misc/firechest.arc	Wed Apr 12 23:27:47 2000
***************
*** 8,13 ****
--- 8,14 ----
  ac 3
  weight 30
  alive 1
+ level 1
  no_pick 1
  immune 4
  editable 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/pixie_gen.arc arch/monster/misc/pixie_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/pixie_gen.arc	Mon Mar 29 06:58:25 1999
--- arch/monster/misc/pixie_gen.arc	Wed Apr 12 23:28:06 2000
***************
*** 9,14 ****
--- 9,15 ----
  ac 10
  exp 20
  alive 1
+ level 1
  no_pick 1
  speed -0.003
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/serpmen/serpman_gen.arc arch/monster/misc/serpmen/serpman_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/misc/serpmen/serpman_gen.arc	Mon Mar 29 06:58:42 1999
--- arch/monster/misc/serpmen/serpman_gen.arc	Wed Apr 12 23:28:50 2000
***************
*** 11,16 ****
--- 11,17 ----
  speed -0.05
  immune 2
  alive 1
+ level 1
  sp 1
  maxsp 1
  weight 90000
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/ghost_gen.arc arch/monster/undead/ghost_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/ghost_gen.arc	Mon Mar 29 06:59:00 1999
--- arch/monster/undead/ghost_gen.arc	Wed Apr 12 23:30:51 2000
***************
*** 7,12 ****
--- 7,13 ----
  speed 0.01
  exp 70
  alive 1
+ level 1
  no_pick 1
  ac 5
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/skelet_gen.arc arch/monster/undead/skelet_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/skelet_gen.arc	Mon Mar 29 06:59:00 1999
--- arch/monster/undead/skelet_gen.arc	Wed Apr 12 23:30:57 2000
***************
*** 4,9 ****
--- 4,10 ----
  name generator
  generator 1
  alive 1
+ level 1
  face gravestone.111
  hp 75
  maxhp 75
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/skull_gen.arc arch/monster/undead/skull_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/skull_gen.arc	Mon Mar 29 06:59:00 1999
--- arch/monster/undead/skull_gen.arc	Wed Apr 12 23:31:00 2000
***************
*** 9,14 ****
--- 9,15 ----
  ac 7
  exp 1000
  alive 1
+ level 1
  no_pick 1
  speed 0.0002
  maxsp 1
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/vampiregen.arc arch/monster/undead/vampiregen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/vampiregen.arc	Mon Mar 29 06:58:59 1999
--- arch/monster/undead/vampiregen.arc	Wed Apr 12 23:31:07 2000
***************
*** 3,8 ****
--- 3,9 ----
  other_arch vampire
  generator 1
  alive 1
+ level 1
  face vampiregen.111
  hp 400
  maxhp 400
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/zombie_gen.arc arch/monster/undead/zombie_gen.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/monster/undead/zombie_gen.arc	Mon Mar 29 06:58:59 1999
--- arch/monster/undead/zombie_gen.arc	Wed Apr 12 23:31:11 2000
***************
*** 4,9 ****
--- 4,10 ----
  name generator
  generator 1
  alive 1
+ level 1
  face zombie_gen.111
  hp 100
  maxhp 100
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/awall/awall_weak.arc arch/wall/awall/awall_weak.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/awall/awall_weak.arc	Mon Mar 29 07:02:34 1999
--- arch/wall/awall/awall_weak.arc	Wed Apr 12 23:32:36 2000
***************
*** 20,25 ****
--- 20,26 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  magicmap black
***************
*** 49,54 ****
--- 50,56 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  magicmap black
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/bwall_weak.arc arch/wall/bwall/bwall_weak.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/bwall_weak.arc	Mon Mar 29 07:02:22 1999
--- arch/wall/bwall/bwall_weak.arc	Wed Apr 12 23:32:53 2000
***************
*** 22,27 ****
--- 22,28 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  end
***************
*** 49,54 ****
--- 50,56 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/earthwall.arc arch/wall/bwall/earthwall.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/earthwall.arc	Mon Mar 29 07:02:24 1999
--- arch/wall/bwall/earthwall.arc	Wed Apr 12 23:33:35 2000
***************
*** 19,24 ****
--- 19,25 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  pass_thru 1
  editable 768
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/hedge.arc arch/wall/bwall/hedge.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/bwall/hedge.arc	Mon Mar 29 07:02:32 1999
--- arch/wall/bwall/hedge.arc	Wed Apr 12 23:33:53 2000
***************
*** 18,23 ****
--- 18,24 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  pass_thru 1
  editable 768
  end
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/cwall/cwall_weak.arc arch/wall/cwall/cwall_weak.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/cwall/cwall_weak.arc	Mon Mar 29 07:02:08 1999
--- arch/wall/cwall/cwall_weak.arc	Wed Apr 12 23:33:13 2000
***************
*** 23,28 ****
--- 23,29 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  magicmap grey
***************
*** 51,56 ****
--- 52,58 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  magicmap grey
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/firewall/firewall.arc arch/wall/firewall/firewall.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/firewall/firewall.arc	Mon Mar 29 07:02:41 1999
--- arch/wall/firewall/firewall.arc	Wed Apr 12 23:34:35 2000
***************
*** 1,6 ****
--- 1,7 ----
  Object firewall
  other_arch firebullet_s
  alive 1
+ level 1
  type 62
  face earthwall.111
  color_fg grey
diff -rc ../../orig/crossfire-0.95.5-arch-patch1/wall/wwall/wwall_weak.arc arch/wall/wwall/wwall_weak.arc
*** ../../orig/crossfire-0.95.5-arch-patch1/wall/wwall/wwall_weak.arc	Mon Mar 29 07:02:49 1999
--- arch/wall/wwall/wwall_weak.arc	Wed Apr 12 23:34:58 2000
***************
*** 20,25 ****
--- 20,26 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  end
***************
*** 45,50 ****
--- 46,52 ----
  no_pick 1
  blocksview 1
  alive 1
+ level 1
  editable 768
  visibility 100
  end

checkarch.pl