Difference between revisions of "Source:NetHack 3.4.3/src/steal.c"
Jump to navigation
Jump to search
m (Add headers.) |
Kernigh bot (talk | contribs) m (Steal.c moved to Source:Steal.c: Robot: moved page) |
(No difference)
|
Revision as of 15:14, 4 March 2008
Below is the full text to src/steal.c from NetHack 3.4.3. To link to a particular line, write [[steal.c#line123]], for example.
Contents
Top of File
1. /* SCCS Id: @(#)steal.c 3.4 2003/12/04 */ 2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4.
The NetHack General Public License applies to screenshots, source code and other content from NetHack.
This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.
5. #include "hack.h" 6. 7. STATIC_PTR int NDECL(stealarm); 8. 9. #ifdef OVLB 10. STATIC_DCL const char *FDECL(equipname, (struct obj *)); 11. STATIC_DCL void FDECL(mdrop_obj, (struct monst *,struct obj *,BOOLEAN_P)); 12.
equipname
13. STATIC_OVL const char * 14. equipname(otmp) 15. register struct obj *otmp; 16. { 17. return ( 18. #ifdef TOURIST 19. (otmp == uarmu) ? "shirt" : 20. #endif 21. (otmp == uarmf) ? "boots" : 22. (otmp == uarms) ? "shield" : 23. (otmp == uarmg) ? "gloves" : 24. (otmp == uarmc) ? cloak_simple_name(otmp) : 25. (otmp == uarmh) ? "helmet" : "armor"); 26. } 27.
somegold without GOLDOBJ
28. #ifndef GOLDOBJ 29. long /* actually returns something that fits in an int */ 30. somegold() 31. { 32. #ifdef LINT /* long conv. ok */ 33. return(0L); 34. #else 35. return (long)( (u.ugold < 100) ? u.ugold : 36. (u.ugold > 10000) ? rnd(10000) : rnd((int) u.ugold) ); 37. #endif 38. } 39.
stealgold without GOLDOBJ
40. void 41. stealgold(mtmp) 42. register struct monst *mtmp; 43. { 44. register struct obj *gold = g_at(u.ux, u.uy); 45. register long tmp; 46. 47. if (gold && ( !u.ugold || gold->quan > u.ugold || !rn2(5))) { 48. mtmp->mgold += gold->quan; 49. delobj(gold); 50. newsym(u.ux, u.uy); 51. pline("%s quickly snatches some gold from between your %s!", 52. Monnam(mtmp), makeplural(body_part(FOOT))); 53. if(!u.ugold || !rn2(5)) { 54. if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE); 55. /* do not set mtmp->mavenge here; gold on the floor is fair game */ 56. monflee(mtmp, 0, FALSE, FALSE); 57. } 58. } else if(u.ugold) { 59. u.ugold -= (tmp = somegold()); 60. Your("purse feels lighter."); 61. mtmp->mgold += tmp; 62. if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE); 63. mtmp->mavenge = 1; 64. monflee(mtmp, 0, FALSE, FALSE); 65. flags.botl = 1; 66. } 67. } 68.
somegold with GOLDOBJ
69. #else /* !GOLDOBJ */ 70. 71. long /* actually returns something that fits in an int */ 72. somegold(umoney) 73. long umoney; 74. { 75. #ifdef LINT /* long conv. ok */ 76. return(0L); 77. #else 78. return (long)( (umoney < 100) ? umoney : 79. (umoney > 10000) ? rnd(10000) : rnd((int) umoney) ); 80. #endif 81. } 82.
findgold
83. /* 84. Find the first (and hopefully only) gold object in a chain. 85. Used when leprechaun (or you as leprechaun) looks for 86. someone else's gold. Returns a pointer so the gold may 87. be seized without further searching. 88. May search containers too. 89. Deals in gold only, as leprechauns don't care for lesser coins. 90. */ 91. struct obj * 92. findgold(chain) 93. register struct obj *chain; 94. { 95. while (chain && chain->otyp != GOLD_PIECE) chain = chain->nobj; 96. return chain; 97. } 98.
stealgold with GOLDOBJ
99. /* 100. Steal gold coins only. Leprechauns don't care for lesser coins. 101. */ 102. void 103. stealgold(mtmp) 104. register struct monst *mtmp; 105. { 106. register struct obj *fgold = g_at(u.ux, u.uy); 107. register struct obj *ygold; 108. register long tmp; 109. 110. /* skip lesser coins on the floor */ 111. while (fgold && fgold->otyp != GOLD_PIECE) fgold = fgold->nexthere; 112. 113. /* Do you have real gold? */ 114. ygold = findgold(invent); 115. 116. if (fgold && ( !ygold || fgold->quan > ygold->quan || !rn2(5))) { 117. obj_extract_self(fgold); 118. add_to_minv(mtmp, fgold); 119. newsym(u.ux, u.uy); 120. pline("%s quickly snatches some gold from between your %s!", 121. Monnam(mtmp), makeplural(body_part(FOOT))); 122. if(!ygold || !rn2(5)) { 123. if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE); 124. monflee(mtmp, 0, FALSE, FALSE); 125. } 126. } else if(ygold) { 127. const int gold_price = objects[GOLD_PIECE].oc_cost; 128. tmp = (somegold(money_cnt(invent)) + gold_price - 1) / gold_price; 129. tmp = min(tmp, ygold->quan); 130. if (tmp < ygold->quan) ygold = splitobj(ygold, tmp); 131. freeinv(ygold); 132. add_to_minv(mtmp, ygold); 133. Your("purse feels lighter."); 134. if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE); 135. monflee(mtmp, 0, FALSE, FALSE); 136. flags.botl = 1; 137. } 138. } 139. #endif /* GOLDOBJ */ 140.
stealarm
141. /* steal armor after you finish taking it off */ 142. unsigned int stealoid; /* object to be stolen */ 143. unsigned int stealmid; /* monster doing the stealing */ 144. 145. STATIC_PTR int 146. stealarm() 147. { 148. register struct monst *mtmp; 149. register struct obj *otmp; 150. 151. for(otmp = invent; otmp; otmp = otmp->nobj) { 152. if(otmp->o_id == stealoid) { 153. for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { 154. if(mtmp->m_id == stealmid) { 155. if(DEADMONSTER(mtmp)) impossible("stealarm(): dead monster stealing"); 156. if(!dmgtype(mtmp->data, AD_SITM)) /* polymorphed */ 157. goto botm; 158. if(otmp->unpaid) 159. subfrombill(otmp, shop_keeper(*u.ushops)); 160. freeinv(otmp); 161. pline("%s steals %s!", Monnam(mtmp), doname(otmp)); 162. (void) mpickobj(mtmp,otmp); /* may free otmp */ 163. /* Implies seduction, "you gladly hand over ..." 164. so we don't set mavenge bit here. */ 165. monflee(mtmp, 0, FALSE, FALSE); 166. if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE); 167. break; 168. } 169. } 170. break; 171. } 172. } 173. botm: stealoid = 0; 174. return 0; 175. } 176.
remove_worn_item
177. /* An object you're wearing has been taken off by a monster (theft or 178. seduction). Also used if a worn item gets transformed (stone to flesh). */ 179. void 180. remove_worn_item(obj, unchain_ball) 181. struct obj *obj; 182. boolean unchain_ball; /* whether to unpunish or just unwield */ 183. { 184. if (donning(obj)) 185. cancel_don(); 186. if (!obj->owornmask) 187. return; 188. 189. if (obj->owornmask & W_ARMOR) { 190. if (obj == uskin) { 191. impossible("Removing embedded scales?"); 192. skinback(TRUE); /* uarm = uskin; uskin = 0; */ 193. } 194. if (obj == uarm) (void) Armor_off(); 195. else if (obj == uarmc) (void) Cloak_off(); 196. else if (obj == uarmf) (void) Boots_off(); 197. else if (obj == uarmg) (void) Gloves_off(); 198. else if (obj == uarmh) (void) Helmet_off(); 199. else if (obj == uarms) (void) Shield_off(); 200. #ifdef TOURIST 201. else if (obj == uarmu) (void) Shirt_off(); 202. #endif 203. /* catchall -- should never happen */ 204. else setworn((struct obj *)0, obj->owornmask & W_ARMOR); 205. } else if (obj->owornmask & W_AMUL) { 206. Amulet_off(); 207. } else if (obj->owornmask & W_RING) { 208. Ring_gone(obj); 209. } else if (obj->owornmask & W_TOOL) { 210. Blindf_off(obj); 211. } else if (obj->owornmask & (W_WEP|W_SWAPWEP|W_QUIVER)) { 212. if (obj == uwep) 213. uwepgone(); 214. if (obj == uswapwep) 215. uswapwepgone(); 216. if (obj == uquiver) 217. uqwepgone(); 218. } 219. 220. if (obj->owornmask & (W_BALL|W_CHAIN)) { 221. if (unchain_ball) unpunish(); 222. } else if (obj->owornmask) { 223. /* catchall */ 224. setnotworn(obj); 225. } 226. } 227.
steal
228. /* Returns 1 when something was stolen (or at least, when N should flee now) 229. * Returns -1 if the monster died in the attempt 230. * Avoid stealing the object stealoid 231. */ 232. int 233. steal(mtmp, objnambuf) 234. struct monst *mtmp; 235. char *objnambuf; 236. { 237. struct obj *otmp; 238. int tmp, could_petrify, named = 0, armordelay; 239. boolean monkey_business; /* true iff an animal is doing the thievery */ 240. 241. if (objnambuf) *objnambuf = '\0'; 242. /* the following is true if successful on first of two attacks. */ 243. if(!monnear(mtmp, u.ux, u.uy)) return(0); 244. 245. /* food being eaten might already be used up but will not have 246. been removed from inventory yet; we don't want to steal that, 247. so this will cause it to be removed now */ 248. if (occupation) (void) maybe_finished_meal(FALSE); 249. 250. if (!invent || (inv_cnt() == 1 && uskin)) { 251. nothing_to_steal: 252. /* Not even a thousand men in armor can strip a naked man. */ 253. if(Blind) 254. pline("Somebody tries to rob you, but finds nothing to steal."); 255. else 256. pline("%s tries to rob you, but there is nothing to steal!", 257. Monnam(mtmp)); 258. return(1); /* let her flee */ 259. } 260. 261. monkey_business = is_animal(mtmp->data); 262. if (monkey_business) { 263. ; /* skip ring special cases */ 264. } else if (Adornment & LEFT_RING) { 265. otmp = uleft; 266. goto gotobj; 267. } else if (Adornment & RIGHT_RING) { 268. otmp = uright; 269. goto gotobj; 270. } 271. 272. tmp = 0; 273. for(otmp = invent; otmp; otmp = otmp->nobj) 274. if ((!uarm || otmp != uarmc) && otmp != uskin 275. #ifdef INVISIBLE_OBJECTS 276. && (!otmp->oinvis || perceives(mtmp->data)) 277. #endif 278. ) 279. tmp += ((otmp->owornmask & 280. (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1); 281. if (!tmp) goto nothing_to_steal; 282. tmp = rn2(tmp); 283. for(otmp = invent; otmp; otmp = otmp->nobj) 284. if ((!uarm || otmp != uarmc) && otmp != uskin 285. #ifdef INVISIBLE_OBJECTS 286. && (!otmp->oinvis || perceives(mtmp->data)) 287. #endif 288. ) 289. if((tmp -= ((otmp->owornmask & 290. (W_ARMOR | W_RING | W_AMUL | W_TOOL)) ? 5 : 1)) < 0) 291. break; 292. if(!otmp) { 293. impossible("Steal fails!"); 294. return(0); 295. } 296. /* can't steal gloves while wielding - so steal the wielded item. */ 297. if (otmp == uarmg && uwep) 298. otmp = uwep; 299. /* can't steal armor while wearing cloak - so steal the cloak. */ 300. else if(otmp == uarm && uarmc) otmp = uarmc; 301. #ifdef TOURIST 302. else if(otmp == uarmu && uarmc) otmp = uarmc; 303. else if(otmp == uarmu && uarm) otmp = uarm; 304. #endif 305. gotobj: 306. if(otmp->o_id == stealoid) return(0); 307. 308. /* animals can't overcome curse stickiness nor unlock chains */ 309. if (monkey_business) { 310. boolean ostuck; 311. /* is the player prevented from voluntarily giving up this item? 312. (ignores loadstones; the !can_carry() check will catch those) */ 313. if (otmp == uball) 314. ostuck = TRUE; /* effectively worn; curse is implicit */ 315. else if (otmp == uquiver || (otmp == uswapwep && !u.twoweap)) 316. ostuck = FALSE; /* not really worn; curse doesn't matter */ 317. else 318. ostuck = (otmp->cursed && otmp->owornmask); 319. 320. if (ostuck || !can_carry(mtmp, otmp)) { 321. static const char * const how[] = { "steal","snatch","grab","take" }; 322. cant_take: 323. pline("%s tries to %s your %s but gives up.", 324. Monnam(mtmp), how[rn2(SIZE(how))], 325. (otmp->owornmask & W_ARMOR) ? equipname(otmp) : 326. cxname(otmp)); 327. /* the fewer items you have, the less likely the thief 328. is going to stick around to try again (0) instead of 329. running away (1) */ 330. return !rn2(inv_cnt() / 5 + 2); 331. } 332. } 333. 334. if (otmp->otyp == LEASH && otmp->leashmon) { 335. if (monkey_business && otmp->cursed) goto cant_take; 336. o_unleash(otmp); 337. } 338. 339. /* you're going to notice the theft... */ 340. stop_occupation(); 341. 342. if((otmp->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL))){ 343. switch(otmp->oclass) { 344. case TOOL_CLASS: 345. case AMULET_CLASS: 346. case RING_CLASS: 347. case FOOD_CLASS: /* meat ring */ 348. remove_worn_item(otmp, TRUE); 349. break; 350. case ARMOR_CLASS: 351. armordelay = objects[otmp->otyp].oc_delay; 352. /* Stop putting on armor which has been stolen. */ 353. if (donning(otmp)) { 354. remove_worn_item(otmp, TRUE); 355. break; 356. } else if (monkey_business) { 357. /* animals usually don't have enough patience 358. to take off items which require extra time */ 359. if (armordelay >= 1 && rn2(10)) goto cant_take; 360. remove_worn_item(otmp, TRUE); 361. break; 362. } else { 363. int curssv = otmp->cursed; 364. int slowly; 365. boolean seen = canspotmon(mtmp); 366. 367. otmp->cursed = 0; 368. /* can't charm you without first waking you */ 369. if (multi < 0 && is_fainted()) unmul((char *)0); 370. slowly = (armordelay >= 1 || multi < 0); 371. if(flags.female) 372. pline("%s charms you. You gladly %s your %s.", 373. !seen ? "She" : Monnam(mtmp), 374. curssv ? "let her take" : 375. slowly ? "start removing" : "hand over", 376. equipname(otmp)); 377. else 378. pline("%s seduces you and %s off your %s.", 379. !seen ? "She" : Adjmonnam(mtmp, "beautiful"), 380. curssv ? "helps you to take" : 381. slowly ? "you start taking" : "you take", 382. equipname(otmp)); 383. named++; 384. /* the following is to set multi for later on */ 385. nomul(-armordelay); 386. remove_worn_item(otmp, TRUE); 387. otmp->cursed = curssv; 388. if(multi < 0){ 389. /* 390. multi = 0; 391. nomovemsg = 0; 392. afternmv = 0; 393. */ 394. stealoid = otmp->o_id; 395. stealmid = mtmp->m_id; 396. afternmv = stealarm; 397. return(0); 398. } 399. } 400. break; 401. default: 402. impossible("Tried to steal a strange worn thing. [%d]", 403. otmp->oclass); 404. } 405. } 406. else if (otmp->owornmask) 407. remove_worn_item(otmp, TRUE); 408. 409. /* do this before removing it from inventory */ 410. if (objnambuf) Strcpy(objnambuf, yname(otmp)); 411. /* set mavenge bit so knights won't suffer an 412. * alignment penalty during retaliation; 413. */ 414. mtmp->mavenge = 1; 415. 416. freeinv(otmp); 417. pline("%s stole %s.", named ? "She" : Monnam(mtmp), doname(otmp)); 418. could_petrify = (otmp->otyp == CORPSE && 419. touch_petrifies(&mons[otmp->corpsenm])); 420. (void) mpickobj(mtmp,otmp); /* may free otmp */ 421. if (could_petrify && !(mtmp->misc_worn_check & W_ARMG)) { 422. minstapetrify(mtmp, TRUE); 423. return -1; 424. } 425. return((multi < 0) ? 0 : 1); 426. } 427. 428. #endif /* OVLB */
mpickobj
429. #ifdef OVL1 430. 431. /* Returns 1 if otmp is free'd, 0 otherwise. */ 432. int 433. mpickobj(mtmp,otmp) 434. register struct monst *mtmp; 435. register struct obj *otmp; 436. { 437. int freed_otmp; 438. 439. #ifndef GOLDOBJ 440. if (otmp->oclass == COIN_CLASS) { 441. mtmp->mgold += otmp->quan; 442. obfree(otmp, (struct obj *)0); 443. freed_otmp = 1; 444. } else { 445. #endif 446. boolean snuff_otmp = FALSE; 447. /* don't want hidden light source inside the monster; assumes that 448. engulfers won't have external inventories; whirly monsters cause 449. the light to be extinguished rather than letting it shine thru */ 450. if (otmp->lamplit && /* hack to avoid function calls for most objs */ 451. obj_sheds_light(otmp) && 452. attacktype(mtmp->data, AT_ENGL)) { 453. /* this is probably a burning object that you dropped or threw */ 454. if (u.uswallow && mtmp == u.ustuck && !Blind) 455. pline("%s out.", Tobjnam(otmp, "go")); 456. snuff_otmp = TRUE; 457. } 458. /* Must do carrying effects on object prior to add_to_minv() */ 459. carry_obj_effects(otmp); 460. /* add_to_minv() might free otmp [if merged with something else], 461. so we have to call it after doing the object checks */ 462. freed_otmp = add_to_minv(mtmp, otmp); 463. /* and we had to defer this until object is in mtmp's inventory */ 464. if (snuff_otmp) snuff_light_source(mtmp->mx, mtmp->my); 465. #ifndef GOLDOBJ 466. } 467. #endif 468. return freed_otmp; 469. } 470. 471. #endif /* OVL1 */
stealamulet
472. #ifdef OVLB 473. 474. void 475. stealamulet(mtmp) 476. struct monst *mtmp; 477. { 478. struct obj *otmp = (struct obj *)0; 479. int real=0, fake=0; 480. 481. /* select the artifact to steal */ 482. if(u.uhave.amulet) { 483. real = AMULET_OF_YENDOR; 484. fake = FAKE_AMULET_OF_YENDOR; 485. } else if(u.uhave.questart) { 486. for(otmp = invent; otmp; otmp = otmp->nobj) 487. if(is_quest_artifact(otmp)) break; 488. if (!otmp) return; /* should we panic instead? */ 489. } else if(u.uhave.bell) { 490. real = BELL_OF_OPENING; 491. fake = BELL; 492. } else if(u.uhave.book) { 493. real = SPE_BOOK_OF_THE_DEAD; 494. } else if(u.uhave.menorah) { 495. real = CANDELABRUM_OF_INVOCATION; 496. } else return; /* you have nothing of special interest */ 497. 498. if (!otmp) { 499. /* If we get here, real and fake have been set up. */ 500. for(otmp = invent; otmp; otmp = otmp->nobj) 501. if(otmp->otyp == real || (otmp->otyp == fake && !mtmp->iswiz)) 502. break; 503. } 504. 505. if (otmp) { /* we have something to snatch */ 506. if (otmp->owornmask) 507. remove_worn_item(otmp, TRUE); 508. freeinv(otmp); 509. /* mpickobj wont merge otmp because none of the above things 510. to steal are mergable */ 511. (void) mpickobj(mtmp,otmp); /* may merge and free otmp */ 512. pline("%s stole %s!", Monnam(mtmp), doname(otmp)); 513. if (can_teleport(mtmp->data) && !tele_restrict(mtmp)) 514. (void) rloc(mtmp, FALSE); 515. } 516. } 517. 518. #endif /* OVLB */
mdrop_obj
519. #ifdef OVL0 520. 521. /* drop one object taken from a (possibly dead) monster's inventory */ 522. STATIC_OVL void 523. mdrop_obj(mon, obj, verbosely) 524. struct monst *mon; 525. struct obj *obj; 526. boolean verbosely; 527. { 528. int omx = mon->mx, omy = mon->my; 529. 530. if (obj->owornmask) { 531. /* perform worn item handling if the monster is still alive */ 532. if (mon->mhp > 0) { 533. mon->misc_worn_check &= ~obj->owornmask; 534. update_mon_intrinsics(mon, obj, FALSE, TRUE); 535. /* obj_no_longer_held(obj); -- done by place_object */ 536. if (obj->owornmask & W_WEP) setmnotwielded(mon, obj); 537. #ifdef STEED 538. /* don't charge for an owned saddle on dead steed */ 539. } else if (mon->mtame && (obj->owornmask & W_SADDLE) && 540. !obj->unpaid && costly_spot(omx, omy)) { 541. obj->no_charge = 1; 542. #endif 543. } 544. obj->owornmask = 0L; 545. } 546. if (verbosely && cansee(omx, omy)) 547. pline("%s drops %s.", Monnam(mon), distant_name(obj, doname)); 548. if (!flooreffects(obj, omx, omy, "fall")) { 549. place_object(obj, omx, omy); 550. stackobj(obj); 551. } 552. } 553.
mdrop_special_objs
554. /* some monsters bypass the normal rules for moving between levels or 555. even leaving the game entirely; when that happens, prevent them from 556. taking the Amulet or invocation tools with them */ 557. void 558. mdrop_special_objs(mon) 559. struct monst *mon; 560. { 561. struct obj *obj, *otmp; 562. 563. for (obj = mon->minvent; obj; obj = otmp) { 564. otmp = obj->nobj; 565. /* the Amulet, invocation tools, and Rider corpses resist even when 566. artifacts and ordinary objects are given 0% resistance chance */ 567. if (obj_resists(obj, 0, 0)) { 568. obj_extract_self(obj); 569. mdrop_obj(mon, obj, FALSE); 570. } 571. } 572. } 573.
relobj
574. /* release the objects the creature is carrying */ 575. void 576. relobj(mtmp,show,is_pet) 577. register struct monst *mtmp; 578. register int show; 579. boolean is_pet; /* If true, pet should keep wielded/worn items */ 580. { 581. register struct obj *otmp; 582. register int omx = mtmp->mx, omy = mtmp->my; 583. struct obj *keepobj = 0; 584. struct obj *wep = MON_WEP(mtmp); 585. boolean item1 = FALSE, item2 = FALSE; 586. 587. if (!is_pet || mindless(mtmp->data) || is_animal(mtmp->data)) 588. item1 = item2 = TRUE; 589. if (!tunnels(mtmp->data) || !needspick(mtmp->data)) 590. item1 = TRUE; 591. 592. while ((otmp = mtmp->minvent) != 0) { 593. obj_extract_self(otmp); 594. /* special case: pick-axe and unicorn horn are non-worn */ 595. /* items that we also want pets to keep 1 of */ 596. /* (It is a coincidence that these can also be wielded.) */ 597. if (otmp->owornmask || otmp == wep || 598. ((!item1 && otmp->otyp == PICK_AXE) || 599. (!item2 && otmp->otyp == UNICORN_HORN && !otmp->cursed))) { 600. if (is_pet) { /* dont drop worn/wielded item */ 601. if (otmp->otyp == PICK_AXE) 602. item1 = TRUE; 603. if (otmp->otyp == UNICORN_HORN && !otmp->cursed) 604. item2 = TRUE; 605. otmp->nobj = keepobj; 606. keepobj = otmp; 607. continue; 608. } 609. } 610. mdrop_obj(mtmp, otmp, is_pet && flags.verbose); 611. } 612. 613. /* put kept objects back */ 614. while ((otmp = keepobj) != (struct obj *)0) { 615. keepobj = otmp->nobj; 616. (void) add_to_minv(mtmp, otmp); 617. } 618. #ifndef GOLDOBJ 619. if (mtmp->mgold) { 620. register long g = mtmp->mgold; 621. (void) mkgold(g, omx, omy); 622. if (is_pet && cansee(omx, omy) && flags.verbose) 623. pline("%s drops %ld gold piece%s.", Monnam(mtmp), 624. g, plur(g)); 625. mtmp->mgold = 0L; 626. } 627. #endif 628. 629. if (show & cansee(omx, omy)) 630. newsym(omx, omy); 631. } 632. 633. #endif /* OVL0 */ 634. 635. /*steal.c*/