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