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-07-01 14:51:30 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-07-01 14:51:30 +0000
commit4ab0743df7118a918cf0522c06fe1d0dbf35ebe6 (patch)
treee18e0927f10250a0a6d3331bf70bc9d9299fdcf7 /crawl-ref/source/newgame.cc
parent2dd7f14dcfbe77a389638e948e21d5a6db272935 (diff)
downloadcrawl-ref-4ab0743df7118a918cf0522c06fe1d0dbf35ebe6.tar.gz
crawl-ref-4ab0743df7118a918cf0522c06fe1d0dbf35ebe6.zip
Reorder classes in _give_items_skills() in newgame.cc to match that of
the selection screen. Should be more sensible and easier to read this way. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6294 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/newgame.cc')
-rw-r--r--crawl-ref/source/newgame.cc1037
1 files changed, 518 insertions, 519 deletions
diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc
index ff4d4b23ed..02029e328c 100644
--- a/crawl-ref/source/newgame.cc
+++ b/crawl-ref/source/newgame.cc
@@ -4092,53 +4092,97 @@ bool _give_items_skills()
break;
- case JOB_WIZARD:
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS,
- you.species == SP_OGRE_MAGE ? WPN_QUARTERSTAFF :
- player_genus(GENPC_DWARVEN) ? WPN_HAMMER
- : WPN_DAGGER);
+ case JOB_GLADIATOR:
+ // Equipment.
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ if (!_choose_weapon())
+ return (false);
- switch (random2(7))
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR,
+ ARM_LEATHER_ARMOUR, ARM_ANIMAL_SKIN);
+
+ _newgame_make_item(2, EQ_SHIELD, OBJ_ARMOUR, ARM_SHIELD,
+ ARM_BUCKLER);
+
+ _newgame_make_item(3, EQ_HELMET, OBJ_ARMOUR, ARM_HELMET, ARM_CAP);
+
+ // Small races get stones, the others nets.
+ if (player_size(PSIZE_BODY) < SIZE_MEDIUM)
{
- case 0:
- case 1:
- default:
- set_equip_desc( you.inv[1], ISFLAG_EMBROIDERED_SHINY );
- break;
- case 2:
- case 3:
- set_equip_desc( you.inv[1], ISFLAG_GLOWING );
- break;
- case 4:
- case 5:
- set_equip_desc( you.inv[1], ISFLAG_RUNED );
- break;
- case 6:
- set_equip_race( you.inv[1], ISFLAG_ELVEN );
- break;
+ _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_STONE, -1,
+ 10 + roll_dice( 2, 10 ));
+ }
+ else
+ {
+ _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
+ 4);
}
- // Extra items being tested:
- if (!_choose_book( you.inv[2], BOOK_MINOR_MAGIC_I, 3 ))
- return (false);
+ // Skills.
+ you.skills[SK_FIGHTING] = 2;
+ you.skills[SK_THROWING] = 2;
+ you.skills[SK_DODGING] = 2;
+ you.skills[SK_SHIELDS] = 2;
+ you.skills[SK_UNARMED_COMBAT] = 2;
+ weap_skill = 3;
+ break;
- you.skills[SK_DODGING] = 1;
- you.skills[SK_STEALTH] = 1;
- you.skills[(coinflip() ? SK_DODGING : SK_STEALTH)]++;
- you.skills[SK_SPELLCASTING] = 2;
- you.skills[SK_CONJURATIONS] = 1;
- you.skills[SK_ENCHANTMENTS] = 1;
- you.skills[SK_SPELLCASTING + random2(3)]++;
- you.skills[SK_SUMMONINGS + random2(5)]++;
+ case JOB_MONK:
+ you.equip[EQ_WEAPON] = -1; // Monks fight unarmed.
- if (player_genus(GENPC_DWARVEN))
- you.skills[SK_MACES_FLAILS] = 1;
+ _newgame_make_item(0, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+
+ you.skills[SK_FIGHTING] = 3;
+ you.skills[SK_UNARMED_COMBAT] = 4;
+ you.skills[SK_DODGING] = 3;
+ you.skills[SK_STEALTH] = 2;
+ break;
+
+ case JOB_BERSERKER:
+ you.religion = GOD_TROG;
+ you.piety = 35;
+
+ // WEAPONS
+ if (you.has_claws())
+ you.equip[EQ_WEAPON] = -1; // Trolls/Ghouls fight unarmed.
else
- you.skills[SK_SHORT_BLADES] = 1;
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_HAND_AXE);
- you.skills[SK_STAVES] = 1;
+ // ARMOUR
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ANIMAL_SKIN);
+
+ // SKILLS
+ you.skills[SK_FIGHTING] = 3;
+ you.skills[SK_DODGING] = 2;
+ weap_skill = 3;
+
+ if (you_can_wear(EQ_BODY_ARMOUR))
+ you.skills[SK_ARMOUR] = 2;
+ else
+ {
+ you.skills[SK_DODGING]++;
+ you.skills[SK_ARMOUR] = 1; // for the eventual dragon scale mail :)
+ }
+ break;
+
+ case JOB_PALADIN:
+ you.religion = GOD_SHINING_ONE;
+ you.piety = 28;
+
+ // Equipment.
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_FALCHION);
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_RING_MAIL,
+ ARM_ROBE);
+ _newgame_make_item(2, EQ_SHIELD, OBJ_ARMOUR, ARM_SHIELD, ARM_BUCKLER);
+ _newgame_make_item(3, EQ_NONE, OBJ_POTIONS, POT_HEALING);
+
+ // Skills.
+ you.skills[(player_light_armour() ? SK_DODGING : SK_ARMOUR)] = 2;
+ you.skills[SK_FIGHTING] = 2;
+ you.skills[SK_SHIELDS] = 2;
+ you.skills[SK_LONG_BLADES] = 3;
+ you.skills[SK_INVOCATIONS] = 2;
break;
case JOB_PRIEST:
@@ -4279,67 +4323,313 @@ bool _give_items_skills()
weap_skill = 3;
break;
- case JOB_THIEF:
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
- _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_HAND_CROSSBOW);
+ case JOB_CHAOS_KNIGHT:
+ {
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD, -1,
+ 1, random2(3), random2(3));
- _newgame_make_item(2, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
- _newgame_make_item(3, EQ_CLOAK, OBJ_ARMOUR, ARM_CLOAK);
- _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_DART, -1,
- 10 + roll_dice( 2, 10 ));
+ if (!_choose_weapon())
+ return (false);
- if (you.species == SP_SPRIGGAN)
+ if (Options.chaos_knight != GOD_NO_GOD
+ && Options.chaos_knight != GOD_RANDOM)
{
- _make_rod(you.inv[0], STAFF_STRIKING);
- you.skills[SK_EVOCATIONS] = 1;
+ ng_ck = you.religion =
+ static_cast<god_type>( Options.chaos_knight );
+ }
+ else if (Options.random_pick || Options.chaos_knight == GOD_RANDOM)
+ {
+ you.religion = (one_chance_in(3) ? GOD_XOM :
+ coinflip() ? GOD_MAKHLEB
+ : GOD_LUGONU);
+ ng_ck = GOD_RANDOM;
}
+ else
+ {
+ _print_character_info();
- you.skills[SK_SHORT_BLADES] = 2;
- you.skills[SK_FIGHTING] = 1;
- you.skills[SK_THROWING] = 1;
- you.skills[SK_DARTS] = 1;
- you.skills[SK_DODGING] = 2;
- you.skills[SK_STEALTH] = 2;
- you.skills[SK_STABBING] = 1;
- // Increase one of Dodging/Stealth/Stabbing by 1.
- you.skills[SK_DODGING + random2(3)]++;
- you.skills[SK_TRAPS_DOORS] = 2;
- break;
+ textcolor( CYAN );
+ cprintf(EOL "Which god of chaos do you wish to serve?" EOL);
- case JOB_GLADIATOR:
- // Equipment.
+ // Both Xom and Makhleb are okay choices for everyone.
+ textcolor( LIGHTGREY );
+ cprintf("a - Xom of Chaos" EOL);
+ cprintf("b - Makhleb the Destroyer" EOL);
+ cprintf("c - Lugonu the Unformed" EOL);
+
+ textcolor( BROWN );
+ cprintf(EOL "* - Random choice; "
+ "Bksp - Back to species and class selection; "
+ "X - Quit" EOL);
+
+ if (Options.prev_ck != GOD_NO_GOD)
+ {
+ textcolor(BROWN);
+ cprintf(EOL "Enter - %s" EOL,
+ Options.prev_ck == GOD_XOM ? "Xom" :
+ Options.prev_ck == GOD_MAKHLEB ? "Makhleb" :
+ Options.prev_ck == GOD_LUGONU ? "Lugonu"
+ : "Random");
+ textcolor(LIGHTGREY);
+ }
+
+ do
+ {
+ keyn = c_getch();
+
+ switch (keyn)
+ {
+ case 'X':
+ cprintf(EOL "Goodbye!");
+ end(0);
+ break;
+ case CK_BKSP:
+ case CK_ESCAPE:
+ case ' ':
+ return (false);
+ case '\r':
+ case '\n':
+ if (Options.prev_ck == GOD_NO_GOD)
+ break;
+
+ if (Options.prev_ck != GOD_RANDOM)
+ {
+ you.religion = static_cast<god_type>(Options.prev_ck);
+ break;
+ }
+ keyn = '*'; // for ng_ck setting
+ // fall-through for random
+ case '*':
+ case '+':
+ you.religion = (one_chance_in(3) ? GOD_XOM :
+ coinflip() ? GOD_MAKHLEB
+ : GOD_LUGONU);
+ break;
+ case 'a':
+ you.religion = GOD_XOM;
+ break;
+ case 'b':
+ you.religion = GOD_MAKHLEB;
+ break;
+ case 'c':
+ you.religion = GOD_LUGONU;
+ break;
+ default:
+ break;
+ }
+ }
+ while (you.religion == GOD_NO_GOD);
+
+ ng_ck = (keyn == '*') ? GOD_RANDOM
+ : you.religion;
+ }
+
+ int plusses = 4 - you.inv[0].plus - you.inv[0].plus2;
+ ASSERT(plusses >= 0);
+
+ if (one_chance_in(5))
+ set_equip_desc( you.inv[0], ISFLAG_RUNED );
+
+ if (one_chance_in(5))
+ set_equip_desc( you.inv[0], ISFLAG_GLOWING );
+
+ weap_skill = 2;
+
+ if (you.religion != GOD_XOM)
+ {
+ // For Lugonu and Makhleb don't hand out enchanted armour.
+ // Distribute remaining enchantment points on the weapon.
+ const int help = random2(plusses + 1);
+ you.inv[0].plus += help;
+ you.inv[0].plus2 += plusses - help;
+ plusses = 0;
+ }
+
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE, -1,
+ 1, plusses);
+
+ you.skills[SK_FIGHTING] = 3;
+ you.skills[SK_ARMOUR] = 1;
+ you.skills[SK_DODGING] = 1;
+ you.skills[(coinflip()? SK_ARMOUR : SK_DODGING)]++;
+
+ if (you.religion == GOD_XOM)
+ {
+ you.skills[SK_FIGHTING]++;
+ // The new (piety-aware) Xom uses piety in his own special way...
+ // (Namely, 100 is neutral.)
+ you.piety = 100;
+
+ // The new Xom also uses gift_timeout in his own special way...
+ // (Namely, a countdown to becoming bored.)
+ you.gift_timeout = random2(40) + random2(40);
+ }
+ else // Makhleb or Lugonu
+ {
+ you.skills[SK_INVOCATIONS] = 2;
+
+ if (you.religion == GOD_LUGONU)
+ {
+ // Chaos Knights of Lugonu start in the Abyss. We need
+ // to mark this unusual occurrence, so the player
+ // doesn't get early access to OOD items, etc.
+ you.char_direction = GDT_GAME_START;
+ you.piety = 38;
+ }
+ else
+ you.piety = 25;
+ }
+ break;
+ }
+ case JOB_DEATH_KNIGHT:
_newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
if (!_choose_weapon())
return (false);
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR,
- ARM_LEATHER_ARMOUR, ARM_ANIMAL_SKIN);
+ weap_skill = 2;
- _newgame_make_item(2, EQ_SHIELD, OBJ_ARMOUR, ARM_SHIELD,
- ARM_BUCKLER);
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ _newgame_make_item(2, EQ_NONE, OBJ_BOOKS, BOOK_NECROMANCY);
- _newgame_make_item(3, EQ_HELMET, OBJ_ARMOUR, ARM_HELMET, ARM_CAP);
+ choice = DK_NO_SELECTION;
- // Small races get stones, the others nets.
- if (player_size(PSIZE_BODY) < SIZE_MEDIUM)
+ // Order is important here. -- bwr
+ if (you.species == SP_DEMIGOD)
+ choice = DK_NECROMANCY;
+ else if (Options.death_knight != DK_NO_SELECTION
+ && Options.death_knight != DK_RANDOM)
{
- _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_STONE, -1,
- 10 + roll_dice( 2, 10 ));
+ ng_dk = choice = Options.death_knight;
+ }
+ else if (Options.random_pick || Options.death_knight == DK_RANDOM)
+ {
+ ng_dk = DK_RANDOM;
+
+ if (Options.good_random && !_has_good_necromancy_apts())
+ choice = DK_YREDELEMNUL;
+ else
+ choice = (coinflip() ? DK_NECROMANCY : DK_YREDELEMNUL);
}
else
{
- _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
- 4);
+ _print_character_info();
+
+ textcolor( CYAN );
+ cprintf(EOL "From where do you draw your power?" EOL);
+
+ if (_has_good_necromancy_apts())
+ textcolor(LIGHTGREY);
+ else
+ textcolor(DARKGREY);
+
+ cprintf("a - Necromantic magic" EOL);
+
+ // Yredelemnul is an okay choice for everyone.
+ textcolor(LIGHTGREY);
+ cprintf("b - the god Yredelemnul" EOL);
+
+ textcolor( BROWN );
+ cprintf(EOL "* - Random choice; "
+ "Bksp - Back to species and class selection; "
+ "X - Quit" EOL);
+
+ if (Options.prev_dk != DK_NO_SELECTION)
+ {
+ textcolor(BROWN);
+ cprintf(EOL "Enter - %s" EOL,
+ Options.prev_dk == DK_NECROMANCY ? "Necromancy" :
+ Options.prev_dk == DK_YREDELEMNUL ? "Yredelemnul"
+ : "Random");
+ }
+
+ do
+ {
+ keyn = c_getch();
+
+ switch (keyn)
+ {
+ case 'X':
+ cprintf(EOL "Goodbye!");
+ end(0);
+ break;
+ case CK_BKSP:
+ case ESCAPE:
+ case ' ':
+ return (false);
+ case '\r':
+ case '\n':
+ if (Options.prev_dk == DK_NO_SELECTION)
+ break;
+
+ if (Options.prev_dk != DK_RANDOM)
+ {
+ choice = Options.prev_dk;
+ break;
+ }
+ keyn = '*'; // for ng_dk setting
+ // fall-through for random
+ case '+':
+ if (keyn == '+' && !_has_good_necromancy_apts())
+ {
+ choice = DK_YREDELEMNUL;
+ break;
+ }
+ // fall-through for random
+ case '*':
+ choice = coinflip()? DK_NECROMANCY : DK_YREDELEMNUL;
+ break;
+ case 'a':
+ cprintf(EOL "Very well.");
+ choice = DK_NECROMANCY;
+ break;
+ case 'b':
+ choice = DK_YREDELEMNUL;
+ default:
+ break;
+ }
+ }
+ while (choice == DK_NO_SELECTION);
+
+ ng_dk = (keyn == '*'? DK_RANDOM : choice);
+ }
+
+ switch (choice)
+ {
+ default: // this shouldn't happen anyways -- bwr
+ case DK_NECROMANCY:
+ you.skills[SK_SPELLCASTING] = 1;
+ you.skills[SK_NECROMANCY] = 2;
+ break;
+ case DK_YREDELEMNUL:
+ you.religion = GOD_YREDELEMNUL;
+ you.piety = 28;
+ you.inv[0].plus = 1;
+ you.inv[0].plus2 = 1;
+ you.inv[2].quantity = 0;
+ you.skills[SK_INVOCATIONS] = 3;
+ break;
}
- // Skills.
you.skills[SK_FIGHTING] = 2;
- you.skills[SK_THROWING] = 2;
- you.skills[SK_DODGING] = 2;
- you.skills[SK_SHIELDS] = 2;
- you.skills[SK_UNARMED_COMBAT] = 2;
- weap_skill = 3;
+ you.skills[SK_ARMOUR] = 1;
+ you.skills[SK_DODGING] = 1;
+ you.skills[SK_STEALTH] = 1;
+ break;
+
+ case JOB_HEALER:
+ you.religion = GOD_ELYVILON;
+ you.piety = 55;
+
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_QUARTERSTAFF);
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ _newgame_make_item(2, EQ_NONE, OBJ_POTIONS, POT_HEALING);
+ _newgame_make_item(3, EQ_NONE, OBJ_POTIONS, POT_HEAL_WOUNDS);
+
+ you.skills[SK_FIGHTING] = 2;
+ you.skills[SK_STAVES] = 3;
+ you.skills[SK_DODGING] = 1;
+ you.skills[SK_INVOCATIONS] = 4;
break;
case JOB_NECROMANCER:
@@ -4355,143 +4645,53 @@ bool _give_items_skills()
you.skills[SK_STAVES] = 1;
break;
- case JOB_PALADIN:
- you.religion = GOD_SHINING_ONE;
- you.piety = 28;
-
- // Equipment.
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_FALCHION);
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_RING_MAIL,
- ARM_ROBE);
- _newgame_make_item(2, EQ_SHIELD, OBJ_ARMOUR, ARM_SHIELD, ARM_BUCKLER);
- _newgame_make_item(3, EQ_NONE, OBJ_POTIONS, POT_HEALING);
-
- // Skills.
- you.skills[(player_light_armour() ? SK_DODGING : SK_ARMOUR)] = 2;
- you.skills[SK_FIGHTING] = 2;
- you.skills[SK_SHIELDS] = 2;
- you.skills[SK_LONG_BLADES] = 3;
- you.skills[SK_INVOCATIONS] = 2;
- break;
-
- case JOB_ASSASSIN:
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_DAGGER, -1,
- 1, 1 + to_hit_bonus, 1 + (2 - to_hit_bonus));
- _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_BLOWGUN);
- _newgame_make_item(2, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
- _newgame_make_item(3, EQ_CLOAK, OBJ_ARMOUR, ARM_CLOAK);
- _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_NEEDLE, -1,
- 5 + roll_dice(2, 5));
- set_item_ego_type(you.inv[4], OBJ_MISSILES, SPMSL_POISONED);
- _newgame_make_item(5, EQ_NONE, OBJ_MISSILES, MI_NEEDLE, -1,
- 1 + random2(4));
- set_item_ego_type(you.inv[5], OBJ_MISSILES, SPMSL_CURARE);
-
- you.skills[SK_SHORT_BLADES] = 2;
- you.skills[SK_FIGHTING] = 2;
- you.skills[SK_DODGING] = 1;
- you.skills[SK_STEALTH] = 3;
- you.skills[SK_STABBING] = 2;
- you.skills[SK_DARTS] = 2;
- break;
-
- case JOB_BERSERKER:
- you.religion = GOD_TROG;
- you.piety = 35;
-
- // WEAPONS
- if (you.has_claws())
- you.equip[EQ_WEAPON] = -1; // Trolls/Ghouls fight unarmed.
- else
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_HAND_AXE);
-
- // ARMOUR
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ANIMAL_SKIN);
+ case JOB_WIZARD:
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS,
+ you.species == SP_OGRE_MAGE ? WPN_QUARTERSTAFF :
+ player_genus(GENPC_DWARVEN) ? WPN_HAMMER
+ : WPN_DAGGER);
- // SKILLS
- you.skills[SK_FIGHTING] = 3;
- you.skills[SK_DODGING] = 2;
- weap_skill = 3;
+ _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
- if (you_can_wear(EQ_BODY_ARMOUR))
- you.skills[SK_ARMOUR] = 2;
- else
+ switch (random2(7))
{
- you.skills[SK_DODGING]++;
- you.skills[SK_ARMOUR] = 1; // for the eventual dragon scale mail :)
- }
- break;
-
- case JOB_HUNTER:
- // Equipment.
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_DAGGER);
-
- switch (you.species)
- { case SP_MOUNTAIN_DWARF:
- case SP_HILL_ORC:
- case SP_CENTAUR:
- case SP_OGRE:
- case SP_OGRE_MAGE:
- you.inv[0].sub_type = WPN_HAND_AXE;
- break;
- case SP_GHOUL:
- case SP_TROLL:
- _newgame_clear_item(0);
- break;
+ case 0:
+ case 1:
default:
+ set_equip_desc( you.inv[1], ISFLAG_EMBROIDERED_SHINY );
break;
- }
-
- switch (you.species)
- {
- case SP_SLUDGE_ELF:
- case SP_HILL_ORC:
- case SP_MERFOLK:
- _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_JAVELIN, -1, 6);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
- 2);
- break;
- case SP_TROLL:
- case SP_OGRE:
- _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_LARGE_ROCK, -1, 5);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
- 3);
- break;
-
- case SP_HALFLING:
- case SP_GNOME:
- case SP_KOBOLD:
- _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_SLING);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_SLING_BULLET, -1,
- 15 + random2avg(21, 5) + random2avg(15, 2));
+ case 2:
+ case 3:
+ set_equip_desc( you.inv[1], ISFLAG_GLOWING );
break;
-
- case SP_MOUNTAIN_DWARF:
- _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_CROSSBOW);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_BOLT, -1,
- 15 + random2avg(21, 5));
+ case 4:
+ case 5:
+ set_equip_desc( you.inv[1], ISFLAG_RUNED );
break;
-
- default:
- _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_BOW);
- _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_ARROW, -1,
- 15 + random2avg(21, 5));
+ case 6:
+ set_equip_race( you.inv[1], ISFLAG_ELVEN );
break;
}
- _newgame_make_item(3, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_LEATHER_ARMOUR,
- ARM_ANIMAL_SKIN);
+ // Extra items being tested:
+ if (!_choose_book( you.inv[2], BOOK_MINOR_MAGIC_I, 3 ))
+ return (false);
- // Skills.
- you.skills[SK_FIGHTING] = 2;
- you.skills[SK_DODGING] = 2;
- you.skills[SK_STEALTH] = 1;
- weap_skill = 1;
+ you.skills[SK_DODGING] = 1;
+ you.skills[SK_STEALTH] = 1;
+ you.skills[(coinflip() ? SK_DODGING : SK_STEALTH)]++;
+ you.skills[SK_SPELLCASTING] = 2;
+ you.skills[SK_CONJURATIONS] = 1;
+ you.skills[SK_ENCHANTMENTS] = 1;
+ you.skills[SK_SPELLCASTING + random2(3)]++;
+ you.skills[SK_SUMMONINGS + random2(5)]++;
- if (is_range_weapon(you.inv[1]))
- you.skills[range_skill(you.inv[1])] = 4;
+ if (player_genus(GENPC_DWARVEN))
+ you.skills[SK_MACES_FLAILS] = 1;
else
- you.skills[SK_THROWING] = 4;
+ you.skills[SK_SHORT_BLADES] = 1;
+
+ you.skills[SK_STAVES] = 1;
break;
case JOB_CONJURER:
@@ -4721,316 +4921,6 @@ bool _give_items_skills()
you.skills[SK_ENCHANTMENTS] = 2;
break;
-
- case JOB_DEATH_KNIGHT:
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
-
- if (!_choose_weapon())
- return (false);
-
- weap_skill = 2;
-
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
- _newgame_make_item(2, EQ_NONE, OBJ_BOOKS, BOOK_NECROMANCY);
-
- choice = DK_NO_SELECTION;
-
- // Order is important here. -- bwr
- if (you.species == SP_DEMIGOD)
- choice = DK_NECROMANCY;
- else if (Options.death_knight != DK_NO_SELECTION
- && Options.death_knight != DK_RANDOM)
- {
- ng_dk = choice = Options.death_knight;
- }
- else if (Options.random_pick || Options.death_knight == DK_RANDOM)
- {
- ng_dk = DK_RANDOM;
-
- if (Options.good_random && !_has_good_necromancy_apts())
- choice = DK_YREDELEMNUL;
- else
- choice = (coinflip() ? DK_NECROMANCY : DK_YREDELEMNUL);
- }
- else
- {
- _print_character_info();
-
- textcolor( CYAN );
- cprintf(EOL "From where do you draw your power?" EOL);
-
- if (_has_good_necromancy_apts())
- textcolor(LIGHTGREY);
- else
- textcolor(DARKGREY);
-
- cprintf("a - Necromantic magic" EOL);
-
- // Yredelemnul is an okay choice for everyone.
- textcolor(LIGHTGREY);
- cprintf("b - the god Yredelemnul" EOL);
-
- textcolor( BROWN );
- cprintf(EOL "* - Random choice; "
- "Bksp - Back to species and class selection; "
- "X - Quit" EOL);
-
- if (Options.prev_dk != DK_NO_SELECTION)
- {
- textcolor(BROWN);
- cprintf(EOL "Enter - %s" EOL,
- Options.prev_dk == DK_NECROMANCY ? "Necromancy" :
- Options.prev_dk == DK_YREDELEMNUL ? "Yredelemnul"
- : "Random");
- }
-
- do
- {
- keyn = c_getch();
-
- switch (keyn)
- {
- case 'X':
- cprintf(EOL "Goodbye!");
- end(0);
- break;
- case CK_BKSP:
- case ESCAPE:
- case ' ':
- return (false);
- case '\r':
- case '\n':
- if (Options.prev_dk == DK_NO_SELECTION)
- break;
-
- if (Options.prev_dk != DK_RANDOM)
- {
- choice = Options.prev_dk;
- break;
- }
- keyn = '*'; // for ng_dk setting
- // fall-through for random
- case '+':
- if (keyn == '+' && !_has_good_necromancy_apts())
- {
- choice = DK_YREDELEMNUL;
- break;
- }
- // fall-through for random
- case '*':
- choice = coinflip()? DK_NECROMANCY : DK_YREDELEMNUL;
- break;
- case 'a':
- cprintf(EOL "Very well.");
- choice = DK_NECROMANCY;
- break;
- case 'b':
- choice = DK_YREDELEMNUL;
- default:
- break;
- }
- }
- while (choice == DK_NO_SELECTION);
-
- ng_dk = (keyn == '*'? DK_RANDOM : choice);
- }
-
- switch (choice)
- {
- default: // this shouldn't happen anyways -- bwr
- case DK_NECROMANCY:
- you.skills[SK_SPELLCASTING] = 1;
- you.skills[SK_NECROMANCY] = 2;
- break;
- case DK_YREDELEMNUL:
- you.religion = GOD_YREDELEMNUL;
- you.piety = 28;
- you.inv[0].plus = 1;
- you.inv[0].plus2 = 1;
- you.inv[2].quantity = 0;
- you.skills[SK_INVOCATIONS] = 3;
- break;
- }
-
- you.skills[SK_FIGHTING] = 2;
- you.skills[SK_ARMOUR] = 1;
- you.skills[SK_DODGING] = 1;
- you.skills[SK_STEALTH] = 1;
- break;
-
- case JOB_CHAOS_KNIGHT:
- {
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD, -1,
- 1, random2(3), random2(3));
-
- if (!_choose_weapon())
- return (false);
-
- if (Options.chaos_knight != GOD_NO_GOD
- && Options.chaos_knight != GOD_RANDOM)
- {
- ng_ck = you.religion =
- static_cast<god_type>( Options.chaos_knight );
- }
- else if (Options.random_pick || Options.chaos_knight == GOD_RANDOM)
- {
- you.religion = (one_chance_in(3) ? GOD_XOM :
- coinflip() ? GOD_MAKHLEB
- : GOD_LUGONU);
- ng_ck = GOD_RANDOM;
- }
- else
- {
- _print_character_info();
-
- textcolor( CYAN );
- cprintf(EOL "Which god of chaos do you wish to serve?" EOL);
-
- // Both Xom and Makhleb are okay choices for everyone.
- textcolor( LIGHTGREY );
- cprintf("a - Xom of Chaos" EOL);
- cprintf("b - Makhleb the Destroyer" EOL);
- cprintf("c - Lugonu the Unformed" EOL);
-
- textcolor( BROWN );
- cprintf(EOL "* - Random choice; "
- "Bksp - Back to species and class selection; "
- "X - Quit" EOL);
-
- if (Options.prev_ck != GOD_NO_GOD)
- {
- textcolor(BROWN);
- cprintf(EOL "Enter - %s" EOL,
- Options.prev_ck == GOD_XOM ? "Xom" :
- Options.prev_ck == GOD_MAKHLEB ? "Makhleb" :
- Options.prev_ck == GOD_LUGONU ? "Lugonu"
- : "Random");
- textcolor(LIGHTGREY);
- }
-
- do
- {
- keyn = c_getch();
-
- switch (keyn)
- {
- case 'X':
- cprintf(EOL "Goodbye!");
- end(0);
- break;
- case CK_BKSP:
- case CK_ESCAPE:
- case ' ':
- return (false);
- case '\r':
- case '\n':
- if (Options.prev_ck == GOD_NO_GOD)
- break;
-
- if (Options.prev_ck != GOD_RANDOM)
- {
- you.religion = static_cast<god_type>(Options.prev_ck);
- break;
- }
- keyn = '*'; // for ng_ck setting
- // fall-through for random
- case '*':
- case '+':
- you.religion = (one_chance_in(3) ? GOD_XOM :
- coinflip() ? GOD_MAKHLEB
- : GOD_LUGONU);
- break;
- case 'a':
- you.religion = GOD_XOM;
- break;
- case 'b':
- you.religion = GOD_MAKHLEB;
- break;
- case 'c':
- you.religion = GOD_LUGONU;
- break;
- default:
- break;
- }
- }
- while (you.religion == GOD_NO_GOD);
-
- ng_ck = (keyn == '*') ? GOD_RANDOM
- : you.religion;
- }
-
- int plusses = 4 - you.inv[0].plus - you.inv[0].plus2;
- ASSERT(plusses >= 0);
-
- if (one_chance_in(5))
- set_equip_desc( you.inv[0], ISFLAG_RUNED );
-
- if (one_chance_in(5))
- set_equip_desc( you.inv[0], ISFLAG_GLOWING );
-
- weap_skill = 2;
-
- if (you.religion != GOD_XOM)
- {
- // For Lugonu and Makhleb don't hand out enchanted armour.
- // Distribute remaining enchantment points on the weapon.
- const int help = random2(plusses + 1);
- you.inv[0].plus += help;
- you.inv[0].plus2 += plusses - help;
- plusses = 0;
- }
-
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE, -1,
- 1, plusses);
-
- you.skills[SK_FIGHTING] = 3;
- you.skills[SK_ARMOUR] = 1;
- you.skills[SK_DODGING] = 1;
- you.skills[(coinflip()? SK_ARMOUR : SK_DODGING)]++;
-
- if (you.religion == GOD_XOM)
- {
- you.skills[SK_FIGHTING]++;
- // The new (piety-aware) Xom uses piety in his own special way...
- // (Namely, 100 is neutral.)
- you.piety = 100;
-
- // The new Xom also uses gift_timeout in his own special way...
- // (Namely, a countdown to becoming bored.)
- you.gift_timeout = random2(40) + random2(40);
- }
- else // Makhleb or Lugonu
- {
- you.skills[SK_INVOCATIONS] = 2;
-
- if (you.religion == GOD_LUGONU)
- {
- // Chaos Knights of Lugonu start in the Abyss. We need
- // to mark this unusual occurrence, so the player
- // doesn't get early access to OOD items, etc.
- you.char_direction = GDT_GAME_START;
- you.piety = 38;
- }
- else
- you.piety = 25;
- }
- break;
- }
- case JOB_HEALER:
- you.religion = GOD_ELYVILON;
- you.piety = 55;
-
- _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_QUARTERSTAFF);
- _newgame_make_item(1, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
- _newgame_make_item(2, EQ_NONE, OBJ_POTIONS, POT_HEALING);
- _newgame_make_item(3, EQ_NONE, OBJ_POTIONS, POT_HEAL_WOUNDS);
-
- you.skills[SK_FIGHTING] = 2;
- you.skills[SK_STAVES] = 3;
- you.skills[SK_DODGING] = 1;
- you.skills[SK_INVOCATIONS] = 4;
- break;
-
case JOB_REAVER:
_newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
if (!_choose_weapon())
@@ -5070,15 +4960,124 @@ bool _give_items_skills()
you.skills[SK_ENCHANTMENTS] = 1;
break;
- case JOB_MONK:
- you.equip[EQ_WEAPON] = -1; // Monks fight unarmed.
+ case JOB_THIEF:
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_SHORT_SWORD);
+ _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_HAND_CROSSBOW);
- _newgame_make_item(0, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ _newgame_make_item(2, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ _newgame_make_item(3, EQ_CLOAK, OBJ_ARMOUR, ARM_CLOAK);
+ _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_DART, -1,
+ 10 + roll_dice( 2, 10 ));
- you.skills[SK_FIGHTING] = 3;
- you.skills[SK_UNARMED_COMBAT] = 4;
- you.skills[SK_DODGING] = 3;
- you.skills[SK_STEALTH] = 2;
+ if (you.species == SP_SPRIGGAN)
+ {
+ _make_rod(you.inv[0], STAFF_STRIKING);
+ you.skills[SK_EVOCATIONS] = 1;
+ }
+
+ you.skills[SK_SHORT_BLADES] = 2;
+ you.skills[SK_FIGHTING] = 1;
+ you.skills[SK_THROWING] = 1;
+ you.skills[SK_DARTS] = 1;
+ you.skills[SK_DODGING] = 2;
+ you.skills[SK_STEALTH] = 2;
+ you.skills[SK_STABBING] = 1;
+ // Increase one of Dodging/Stealth/Stabbing by 1.
+ you.skills[SK_DODGING + random2(3)]++;
+ you.skills[SK_TRAPS_DOORS] = 2;
+ break;
+
+ case JOB_ASSASSIN:
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_DAGGER, -1,
+ 1, 1 + to_hit_bonus, 1 + (2 - to_hit_bonus));
+ _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_BLOWGUN);
+ _newgame_make_item(2, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_ROBE);
+ _newgame_make_item(3, EQ_CLOAK, OBJ_ARMOUR, ARM_CLOAK);
+ _newgame_make_item(4, EQ_NONE, OBJ_MISSILES, MI_NEEDLE, -1,
+ 5 + roll_dice(2, 5));
+ set_item_ego_type(you.inv[4], OBJ_MISSILES, SPMSL_POISONED);
+ _newgame_make_item(5, EQ_NONE, OBJ_MISSILES, MI_NEEDLE, -1,
+ 1 + random2(4));
+ set_item_ego_type(you.inv[5], OBJ_MISSILES, SPMSL_CURARE);
+
+ you.skills[SK_SHORT_BLADES] = 2;
+ you.skills[SK_FIGHTING] = 2;
+ you.skills[SK_DODGING] = 1;
+ you.skills[SK_STEALTH] = 3;
+ you.skills[SK_STABBING] = 2;
+ you.skills[SK_DARTS] = 2;
+ break;
+
+ case JOB_HUNTER:
+ // Equipment.
+ _newgame_make_item(0, EQ_WEAPON, OBJ_WEAPONS, WPN_DAGGER);
+
+ switch (you.species)
+ { case SP_MOUNTAIN_DWARF:
+ case SP_HILL_ORC:
+ case SP_CENTAUR:
+ case SP_OGRE:
+ case SP_OGRE_MAGE:
+ you.inv[0].sub_type = WPN_HAND_AXE;
+ break;
+ case SP_GHOUL:
+ case SP_TROLL:
+ _newgame_clear_item(0);
+ break;
+ default:
+ break;
+ }
+
+ switch (you.species)
+ {
+ case SP_SLUDGE_ELF:
+ case SP_HILL_ORC:
+ case SP_MERFOLK:
+ _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_JAVELIN, -1, 6);
+ _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
+ 2);
+ break;
+ case SP_TROLL:
+ case SP_OGRE:
+ _newgame_make_item(1, EQ_NONE, OBJ_MISSILES, MI_LARGE_ROCK, -1, 5);
+ _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_THROWING_NET, -1,
+ 3);
+ break;
+
+ case SP_HALFLING:
+ case SP_GNOME:
+ case SP_KOBOLD:
+ _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_SLING);
+ _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_SLING_BULLET, -1,
+ 15 + random2avg(21, 5) + random2avg(15, 2));
+ break;
+
+ case SP_MOUNTAIN_DWARF:
+ _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_CROSSBOW);
+ _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_BOLT, -1,
+ 15 + random2avg(21, 5));
+ break;
+
+ default:
+ _newgame_make_item(1, EQ_NONE, OBJ_WEAPONS, WPN_BOW);
+ _newgame_make_item(2, EQ_NONE, OBJ_MISSILES, MI_ARROW, -1,
+ 15 + random2avg(21, 5));
+ break;
+ }
+
+ _newgame_make_item(3, EQ_BODY_ARMOUR, OBJ_ARMOUR, ARM_LEATHER_ARMOUR,
+ ARM_ANIMAL_SKIN);
+
+ // Skills.
+ you.skills[SK_FIGHTING] = 2;
+ you.skills[SK_DODGING] = 2;
+ you.skills[SK_STEALTH] = 1;
+ weap_skill = 1;
+
+ if (is_range_weapon(you.inv[1]))
+ you.skills[range_skill(you.inv[1])] = 4;
+ else
+ you.skills[SK_THROWING] = 4;
break;
case JOB_WANDERER: