-
Notifications
You must be signed in to change notification settings - Fork 2
/
pray.c
229 lines (207 loc) · 5.67 KB
/
pray.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
/* SCCS Id: @(#)pray.c 2.1 87/10/07
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
#include "hack.h"
extern char *nomovemsg;
extern struct monst *mkmon_at();
extern struct obj *mkobj_at();
dopray() { /* M. Stephenson (1.0.3b) */
#ifdef PRAYERS
if (u.ublesscnt > 0) { /* disturbing the gods too much */
u.ublesscnt += 200;
u.uluck -= 3;
if (u.uluck < LUCKMIN) u.uluck = LUCKMIN;
#ifdef HARD
u.ugangr++;
angrygods();
#else
if (u.ugangr++) angrygods();
else { /* exactly one warning */
pline("A voice booms out: You have angered us,");
pline("Disturb us again at your own risk!");
}
#endif
} else if (u.uluck < 0) angrygods(); /* a bad boy/girl */
else pleased(); /* or a good boy/girl */
#endif
nomovemsg = "You finished your prayer.";
nomul(-3);
return(1);
}
#ifdef PRAYERS
angrygods() {
register int tmp;
pline ("You get the feeling the gods are angry...");
/* changed from tmp = u.ugangr + abs (u.uluck) -- rph */
tmp = 3*u.ugangr + (u.uluck > 0 ? -u.uluck/3 : -u.uluck);
tmp = (tmp > 15 ? 15 : tmp); /* lets be a little reasonable */
switch (tmp ? rn2(tmp): 0) {
case 0:
case 1: pline("but nothing appears to happen.");
break;
case 2:
case 3: pline("A voice booms out: You are arrogant, mortal.");
pline("You must relearn your lessons!");
if (u.ulevel > 1) losexp();
else {
u.uexp = 0;
flags.botl = 1;
}
break;
case 4:
case 5:
case 6: pline("A black glow surrounds you.");
rndcurse();
break;
case 7:
case 8: pline("A voice booms out: You dare to call upon us?");
pline("Then, die mortal!");
mkmon_at('&', u.ux, u.uy);
break;
default: pline("Suddenly, a bolt of lightning strikes you!");
pline("You are fried to a crisp.");
killer = "pissed off deity";
done("died");
break;
}
u.ublesscnt = 250;
return(0);
}
pleased() {
char *tmp, *hcolor();
u.ugangr--;
if (u.ugangr < 0) u.ugangr = 0;
pline("You feel the gods are pleased.");
switch(rn2((u.uluck + 6)/2)) {
case 0: pline("but nothing seems to happen.");
break;
case 1:
if(!uwep) {
if(uleft && uleft->cursed) {
pline("your left hand glows amber.");
uleft->cursed = 0;
} else if(uright && uright->cursed) {
pline("your right hand glows amber.");
uright->cursed = 0;
} else pline("but nothing seems to happen.");
break;
}
#ifdef KAA
if(uwep->olet == WEAPON_SYM) {
if (uwep->cursed) {
uwep->cursed=0;
pline("Your %s %s.", aobjnam(uwep,"softly glow"),
Hallucination ? hcolor() : "amber");
} else if(uwep->otyp >= ARROW && uwep->otyp <= SPEAR) {
uwep->dknown=1;
tmp = Hallucination ? hcolor() : "light blue";
pline("Your %s with a%s %s aura.", aobjnam(uwep,"softly glow"),
index("aeiou",*tmp) ? "n" : "", tmp);
}
} else
#endif
pline("but nothing seems to happen.");
break;
case 2:
case 3:
pline("A %s glow surrounds you",
Hallucination ? hcolor() : "golden");
u.uhp = u.uhpmax += 5;
u.ustr = u.ustrmax;
if (u.uhunger < 900) init_uhunger();
if (u.uluck < 0) u.uluck = 0;
if (Blinded) Blinded = 1;
flags.botl = 1;
break;
case 4:
case 5: pline("A voice booms out: We are pleased with your progress,");
pline("and grant you the gift of");
if (!(HTelepat & INTRINSIC)) {
HTelepat |= INTRINSIC;
pline ("Telepathy,");
} else if (!(Fast & INTRINSIC)) {
Fast |= INTRINSIC;
pline ("Speed,");
} else if (!(Stealth & INTRINSIC)) {
Stealth |= INTRINSIC;
pline ("Stealth,");
} else {
if (!(Protection & INTRINSIC)) {
Protection |= INTRINSIC;
if (!u.ublessed) u.ublessed = rnd(3) + 1;
} else u.ublessed++;
pline ("our protection,");
}
pline ("Use it wisely in our names!");
break;
case 6: pline ("An object appears at your feet!");
#ifdef SPELLS
mkobj_at('+', u.ux, u.uy);
#else
mkobj_at('?', u.ux, u.uy);
#endif
break;
case 7: pline("A voice booms out: We crown thee...");
pline("The Hand of Elbereth!");
HInvis |= INTRINSIC;
HSee_invisible |= INTRINSIC;
HFire_resistance |= INTRINSIC;
HCold_resistance |= INTRINSIC;
HPoison_resistance |= INTRINSIC;
#ifdef RPH
if(uwep && (uwep->otyp == LONG_SWORD))
oname(uwep, "Excalibur");
#endif
break;
default: impossible("Confused deity!");
break;
}
u.ublesscnt = 300;
#ifdef HARD
u.ublesscnt += (u.udemigod * 1000);
#endif
return(0);
}
#endif /* PRAYERS /**/
#ifdef NEWCLASS
doturn() { /* Knights & Priest(esse)s only please */
register struct monst *mtmp;
register int xlev = 6;
extern char pl_character[];
if((pl_character[0] != 'P') &&
(pl_character[0] != 'K')) {
pline("You don't know how to turn undead!");
return(0);
}
if (Inhell) {
pline("Being in hell, your gods won't help you.");
aggravate();
return(0);
}
pline("Calling upon your gods, you chant an arcane formula.");
for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
if(cansee(mtmp->mx,mtmp->my)) {
if(index(UNDEAD,mtmp->data->mlet) ||
((mtmp->data->mlet == '&') && (u.ulevel > 10))) {
if(Confusion) {
pline("Unfortunately, your voice falters.");
mtmp->mflee = mtmp->mfroz = mtmp->msleep = 0;
} else if (! resist(mtmp, '+', 0, TELL))
switch (mtmp->data->mlet) {
case 'V': xlev += 2;
case 'W': xlev += 4;
case 'Z': if(u.ulevel >= xlev) {
if(!resist(mtmp, '+', 0, NOTELL)) {
pline("You destroy the %s", monnam(mtmp));
mondied(mtmp);
} else mtmp->mflee = 1;
} else mtmp->mflee = 1;
break;
default: mtmp->mflee = 1;
break;
}
}
}
nomul(-5);
return(1);
}
#endif /* NEWCLASS /**/