1 /* SCCS Id: @(#)skills.h 3.4 1999/10/27 */ 2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */ 3 /* NetHack may be freely redistributed. See license for details. */ 4 5 #ifndef SKILLS_H 6 #define SKILLS_H 7 8 /* Much of this code was taken from you.h. It is now 9 * in a separate file so it can be included in objects.c. 10 */ 11 12 13 /* Code to denote that no skill is applicable */ 14 #define P_NONE 0 15 16 /* Weapon Skills -- Stephen White 17 * Order matters and are used in macros. 18 * Positive values denote hand-to-hand weapons or launchers. 19 * Negative values denote ammunition or missiles. 20 * Update weapon.c if you ammend any skills. 21 * Also used for oc_subtyp. 22 */ 23 #define P_DAGGER 1 24 #define P_KNIFE 2 25 #define P_AXE 3 26 #define P_PICK_AXE 4 27 #define P_SHORT_SWORD 5 28 #define P_BROAD_SWORD 6 29 #define P_LONG_SWORD 7 30 #define P_TWO_HANDED_SWORD 8 31 #define P_SCIMITAR 9 32 #define P_SABER 10 33 #define P_CLUB 11 /* Heavy-shafted bludgeon */ 34 #define P_MACE 12 35 #define P_MORNING_STAR 13 /* Spiked bludgeon */ 36 #define P_FLAIL 14 /* Two pieces hinged or chained together */ 37 #define P_HAMMER 15 /* Heavy head on the end */ 38 #define P_QUARTERSTAFF 16 /* Long-shafted bludgeon */ 39 #define P_POLEARMS 17 40 #define P_SPEAR 18 41 #define P_JAVELIN 19 42 #define P_TRIDENT 20 43 #define P_LANCE 21 44 #define P_BOW 22 45 #define P_SLING 23 46 #define P_CROSSBOW 24 47 #define P_DART 25 48 #define P_SHURIKEN 26 49 #define P_BOOMERANG 27 50 #define P_WHIP 28 51 #define P_UNICORN_HORN 29 /* last weapon */ 52 #define P_FIRST_WEAPON P_DAGGER 53 #define P_LAST_WEAPON P_UNICORN_HORN 54 55 /* Spell Skills added by Larry Stewart-Zerba */ 56 #define P_ATTACK_SPELL 30 57 #define P_HEALING_SPELL 31 58 #define P_DIVINATION_SPELL 32 59 #define P_ENCHANTMENT_SPELL 33 60 #define P_CLERIC_SPELL 34 61 #define P_ESCAPE_SPELL 35 62 #define P_MATTER_SPELL 36 63 #define P_FIRST_SPELL P_ATTACK_SPELL 64 #define P_LAST_SPELL P_MATTER_SPELL 65 66 /* Other types of combat */ 67 #define P_BARE_HANDED_COMBAT 37 68 #define P_MARTIAL_ARTS P_BARE_HANDED_COMBAT /* Role distinguishes */ 69 #define P_TWO_WEAPON_COMBAT 38 /* Finally implemented */ 70 #ifdef STEED 71 #define P_RIDING 39 /* How well you control your steed */ 72 #define P_LAST_H_TO_H P_RIDING 73 #else 74 #define P_LAST_H_TO_H P_TWO_WEAPON_COMBAT 75 #endif 76 #define P_FIRST_H_TO_H P_BARE_HANDED_COMBAT 77 78 #define P_NUM_SKILLS (P_LAST_H_TO_H+1) 79 80 /* These roles qualify for a martial arts bonus */ 81 #define martial_bonus() (Role_if(PM_SAMURAI) || Role_if(PM_MONK)) 82 83 84 /* 85 * These are the standard weapon skill levels. It is important that 86 * the lowest "valid" skill be be 1. The code calculates the 87 * previous amount to practice by calling practice_needed_to_advance() 88 * with the current skill-1. To work out for the UNSKILLED case, 89 * a value of 0 needed. 90 */ 91 #define P_ISRESTRICTED 0 92 #define P_UNSKILLED 1 93 #define P_BASIC 2 94 #define P_SKILLED 3 95 #define P_EXPERT 4 96 #define P_MASTER 5 /* Unarmed combat/martial arts only */ 97 #define P_GRAND_MASTER 6 /* Unarmed combat/martial arts only */ 98 99 #define practice_needed_to_advance(level) ((level)*(level)*20) 100 101 /* The hero's skill in various weapons. */ 102 struct skills { 103 xchar skill; 104 xchar max_skill; 105 unsigned short advance; 106 }; 107 108 #define P_SKILL(type) (u.weapon_skills[type].skill) 109 #define P_MAX_SKILL(type) (u.weapon_skills[type].max_skill) 110 #define P_ADVANCE(type) (u.weapon_skills[type].advance) 111 #define P_RESTRICTED(type) (u.weapon_skills[type].skill == P_ISRESTRICTED) 112 113 #define P_SKILL_LIMIT 60 /* Max number of skill advancements */ 114 115 /* Initial skill matrix structure; used in u_init.c and weapon.c */ 116 struct def_skill { 117 xchar skill; 118 xchar skmax; 119 }; 120 121 #endif /* SKILLS_H */ 122