Below is the full text to rnd.c from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/rnd.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code
Attributes | Values |
---|
rdfs:label
| - Source:NetHack 3.1.0/rnd.c
|
rdfs:comment
| - Below is the full text to rnd.c from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/rnd.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code
|
dcterms:subject
| |
dbkwik:nethack/pro...iPageUsesTemplate
| |
abstract
| - Below is the full text to rnd.c from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/rnd.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)rnd.c 3.1 90/22/02 2. /* NetHack may be freely redistributed. See license for details. */ 3. 4. #include "hack.h" 5. 6. #if defined(LINT) && defined(UNIX) /* rand() is long... */ 7. extern int NDECL(rand); 8. #define RND(x) (rand() % x) 9. #else /* LINT */ 10. /* rand() is either random() or lrand48() - see config.h. */ 11. #ifdef UNIX 12. #define RND(x) (int)(Rand() % (long)(x)) 13. #else 14. /* Good luck: the bottom order bits are cyclic. */ 15. #define RND(x) (int)((Rand()>>3) % (x)) 16. #endif 17. #endif /* LINT */ 18. 19. #ifdef OVL0 20. 21. int 22. rn2(x) /* 0 <= rn2(x) < x */ 23. register int x; 24. { 25. #ifdef DEBUG 26. if (x == 0) { 27. impossible("rn2(0) attempted"); 28. return(0); 29. } 30. #endif 31. return(RND(x)); 32. } 33. 34. #endif /* OVL0 */ 35. #ifdef OVLB 36. 37. int 38. rnl(x) /* 0 <= rnl(x) < x; sometimes subtracting Luck */ 39. register int x; /* good luck approaches 0, bad luck approaches (x-1) */ 40. { 41. register int i; 42. 43. #ifdef DEBUG 44. if (x == 0) { 45. impossible("rnl(0) attempted"); 46. return(0); 47. } 48. #endif 49. i = RND(x); 50. 51. if (Luck && rn2(50 - Luck)) { 52. i -= (x <= 15 && Luck >= -5 ? Luck/3 : Luck); 53. if (i < 0) i = 0; 54. else if (i >= x) i = x-1; 55. } 56. 57. return i; 58. } 59. 60. #endif /* OVLB */ 61. #ifdef OVL0 62. 63. int 64. rnd(x) /* 1 <= rnd(x) <= x */ 65. register int x; 66. { 67. #ifdef DEBUG 68. if (x == 0) { 69. impossible("rnd(0) attempted"); 70. return(1); 71. } 72. #endif 73. return(RND(x)+1); 74. } 75. 76. #endif /* OVL0 */ 77. #ifdef OVL1 78. 79. int 80. d(n,x) /* n <= d(n,x) <= (n*x) */ 81. register int n, x; 82. { 83. register int tmp = n; 84. 85. #ifdef DEBUG 86. if (x == 0) { 87. impossible("d(n,0) attempted"); 88. return(1); 89. } 90. #endif 91. while(n--) tmp += RND(x); 92. return(tmp); /* Alea iacta est. -- J.C. */ 93. } 94. 95. #endif /* OVL1 */ 96. #ifdef OVLB 97. 98. int 99. rne(x) /* by stewr 870807 */ 100. register int x; 101. { 102. register int tmp = 1; 103. while(!rn2(x)) tmp++; 104. return(min(tmp,(u.ulevel < 15) ? 5 : (int)u.ulevel/3)); 105. } 106. 107. int 108. rnz(i) 109. int i; 110. { 111. #ifdef LINT 112. int x = i; 113. int tmp = 1000; 114. #else 115. register long x = i; 116. register long tmp = 1000; 117. #endif 118. tmp += rn2(1000); 119. tmp *= rne(4); 120. if (rn2(2)) { x *= tmp; x /= 1000; } 121. else { x *= 1000; x /= tmp; } 122. return((int)x); 123. } 124. 125. #endif /* OVLB */ 126. 127. /*rnd.c*/
|