About: Source:NetHack 2.3e/o init.c   Sponge Permalink

An Entity of Type : owl:Thing, within Data Space : 134.155.108.49:8890 associated with source dataset(s)

Below is the full text to o_init.c from the source code of NetHack 2.3e. To link to a particular line, write [[NetHack 2.3e/o_init.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code

AttributesValues
rdfs:label
  • Source:NetHack 2.3e/o init.c
rdfs:comment
  • Below is the full text to o_init.c from the source code of NetHack 2.3e. To link to a particular line, write [[NetHack 2.3e/o_init.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 o_init.c from the source code of NetHack 2.3e. To link to a particular line, write [[NetHack 2.3e/o_init.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)o_init.c 2.3 88/01/24 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. 4. #include "config.h" /* for typedefs */ 5. #include "objects.h" 6. #include "onames.h" /* for LAST_GEM */ 7. extern char *index(); 8. 9. int 10. letindex(let) register char let; { 11. register int i = 0; 12. register char ch; 13. while((ch = obj_symbols[i++]) != 0) 14. if(ch == let) return(i); 15. return(0); 16. } 17. 18. init_objects(){ 19. register int i, j, first, last, sum, end; 20. register char let, *tmp; 21. 22. /* bug fix to prevent "initialization error" abort on Intel Xenix. 23. * reported by mikew@semike 24. */ 25. for(i = 0; i != sizeof(obj_symbols); i++) 26. bases[i] = 0; 27. 28. /* init base; if probs given check that they add up to 100, 29. otherwise compute probs; shuffle descriptions */ 30. end = SIZE(objects); 31. first = 0; 32. while( first < end ) { 33. let = objects[first].oc_olet; 34. last = first+1; 35. while(last < end && objects[last].oc_olet == let 36. && objects[last].oc_name != NULL) last++; 37. i = letindex(let); 38. if((!i && let != ILLOBJ_SYM) || bases[i] != 0) 39. error("initialization error"); 40. bases[i] = first; 41. 42. if(let == GEM_SYM) setgemprobs(); 43. check: 44. sum = 0; 45. for(j = first; j < last; j++) sum += objects[j].oc_prob; 46. if(sum == 0) { 47. for(j = first; j < last; j++) 48. objects[j].oc_prob = (100+j-first)/(last-first); 49. goto check; 50. } 51. if(sum != 100) 52. error("init-prob error for %c (%d%%)", let, sum); 53. 54. if(objects[first].oc_descr != NULL && let != TOOL_SYM){ 55. /* shuffle, also some additional descriptions */ 56. while(last < end && objects[last].oc_olet == let) 57. last++; 58. j = last; 59. if (let == GEM_SYM) { 60. while(--j > first) 61. /* NOTE: longest color name must be default */ 62. if(!strcmp(objects[j].oc_name,"turquoise")) { 63. if(rn2(2)) /* change from green? */ 64. strcpy(objects[j].oc_descr,"blue"); 65. } else if (!strcmp(objects[j].oc_name,"aquamarine")) { 66. if(rn2(2)) /* change from green? */ 67. strcpy(objects[j].oc_descr,"blue"); 68. } else if (!strcmp(objects[j].oc_name,"fluorite")) { 69. switch (rn2(4)) { /* change from violet? */ 70. case 0: break; 71. case 1: 72. strcpy(objects[j].oc_descr,"blue"); 73. break; 74. case 2: 75. strcpy(objects[j].oc_descr,"white"); 76. break; 77. case 3: 78. strcpy(objects[j].oc_descr,"green"); 79. break; 80. } 81. } 82. } else 83. while(--j > first) { 84. i = first + rn2(j+1-first); 85. tmp = objects[j].oc_descr; 86. objects[j].oc_descr = objects[i].oc_descr; 87. objects[i].oc_descr = tmp; 88. } 89. } 90. first = last; 91. } 92. } 93. 94. probtype(let) register char let; { 95. register int i = bases[letindex(let)]; 96. register int prob = rn2(100); 97. while((prob -= objects[i].oc_prob) >= 0) i++; 98. if(objects[i].oc_olet != let || !objects[i].oc_name) 99. panic("probtype(%c) error, i=%d", let, i); 100. return(i); 101. } 102. 103. setgemprobs() 104. { 105. register int j,first; 106. extern xchar dlevel; 107. 108. first = bases[letindex(GEM_SYM)]; 109. 110. for(j = 0; j < 9-dlevel/3; j++) 111. objects[first+j].oc_prob = 0; 112. first += j; 113. if(first >= LAST_GEM || first >= SIZE(objects) || 114. objects[first].oc_olet != GEM_SYM || 115. objects[first].oc_name == NULL) 116. printf("Not enough gems? - first=%d j=%d LAST_GEM=%d ", 117. first, j, LAST_GEM); 118. for(j = first; j < LAST_GEM; j++) 119. objects[j].oc_prob = (18+j-first)/(LAST_GEM-first); 120. } 121. 122. oinit() /* level dependent initialization */ 123. { 124. setgemprobs(); 125. } 126. 127. extern long *alloc(); 128. 129. savenames(fd) register fd; { 130. register int i; 131. unsigned len; 132. struct objclass *now = &objects[0]; 133. bwrite(fd, (char *) &now, sizeof now); 134. bwrite(fd, (char *) bases, sizeof bases); 135. bwrite(fd, (char *) objects, sizeof objects); 136. /* as long as we use only one version of Hack/Quest we 137. need not save oc_name and oc_descr, but we must save 138. oc_uname for all objects */ 139. for(i=0; i < SIZE(objects); i++) { 140. if(objects[i].oc_uname) { 141. len = strlen(objects[i].oc_uname)+1; 142. bwrite(fd, (char *) &len, sizeof len); 143. bwrite(fd, objects[i].oc_uname, len); 144. } 145. } 146. } 147. 148. restnames(fd) register fd; { 149. register int i; 150. unsigned len; 151. struct objclass *then; 152. long differ; 153. mread(fd, (char *) &then, sizeof then); 154. mread(fd, (char *) bases, sizeof bases); 155. mread(fd, (char *) objects, sizeof objects); 156. #ifndef MSDOS 157. differ = (char *)&objects[0] - (char *)then; 158. #else 159. differ = (long)&objects[0] - (long)then; 160. #endif 161. for(i=0; i < SIZE(objects); i++) { 162. if (objects[i].oc_name) { 163. #ifndef MSDOS 164. objects[i].oc_name += differ; 165. #else 166. objects[i].oc_name = 167. (char *)((long)(objects[i].oc_name) + differ); 168. #endif 169. } 170. if (objects[i].oc_descr) { 171. #ifndef MSDOS 172. objects[i].oc_descr += differ; 173. #else 174. objects[i].oc_descr = 175. (char *)((long)(objects[i].oc_descr) + differ); 176. #endif 177. } 178. if (objects[i].oc_uname) { 179. mread(fd, (char *) &len, sizeof len); 180. objects[i].oc_uname = (char *) alloc(len); 181. mread(fd, objects[i].oc_uname, len); 182. } 183. } 184. } 185. 186. dodiscovered() /* free after Robert Viduya */ 187. { 188. extern char *typename(); 189. register int i, end; 190. int ct = 0; 191. #ifdef DGKMOD 192. char class = -1; 193. extern char *let_to_name(); 194. #endif 195. 196. cornline(0, "Discoveries"); 197. 198. end = SIZE(objects); 199. for (i = 0; i < end; i++) { 200. if (interesting_to_discover (i)) { 201. ct++; 202. #ifdef DGKMOD 203. if (objects[i].oc_olet != class) { 204. class = objects[i].oc_olet; 205. cornline(1, let_to_name(class)); 206. } 207. #endif 208. cornline(1, typename(i)); 209. } 210. } 211. if (ct == 0) { 212. pline ("You haven't discovered anything yet..."); 213. cornline(3, (char *) 0); 214. } else 215. cornline(2, (char *) 0); 216. 217. return(0); 218. } 219. 220. interesting_to_discover(i) 221. register int i; 222. { 223. return( 224. objects[i].oc_uname != NULL || 225. (objects[i].oc_name_known && objects[i].oc_descr != NULL) 226. ); 227. } 228. 229. init_corpses() { 230. 231. #ifdef SPIDERS 232. strcpy(objects[DEAD_GIANT_SPIDER].oc_name, "dead giant spider"); 233. #endif 234. 235. #ifdef KOPS 236. strcpy(objects[DEAD_KOP].oc_name, "dead Kop"); 237. # endif 238. 239. #ifdef ROCKMOLE 240. strcpy(objects[DEAD_ROCKMOLE].oc_name, "dead rockmole"); 241. #endif 242. 243. #ifndef KAA 244. strcpy(objects[DEAD_QUASIT].oc_name, "dead quasit"); 245. strcpy(objects[DEAD_VIOLET_FUNGI].oc_name, "dead violet fungi"); 246. #endif 247. return(0); 248. }
Alternative Linked Data Views: ODE     Raw Data in: CXML | CSV | RDF ( N-Triples N3/Turtle JSON XML ) | OData ( Atom JSON ) | Microdata ( JSON HTML) | JSON-LD    About   
This material is Open Knowledge   W3C Semantic Web Technology [RDF Data] Valid XHTML + RDFa
OpenLink Virtuoso version 07.20.3217, on Linux (x86_64-pc-linux-gnu), Standard Edition
Data on this page belongs to its respective rights holders.
Virtuoso Faceted Browser Copyright © 2009-2012 OpenLink Software