Skip to content

Commit 4349ecb

Browse files
committed
More role-specific bits for Draugr.
Draugr can now be Monks (chaotic only). Not role-specific: since Draugr max strength is 20, bump up their carrying capacity. Tweaked stats (INT and WIS are lower).
1 parent 817e2c6 commit 4349ecb

File tree

6 files changed

+90
-9
lines changed

6 files changed

+90
-9
lines changed

doc/evilhack-changelog.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -3422,7 +3422,7 @@ The following changes to date are:
34223422
- Suppress livelogging whilst in explore mode
34233423
- New conduct: never acquired magic resistance
34243424
- New conduct: never acquired reflection
3425-
- New race: Draugr
3425+
- New race: Draugr (initial commit)
34263426
- Revival routine for Draugr race
34273427
- Draugr and critical hits from Sunsword/The Hammer of the Gods
34283428
- Draugr really are undead
@@ -3431,4 +3431,5 @@ The following changes to date are:
34313431
- Draugr as Infidel and crowning
34323432
- Draugr and various interactions with NPC's
34333433
- Draugr can regenerate hit points while in the Valley of the Dead
3434+
- More role-specific bits for Draugr
34343435

src/attrib.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,8 @@ boolean givemsg;
270270
{
271271
int num = incr;
272272

273-
if ((!num) || ((Race_if(PM_GIANT)
274-
|| Race_if(PM_CENTAUR) || Race_if(PM_TORTLE))
273+
if ((!num) || ((Race_if(PM_GIANT) || Race_if(PM_CENTAUR)
274+
|| Race_if(PM_TORTLE) || Race_if(PM_DRAUGR))
275275
&& (!(otmp && otmp->cursed)))) {
276276
if (ABASE(A_STR) < 18)
277277
num = (rn2(4) ? 1 : rnd(6));

src/hack.c

+2
Original file line numberDiff line numberDiff line change
@@ -3557,6 +3557,8 @@ weight_cap()
35573557
youmonst.data->msize = MZ_LARGE;
35583558
}
35593559
} else if (racial_draugr(&youmonst)) {
3560+
carrcap += 100;
3561+
maxcarrcap += 200;
35603562
/* and draugr, but just movement speed here? */
35613563
if (!Upolyd)
35623564
youmonst.data->mmove = 10;

src/role.c

+49-3
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ const struct Role roles[] = {
350350
S_XORN,
351351
ART_EYES_OF_THE_OVERWORLD,
352352
MH_HUMAN | MH_ELF | MH_DWARF | MH_GIANT | MH_CENTAUR
353-
| MH_TORTLE | MH_DROW,
353+
| MH_TORTLE | MH_DROW | MH_DRAUGR,
354354
ROLE_MALE | ROLE_FEMALE | ROLE_LAWFUL | ROLE_NEUTRAL
355355
| ROLE_CHAOTIC,
356356
/* Str Int Wis Dex Con Cha */
@@ -961,6 +961,50 @@ const struct Role draugr_roles[] = {
961961
A_WIS,
962962
0,
963963
-4 },
964+
{ { "Monk", 0 },
965+
{ { "Candidate", 0 },
966+
{ "Novice", 0 },
967+
{ "Initiate", 0 },
968+
{ "Student of Stones", 0 },
969+
{ "Student of Waters", 0 },
970+
{ "Student of Metals", 0 },
971+
{ "Student of Winds", 0 },
972+
{ "Student of Fire", 0 },
973+
{ "Master", 0 } },
974+
"Shan Lai Ching", "Chih Sung-tzu", "Huan Ti", /* Chinese */
975+
"Mon",
976+
"the Monastery of Chan-Sune",
977+
"the Monastery of the Earth-Lord",
978+
PM_MONK,
979+
NON_PM,
980+
NON_PM,
981+
PM_MASTER_PO,
982+
PM_ABBOT,
983+
PM_MASTER_KAEN,
984+
PM_EARTH_ELEMENTAL,
985+
PM_XORN,
986+
S_ELEMENTAL,
987+
S_XORN,
988+
ART_EYES_OF_THE_OVERWORLD,
989+
MH_HUMAN | MH_ELF | MH_DWARF | MH_GIANT | MH_CENTAUR
990+
| MH_TORTLE | MH_DROW | MH_DRAUGR,
991+
ROLE_MALE | ROLE_FEMALE | ROLE_LAWFUL | ROLE_NEUTRAL
992+
| ROLE_CHAOTIC,
993+
/* Str Int Wis Dex Con Cha */
994+
{ 10, 7, 8, 8, 7, 7 },
995+
{ 25, 10, 20, 20, 15, 10 },
996+
/* Init Lower Higher */
997+
{ 12, 0, 0, 8, 1, 0 }, /* Hit points */
998+
{ 2, 2, 0, 2, 0, 2 },
999+
10, /* Energy */
1000+
10,
1001+
8,
1002+
-2,
1003+
2,
1004+
20,
1005+
A_WIS,
1006+
0,
1007+
-4 },
9641008
{ { "Rogue", 0 },
9651009
{ { "Footpad", 0 },
9661010
{ "Cutpurse", 0 },
@@ -1297,7 +1341,7 @@ const struct Race races[] = {
12971341
| MH_TORTLE | MH_DROW | MH_ILLITHID,
12981342
/* Str Int Wis Dex Con Cha */
12991343
{ 3, 3, 3, 3, 3, 3 },
1300-
{ STR19(20), 10, 10, 18, 20, 6 },
1344+
{ STR19(20), 6, 8, 18, 20, 6 },
13011345
/* Init Lower Higher */
13021346
{ 2, 0, 0, 2, 1, 0 }, /* Hit points */
13031347
{ 1, 0, 2, 0, 2, 0 } /* Energy */
@@ -2749,8 +2793,10 @@ role_init()
27492793
urole = draugr_roles[2];
27502794
else if (Role_if(PM_KNIGHT))
27512795
urole = draugr_roles[3];
2752-
else if (Role_if(PM_ROGUE))
2796+
else if (Role_if(PM_MONK))
27532797
urole = draugr_roles[4];
2798+
else if (Role_if(PM_ROGUE))
2799+
urole = draugr_roles[5];
27542800
}
27552801

27562802
/* Fix up the quest leader */

src/u_init.c

+32-2
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,19 @@ struct trobj Monk[] = {
160160
{ FORTUNE_COOKIE, 0, FOOD_CLASS, 3, UNDEF_BLESS },
161161
{ 0, 0, 0, 0, 0 }
162162
};
163+
struct trobj Draugr_Monk[] = {
164+
#define M_BOOK 2
165+
{ GLOVES, 2, ARMOR_CLASS, 1, UNDEF_BLESS },
166+
{ ROBE, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
167+
{ UNDEF_TYP, UNDEF_SPE, SCROLL_CLASS, 1, UNDEF_BLESS },
168+
{ POT_HEALING, 0, POTION_CLASS, 3, UNDEF_BLESS },
169+
{ FOOD_RATION, 0, FOOD_CLASS, 3, 0 },
170+
/* Yes, we know fortune cookies aren't really from China. They were
171+
* invented by George Jung in Los Angeles, California, USA in 1916.
172+
*/
173+
{ FORTUNE_COOKIE, 0, FOOD_CLASS, 3, UNDEF_BLESS },
174+
{ 0, 0, 0, 0, 0 }
175+
};
163176
struct trobj Priest[] = {
164177
{ MACE, 1, WEAPON_CLASS, 1, 1 },
165178
{ ROBE, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
@@ -369,6 +382,7 @@ struct inv_sub {
369382
{ PM_DROW, CLOAK_OF_PROTECTION, DARK_ELVEN_CLOAK },
370383
/* Draugr */
371384
{ PM_DRAUGR, FOOD_RATION, EGG },
385+
{ PM_DRAUGR, FORTUNE_COOKIE, EGG },
372386
/* end */
373387
{ NON_PM, STRANGE_OBJECT, STRANGE_OBJECT }
374388
};
@@ -630,6 +644,16 @@ static const struct def_skill Skill_Mon[] = {
630644
{ P_MARTIAL_ARTS, P_GRAND_MASTER },
631645
{ P_NONE, 0 }
632646
};
647+
static const struct def_skill Skill_Dra_Mon[] = {
648+
{ P_QUARTERSTAFF, P_EXPERT },
649+
{ P_SHURIKEN, P_BASIC },
650+
{ P_SPEAR, P_SKILLED },
651+
{ P_TRIDENT, P_SKILLED },
652+
{ P_BROAD_SWORD, P_BASIC },
653+
{ P_RIDING, P_BASIC },
654+
{ P_MARTIAL_ARTS, P_GRAND_MASTER },
655+
{ P_NONE, 0 }
656+
};
633657
static const struct def_skill Skill_P[] = {
634658
{ P_CLUB, P_EXPERT },
635659
{ P_MACE, P_EXPERT },
@@ -1013,13 +1037,19 @@ u_init()
10131037
static short M_spell[] = { SPE_HEALING, SPE_PROTECTION, SPE_CONFUSE_MONSTER };
10141038

10151039
Monk[M_BOOK].trotyp = M_spell[rn2(90) / 30]; /* [0..2] */
1016-
ini_inv(Monk);
1040+
if (Race_if(PM_DRAUGR))
1041+
ini_inv(Draugr_Monk);
1042+
else
1043+
ini_inv(Monk);
10171044
if (!rn2(4) && !Race_if(PM_DROW))
10181045
ini_inv(Lamp);
10191046
knows_class(ARMOR_CLASS);
10201047
/* sufficiently martial-arts oriented item to ignore language issue */
10211048
knows_object(SHURIKEN);
1022-
skill_init(Skill_Mon);
1049+
if (Race_if(PM_DRAUGR))
1050+
skill_init(Skill_Dra_Mon);
1051+
else
1052+
skill_init(Skill_Mon);
10231053
break;
10241054
}
10251055
case PM_PRIEST:

src/weapon.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -2228,7 +2228,9 @@ const struct def_skill *class_skill;
22282228
P_SKILL(P_QUARTERSTAFF) = P_BASIC;
22292229

22302230
/* set skills for magic */
2231-
if (Role_if(PM_HEALER) || Role_if(PM_MONK)) {
2231+
if (Role_if(PM_HEALER)
2232+
|| (Role_if(PM_MONK)
2233+
&& !Race_if(PM_DRAUGR))) {
22322234
P_SKILL(P_HEALING_SPELL) = P_BASIC;
22332235
} else if (Role_if(PM_INFIDEL)
22342236
&& !Race_if(PM_DRAUGR)) {

0 commit comments

Comments
 (0)