Branch data Line data Source code
1 : : /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
2 : : /* effect2.c */
3 : :
4 : : #include "glob.h"
5 : :
6 : 0 : void knowledge(int blessing)
7 : : {
8 [ # # ]: 0 : if (blessing < 0)
9 : 0 : mprint("You feel ignorant.");
10 : : else {
11 : 0 : mprint("You feel knowledgeable!");
12 : 0 : menuclear();
13 : 0 : menuprint("Current Point Total: ");
14 : 0 : menulongprint(calc_points());
15 : 0 : menuprint("\nAlignment:");
16 [ # # ]: 0 : if (Player.alignment == 0)
17 : 0 : menuprint("Neutral, embodying the Cosmic Balance");
18 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 10)
19 : 0 : menuprint("Neutral, tending toward ");
20 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 50)
21 : 0 : menuprint("Neutral-");
22 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 100) ;
23 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 200)
24 : 0 : menuprint("Servant of ");
25 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 400)
26 : 0 : menuprint("Master of ");
27 [ # # ][ # # ]: 0 : else if (abs(Player.alignment) < 800)
28 : 0 : menuprint("The Essence of ");
29 : 0 : else menuprint("The Ultimate Avatar of ");
30 [ # # ]: 0 : if (Player.alignment < 0) menuprint("Chaos\n");
31 [ # # ]: 0 : else if (Player.alignment > 0) menuprint("Law\n");
32 : 0 : showmenu();
33 : 0 : morewait();
34 : 0 : menuclear();
35 : 0 : menuprint("Current stati:\n");
36 [ # # ]: 0 : if (Player.status[BLINDED])
37 : 0 : menuprint("Blinded\n");
38 [ # # ]: 0 : if (Player.status[SLOWED])
39 : 0 : menuprint("Slowed\n");
40 : : #ifdef DEBUG
41 : : if (Player.status[SLOWED])
42 : : fprintf(DG_debug_log, "Slowed is %d\n", Player.status[SLOWED] );
43 : : #endif
44 [ # # ]: 0 : if (Player.status[HASTED])
45 : 0 : menuprint("Hasted\n");
46 [ # # ]: 0 : if (Player.status[DISPLACED])
47 : 0 : menuprint("Displaced\n");
48 [ # # ]: 0 : if (Player.status[SLEPT])
49 : 0 : menuprint("Slept\n");
50 [ # # ]: 0 : if (Player.status[DISEASED])
51 : 0 : menuprint("Diseased\n");
52 [ # # ]: 0 : if (Player.status[POISONED])
53 : 0 : menuprint("Poisoned\n");
54 [ # # ]: 0 : if (Player.status[BREATHING])
55 : 0 : menuprint("Breathing\n");
56 [ # # ]: 0 : if (Player.status[INVISIBLE])
57 : 0 : menuprint("Invisible\n");
58 [ # # ]: 0 : if (Player.status[REGENERATING])
59 : 0 : menuprint("Regenerating\n");
60 [ # # ]: 0 : if (Player.status[VULNERABLE])
61 : 0 : menuprint("Vulnerable\n");
62 [ # # ]: 0 : if (Player.status[BERSERK])
63 : 0 : menuprint("Berserk\n");
64 [ # # ]: 0 : if (Player.status[IMMOBILE])
65 : 0 : menuprint("Immobile\n");
66 [ # # ]: 0 : if (Player.status[ALERT])
67 : 0 : menuprint("Alert\n");
68 [ # # ]: 0 : if (Player.status[AFRAID])
69 : 0 : menuprint("Afraid\n");
70 [ # # ]: 0 : if (Player.status[ACCURATE])
71 : 0 : menuprint("Accurate\n");
72 [ # # ]: 0 : if (Player.status[HERO])
73 : 0 : menuprint("Heroic\n");
74 [ # # ]: 0 : if (Player.status[LEVITATING])
75 : 0 : menuprint("Levitating\n");
76 [ # # ]: 0 : if (Player.status[TRUESIGHT]) /* FIXED! 12/30/98 DG */
77 : 0 : menuprint("Sharp\n");
78 [ # # ]: 0 : if (Player.status[SHADOWFORM])
79 : 0 : menuprint("Shadowy\n");
80 [ # # ]: 0 : if (Player.status[ILLUMINATION])
81 : 0 : menuprint("Glowing\n");
82 [ # # ]: 0 : if (Player.status[DEFLECTION])
83 : 0 : menuprint("Buffered\n");
84 [ # # ]: 0 : if (Player.status[RETURNING])
85 : 0 : menuprint("Returning\n");
86 : 0 : showmenu();
87 : 0 : morewait();
88 : 0 : menuclear();
89 : 0 : menuprint("Immunities:\n");
90 [ # # ]: 0 : if (p_immune(NORMAL_DAMAGE))
91 : 0 : menuprint("Normal Damage\n");
92 [ # # ]: 0 : if (p_immune(FLAME))
93 : 0 : menuprint("Flame\n");
94 [ # # ]: 0 : if (p_immune(ELECTRICITY))
95 : 0 : menuprint("Electricity\n");
96 [ # # ]: 0 : if (p_immune(COLD))
97 : 0 : menuprint("Cold\n");
98 [ # # ]: 0 : if (p_immune(POISON))
99 : 0 : menuprint("Poison\n");
100 [ # # ]: 0 : if (p_immune(ACID))
101 : 0 : menuprint("Acid\n");
102 [ # # ]: 0 : if (p_immune(FEAR))
103 : 0 : menuprint("Fear\n");
104 [ # # ]: 0 : if (p_immune(SLEEP))
105 : 0 : menuprint("Sleep\n");
106 [ # # ]: 0 : if (p_immune(NEGENERGY))
107 : 0 : menuprint("Negative Energies\n");
108 [ # # ]: 0 : if (p_immune(THEFT))
109 : 0 : menuprint("Theft\n");
110 [ # # ]: 0 : if (p_immune(GAZE))
111 : 0 : menuprint("Gaze\n");
112 [ # # ]: 0 : if (p_immune(INFECTION))
113 : 0 : menuprint("Infection\n");
114 : 0 : showmenu();
115 : 0 : morewait();
116 : 0 : menuclear();
117 : 0 : menuprint("Ranks:\n");
118 [ # # # # : 0 : switch(Player.rank[LEGION]) {
# # ]
119 : : case COMMANDANT:
120 : 0 : menuprint("Commandant of the Legion");
121 : 0 : break;
122 : : case COLONEL:
123 : 0 : menuprint("Colonel of the Legion");
124 : 0 : break;
125 : : case FORCE_LEADER:
126 : 0 : menuprint("Force Leader of the Legion");
127 : 0 : break;
128 : : case CENTURION:
129 : 0 : menuprint("Centurion of the Legion");
130 : 0 : break;
131 : : case LEGIONAIRE:
132 : 0 : menuprint("Legionaire");
133 : 0 : break;
134 : : }
135 [ # # ]: 0 : if (Player.rank[LEGION] > 0) {
136 : 0 : menuprint(" (");
137 : 0 : menunumprint(Player.guildxp[LEGION]);
138 : 0 : menuprint(" XP).\n");
139 : : }
140 [ # # # # : 0 : switch(Player.rank[ARENA]) {
# # # ]
141 : : case -1:
142 : 0 : menuprint("Ex-gladiator\n");
143 : 0 : break;
144 : : case CHAMPION:
145 : 0 : menuprint("Gladiator Champion");
146 : 0 : break;
147 : : case GLADIATOR:
148 : 0 : menuprint("Gladiator of the Arena");
149 : 0 : break;
150 : : case RETIARIUS:
151 : 0 : menuprint("Retiarius of the Arena");
152 : 0 : break;
153 : : case BESTIARIUS:
154 : 0 : menuprint("Bestiarius of the Arena");
155 : 0 : break;
156 : : case TRAINEE:
157 : 0 : menuprint("Gladiator Trainee of the Arena");
158 : 0 : break;
159 : : }
160 [ # # ]: 0 : if (Player.rank[ARENA] > 0) {
161 : 0 : menuprint(" (Opponent ");
162 : 0 : menunumprint(Arena_Opponent);
163 : 0 : menuprint(")\n");
164 : : }
165 [ # # # # : 0 : switch(Player.rank[COLLEGE]) {
# # ]
166 : : case ARCHMAGE:
167 : 0 : menuprint("Archmage of the Collegium Magii");
168 : 0 : break;
169 : : case MAGE:
170 : 0 : menuprint("Collegium Magii: Mage");
171 : 0 : break;
172 : : case PRECEPTOR:
173 : 0 : menuprint("Collegium Magii: Preceptor");
174 : 0 : break;
175 : : case STUDENT:
176 : 0 : menuprint("Collegium Magii: Student");
177 : 0 : break;
178 : : case NOVICE:
179 : 0 : menuprint("Collegium Magii: Novice");
180 : 0 : break;
181 : : }
182 [ # # ]: 0 : if (Player.rank[COLLEGE] > 0) {
183 : 0 : menuprint(" (");
184 : 0 : menunumprint(Player.guildxp[COLLEGE]);
185 : 0 : menuprint(" XP).\n");
186 : : }
187 [ # # # # : 0 : switch(Player.rank[NOBILITY]) {
# # ]
188 : : case DUKE:
189 : 0 : menuprint("Duke of Rampart");
190 : 0 : break;
191 : : case LORD:
192 : 0 : menuprint("Peer of the Realm");
193 : 0 : break;
194 : : case KNIGHT:
195 : 0 : menuprint("Order of the Knights of Rampart");
196 : 0 : break;
197 : : case ESQUIRE:
198 : 0 : menuprint("Squire of Rampart");
199 : 0 : break;
200 : : case COMMONER:
201 : 0 : menuprint("Commoner");
202 : 0 : break;
203 : : default:
204 : 0 : menuprint("Lowly Commoner\n");
205 : 0 : break;
206 : : }
207 [ # # ]: 0 : if (Player.rank[NOBILITY] > 1) {
208 : 0 : menuprint(" (");
209 : 0 : menunumprint(Player.rank[NOBILITY] - 1);
210 : 0 : menuprint(ordinal(Player.rank[NOBILITY] - 1));
211 : 0 : menuprint(" Quest Completed)\n");
212 : : }
213 [ # # ]: 0 : else if (Player.rank[NOBILITY] == 1) {
214 : 0 : menuprint(" (1st Quest Undertaken)\n");
215 : : }
216 [ # # # # : 0 : switch(Player.rank[CIRCLE]) {
# # # ]
217 : : case -1:
218 : 0 : menuprint("Former member of the Circle.\n");
219 : 0 : break;
220 : : case PRIME:
221 : 0 : menuprint("Prime Sorceror of the Inner Circle");
222 : 0 : break;
223 : : case HIGHSORCEROR:
224 : 0 : menuprint("High Sorceror of the Inner Circle");
225 : 0 : break;
226 : : case SORCEROR:
227 : 0 : menuprint("Member of the Circle of Sorcerors");
228 : 0 : break;
229 : : case ENCHANTER:
230 : 0 : menuprint("Member of the Circle of Enchanters");
231 : 0 : break;
232 : : case INITIATE:
233 : 0 : menuprint("Member of the Circle of Initiates");
234 : 0 : break;
235 : : }
236 [ # # ]: 0 : if (Player.rank[CIRCLE] > 0) {
237 : 0 : menuprint(" (");
238 : 0 : menunumprint(Player.guildxp[CIRCLE]);
239 : 0 : menuprint(" XP).\n");
240 : : }
241 [ # # # # : 0 : switch(Player.rank[ORDER]) {
# # # ]
242 : : case -1:
243 : 0 : menuprint("Washout from the Order of Paladins\n");
244 : 0 : break;
245 : : case JUSTICIAR:
246 : 0 : menuprint("Justiciar of the Order of Paladins");
247 : 0 : break;
248 : : case PALADIN:
249 : 0 : menuprint("Paladin of the Order");
250 : 0 : break;
251 : : case CHEVALIER:
252 : 0 : menuprint("Chevalier of the Order");
253 : 0 : break;
254 : : case GUARDIAN:
255 : 0 : menuprint("Guardian of the Order");
256 : 0 : break;
257 : : case GALLANT:
258 : 0 : menuprint("Gallant of the Order");
259 : 0 : break;
260 : : }
261 [ # # ]: 0 : if (Player.rank[ORDER] > 0) {
262 : 0 : menuprint(" (");
263 : 0 : menunumprint(Player.guildxp[ORDER]);
264 : 0 : menuprint(" XP).\n");
265 : : }
266 [ # # # # : 0 : switch(Player.rank[THIEVES]) {
# # ]
267 : : case SHADOWLORD:
268 : 0 : menuprint("Guild of Thieves: Shadowlord");
269 : 0 : break;
270 : : case TMASTER:
271 : 0 : menuprint("Guild of Thieves: Master Thief");
272 : 0 : break;
273 : : case THIEF:
274 : 0 : menuprint("Guild of Thieves: Thief");
275 : 0 : break;
276 : : case ATHIEF:
277 : 0 : menuprint("Guild of Thieves: Apprentice Thief");
278 : 0 : break;
279 : : case TMEMBER:
280 : 0 : menuprint("Guild of Thieves: Candidate Member");
281 : 0 : break;
282 : : }
283 [ # # ]: 0 : if (Player.rank[THIEVES] > 0) {
284 : 0 : menuprint(" (");
285 : 0 : menunumprint(Player.guildxp[THIEVES]);
286 : 0 : menuprint(" XP).\n");
287 : : }
288 [ # # # # : 0 : switch(Player.rank[PRIESTHOOD]) {
# # ]
289 : : case LAY:
290 : 0 : menuprint("A lay devotee of ");
291 : 0 : break;
292 : : case ACOLYTE:
293 : 0 : menuprint("An Acolyte of ");
294 : 0 : break;
295 : : case PRIEST:
296 : 0 : menuprint("A Priest of ");
297 : 0 : break;
298 : : case SPRIEST:
299 : 0 : menuprint("A Senior Priest of ");
300 : 0 : break;
301 : : case HIGHPRIEST:
302 : 0 : menuprint("The High Priest of ");
303 : 0 : break;
304 : : }
305 [ # # # # : 0 : switch(Player.patron) {
# # # ]
306 : : case ODIN:
307 : 0 : menuprint("Odin");
308 : 0 : break;
309 : : case SET:
310 : 0 : menuprint("Set");
311 : 0 : break;
312 : : case ATHENA:
313 : 0 : menuprint("Athena");
314 : 0 : break;
315 : : case HECATE:
316 : 0 : menuprint("Hecate");
317 : 0 : break;
318 : : case DRUID:
319 : 0 : menuprint("Druidism");
320 : 0 : break;
321 : : case DESTINY:
322 : 0 : menuprint("the Lords of Destiny");
323 : 0 : break;
324 : : }
325 [ # # ]: 0 : if (Player.rank[PRIESTHOOD] > 0) {
326 : 0 : menuprint(" (");
327 : 0 : menunumprint(Player.guildxp[PRIESTHOOD]);
328 : 0 : menuprint(" XP).\n");
329 : : }
330 : : #ifdef INCLUDE_MONKS
331 [ # # # # : 0 : switch(Player.rank[MONKS]) {
# # # # ]
332 : : case MONK_GRANDMASTER:
333 : 0 : menuprint("Tholian Monks: Grandmaster");
334 : 0 : break;
335 : : case MONK_MASTER_TEARS:
336 : 0 : menuprint("Tholian Monks: Master of Tears");
337 : 0 : break;
338 : : case MONK_MASTER_PAINS:
339 : 0 : menuprint("Tholian Monks: Master of Pain");
340 : 0 : break;
341 : : case MONK_MASTER_SIGHS:
342 : 0 : menuprint("Tholian Monks: Master of Sighs");
343 : 0 : break;
344 : : case MONK_MASTER:
345 : 0 : menuprint("Tholian Monks: Master");
346 : 0 : break;
347 : : case MONK_MONK:
348 : 0 : menuprint("Tholian Monks: Monk");
349 : 0 : break;
350 : : case MONK_TRAINEE:
351 : 0 : menuprint("Tholian Monks: Trainee");
352 : 0 : break;
353 : : }
354 [ # # ]: 0 : if (Player.rank[MONKS] > 0) {
355 : 0 : menuprint(" (");
356 : 0 : menunumprint(Player.guildxp[MONKS]);
357 : 0 : menuprint(" XP).\n");
358 : : }
359 : : #endif
360 [ # # ]: 0 : if (Player.rank[ADEPT] > 0)
361 : 0 : menuprint("**************\n*Omegan Adept*\n**************\n");
362 : 0 : showmenu();
363 : 0 : morewait();
364 : 0 : xredraw();
365 : : }
366 : 0 : }
367 : :
368 : :
369 : : /* Recreates the current level */
370 : 0 : void flux(int blessing)
371 : : {
372 : 0 : mprint("The universe warps around you!");
373 [ # # ]: 0 : if (Current_Environment == E_CITY) {
374 : 0 : mprint("Sensing dangerous high order magic, the Collegium Magii");
375 : 0 : mprint("and the Circle of Sorcerors join forces to negate the spell.");
376 : 0 : mprint("You are zapped by an antimagic ray!!!");
377 : 0 : dispel(-1);
378 : 0 : mprint("The universe unwarps itself....");
379 : : }
380 [ # # ]: 0 : else if (Current_Environment != Current_Dungeon)
381 : 0 : mprint("Odd.... No effect!");
382 : : else {
383 : 0 : mprint("You stagger as the very nature of reality warps!");
384 : 0 : erase_level();
385 : 0 : Level->generated = FALSE;
386 : 0 : mprint("The fabric of spacetime reknits....");
387 : 0 : change_level(Level->depth-1,Level->depth,TRUE);
388 : : }
389 : 0 : }
390 : :
391 : : /*Turns on displacement status for the player */
392 : 0 : void displace(int blessing)
393 : : {
394 [ # # ]: 0 : if (blessing > -1) {
395 : 0 : mprint("You feel a sense of dislocation.");
396 : 0 : Player.status[DISPLACED] = blessing + random_range(6);
397 : : }
398 : : else {
399 : 0 : mprint("You feel vulnerable");
400 : 0 : Player.status[VULNERABLE] += random_range(6) - blessing;
401 : : }
402 : 0 : }
403 : :
404 : :
405 : 0 : void invisible(int blessing)
406 : : {
407 [ # # ]: 0 : if (blessing > -1) {
408 : 0 : mprint("You feel transparent!");
409 : 0 : Player.status[INVISIBLE]+= 2+5*blessing;
410 : : }
411 : : else {
412 : : #ifdef NEW_QUOTES
413 : 0 : mprint("You feel endangered!");
414 : : #else
415 : : mprint("You feel dangerous!");
416 : : #endif
417 : 0 : Player.status[VULNERABLE] +=
418 : 0 : random_range(10)+1;
419 : : }
420 : 0 : }
421 : :
422 : :
423 : 0 : void warp(int blessing)
424 : : {
425 : : int newlevel;
426 [ # # ]: 0 : if (Current_Environment != Current_Dungeon)
427 : 0 : mprint("How strange! No effect....");
428 : : else {
429 : 0 : newlevel = (int) parsenum("Warp to which level? ");
430 [ # # ][ # # ]: 0 : if (newlevel >= MaxDungeonLevels || blessing < 0 || newlevel < 1) {
[ # # ]
431 : 0 : mprint("You have been deflected!");
432 : 0 : newlevel=random_range(MaxDungeonLevels - 1) + 1;
433 : : }
434 : 0 : mprint("You dematerialize...");
435 : 0 : change_level(Level->depth,newlevel,FALSE);
436 : : }
437 : 0 : roomcheck();
438 : 0 : }
439 : :
440 : 0 : void alert(int blessing)
441 : : {
442 [ # # ]: 0 : if (blessing > -1) {
443 : 0 : mprint("You feel on-the-ball.");
444 : 0 : Player.status[ALERT]+= 4+(5*blessing);
445 : : }
446 : 0 : else sleep_player(abs(blessing)+3);
447 : 0 : }
448 : :
449 : 0 : void regenerate(int blessing)
450 : : {
451 [ # # ]: 0 : if (blessing < 0)
452 : 0 : heal(blessing * 10);
453 : : else {
454 : 0 : mprint("You feel abnormally healthy.");
455 : 0 : Player.status[REGENERATING] += (blessing+1)*50;
456 : : }
457 : 0 : }
458 : :
459 : 0 : void haste(int blessing)
460 : : {
461 [ # # ]: 0 : if (blessing > -1) {
462 [ # # ]: 0 : if (! Player.status[HASTED])
463 : 0 : mprint("The world slows down!");
464 : 0 : else mprint("Nothing much happens.");
465 [ # # ]: 0 : if (Player.status[SLOWED])
466 : 0 : Player.status[SLOWED] = 0;
467 : : /* DAG -- this seems too long */
468 : : /* WDT -- I agree. Next version we'll fiddle it a bit. I suspect
469 : : * that the author of haste/slow didn't really understand the time
470 : : * system (or perhaps the time system's been changed since). */
471 : 0 : Player.status[HASTED] += (blessing*100)+random_range(250);
472 : : }
473 : : else {
474 : 0 : mprint("You feel slower.");
475 [ # # ]: 0 : if (Player.status[HASTED] > 0) mprint("...but the feeling quickly fades.");
476 : : /* DAG don't add, so it can't be come permanent. Also, reduce duration. */
477 [ # # ]: 0 : else Player.status[SLOWED] = max( random_range(100)+50, Player.status[SLOWED] );
478 : : /* was: else Player.status[SLOWED] += random_range(250)+250; */
479 : : }
480 : 0 : }
481 : :
482 : 0 : void recover_stat(int blessing)
483 : : {
484 [ # # ]: 0 : if (blessing < 0) {
485 : 0 : mprint("You feel a cold surge!");
486 [ # # # # : 0 : switch(random_range(6)) {
# # # ]
487 : 0 : case 0: Player.str = min(Player.str-1,Player.maxstr-1); break;
488 : 0 : case 1: Player.con = min(Player.con-1,Player.maxcon-1); break;
489 : 0 : case 2: Player.dex = min(Player.dex-1,Player.maxdex-1); break;
490 : 0 : case 3: Player.agi = min(Player.agi-1,Player.maxagi-1); break;
491 : 0 : case 4: Player.iq = min(Player.iq-1,Player.maxiq-1); break;
492 : 0 : case 5: Player.pow = min(Player.pow-1,Player.maxpow-1); break;
493 : : }
494 : : }
495 : : else {
496 : 0 : mprint("You feel a warm tingle!");
497 : 0 : Player.str = max(Player.str,Player.maxstr);
498 : 0 : Player.con = max(Player.con,Player.maxcon);
499 : 0 : Player.dex = max(Player.dex,Player.maxdex);
500 : 0 : Player.agi = max(Player.agi,Player.maxagi);
501 : 0 : Player.iq = max(Player.iq,Player.maxiq);
502 : 0 : Player.pow = max(Player.pow,Player.maxpow);
503 : : }
504 : 0 : calc_melee();
505 : 0 : }
506 : :
507 : 0 : void augment(int blessing)
508 : : {
509 [ # # ]: 0 : if (blessing < 0) {
510 : 0 : mprint("You feel a cold surge!");
511 [ # # # # : 0 : switch(random_range(6)) {
# # # ]
512 : 0 : case 0: Player.str = min(Player.str-1,Player.maxstr-1); break;
513 : 0 : case 1: Player.con = min(Player.con-1,Player.maxcon-1); break;
514 : 0 : case 2: Player.dex = min(Player.dex-1,Player.maxdex-1); break;
515 : 0 : case 3: Player.agi = min(Player.agi-1,Player.maxagi-1); break;
516 : 0 : case 4: Player.iq = min(Player.iq-1,Player.maxiq-1); break;
517 : 0 : case 5: Player.pow = min(Player.pow-1,Player.maxpow-1); break;
518 : : }
519 : : }
520 [ # # ]: 0 : else if (blessing == 0) {
521 : 0 : mprint("You feel a warm tingle!");
522 [ # # # # : 0 : switch(random_range(6)) {
# # # ]
523 : 0 : case 0: Player.str = max(Player.str+1,Player.maxstr+1); break;
524 : 0 : case 1: Player.con = max(Player.con+1,Player.maxcon+1); break;
525 : 0 : case 2: Player.dex = max(Player.dex+1,Player.maxdex+1); break;
526 : 0 : case 3: Player.agi = max(Player.agi+1,Player.maxagi+1); break;
527 : 0 : case 4: Player.iq = max(Player.iq+1,Player.maxiq+1); break;
528 : 0 : case 5: Player.pow = max(Player.pow+1,Player.maxpow+1); break;
529 : : }
530 : : }
531 : : else {
532 : 0 : mprint("You feel a hot flash!");
533 : 0 : Player.str = max(Player.str+1,Player.maxstr+1);
534 : 0 : Player.con = max(Player.con+1,Player.maxcon+1);
535 : 0 : Player.dex = max(Player.dex+1,Player.maxdex+1);
536 : 0 : Player.agi = max(Player.agi+1,Player.maxagi+1);
537 : 0 : Player.iq = max(Player.iq+1,Player.maxiq+1);
538 : 0 : Player.pow = max(Player.pow+1,Player.maxpow+1);
539 : : }
540 : 0 : calc_melee();
541 : 0 : }
542 : :
543 : 0 : void breathe(int blessing)
544 : : {
545 [ # # ]: 0 : if (blessing > -1) {
546 : 0 : mprint("Your breath is energized!");
547 : 0 : Player.status[BREATHING] += 6+blessing;
548 : : }
549 : : else {
550 : 0 : mprint("You choke as your lungs fill with water!");
551 : 0 : p_damage(50,UNSTOPPABLE,"drowning");
552 : : }
553 : 0 : }
554 : :
555 : :
556 : 0 : void i_chaos(pob o)
557 : : {
558 [ # # ]: 0 : if (Player.alignment < 0) {
559 : 0 : Player.alignment -= random_range(20);
560 : 0 : mprint("You feel deliciously chaotic!");
561 : 0 : gain_experience(abs(Player.alignment)*10);
562 : : }
563 : : else {
564 : 0 : mprint("You feel a sense of inner turmoil!");
565 : : }
566 : : /* Potion of Chaos always makes player more chaotic. PGM */
567 : 0 : Player.alignment -= random_range(20);
568 : 0 : }
569 : :
570 : 0 : void i_law(pob o)
571 : : {
572 [ # # ]: 0 : if (Player.alignment > 0) {
573 : 0 : Player.alignment += random_range(20);
574 : 0 : mprint("You feel wonderfully lawful!");
575 : 0 : gain_experience(Player.alignment*10);
576 : : }
577 : : else {
578 : 0 : mprint("You feel a sense of inner constraint!");
579 : : }
580 : : /* Potion of Law always makes player more lawful. PGM */
581 : 0 : Player.alignment += random_range(20);
582 : 0 : }
583 : :
584 : 0 : void sanctify(int blessing)
585 : : {
586 [ # # ]: 0 : if (blessing > -1) {
587 [ # # ]: 0 : if (Level->environment == E_TEMPLE)
588 : 0 : mprint("Odd, the spell has no effect. I wonder why.");
589 [ # # ]: 0 : else if (Level->site[Player.x][Player.y].locchar == ALTAR)
590 : 0 : mprint("This site can't get any holier!");
591 [ # # ]: 0 : else if (Player.patron == 0) {
592 : 0 : mprint("The gods are angered!");
593 : 0 : Level->site[Player.x][Player.y].locchar = LAVA;
594 : 0 : Level->site[Player.x][Player.y].p_locf = L_LAVA;
595 : 0 : lset(Player.x, Player.y, CHANGED);
596 : 0 : p_movefunction(L_LAVA);
597 : : }
598 : : else {
599 : 0 : Level->site[Player.x][Player.y].locchar = ALTAR;
600 : 0 : Level->site[Player.x][Player.y].aux = Player.patron;
601 : 0 : Level->site[Player.x][Player.y].p_locf = L_ALTAR;
602 : 0 : lset(Player.x, Player.y, CHANGED);
603 : 0 : mprint("You are standing on sacred ground!");
604 : : }
605 : : }
606 : : else {
607 [ # # ]: 0 : if (Level->site[Player.x][Player.y].locchar == ALTAR) {
608 : 0 : mprint("The altar crumbles before your unholy blast....");
609 : 0 : Level->site[Player.x][Player.y].locchar = FLOOR;
610 : 0 : Level->site[Player.x][Player.y].p_locf = L_NO_OP;
611 : 0 : lset(Player.x, Player.y, CHANGED);
612 [ # # ]: 0 : if (Level->site[Player.x][Player.y].aux == Player.patron) {
613 : 0 : mprint("Your deity is not amused....");
614 : 0 : p_damage(Player.hp-1,UNSTOPPABLE,"Divine Wrath");
615 : : }
616 [ # # ][ # # ]: 0 : else if ((Player.patron == ATHENA) || (Player.patron == ODIN)) {
617 [ # # ][ # # ]: 0 : if ((Level->site[Player.x][Player.y].aux == SET) ||
618 : 0 : (Level->site[Player.x][Player.y].aux == HECATE)) {
619 : 0 : mprint("Your deity applauds the eradication of Chaos' taint");
620 : 0 : gain_experience(1000);
621 : : }
622 : : else {
623 : 0 : mprint("Your deity approves of your action.");
624 : 0 : gain_experience(100);
625 : : }
626 : : }
627 [ # # ][ # # ]: 0 : else if ((Player.patron == SET) || (Player.patron == HECATE)) {
628 [ # # ][ # # ]: 0 : if ((Level->site[Player.x][Player.y].aux == ODIN) ||
629 : 0 : (Level->site[Player.x][Player.y].aux == ATHENA)) {
630 : 0 : mprint("Your deity applauds the obliteration of Law");
631 : 0 : gain_experience(1000);
632 : : }
633 : : else {
634 : 0 : mprint("Your deity approves of your action.");
635 : 0 : gain_experience(100);
636 : : }
637 : : }
638 [ # # ]: 0 : else if (Player.patron == DRUID) {
639 : 0 : mprint("Your attempt to maintain the Balance is applauded....");
640 : 0 : gain_experience(250);
641 : : }
642 : 0 : else mprint("Nothing much happens");
643 : : }
644 : 0 : else mprint("You feel an aura of unholiness arising from this spot....");
645 : : }
646 : 0 : }
647 : :
648 : 0 : void accuracy(int blessing)
649 : : {
650 [ # # ]: 0 : if (blessing > -1) {
651 : 0 : mprint("Everything seems covered in bullseyes!");
652 : 0 : Player.status[ACCURACY] += random_range(5)+1+blessing*5;
653 : 0 : calc_melee();
654 : : }
655 : : else {
656 : 0 : Player.status[ACCURACY]=0;
657 : 0 : calc_melee();
658 : 0 : mprint("Your vision blurs...");
659 : : }
660 : 0 : }
|