

   SKILLS/EXPERIENCE DOCUMENTATION for PLAYERS.
   --------------------------------------------

   - Summary -

   0. Description of system

   1. Using the new skills system
	a. new player commands
	b. learning a new skill
	c. about experience and skills
	d. starting skills by player profession

   2. Appendices
        a. skills descriptions
        b. how stats are related to skills/experience
	c. Default parameters for skills
	d. Theory of Experience Gain

   0.DESCRIPTION OF SKILLS/EXPERIENCE SYSTEM
     ---------------------------------------

	When crossfire is compiled with the ALLOW_SKILLS flag defined
	(in include/config.h) the new skills/experience system is enabled.

	Under this system the flow of play changes dramatically. Instead of
	gaining experience for basically just killing monsters (and disarming
	traps) players will now gain a variety of experience through the use
	of skills. Some skills replicate old functions in the game (cf. melee
	weapons skill, missile weapon skill) while others add new functionality
	(cf stealing, hiding, etc).

	One important aspect of this new system is the way in which experience
	is gained -- basically it is the philosophy that "you are what you do".
	A player who kills monsters with spells gains experience in casting
	destructive spells. A player who steals from creatures often will
	get better at stealing, and so on. The player's aptitude (eg stats)
	will influence the amount of experience gained.

	The new skills/experience system *is* compatible with older character
	files.

	See the skills_developers.doc for a more technical discussion of the
	skills/experience system.


   1.USING THE NEW SKILLS SYSTEM
     ---------------------------

	a. New player commands

	Two new commands now exist in CF through which skills are utilized:

	 'skills' 	  	-- 	this command lists all the player's
					current known skills, their level
					of use and the associated experience
					category of each skill.

 	'use_skill <skillname>' --	this command changes the player's
					current readied skill.

	Generally, a player will use a skill by first readying the right one,
	with the 'use_skill' command and then making a ranged "attack" to
	activate the skill. Using most skills is just like firing a wand or a
	bow.  In a few cases however, a skill can be used just by having it
	"readied". An example of this is the "bargaining" skill.

	To change to a new skill, a player will have to using the 'use_skill'
	command, but not always. The use of several common items will auto-
	matically change the player's current skill. Examples of this include
	readying a bow (which will cause the code to make the player's current
	skill "missile_weapons") or readying a melee weapon (current skill
	auto-matically becomes "melee weapons"). Also, some player actions
	can cause a change in the current skill.  Running into a monster while
	you have a readied weapon in your inventory causes the code to auto-
	matically make our current skill "melee weapons". Casting a spell
	will cause the code to switch the current skill to "spellcasting" or
	"praying" (as appropriate to the spell type).

	It is not possible to use more than one skill at a time.


	b. Acquiring skills

	Skills may be gained in 2 ways. In the first, new skills may "learned".
	This is done by reading a "skill scroll" and the process is very similar
	to learning a spell. There is one big difference - all attempts to learn
	skills are successful. Note that skill scrolls are rarely named exactly
	for the skill they grant (ex "scroll of piety" is the skillscroll that
	grants the skill "praying" to the reader).

        The acquisition of a "skill tool" will also allow the player to use
        a new skill. An example of a skill tool is "lockpicks" (which allow the
        player to pick door locks). The player mearly applies the skill
        tool in order to gain use of the new skill. If the tool is unapplied,
	the player looses the use of the skill associated with the tool.

                == AVAILABLE SKILL TOOLS ==

                Skill tool      Skill gained
                ----------      ------------
                Lockpicks       Lockpicking
                Holy Symbol     Praying
                Talisman        Spellcasting
                Writing Pen     Inscription

	After a new skill is gained (either learned or if player has an applied
	skill tool) it will appear on the player's skill roster (use the
	'skills' command to view its status). If the new skill is related to a
	particular kind of experience, it will automatically be gained at the
	player's current level of experience in the appropriate category.


	c. About experience and skills

	Successful use of many skills will result in the player gaining
	experience. No special commands from the player are needed for this
	to occur. All gained experience is modified by the relevant stats for
	that skill and then the appropriate experience category automatically
	updated as needed.

	All players may gain experience in any of the experience categories
	irrespective of player class or stats. All new players start with zero
	experience in all experience categories.

        There are no inherent restrictions on player skill use--any player may
        use any acquired skill. How well a player uses a skill is related
        to their stats and their appropriate level of experience.

	For most skills both the chance of success and effect of the skill are
	tied to the player level of experience (eg 'melee weapons', 'stealing',
	'writing', 'hiding', etc).

	But there are a smaller number of skills whose use will automatically
	be 'successful' with every attempt: (eg 'use magic item', 'bargaining',
	all miscellaneous skills and the 'identification skills': smithery,
	woodsman, alchemy, etc.),

	The default array of stats for associated skills is in Appendix B.


	d. starting skills by player profession


	All players start with the skills "melee weapons", "find traps",
	"use magic item" and "disarm traps". Under the current release of the
	skills system, further skills are parceled out as follows:

	Player profession	Additional skills
	-----------------	-----------------

	Barbarian		Missile Weapons, Woodsman, Mountaineer
	Cleric			Missile Weapons, Praying (holy symbol),
				 Oratory
	Dwarf			Missile Weapons, Smithery
	Elf			Missile Weapons, Spellcasting (talisman),
				 Bowyer, Woodsman
	Fireborn		Missile Weapons, Spellcasting, Praying,
				 Flame touch
	Human 			Missile Weapons, 2 Random skills
	Mage			Missile Weapons, Spellcasting
	Monk			Missile Weapons, Meditation, Karate,
				 Sense Magic
	Ninja			Missile Weapons, Jumping, Hiding
	Priest			Praying, Spellcasting (talisman)
	Quetzalcoatl		Missile Weapons, Spellcasting, Clawing
	Swashbuckler		Missile Weapons, Stealing, Singing
	Thief			Missile Weapons, Stealing,
				 Lockpicking (lockpicks)
	Viking			Missile Weapons, Bargaining
	Warrior			Missile Weapons, Punching, Oratory
	Wizard			Spellcasting, Praying (holy symbol)
	Wraith			Spellcasting, Praying (holy symbol)


   2.APPENDICES
     ----------

   	A. skills descriptions

     	The following is the current (8/15/95) roster of skills and the
	description for each. Use the command 'crossfire -m5' to see the array
	of skills and experience in your version of crossfire.
	(Note: you need to have compilied with the DUMP_SWITCHES and
	ALLOW_SKILLS flags for this to work!)

	  + -denotes a skill which monsters/NPC's may also use.

  		Skill	description
  		-----	-----------

     	      alchemy	User can identify potions, containers, and
			amulets. (One day I would like to see this skill
			allow mixing of potions -b.t.).

      	   bargaining	While this skill is readied the user has added Cha
			for purposes of purchase and selling of items only.
			Cha is never allowed to exceed 30.

     	       bowyer	User can identify missile weapons and missiles.

      +	      clawing	User can make a "bare-handed attack". Damage
			is based on the user's Str and level.

     	   find traps 	User can search (more effectively) for traps.
			Not a 'passive' skill, it is applied in order
			to gain the advantage in discovering traps.

      +	  flame touch	User can make a "bare-handed attack". Damage
			is based on the user's Str and level. This
			is the default hand-to-hand fighting skill
			for the fireborn character class.

      +		 hide	User enjoys limited form of invisibility. If
			they attack or move too much they become
			visible. Right now it is possible to
			hidden while next to hostile monsters. Not
			a reasonable feature!

     	      jeweler	User can ident gems and rings that they hold.

      +	      jumping	User can 'skip' over 1-2 spaces in a selected
			direction. Distance depends on weight carried,
			Str and Dex of the user. This skill may also
			be used as an attack.

      +	       karate	User can make a "bare-handed attack". Damage
                        is based on the user's Str and level. This attack
			is the fastest and (at higher levels) most deadly
			of the "hand to hand" attacks available.

     	     literacy	User can ident books and scrolls that they hold.
			Since scrolls are currently always identified,
			this is not the greatest of skills.

      +	  lockpicking	User may 'pick locks' (open doors). User needs
			to have readied some 'lockpicks' to use this
			skill.

     	   meditation	Player can regain mana/hp at an accelerated rate.
			Player must first strip off encumbering armour
			however. This skill is only available to the 'monk'
			character class.

        melee weapons   User may use hand-held weapons (eg swords,
                        spears, mace, etc). One day this skill could be
                        made to allow the player to make special attacks
			with various weapons. (For example, a disarming
			attack with Sai).

      missile weapons	The user is allowed to make attacks with
			ranged weapons (eg bow, crossbow).

          mountaineer	While the skill is readied, the possessor will
			move faster through "hilly" terrain (hills,
			mountains, etc.)

     	      oratory  	User may 'recruit' followers. Recruitees must be
			of lower level, and unaggressive to start. Use
			of this skill may anger the audience. Also,
			'special' monsters are immune to recruitment.
			Success depends on User Cha and level.

      	      praying	User is allowed to cast "cleric" spells. In addition,
			this skill may be used to accelerate the accumulation
			of grace. This skill may be either 'learned' or
			acquired through the use of a "holy symbol".

      +      punching   User can make a "bare-handed attack". Damage
                        is based on the user's Str and level. This is
			the most feeble of the hth attacks.

     	 remove_traps	User may remove previously discovered traps.

     	  sense curse	User may discover whether items that he holds
			are 'cursed'. Controversial skill, may go away
			in later versions.

          sense magic   User may discover whether items that he holds
                        are 'magic'. Controversial skill, may go away
                        in later versions.

  	    set traps	Unimplemented.

     	      singing	User may pacify hostile monsters with this skill.
			Certain kinds of monsters are immune. Success
			depends on user level and Cha.

     	     smithery	User may ident arms and armour that they hold.
			Right now this is a powerful skill, and I
			am considering breaking it up into 2 ident skills
			in the future.

      	 spellcasting	User is allowed to cast "wizard" spells. This
			skill may be acquired either through the use
			of a talisman or learned via a skill scroll.

      +	     stealing	User can take items from the inventory of other
			monsters.

     	thaumagragist	User can ident rods, wands and horns that they
			are holding.

  	     throwing	Unimplemented.

       use magic item	User can use magic items like rods/wands/horns.  Note
			that by default, you do not gain experience with this
			skill, and thus, you don't get experience for using
			rods/wands/horns to kill monsters.

       	     woodsman   While the skill is readied, the possessor will
                        move faster through "wooded" terrain (forest,
                        grasslands, brush, jungle, etc.)

     	      writing	User may rewrite spell scrolls with a previously
			known spell. Sp, time and an old scroll are
			needed. Backfire effects are possible. Only
			available as a 'writing pen'.



        b. how stats are related to skills/experience

        Table of how experience is modified by the the stats associated
        with a skill. Each skill which may 'generate' experience
	(the "associated skills") have a number of stats which are
	associated with them. Each time experience is gained by the player,
	the base value is modified according to the value of the
	player's stats associated with the skill in use. The effect
	of the modification is shown below (wherein all the associated
	stats have been taken as an average).

        Average of    Base exp  | Average of 	Base Exp
	assoc. stats  multiplier| assoc. stats	multiplier
        ------------- ----------|-------------  ----------
                1       0.00    |       16      1.05
                2       0.01    |       17      1.10
                3       0.03    |       18      1.15
                4       0.05    |       19      1.2
                5       0.20    |       20      1.3
                6       0.35    |       21      1.4
                7       0.5     |       22      1.5
                8       0.65    |       23      1.6
                9       0.7     |       24      1.7
                10      0.75    |       25      2.0
                11      0.8     |       26      2.2
                12      0.85    |       27      2.4
                13      0.9     |       28      2.6
                14      0.95    |       29      2.8
                15      1.0     |       30      3.0


	c. Default parameters for skills

	Table of stats associated w/ each skill. Miscellaneous skills
	never have any stats related to them. This is the default
	table. Your release of CF may have difference bindings between
	experience categories (ExpCat) and relevant stats may differ.
	Use the -m5 flag to investigate this for your version of CF.


   sk#       Skill name        ExpCat  Time Base xlvl  Stat1 Stat2 Stat3
   ---       ----------        ------  ---- ---- ----  ----- ----- -----
   0-         stealing       agility     0   25  2.5    Dex   Int   ---
   1-      lockpicking       agility     0   10  0.5    Dex   Int   ---
   2-           hiding       agility     0    5  1.5    Dex   Int   ---
   3-         smithery        mental     5    1  0.5    Int   Dex   ---
   4-           bowyer        mental     5    1  0.5    Int   Dex   ---
   5-          jewelry        mental     5   10    1    Int   Dex   ---
   6-          alchemy        mental     5  100    1    Int   Dex   ---
   7-      thaumaturgy        mental     5   10 0.75    Int   Dex   ---
   8-         literacy        mental     5  100  1.5    Int   Dex   ---
   9-       bargaining          NONE     0    0    0    ---   ---   ---
  10-          jumping      physique     0    0  2.5    Str   Dex   ---
  11-      sense magic         magic     0    1    0    Pow   Int   ---
  12-          oratory   personality     1    1  0.5    Cha   Int   ---
  13-          singing   personality     1    1  0.5    Cha   Int   ---
  14-      sense curse        wisdom     0    1    0    Pow   Wis   ---
  15-       find traps        mental     0    3    2    Int   Dex   ---
  16-       meditation          NONE    10    0    0    ---   ---   ---
  17-         punching      physique     0    0    0    Str   Dex   ---
  18-      flame touch      physique     0    0    0    Str   Dex   Int
  19-           karate      physique     0    0    0    Str   Dex   ---
  20-      mountaineer          NONE     0    0    0    ---   ---   ---
  21-         woodsman        mental     0    1  0.5    Int   Dex   ---
  22-      inscription         magic     0    1    5    Pow   Int   ---
  23-    melee weapons      physique     0    1    0    Str   Dex   ---
  24-  missile weapons      physique     0    1    0    Str   Dex   ---
  25-         throwing      physique     0    1    0    Str   Dex   ---
  26-     spellcasting         magic     0    0    0    Pow   Int   ---
  27-     disarm traps       agility     0   10  0.5    Dex   Int   Str
  28-        set traps        mental     5    3    2    Int   Dex   Str
  29-   use magic item          NONE     0    0    0    ---   ---   ---
  30-          praying        wisdom     0    0    0    Wis   Pow   ---
  31-          clawing      physique     0    0    0    Str   Dex   ---


	In the above table, "skill name" refers to the name of the skill
	as used by the player, "expcat" refers to the name of the assoc-
	iated experience category, "time" is the number of 'ticks' re-
	quired to perform the skill, "base" is the base amount of exp
	given for successful use of the skill, "xlvl" is the level multi-
	plier to the amount of experience gained, and "stat1, stat2, stat3"
	are the associated stats for the skill. The values of these stats
	will be used to reference a multiplier (see preceding table) to
	the amount of gained experience.


	d. Theory of Experience Gain

	[excerpted from the code in skill_util.c, as if you can't tell :) ]

  /* calc_skill_exp() - calculates amount of experience can be gained for
   * successful use of a skill and returns value of the experience gain.
   * Here we take the view that a player must 'overcome an opponent'
   * in order to gain experience. Examples include foes killed combat,
   * finding/disarming a trap, stealing from some being, etc.
   * The gained experience is based primarily on the difference in levels,
   * exp point value of vanquished foe, the relevant stats of the skill being
   * used and modifications in the skills[] table.
   *
   * For now, monsters and players will be treated differently. Below I give
   * the algorithm for *PLAYER* experience gain. Monster exp gain is simpler.
   * Monsters just get 10% of the exp of the opponent.
   *
   *  Example: the basic exp gain for player 'who' how "vanquished" opponent
   * 'op' using skill 'sk' is:
   *
   *      EXP GAIN = (op->exp + skills[sk].bexp) * (1 + lvl_mult) * stat_mult
   *
   *  where lvl_mult is
   *
   *  for(pl->level <= op->level)::
   *    lvl_mult  = skills[sk].lexp * (op->level - pl->level)
   *  for(pl->level > op->level)::
   *    lvl_mult = (op_lvl/pl_lvl) - 1;
   *
   *  and stat_mult is taken from stat_exp_mult[] table above.
   *
   * Coded by b.t. thomas@astro.psu.edu
   */
