Apply the new ground_level method.
[crawl.git] / crawl-ref / source / jobs.cc
blob22ee083eb75b5f404e3f65d86f87499296f899e5
1 #include "AppHdr.h"
3 #include "jobs.h"
5 #include "options.h"
7 // First plain fighters, then religious fighters, then spell-casting
8 // fighters, then primary spell-casters, then stabbers and shooters. (MM)
9 static job_type jobs_order[] = {
10 // fighters
11 JOB_FIGHTER, JOB_GLADIATOR,
12 JOB_MONK, JOB_BERSERKER,
13 // religious professions (incl. Berserker above)
14 JOB_PALADIN, JOB_PRIEST,
15 JOB_HEALER, JOB_CHAOS_KNIGHT,
16 JOB_CRUSADER,
17 // general and niche spellcasters (incl. Crusader above)
18 JOB_REAVER, JOB_WARPER,
19 JOB_WIZARD, JOB_CONJURER,
20 JOB_ENCHANTER, JOB_SUMMONER,
21 JOB_NECROMANCER, JOB_TRANSMUTER,
22 JOB_FIRE_ELEMENTALIST, JOB_ICE_ELEMENTALIST,
23 JOB_AIR_ELEMENTALIST, JOB_EARTH_ELEMENTALIST,
24 // poison specialists and stabbers
25 JOB_VENOM_MAGE, JOB_STALKER,
26 JOB_ASSASSIN,
27 JOB_HUNTER, JOB_ARTIFICER,
28 JOB_ARCANE_MARKSMAN, JOB_WANDERER
31 job_type get_job(const int index)
33 if (index < 0 || index >= ng_num_jobs())
34 return (JOB_UNKNOWN);
36 return (jobs_order[index]);
39 static const char * Job_Abbrev_List[ NUM_JOBS ] =
40 { "Fi", "Wz", "Pr",
41 "Gl", "Ne", "Pa", "As", "Be", "Hu",
42 "Cj", "En", "FE", "IE", "Su", "AE", "EE", "Cr",
43 "VM",
44 "CK", "Tm", "He", "Re", "St", "Mo", "Wr", "Wn", "Ar", "AM" };
46 static const char * Job_Name_List[ NUM_JOBS ] =
47 { "Fighter", "Wizard", "Priest",
48 "Gladiator", "Necromancer",
49 "Paladin", "Assassin", "Berserker", "Hunter", "Conjurer", "Enchanter",
50 "Fire Elementalist", "Ice Elementalist", "Summoner", "Air Elementalist",
51 "Earth Elementalist", "Crusader",
52 "Venom Mage",
53 "Chaos Knight", "Transmuter", "Healer", "Reaver", "Stalker",
54 "Monk", "Warper", "Wanderer", "Artificer", "Arcane Marksman" };
56 const char *get_job_abbrev(int which_job)
58 COMPILE_CHECK(ARRAYSZ(Job_Abbrev_List) == NUM_JOBS, c1);
59 ASSERT(which_job >= 0 && which_job < NUM_JOBS);
61 return (Job_Abbrev_List[which_job]);
64 job_type get_job_by_abbrev(const char *abbrev)
66 int i;
68 for (i = 0; i < NUM_JOBS; i++)
70 if (tolower(abbrev[0]) == tolower(Job_Abbrev_List[i][0])
71 && tolower(abbrev[1]) == tolower(Job_Abbrev_List[i][1]))
73 break;
77 return ((i < NUM_JOBS) ? static_cast<job_type>(i) : JOB_UNKNOWN);
80 const char *get_job_name(int which_job)
82 COMPILE_CHECK(ARRAYSZ(Job_Name_List) == NUM_JOBS, c1);
83 ASSERT(which_job >= 0 && which_job < NUM_JOBS);
85 return (Job_Name_List[which_job]);
88 job_type get_job_by_name(const char *name)
90 int i;
91 job_type cl = JOB_UNKNOWN;
93 char *ptr;
94 char lowered_buff[80];
95 char lowered_job[80];
97 strncpy(lowered_buff, name, sizeof(lowered_buff));
98 strlwr(lowered_buff);
100 for (i = 0; i < NUM_JOBS; i++)
102 strncpy(lowered_job, Job_Name_List[i], sizeof(lowered_job));
103 strlwr(lowered_job);
105 ptr = strstr(lowered_job, lowered_buff);
106 if (ptr != NULL)
108 cl = static_cast<job_type>(i);
109 if (ptr == lowered_job) // prefix takes preference
110 break;
114 return (cl);
117 int ng_num_jobs()
119 // The list musn't be longer than the number of actual jobs.
120 COMPILE_CHECK(ARRAYSZ(jobs_order) <= NUM_JOBS, c1);
121 return ARRAYSZ(jobs_order);
124 bool is_valid_job(job_type job)
126 return (job >= 0 && job < NUM_JOBS);