Difference between revisions of "Source:NetHack 1.4f/bones.c"

From NetHackWiki
Jump to navigation Jump to search
m (Automated source code upload)
 
m (NetHack 1.4f/bones.c moved to Source:NetHack 1.4f/bones.c: Robot: moved page)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Below is the full text to '''bones.c''' from the [[NetHack 1.4f source code|source code]] of [[NetHack 1.4f]]. To link to a particular line, write [[NetHack 1.4f/bones.c#line123|<nowiki>[[NetHack 1.4f/bones.c#line123]]</nowiki>]], for example.
+
The source code file '''bones.c''' in [[NetHack 1.4f source code|NetHack 1.4f]] is unchanged from [[NetHack 1.3d/bones.c]].
 
+
[[Category:NetHack 1.4f source code]]
'''Warning!''' This is the source code from an old release. For the latest release, see [[Source code]]
 
 
 
{{CWI}}
 
<span id="line1">1.   /* SCCS Id: @(#)bones.c 1.3 87/07/14</span>
 
<span id="line2">2.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
 
<span id="line3">3.    /* bones.c - version 1.0.3 */</span>
 
<span id="line4">4.    </span>
 
<span id="line5">5.    #include "hack.h"</span>
 
<span id="line6">6.    extern char plname[PL_NSIZ];</span>
 
<span id="line7">7.    extern long somegold();</span>
 
<span id="line8">8.    extern struct monst *makemon();</span>
 
<span id="line9">9.    extern struct permonst pm_ghost;</span>
 
<span id="line10">10.  </span>
 
<span id="line11">11.  #ifdef DGK</span>
 
<span id="line12">12.  char bones[FILENAME];</span>
 
<span id="line13">13.  #else</span>
 
<span id="line14">14.  char bones[] = "bones_xx";</span>
 
<span id="line15">15.  #endif</span>
 
<span id="line16">16.  </span>
 
<span id="line17">17.  /* save bones and possessions of a deceased adventurer */</span>
 
<span id="line18">18.  savebones(){</span>
 
<span id="line19">19.  register fd;</span>
 
<span id="line20">20.  register struct obj *otmp;</span>
 
<span id="line21">21.  register struct trap *ttmp;</span>
 
<span id="line22">22.  register struct monst *mtmp;</span>
 
<span id="line23">23.  if(dlevel <= 0 || dlevel > MAXLEVEL) return;</span>
 
<span id="line24">24.  if(!rn2(1 + dlevel/2) /* not so many ghosts on low levels */</span>
 
<span id="line25">25.  #ifdef WIZARD</span>
 
<span id="line26">26.  && !wizard</span>
 
<span id="line27">27.  #endif</span>
 
<span id="line28">28.  ) return;</span>
 
<span id="line29">29.  #ifdef DGK</span>
 
<span id="line30">30.  name_file(bones, dlevel);</span>
 
<span id="line31">31.  #else</span>
 
<span id="line32">32.  bones[6] = '0' + (dlevel/10);</span>
 
<span id="line33">33.  bones[7] = '0' + (dlevel%10);</span>
 
<span id="line34">34.  #endif</span>
 
<span id="line35">35.  if((fd = open(bones,0)) >= 0){</span>
 
<span id="line36">36.  (void) close(fd);</span>
 
<span id="line37">37.  #ifdef WIZARD</span>
 
<span id="line38">38.  if(wizard)</span>
 
<span id="line39">39.  pline("Bones file already exists.");</span>
 
<span id="line40">40.  #endif</span>
 
<span id="line41">41.  return;</span>
 
<span id="line42">42.  }</span>
 
<span id="line43">43.  /* drop everything; the corpse's possessions are usually cursed */</span>
 
<span id="line44">44.  otmp = invent;</span>
 
<span id="line45">45.  while(otmp){</span>
 
<span id="line46">46.  otmp->ox = u.ux;</span>
 
<span id="line47">47.  otmp->oy = u.uy;</span>
 
<span id="line48">48.  otmp->age = 0; /* very long ago */</span>
 
<span id="line49">49.  otmp->owornmask = 0;</span>
 
<span id="line50">50.  if(rn2(5)) otmp->cursed = 1;</span>
 
<span id="line51">51.  if(!otmp->nobj){</span>
 
<span id="line52">52.  otmp->nobj = fobj;</span>
 
<span id="line53">53.  fobj = invent;</span>
 
<span id="line54">54.  invent = 0; /* superfluous */</span>
 
<span id="line55">55.  break;</span>
 
<span id="line56">56.  }</span>
 
<span id="line57">57.  otmp = otmp->nobj;</span>
 
<span id="line58">58.  }</span>
 
<span id="line59">59.  /* spill any contained objects - added by GAN 03/23/87 */</span>
 
<span id="line60">60.  otmp = fcobj;</span>
 
<span id="line61">61.  while(otmp)  {</span>
 
<span id="line62">62.  register struct obj *otmp2;</span>
 
<span id="line63">63.  </span>
 
<span id="line64">64.  otmp2 = otmp->nobj;</span>
 
<span id="line65">65.  spill_obj(otmp);</span>
 
<span id="line66">66.  otmp = otmp2;</span>
 
<span id="line67">67.  }</span>
 
<span id="line68">68.  if(!(mtmp = makemon(PM_GHOST, u.ux, u.uy))) return;</span>
 
<span id="line69">69.  mtmp->mx = u.ux;</span>
 
<span id="line70">70.  mtmp->my = u.uy;</span>
 
<span id="line71">71.  mtmp->msleep = 1;</span>
 
<span id="line72">72.  (void) strcpy((char *) mtmp->mextra, plname);</span>
 
<span id="line73">73.  mkgold(somegold() + d(dlevel,30), u.ux, u.uy);</span>
 
<span id="line74">74.  for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){</span>
 
<span id="line75">75.  mtmp->m_id = 0;</span>
 
<span id="line76">76.  if(mtmp->mtame) {</span>
 
<span id="line77">77.  mtmp->mtame = 0;</span>
 
<span id="line78">78.  mtmp->mpeaceful = 0;</span>
 
<span id="line79">79.  }</span>
 
<span id="line80">80.  mtmp->mlstmv = 0;</span>
 
<span id="line81">81.  if(mtmp->mdispl) unpmon(mtmp);</span>
 
<span id="line82">82.  }</span>
 
<span id="line83">83.  for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)</span>
 
<span id="line84">84.  ttmp->tseen = 0;</span>
 
<span id="line85">85.  for(otmp = fobj; otmp; otmp = otmp->nobj) {</span>
 
<span id="line86">86.  otmp->o_id = 0;</span>
 
<span id="line87">87.      /* otmp->o_cnt_id = 0; - superfluous */</span>
 
<span id="line88">88.  otmp->onamelth = 0;</span>
 
<span id="line89">89.  otmp->known = 0;</span>
 
<span id="line90">90.  otmp->invlet = 0;</span>
 
<span id="line91">91.  if(otmp->olet == AMULET_SYM && !otmp->spe) {</span>
 
<span id="line92">92.  otmp->spe = -1;      /* no longer the actual amulet */</span>
 
<span id="line93">93.  otmp->cursed = 1;    /* flag as gotten from a ghost */</span>
 
<span id="line94">94.  }</span>
 
<span id="line95">95.  }</span>
 
<span id="line96">96.  #ifdef DGK</span>
 
<span id="line97">97.  fd = open(bones, O_WRONLY | O_BINARY | O_CREAT, FMASK);</span>
 
<span id="line98">98.  #else</span>
 
<span id="line99">99.  fd = creat(bones, FMASK);</span>
 
<span id="line100">100.  #endif</span>
 
<span id="line101">101.  if(fd < 0) {</span>
 
<span id="line102">102.  #ifdef WIZARD</span>
 
<span id="line103">103.  if(wizard)</span>
 
<span id="line104">104.  pline("Cannot create bones file - creat failed");</span>
 
<span id="line105">105.  #endif</span>
 
<span id="line106">106.  return;</span>
 
<span id="line107">107.  }</span>
 
<span id="line108">108.  #ifdef DGK</span>
 
<span id="line109">109.  savelev(fd,dlevel, COUNT | WRITE);</span>
 
<span id="line110">110.  #else</span>
 
<span id="line111">111.  savelev(fd,dlevel);</span>
 
<span id="line112">112.  #endif</span>
 
<span id="line113">113.  (void) close(fd);</span>
 
<span id="line114">114.  }</span>
 
