summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/newgame.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-08 11:59:07 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-08 11:59:07 +0000
commit891c1a9ccb6579006040af82a2e050dcdff73513 (patch)
tree549ec0b58d798b7b9b59cce1a56020c4f3de43ae /crawl-ref/source/newgame.cc
parent9cbd1d97fffb2d5b60311fd2d6dcf2b4c30ddd11 (diff)
downloadcrawl-ref-891c1a9ccb6579006040af82a2e050dcdff73513.tar.gz
crawl-ref-891c1a9ccb6579006040af82a2e050dcdff73513.zip
Apply Artificer patch, with small modifications:
* Artificers start with a knife unless their second wand is a supporting one (confusion, enslavement) in which case they get a dagger. * Enslavement only has 6 charges. * Centaurs and Ghouls are restricted, as well. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7781 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/newgame.cc')
-rw-r--r--crawl-ref/source/newgame.cc152
1 files changed, 146 insertions, 6 deletions
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index 4126748058..20fa84eaa7 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -187,7 +187,8 @@ static job_type old_jobs_order[] = {
JOB_CHAOS_KNIGHT, JOB_TRANSMUTER,
JOB_HEALER, JOB_REAVER,
JOB_STALKER, JOB_MONK,
- JOB_WARPER, JOB_WANDERER
+ JOB_WARPER, JOB_WANDERER,
+ JOB_ARTIFICER
};
// First plain fighters, then religious fighters, then spell-casting
@@ -210,7 +211,8 @@ static job_type new_jobs_order[] = {
// poison specialists and stabbers
JOB_VENOM_MAGE, JOB_STALKER,
JOB_THIEF, JOB_ASSASSIN,
- JOB_HUNTER, JOB_WANDERER
+ JOB_HUNTER, JOB_ARTIFICER,
+ JOB_WANDERER
};
static job_type _get_class(const int index)
@@ -308,7 +310,7 @@ int get_species_by_abbrev( const char *abbrev )
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" };
+ "CK", "Tm", "He", "Re", "St", "Mo", "Wr", "Wn", "Ar" };
static const char * Class_Name_List[ NUM_JOBS ] =
{ "Fighter", "Wizard", "Priest", "Thief", "Gladiator", "Necromancer",
@@ -316,7 +318,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", "Warper", "Wanderer" };
+ "Monk", "Warper", "Wanderer", "Artificer" };
int get_class_index_by_abbrev( const char *abbrev )
{
@@ -1822,6 +1824,20 @@ static char_choice_restriction _class_allowed(species_type speci,
return (CC_UNRESTRICTED);
}
+ case JOB_ARTIFICER:
+ switch (speci)
+ {
+ case SP_CENTAUR:
+ case SP_TROLL:
+ case SP_MINOTAUR:
+ case SP_OGRE:
+ case SP_MUMMY:
+ case SP_GHOUL:
+ return (CC_RESTRICTED);
+ default:
+ return (CC_UNRESTRICTED);
+ }
+
case JOB_WANDERER:
return (CC_RESTRICTED);
@@ -2019,7 +2035,7 @@ static bool _choose_book( item_def& book, int firstbook, int numbooks )
textcolor( CYAN );
cprintf(EOL "You have a choice of books: "
- "(Press %% for a list of aptitudes)" EOL);
+ "(Press %% for a list of aptitudes)" EOL);
for (int i = 0; i < numbooks; ++i)
{
@@ -2304,7 +2320,7 @@ static bool _choose_weapon()
textcolor( CYAN );
cprintf(EOL "You have a choice of weapons: "
- "(Press %% for a list of aptitudes)" EOL);
+ "(Press %% for a list of aptitudes)" EOL);
bool prevmatch = false;
for (int i = 0; i < num_choices; i++)
@@ -2731,6 +2747,8 @@ static void _jobs_stat_init(job_type which_job)
case JOB_NECROMANCER: s = 0; i = 6; d = 4; hp = 10; mp = 3; break;
case JOB_WANDERER: s = 2; i = 2; d = 2; hp = 11; mp = 1; break;
+
+ case JOB_ARTIFICER: s = 3; i = 3; d = 4; hp = 13; mp = 0; break;
default: s = 0; i = 0; d = 0; hp = 10; mp = 0; break;
}
@@ -2856,6 +2874,9 @@ static void _give_basic_knowledge(job_type which_job)
set_ident_type( OBJ_POTIONS, POT_POISON, ID_KNOWN_TYPE );
break;
+ case JOB_ARTIFICER:
+ set_ident_type( OBJ_SCROLLS, SCR_RECHARGING, ID_KNOWN_TYPE );
+
default:
break;
}
@@ -4177,6 +4198,96 @@ bool _needs_butchering_tool()
return (true);
}
+static bool _choose_wand()
+{
+ // Wand-choosing interface for Artificers -- Greenberg/Bane
+
+ const wand_type startwand[5] = { WAND_ENSLAVEMENT, WAND_CONFUSION,
+ WAND_MAGIC_DARTS, WAND_FROST, WAND_FLAME };
+ const int num_choices = 5;
+
+ int keyin = 0;
+ if (!Options.random_pick)
+ {
+ _print_character_info();
+
+ textcolor( CYAN );
+ cprintf(EOL "You have a choice of wands: "
+ "(Press %% for a list of aptitudes)" EOL);
+
+ for (int i = 0; i < num_choices; i++)
+ {
+ textcolor(LIGHTGREY);
+
+ const char letter = 'a' + i;
+ cprintf("%c - %s" EOL, letter, wand_type_name(startwand[i]));
+ }
+
+ textcolor(BROWN);
+ cprintf(EOL "* - Random choice; "
+ "Bksp - Back to species and class selection; "
+ "X - Quit" EOL);
+
+ cprintf(EOL);
+
+ do
+ {
+ textcolor( CYAN );
+ cprintf(EOL "Which wand? ");
+ textcolor( LIGHTGREY );
+
+ keyin = c_getch();
+
+ switch (keyin)
+ {
+ case 'X':
+ cprintf(EOL "Goodbye!");
+ end(0);
+ break;
+ case CK_BKSP:
+ case CK_ESCAPE:
+ case ' ':
+ return (false);
+ case '\r':
+ case '%':
+ list_commands('%');
+ return _choose_wand();
+ default:
+ break;
+ }
+ }
+ while (keyin != '*' && (keyin < 'a' || keyin >= ('a' + num_choices)));
+ }
+
+ if (Options.random_pick || keyin == '*')
+ {
+ keyin = random2(num_choices);
+ keyin += 'a';
+ }
+
+ const wand_type choice = startwand[keyin - 'a'];
+ int nCharges;
+ switch (choice)
+ {
+ case WAND_MAGIC_DARTS:
+ case WAND_ENSLAVEMENT:
+ nCharges = 6;
+ break;
+ case WAND_FROST:
+ case WAND_FLAME:
+ nCharges = 7;
+ break;
+ default:
+ nCharges = 8;
+ break;
+ }
+
+ _newgame_make_item(3, EQ_NONE, OBJ_WANDS, choice, -1, 1,
+ nCharges, 0);
+
+ return (true);
+}
+
bool _give_items_skills()
{
char keyn;
@@ -5293,6 +5404,35 @@ bool _give_items_skills()
_create_wanderer();
break;
+ case JOB_ARTIFICER:
+ // Equipment. Knife and armor or robe.
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_KNIFE);
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR,
+ ARM_LEATHER_ARMOUR, ARM_ROBE);
+ // 1 wand of random effects and one chosen lesser wand
+ _newgame_make_item(2, EQ_NONE, OBJ_WANDS, WAND_RANDOM_EFFECTS, -1, 1,
+ 6, 0);
+ // Choice of lesser wands: confusion (8), enslavement (8),
+ // slowing (8), magic dart (6), frost (7), flame (7)
+ if (!_choose_wand())
+ return (false);
+
+ // If a supporting wand was chosen, hand out a dagger instead of
+ // the knife.
+ if (you.inv[3].sub_type == WAND_CONFUSION
+ || you.inv[3].sub_type == WAND_ENSLAVEMENT)
+ {
+ you.inv[0].sub_type = WPN_DAGGER;
+ }
+
+ // Skills
+ you.skills[SK_EVOCATIONS] = 4;
+ you.skills[SK_TRAPS_DOORS] = 3;
+ //you.skills[SK_CROSSBOWS] = 2;
+ you.skills[SK_DODGING] = 2;
+ you.skills[SK_FIGHTING] = 1;
+ break;
+
default:
break;
}