summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/docs/crawl_manual.txt6
-rw-r--r--crawl-ref/source/enum.h3
-rw-r--r--crawl-ref/source/jobs.cc12
-rw-r--r--crawl-ref/source/newgame.cc30
-rw-r--r--crawl-ref/source/ng-restr.cc26
-rw-r--r--crawl-ref/source/spl-data.h2
-rw-r--r--crawl-ref/source/tilepick.cc10
7 files changed, 79 insertions, 10 deletions
diff --git a/crawl-ref/docs/crawl_manual.txt b/crawl-ref/docs/crawl_manual.txt
index 3fd7ac0353..20046575b3 100644
--- a/crawl-ref/docs/crawl_manual.txt
+++ b/crawl-ref/docs/crawl_manual.txt
@@ -1962,6 +1962,12 @@ Reavers:
Reavers are warriors who learn the magics of destruction in order to
complement their deadliness in hand combat.
+Warpers:
+ --------
+Warpers specialise in translocation magic, and are experts in travelling
+long distances and positioning themselves precisely and use this to
+their advantage in melee or missile combat.
+
Arcane Marksmen:
--------
Arcane Marksmen specialize in dealing ranged damage via enchanted
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 0a9f8193aa..08a30334c6 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -1456,9 +1456,10 @@ enum job_type
JOB_REAVER,
JOB_STALKER,
JOB_MONK, // 25
- JOB_ARCANE_MARKSMAN,
+ JOB_WARPER,
JOB_WANDERER, // 27
JOB_ARTIFICER, // 28 -Greenberg/Bane
+ JOB_ARCANE_MARKSMAN,
NUM_JOBS, // always after the last job
JOB_UNKNOWN = 100
diff --git a/crawl-ref/source/jobs.cc b/crawl-ref/source/jobs.cc
index 3968356636..8e240703a0 100644
--- a/crawl-ref/source/jobs.cc
+++ b/crawl-ref/source/jobs.cc
@@ -21,8 +21,8 @@ static job_type old_jobs_order[] = {
JOB_CHAOS_KNIGHT, JOB_TRANSMUTER,
JOB_HEALER, JOB_REAVER,
JOB_STALKER, JOB_MONK,
- JOB_ARCANE_MARKSMAN, JOB_WANDERER,
- JOB_ARTIFICER
+ JOB_WARPER, JOB_WANDERER,
+ JOB_ARTIFICER, JOB_ARCANE_MARKSMAN
};
// First plain fighters, then religious fighters, then spell-casting
@@ -36,7 +36,7 @@ static job_type new_jobs_order[] = {
JOB_HEALER, JOB_CHAOS_KNIGHT,
JOB_DEATH_KNIGHT, JOB_CRUSADER,
// general and niche spellcasters (incl. Crusader above)
- JOB_REAVER, JOB_ARCANE_MARKSMAN,
+ JOB_REAVER, JOB_WARPER,
JOB_WIZARD, JOB_CONJURER,
JOB_ENCHANTER, JOB_SUMMONER,
JOB_NECROMANCER, JOB_TRANSMUTER,
@@ -46,7 +46,7 @@ static job_type new_jobs_order[] = {
JOB_VENOM_MAGE, JOB_STALKER,
JOB_THIEF, JOB_ASSASSIN,
JOB_HUNTER, JOB_ARTIFICER,
- JOB_WANDERER
+ JOB_ARCANE_MARKSMAN, JOB_WANDERER
};
job_type get_class(const int index)
@@ -61,7 +61,7 @@ job_type get_class(const int index)
static const char * Class_Abbrev_List[ NUM_JOBS ] =
{ "Fi", "Wz", "Pr", "Th", "Gl", "Ne", "Pa", "As", "Be", "Hu",
"Cj", "En", "FE", "IE", "Su", "AE", "EE", "Cr", "DK", "VM",
- "CK", "Tm", "He", "Re", "St", "Mo", "Wr", "Wn", "Ar" };
+ "CK", "Tm", "He", "Re", "St", "Mo", "Wr", "Wn", "Ar", "Am" };
static const char * Class_Name_List[ NUM_JOBS ] =
{ "Fighter", "Wizard", "Priest", "Thief", "Gladiator", "Necromancer",
@@ -69,7 +69,7 @@ static const char * Class_Name_List[ NUM_JOBS ] =
"Fire Elementalist", "Ice Elementalist", "Summoner", "Air Elementalist",
"Earth Elementalist", "Crusader", "Death Knight", "Venom Mage",
"Chaos Knight", "Transmuter", "Healer", "Reaver", "Stalker",
- "Monk", "Arcane Marksman", "Wanderer", "Artificer" };
+ "Monk", "Warper", "Wanderer", "Artificer", "Arcane Marksman" };
int get_class_index_by_abbrev(const char *abbrev)
{
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index d6e6d578db..1057bccb07 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -1350,6 +1350,7 @@ static void _give_last_paycheck(job_type which_job)
break;
case JOB_WANDERER:
+ case JOB_WARPER:
case JOB_ARCANE_MARKSMAN:
case JOB_ASSASSIN:
you.gold = 50;
@@ -1456,6 +1457,7 @@ static void _jobs_stat_init(job_type which_job)
case JOB_STALKER: s = 2; i = 4; d = 6; hp = 12; mp = 1; break;
case JOB_HUNTER: s = 4; i = 3; d = 5; hp = 13; mp = 0; break;
+ case JOB_WARPER: s = 3; i = 5; d = 4; hp = 12; mp = 1; break;
case JOB_ARCANE_MARKSMAN: s = 3; i = 5; d = 4; hp = 12; mp = 1; break;
case JOB_MONK: s = 3; i = 2; d = 7; hp = 13; mp = 0; break;
@@ -4251,6 +4253,32 @@ bool _give_items_skills()
weap_skill = 3;
break;
+ case JOB_WARPER:
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
+
+ if (!_choose_weapon())
+ return (false);
+
+ if (you.inv[0].quantity < 1)
+ _newgame_clear_item(0);
+
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_LEATHER_ARMOUR,
+ ARM_ROBE);
+ _newgame_make_item(2, EQ_NONE, OBJ_BOOKS, BOOK_SPATIAL_TRANSLOCATIONS);
+
+ // One free escape.
+ _newgame_make_item(3, EQ_NONE, OBJ_SCROLLS, SCR_BLINKING);
+ _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_DART, -1, 20);
+
+ you.skills[SK_FIGHTING] = 1;
+ you.skills[SK_ARMOUR] = 1;
+ you.skills[SK_DODGING] = 2;
+ you.skills[SK_SPELLCASTING] = 2;
+ you.skills[SK_TRANSLOCATIONS] = 3;
+ you.skills[SK_DARTS] = 1;
+ weap_skill = 3;
+ break;
+
case JOB_ARCANE_MARKSMAN:
_newgame_make_item(0, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
@@ -4308,8 +4336,6 @@ bool _give_items_skills()
if (!_choose_book(3, BOOK_ELEMENTAL_MISSILES, 2))
return (false);
- _newgame_make_item(4, EQ_NONE, OBJ_SCROLLS, SCR_BLINKING);
-
you.skills[SK_DODGING] = 2;
you.skills[SK_SPELLCASTING] = 2;
diff --git a/crawl-ref/source/ng-restr.cc b/crawl-ref/source/ng-restr.cc
index cf4d7bd5b2..75d676b90f 100644
--- a/crawl-ref/source/ng-restr.cc
+++ b/crawl-ref/source/ng-restr.cc
@@ -340,6 +340,32 @@ char_choice_restriction class_allowed(species_type speci,
return (CC_UNRESTRICTED);
}
+ case JOB_WARPER:
+ switch (speci)
+ {
+ case SP_HUMAN:
+ case SP_DEEP_ELF:
+ case SP_SLUDGE_ELF:
+ case SP_MOUNTAIN_DWARF:
+ case SP_DEEP_DWARF:
+ case SP_HILL_ORC:
+ case SP_MERFOLK:
+ case SP_HALFLING:
+ case SP_KOBOLD:
+ case SP_CENTAUR:
+ case SP_OGRE:
+ case SP_TROLL:
+ case SP_MINOTAUR:
+ case SP_KENKU:
+ case SP_RED_DRACONIAN:
+ case SP_DEMONSPAWN:
+ case SP_MUMMY:
+ case SP_GHOUL:
+ case SP_VAMPIRE:
+ return (CC_RESTRICTED);
+ default:
+ return (CC_UNRESTRICTED);
+ }
case JOB_ARCANE_MARKSMAN:
switch (speci)
{
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index 24f171e2e6..c4e73a50c5 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -2541,7 +2541,7 @@
SPELL_EXPLODING_AMMUNITION, "Exploding Ammunition",
SPTYP_ENCHANTMENT | SPTYP_FIRE | SPTYP_AIR,
SPFLAG_HELPFUL | SPFLAG_BATTLE,
- 7,
+ 5,
0,
-1,-1,
0,
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 6d051badc4..e7b8389051 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -3471,6 +3471,16 @@ void tilep_job_default(int job, int gender, int *parts)
parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
break;
+ case JOB_WARPER:
+ parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_BROWN;
+ parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;
+ parts[TILEP_PART_HAND1] = TILEP_HAND1_SARUMAN;
+ parts[TILEP_PART_HAND2] = TILEP_HAND2_BOOK_WHITE;
+ parts[TILEP_PART_BOOTS] = TILEP_BOOTS_SHORT_BROWN;
+ parts[TILEP_PART_CLOAK] = TILEP_CLOAK_RED;
+ break;
+
+
case JOB_ARCANE_MARKSMAN:
parts[TILEP_PART_BODY] = TILEP_BODY_ROBE_BROWN;
parts[TILEP_PART_HELM] = TILEP_HELM_GANDALF;