<span id="line115">115.  </span>
 
<span id="line116">116.  /*</span>
 
<span id="line117">117.  * "spill" object out of box onto floor</span>
 
<span id="line118">118.  */</span>
 
<span id="line119">119.  spill_obj(obj)</span>
 
<span id="line120">120.  struct obj *obj;</span>
 
<span id="line121">121.  {</span>
 
<span id="line122">122.  struct obj *otmp;</span>
 
<span id="line123">123.  </span>
 
<span id="line124">124.  for(otmp = fobj; otmp; otmp = otmp->nobj)</span>
 
<span id="line125">125.  if(obj->o_cnt_id == otmp->o_id)  {</span>
 
<span id="line126">126.  obj->ox = otmp->ox;</span>
 
<span id="line127">127.  obj->oy = otmp->oy;</span>
 
<span id="line128">128.  obj->age = 0;</span>
 
<span id="line129">129.  if(rn2(5))</span>
 
<span id="line130">130.  obj->cursed = 1;</span>
 
<span id="line131">131.  obj->nobj = otmp->nobj;</span>
 
<span id="line132">132.  otmp->nobj = obj;</span>
 
<span id="line133">133.  return;</span>
 
<span id="line134">134.  }</span>
 
<span id="line135">135.  }</span>
 
<span id="line136">136.  </span>
 
