diff --git a/include/skills.h b/include/skills.h new file mode 100644 index 000000000..08d04c218 --- /dev/null +++ b/include/skills.h @@ -0,0 +1,121 @@ +/* SCCS Id: @(#)skills.h 3.3 1999/10/27 */ +/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ +/* NetHack may be freely redistributed. See license for details. */ + +#ifndef SKILLS_H +#define SKILLS_H + +/* Much of this code was taken from you.h. It is now + * in a separate file so it can be included in objects.c. + */ + + +/* Code to denote that no skill is applicable */ +#define P_NONE 0 + +/* Weapon Skills -- Stephen White + * Order matters and are used in macros. + * Positive values denote hand-to-hand weapons or launchers. + * Negative values denote ammunition or missiles. + * Update weapon.c if you ammend any skills. + * Also used for oc_subtyp. + */ +#define P_DAGGER 1 +#define P_KNIFE 2 +#define P_AXE 3 +#define P_PICK_AXE 4 +#define P_SHORT_SWORD 5 +#define P_BROAD_SWORD 6 +#define P_LONG_SWORD 7 +#define P_TWO_HANDED_SWORD 8 +#define P_SCIMITAR 9 +#define P_SABER 10 +#define P_CLUB 11 /* Heavy-shafted bludgeon */ +#define P_MACE 12 +#define P_MORNING_STAR 13 /* Spiked bludgeon */ +#define P_FLAIL 14 /* Two pieces hinged or chained together */ +#define P_HAMMER 15 /* Heavy head on the end */ +#define P_QUARTERSTAFF 16 /* Long-shafted bludgeon */ +#define P_POLEARMS 17 +#define P_SPEAR 18 +#define P_JAVELIN 19 +#define P_TRIDENT 20 +#define P_LANCE 21 +#define P_BOW 22 +#define P_SLING 23 +#define P_CROSSBOW 24 +#define P_DART 25 +#define P_SHURIKEN 26 +#define P_BOOMERANG 27 +#define P_WHIP 28 +#define P_UNICORN_HORN 29 /* last weapon */ +#define P_FIRST_WEAPON P_DAGGER +#define P_LAST_WEAPON P_UNICORN_HORN + +/* Spell Skills added by Larry Stewart-Zerba */ +#define P_ATTACK_SPELL 30 +#define P_HEALING_SPELL 31 +#define P_DIVINATION_SPELL 32 +#define P_ENCHANTMENT_SPELL 33 +#define P_CLERIC_SPELL 34 +#define P_ESCAPE_SPELL 35 +#define P_MATTER_SPELL 36 +#define P_FIRST_SPELL P_ATTACK_SPELL +#define P_LAST_SPELL P_MATTER_SPELL + +/* Other types of combat */ +#define P_BARE_HANDED_COMBAT 37 +#define P_MARTIAL_ARTS P_BARE_HANDED_COMBAT /* Role distinguishes */ +#define P_TWO_WEAPON_COMBAT 38 /* Finally implemented */ +#ifdef STEED +#define P_RIDING 39 /* How well you control your steed */ +#define P_LAST_H_TO_H P_RIDING +#else +#define P_LAST_H_TO_H P_TWO_WEAPON_COMBAT +#endif +#define P_FIRST_H_TO_H P_BARE_HANDED_COMBAT + +#define P_NUM_SKILLS (P_LAST_H_TO_H+1) + +/* These roles qualify for a martial arts bonus */ +#define martial_bonus() (Role_if(PM_SAMURAI) || Role_if(PM_MONK)) + + +/* + * These are the standard weapon skill levels. It is important that + * the lowest "valid" skill be be 1. The code calculates the + * previous amount to practice by calling practice_needed_to_advance() + * with the current skill-1. To work out for the UNSKILLED case, + * a value of 0 needed. + */ +#define P_ISRESTRICTED 0 +#define P_UNSKILLED 1 +#define P_BASIC 2 +#define P_SKILLED 3 +#define P_EXPERT 4 +#define P_MASTER 5 /* Unarmed combat/martial arts only */ +#define P_GRAND_MASTER 6 /* Unarmed combat/martial arts only */ + +#define practice_needed_to_advance(level) ((level)*(level)*20) + +/* The hero's skill in various weapons. */ +struct skills { + xchar skill; + xchar max_skill; + unsigned short advance; +}; + +#define P_SKILL(type) (u.weapon_skills[type].skill) +#define P_MAX_SKILL(type) (u.weapon_skills[type].max_skill) +#define P_ADVANCE(type) (u.weapon_skills[type].advance) +#define P_RESTRICTED(type) (u.weapon_skills[type].skill == P_ISRESTRICTED) + +#define P_SKILL_LIMIT 60 /* Max number of skill advancements */ + +/* Initial skill matrix structure; used in u_init.c and weapon.c */ +struct def_skill { + xchar skill; + xchar skmax; +}; + +#endif /* SKILLS_H */