<span id="line137">137.  getbones(){</span>
 
<span id="line138">138.  register fd,x,y,ok;</span>
 
<span id="line139">139.  /* wizard check added by GAN 02/05/87 */</span>
 
<span id="line140">140.  if(rn2(3) /* only once in three times do we find bones */</span>
 
<span id="line141">141.  #ifdef WIZARD</span>
 
<span id="line142">142.  && !wizard</span>
 
<span id="line143">143.  #endif</span>
 
<span id="line144">144.  ) return(0);</span>
 
<span id="line145">145.  #ifdef DGK</span>
 
<span id="line146">146.  name_file(bones, dlevel);</span>
 
<span id="line147">147.  #else</span>
 
<span id="line148">148.  bones[6] = '0' + dlevel/10;</span>
 
<span id="line149">149.  bones[7] = '0' + dlevel%10;</span>
 
<span id="line150">150.  #endif</span>
 
<span id="line151">151.  if((fd = open(bones, 0)) < 0) return(0);</span>
 
<span id="line152">152.  if((ok = uptodate(fd)) != 0){</span>
 
<span id="line153">153.  #ifdef WIZARD</span>
 
<span id="line154">154.  if(wizard)  {</span>
 
<span id="line155">155.  char buf[BUFSZ];</span>
 
<span id="line156">156.  pline("Get bones? ");</span>
 
<span id="line157">157.  getlin(buf);</span>
 
<span id="line158">158.  if(buf[0] == 'n')  {</span>
 
<span id="line159">159.  (void) close(fd);</span>
 
<span id="line160">160.  return(0);</span>
 
<span id="line161">161.  }</span>
 
<span id="line162">162.  }</span>
 
<span id="line163">163.  #endif</span>
 
<span id="line164">164.  getlev(fd, 0, dlevel);</span>
 
<span id="line165">165.  for(x = 0; x < COLNO; x++) for(y = 0; y < ROWNO; y++)</span>
 
<span id="line166">166.  levl[x][y].seen = levl[x][y].new = 0;</span>
 
<span id="line167">167.  }</span>
 
<span id="line168">168.  (void) close(fd);</span>
 
<span id="line169">169.  #ifdef WIZARD</span>
 
<span id="line170">170.  if(wizard)  {</span>
 
<span id="line171">171.  char buf[BUFSZ];</span>
 
<span id="line172">172.  pline("Unlink bones? ");</span>
 
<span id="line173">173.  getlin(buf);</span>
 
<span id="line174">174.  if(buf[0] == 'n')</span>
 
<span id="line175">175.  return(ok);</span>
 
<span id="line176">176.  }</span>
 
<span id="line177">177.  #endif</span>
 
<span id="line178">178.  if(unlink(bones) < 0){</span>
 
<span id="line179">179.  pline("Cannot unlink %s .", bones);</span>
 
<span id="line180">180.  return(0);</span>
 
<span id="line181">181.  }</span>
 
<span id="line182">182.  return(ok);</span>
 
<span id="line183">183.  }</span>
 
[[Category:NetHack 1.4f source code|bones.c]]
 

Latest revision as of 00:47, 4 March 2008

The source code file bones.c in NetHack 1.4f is unchanged from NetHack 1.3d/bones.c.