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

From NetHackWiki
Jump to navigation Jump to search
m (Automated source code upload)
 
m (Semi-redirect to 1.3d versions)
Line 1: Line 1:
Below is the full text to '''mhitu.c''' from the [[NetHack 1.4f source code|source code]] of [[NetHack 1.4f]]. To link to a particular line, write [[NetHack 1.4f/mhitu.c#line123|<nowiki>[[NetHack 1.4f/mhitu.c#line123]]</nowiki>]], for example.
+
The source code file '''mhitu.c''' in [[NetHack 1.4f source code|NetHack 1.4f]] is unchanged from [[NetHack 1.3d/mhitu.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: @(#)mhitu.c 1.3 87/07/14</span>
 
<span id="line2">2.    /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */</span>
 
<span id="line3">3.    /* mhitu.c - version 1.0.3 */</span>
 
<span id="line4">4.    </span>
 
<span id="line5">5.    #include "hack.h"</span>
 
<span id="line6">6.    extern struct monst *makemon();</span>
 
<span id="line7">7.    #ifdef KAA</span>
 
<span id="line8">8.    extern char pl_character[];</span>
 
<span id="line9">9.    #endif</span>
 
<span id="line10">10.  </span>
 
<span id="line11">11.  /*</span>
 
<span id="line12">12.    * mhitu: monster hits you</span>
 
<span id="line13">13.    *   returns 1 if monster dies (e.g. 'y', 'F'), 0 otherwise</span>
 
<span id="line14">14.    */</span>
 
<span id="line15">15.  mhitu(mtmp)</span>
 
<span id="line16">16.  register struct monst *mtmp;</span>
 
<span id="line17">17.  {</span>
 
<span id="line18">18.  register struct permonst *mdat = mtmp->data;</span>
 
<span id="line19">19.  register int tmp, ctmp;</span>
 
<span id="line20">20.  </span>
 
<span id="line21">21.  nomul(0);</span>
 
<span id="line22">22.  </span>
 
<span id="line23">23.  /* If swallowed, can only be affected by hissers and by u.ustuck */</span>
 
<span id="line24">24.  if(u.uswallow) {</span>
 
<span id="line25">25.  if(mtmp != u.ustuck) {</span>
 
<span id="line26">26.  if(mdat->mlet == 'c' && !rn2(13)) {</span>
 
<span id="line27">27.  pline("Outside, you hear %s's hissing!",</span>
 
<span id="line28">28.  monnam(mtmp));</span>
 
<span id="line29">29.  pline("%s gets turned to stone!",</span>
 
<span id="line30">30.  Monnam(u.ustuck));</span>
 
<span id="line31">31.  pline("And the same fate befalls you.");</span>
 
<span id="line32">32.  done_in_by(mtmp);</span>
 
<span id="line33">33.  /* "notreached": not return(1); */</span>
 
<span id="line34">34.  }</span>
 
<span id="line35">35.  return(0);</span>
 
<span id="line36">36.  }</span>
 
<span id="line37">37.  switch(mdat->mlet) { /* now mtmp == u.ustuck */</span>
 
<span id="line38">38.  case ',':</span>
 
<span id="line39">39.  youswld(mtmp, (u.uac > 0) ? u.uac+4 : 4,</span>
 
<span id="line40">40.  5, Monnam(mtmp));</span>
 
<span id="line41">41.  break;</span>
 
<span id="line42">42.  case '\'':</span>
 
<span id="line43">43.  youswld(mtmp,rnd(6),7,Monnam(mtmp));</span>
 
<span id="line44">44.  break;</span>
 
<span id="line45">45.  case 'P':</span>
 
<span id="line46">46.  youswld(mtmp,d(2,4),12,Monnam(mtmp));</span>
 
<span id="line47">47.  break;</span>
 
<span id="line48">48.  default:</span>
 
<span id="line49">49.  /* This is not impossible! */</span>
 
<span id="line50">50.  #ifdef DGKMOD</span>
 
<span id="line51">51.  /* If the swallowing monster changes into a monster</span>
 
<span id="line52">52.  * that is not capable of swallowing you, you get</span>
 
<span id="line53">53.  * regurgitated - dgk</span>
 
<span id="line54">54.  */</span>
 
<span id="line55">55.  pline("You get regurgitated!");</span>
 
<span id="line56">56.  u.ux = mtmp->mx;</span>
 
<span id="line57">57.  u.uy = mtmp->my;</span>
 
<span id="line58">58.  u.uswallow = 0;</span>
 
<span id="line59">59.  u.ustuck = 0;</span>
 
<span id="line60">60.  mnexto(mtmp);</span>
 
<span id="line61">61.  setsee();</span>
 
<span id="line62">62.  docrt();</span>
 
<span id="line63">63.  break;</span>
 
<span id="line64">64.  #else</span>
 
<span id="line65">65.  pline("The mysterious monster totally digests you.");</span>
 
<span id="line66">66.  u.uhp = 0;</span>
 
<span id="line67">67.  #endif /* DGKMOD /**/</span>
 
<span id="line68">68.  }</span>
 
<span id="line69">69.  if(u.uhp < 1) done_in_by(mtmp);</span>
 
<span id="line70">70.  return(0);</span>
 
<span id="line71">71.  }</span>
 
<span id="line72">72.  </span>
 
<span id="line73">73.  if(mdat->mlet == 'c' && Stoned)</span>
 
<span id="line74">74.  return(0);</span>
 
<span id="line75">75.  </span>
 
<span id="line76">76.  /* make eels visible the moment they hit/miss us */</span>
 
<span id="line77">77.  if(mdat->mlet == ';' && mtmp->minvis && cansee(mtmp->mx,mtmp->my)){</span>
 
<span id="line78">78.  mtmp->minvis = 0;</span>
 
<span id="line79">79.  pmon(mtmp);</span>
 
<span id="line80">80.  }</span>
 
<span id="line81">81.  if(!index("1&DuxynNF",mdat->mlet))</span>
 
<span id="line82">82.  tmp = hitu(mtmp,d(mdat->damn,mdat->damd));</span>
 
<span id="line83">83.  else</span>
 
<span id="line84">84.  tmp = 0;</span>
 
<span id="line85">85.  if(index(UNDEAD, mdat->mlet) && midnight())</span>
 
<span id="line86">86.  tmp += hitu(mtmp,d(mdat->damn,mdat->damd));</span>
 
<span id="line87">87.  </span>
 
<span id="line88">88.  ctmp = tmp && !mtmp->mcan &&</span>
 
<span id="line89">89.    (!uarm || objects[uarm->otyp].a_can < rnd(3) || !rn2(50));</span>
 
<span id="line90">90.  switch(mdat->mlet) {</span>
 
<span id="line91">91.  case '1':</span>
 
<span id="line92">92.  if(wiz_hit(mtmp)) return(1); /* he disappeared */</span>
 
<span id="line93">93.  break;</span>
 
<span id="line94">94.  case '&':</span>
 
<span id="line95">95.  demon_hit(mtmp);</span>
 
<span id="line96">96.  break;</span>
 
<span id="line97">97.  case ',':</span>
 
<span id="line98">98.  if(tmp) justswld(mtmp,Monnam(mtmp));</span>
 
<span id="line99">99.  break;</span>
 
<span id="line100">100.  case '\'':</span>
 
<span id="line101">101.  if (tmp) justswld(mtmp,Monnam(mtmp));</span>
 
<span id="line102">102.  break;</span>
 
<span id="line103">103.  case ';':</span>
 
<span id="line104">104.  if(ctmp) {</span>
 
<span id="line105">105.  if(!u.ustuck && !rn2(10)) {</span>
 
<span id="line106">106.  pline("%s swings itself around you!",</span>
 
<span id="line107">107.  Monnam(mtmp));</span>
 
<span id="line108">108.  u.ustuck = mtmp;</span>
 
<span id="line109">109.  } else if(u.ustuck == mtmp &&</span>
 
<span id="line110">110.      levl[mtmp->mx][mtmp->my].typ == POOL) {</span>
 
<span id="line111">111.  pline("%s drowns you ...", Monnam(mtmp));</span>
 
<span id="line112">112.  done("drowned");</span>
 
<span id="line113">113.  }</span>
 
<span id="line114">114.  }</span>
 
<span id="line115">115.  break;</span>
 
<span id="line116">116.  case 'A':</span>
 
<span id="line117">117.  if(ctmp && rn2(2)) {</span>
 
<span id="line118">118.      if(Poison_resistance)</span>
 
<span id="line119">119.  pline("The sting doesn't seem to affect you.");</span>
 
<span id="line120">120.      else {</span>
 
<span id="line121">121.  pline("You feel weaker!");</span>
 
<span id="line122">122.  losestr(1);</span>
 
<span id="line123">123.      }</span>
 
<span id="line124">124.  }</span>
 
<span id="line125">125.  break;</span>
 
<span id="line126">126.  case 'C':</span>
 
<span id="line127">127.  (void) hitu(mtmp,rnd(6));</span>
 
<span id="line128">128.  break;</span>
 
<span id="line129">129.  case 'c':</span>
 
<span id="line130">130.  if(!rn2(5)) {</span>
 
<span id="line131">131.      if (mtmp->mcan)</span>
 
<span id="line132">132.  pline("You hear a cough from %s!", monnam(mtmp));</span>
 
<span id="line133">133.      else {</span>
 
<span id="line134">134.  pline("You hear %s's hissing!", monnam(mtmp));</span>
 
<span id="line135">135.  if(!rn2(20) || (flags.moonphase == NEW_MOON</span>
 
<span id="line136">136.      && !carrying(DEAD_LIZARD) && u.usym != 'c')) {</span>
 
<span id="line137">137.  Stoned = 5;</span>
 
<span id="line138">138.  /* pline("You get turned to stone!"); */</span>
 
<span id="line139">139.  /* done_in_by(mtmp); */</span>
 
<span id="line140">140.  }</span>
 
<span id="line141">141.      }</span>
 
<span id="line142">142.  }</span>
 
<span id="line143">143.  break;</span>
 
<span id="line144">144.  case 'D':</span>
 
<span id="line145">145.  if(rn2(6) || mtmp->mcan) {</span>
 
<span id="line146">146.  (void) hitu(mtmp,d(3,10));</span>
 
<span id="line147">147.  (void) hitu(mtmp,rnd(8));</span>
 
<span id="line148">148.  (void) hitu(mtmp,rnd(8));</span>
 
<span id="line149">149.  break;</span>
 
<span id="line150">150.  }</span>
 
<span id="line151">151.  kludge("%s breathes fire!",Monnam(mtmp));</span>
 
<span id="line152">152.  buzz(-1,mtmp->mx,mtmp->my,u.ux-mtmp->mx,u.uy-mtmp->my);</span>
 
<span id="line153">153.  break;</span>
 
<span id="line154">154.  case 'd':</span>
 
<span id="line155">155.  (void) hitu(mtmp,d(2, (flags.moonphase == FULL_MOON) ? 3 : 4));</span>
 
<span id="line156">156.  break;</span>
 
<span id="line157">157.  case 'e':</span>
 
<span id="line158">158.  (void) hitu(mtmp,d(3,6));</span>
 
<span id="line159">159.  break;</span>
 
<span id="line160">160.  case 'F':</span>
 
<span id="line161">161.  if(mtmp->mcan) break;</span>
 
<span id="line162">162.  kludge("%s explodes!", Monnam(mtmp));</span>
 
<span id="line163">163.  if(Cold_resistance) pline("You don't seem affected by it.");</span>
 
<span id="line164">164.  else {</span>
 
<span id="line165">165.  xchar dn;</span>
 
<span id="line166">166.  if(17-(u.ulevel/2) > rnd(20)) {</span>
 
<span id="line167">167.  pline("You get blasted!");</span>
 
<span id="line168">168.  dn = 6;</span>
 
<span id="line169">169.  } else {</span>
 
<span id="line170">170.  pline("You duck the blast...");</span>
 
<span id="line171">171.  dn = 3;</span>
 
<span id="line172">172.  }</span>
 
<span id="line173">173.  losehp_m(d(dn,6), mtmp);</span>
 
<span id="line174">174.  }</span>
 
<span id="line175">175.  mondead(mtmp);</span>
 
<span id="line176">176.  return(1);</span>
 
<span id="line177">177.  case 'g':</span>
 
<span id="line178">178.  if(ctmp && multi >= 0 && !rn2(3)) {</span>
 
<span id="line179">179.  /* fix so we don't know what hit us when blind  KAA */</span>
 
<span id="line180">180.      if (Blind)</span>
 
<span id="line181">181.  pline("You are frozen by its juices!");</span>
 
<span id="line182">182.      else</span>
 
<span id="line183">183.  pline("You are frozen by %s's juices!",monnam(mtmp));</span>
 
<span id="line184">184.      nomul(-rnd(10));</span>
 
<span id="line185">185.  }</span>
 
<span id="line186">186.  break;</span>
 
<span id="line187">187.  case 'h':</span>
 
<span id="line188">188.  if(ctmp && multi >= 0 && !rn2(5)) {</span>
 
<span id="line189">189.      nomul(-rnd(10));</span>
 
<span id="line190">190.      if (Blind)</span>
 
<span id="line191">191.  pline("You are put to sleep by its bite!");</span>
 
<span id="line192">192.      else</span>
 
<span id="line193">193.  pline("You are put to sleep by %s's bite!",monnam(mtmp));</span>
 
<span id="line194">194.  }</span>
 
<span id="line195">195.  break;</span>
 
<span id="line196">196.  case 'j':</span>
 
<span id="line197">197.  tmp = hitu(mtmp,rnd(3));</span>
 
<span id="line198">198.  tmp &= hitu(mtmp,rnd(3));</span>
 
<span id="line199">199.  if(tmp){</span>
 
<span id="line200">200.  (void) hitu(mtmp,rnd(4));</span>
 
<span id="line201">201.  (void) hitu(mtmp,rnd(4));</span>
 
<span id="line202">202.  }</span>
 
<span id="line203">203.  break;</span>
 
<span id="line204">204.  case 'k':</span>
 
<span id="line205">205.  if((hitu(mtmp,rnd(4)) || !rn2(3)) && ctmp){</span>
 
<span id="line206">206.  poisoned("bee's sting",mdat->mname);</span>
 
<span id="line207">207.  }</span>
 
<span id="line208">208.  break;</span>
 
<span id="line209">209.  case 'L':</span>
 
<span id="line210">210.  #ifdef KAA</span>
 
<span id="line211">211.  if (u.usym=='L') break;</span>
 
<span id="line212">212.  #endif</span>
 
<span id="line213">213.  if(!mtmp->mcan && tmp) stealgold(mtmp);</span>
 
<span id="line214">214.  break;</span>
 
<span id="line215">215.  case 'N':</span>
 
<span id="line216">216.  #ifdef KAA</span>
 
<span id="line217">217.  if (u.usym=='N') {</span>
 
<span id="line218">218.  if (mtmp->minvent)</span>
 
<span id="line219">219.  pline("%s brags about the goods some dungeon explorer provided.",</span>
 
<span id="line220">220.  Monnam(mtmp));</span>
 
<span id="line221">221.  else</span>
 
<span id="line222">222.  pline("%s makes some remarks about how difficult theft is lately.",</span>
 
<span id="line223">223.  Monnam(mtmp));</span>
 
<span id="line224">224.  rloc(mtmp);</span>
 
<span id="line225">225.  } else</span>
 
<span id="line226">226.  #endif</span>
 
<span id="line227">227.  if(mtmp->mcan && !Blind) {</span>
 
<span id="line228">228.  pline("%s tries to seduce you, but you seem not interested.",</span>
 
<span id="line229">229.  Amonnam(mtmp, "plain"));</span>
 
<span id="line230">230.  if(rn2(3)) rloc(mtmp);</span>
 
<span id="line231">231.  } else if(steal(mtmp)) {</span>
 
<span id="line232">232.  rloc(mtmp);</span>
 
<span id="line233">233.  mtmp->mflee = 1;</span>
 
<span id="line234">234.  }</span>
 
<span id="line235">235.  break;</span>
 
<span id="line236">236.  case 'n':</span>
 
<span id="line237">237.  if(!uwep</span>
 
<span id="line238">238.  #ifdef KAA</span>
 
<span id="line239">239.    && u.usym == '@'</span>
 
<span id="line240">240.  #endif</span>
 
<span id="line241">241.    && !uarm && !uarmh && !uarms && !uarmg) {</span>
 
<span id="line242">242.      pline("%s hits! (I hope you don't mind)",</span>
 
<span id="line243">243.  Monnam(mtmp));</span>
 
<span id="line244">244.  u.uhp += rnd(7);</span>
 
<span id="line245">245.  if(!rn2(7)) u.uhpmax++;</span>
 
<span id="line246">246.  if(u.uhp > u.uhpmax) u.uhp = u.uhpmax;</span>
 
<span id="line247">247.  flags.botl = 1;</span>
 
<span id="line248">248.  if(!rn2(50)) rloc(mtmp);</span>
 
<span id="line249">249.  } else {</span>
 
<span id="line250">250.  #ifdef KAA</span>
 
<span id="line251">251.  if (pl_character[0] == 'P' && u.usym == '@') {</span>
 
<span id="line252">252.      if (!(moves % 5))</span>
 
<span id="line253">253.  pline("Doc, I can't help you unless you cooperate.");</span>
 
<span id="line254">254.  } else {</span>
 
<span id="line255">255.  #endif</span>
 
<span id="line256">256.  (void) hitu(mtmp,d(2,6));</span>
 
<span id="line257">257.  (void) hitu(mtmp,d(2,6));</span>
 
<span id="line258">258.  #ifdef KAA</span>
 
<span id="line259">259.  }</span>
 
<span id="line260">260.  #endif</span>
 
<span id="line261">261.  }</span>
 
<span id="line262">262.  break;</span>
 
<span id="line263">263.  case 'o':</span>
 
<span id="line264">264.  tmp = hitu(mtmp,rnd(6));</span>
 
<span id="line265">265.  if(hitu(mtmp,rnd(6)) && tmp && /* hits with both paws */</span>
 
<span id="line266">266.      !u.ustuck && rn2(2)) {</span>
 
<span id="line267">267.  u.ustuck = mtmp;</span>
 
<span id="line268">268.  kludge("%s has grabbed you!", Monnam(mtmp));</span>
 
<span id="line269">269.  losehp_m(d(2,8), mtmp);</span>
 
<span id="line270">270.  } else if(u.ustuck == mtmp) {</span>
 
<span id="line271">271.  losehp_m(d(2,8), mtmp);</span>
 
<span id="line272">272.  pline("You are being crushed.");</span>
 
<span id="line273">273.  }</span>
 
<span id="line274">274.  break;</span>
 
<span id="line275">275.  case 'P':</span>
 
<span id="line276">276.  if(ctmp && !rn2(4))</span>
 
<span id="line277">277.  justswld(mtmp,Monnam(mtmp));</span>
 
<span id="line278">278.  else</span>
 
<span id="line279">279.  (void) hitu(mtmp,d(2,4));</span>
 
<span id="line280">280.  break;</span>
 
<span id="line281">281.  case 'Q':</span>
 
<span id="line282">282.  #ifdef KAA</span>
 
<span id="line283">283.  if(ctmp) {</span>
 
<span id="line284">284.  pline("Your position suddenly seems very uncertain!");</span>
 
<span id="line285">285.  tele();</span>
 
<span id="line286">286.  }</span>
 
<span id="line287">287.  #else</span>
 
<span id="line288">288.  (void) hitu(mtmp,rnd(2));</span>
 
<span id="line289">289.  (void) hitu(mtmp,rnd(2));</span>
 
<span id="line290">290.  #endif</span>
 
<span id="line291">291.  break;</span>
 
<span id="line292">292.  case 'R':</span>
 
<span id="line293">293.  if(ctmp && uarmh && !uarmh->rustfree &&</span>
 
<span id="line294">294.    (int) uarmh->spe >= -1) {</span>
 
<span id="line295">295.  pline("Your helmet rusts!");</span>
 
<span id="line296">296.  uarmh->spe--;</span>
 
<span id="line297">297.  } else</span>
 
<span id="line298">298.  if(ctmp && uarm && !uarm->rustfree && /* Mike Newton */</span>
 
<span id="line299">299.  uarm->otyp < STUDDED_LEATHER_ARMOR &&</span>
 
<span id="line300">300.  (int) uarm->spe >= -1) {</span>
 
<span id="line301">301.  pline("Your armor rusts!");</span>
 
<span id="line302">302.  uarm->spe--;</span>
 
<span id="line303">303.  }</span>
 
<span id="line304">304.  break;</span>
 
<span id="line305">305.  case 'S':</span>
 
<span id="line306">306.  if(ctmp && !rn2(8)) {</span>
 
<span id="line307">307.  poisoned("snake's bite",mdat->mname);</span>
 
<span id="line308">308.  }</span>
 
<span id="line309">309.  break;</span>
 
<span id="line310">310.  case 's':</span>
 
<span id="line311">311.  if(ctmp && !rn2(8)) {</span>
 
<span id="line312">312.  poisoned("scorpion's sting",mdat->mname);</span>
 
<span id="line313">313.  }</span>
 
<span id="line314">314.  (void) hitu(mtmp,rnd(8));</span>
 
<span id="line315">315.  (void) hitu(mtmp,rnd(8));</span>
 
<span id="line316">316.  break;</span>
 
<span id="line317">317.  case 'T':</span>
 
<span id="line318">318.  (void) hitu(mtmp,rnd(6));</span>
 
<span id="line319">319.  (void) hitu(mtmp,rnd(6));</span>
 
<span id="line320">320.  break;</span>
 
<span id="line321">321.  case 't':</span>
 
<span id="line322">322.  if(!rn2(5)) rloc(mtmp);</span>
 
<span id="line323">323.  break;</span>
 
<span id="line324">324.  case 'u':</span>
 
<span id="line325">325.  mtmp->mflee = 1;</span>
 
<span id="line326">326.  break;</span>
 
<span id="line327">327.  case 'U':</span>
 
<span id="line328">328.  (void) hitu(mtmp,d(3,4));</span>
 
<span id="line329">329.  (void) hitu(mtmp,d(3,4));</span>
 
<span id="line330">330.  break;</span>
 
<span id="line331">331.  case 'v':</span>
 
<span id="line332">332.  if(ctmp && !u.ustuck) u.ustuck = mtmp;</span>
 
<span id="line333">333.  break;</span>
 
<span id="line334">334.  case 'V':</span>
 
<span id="line335">335.  if(tmp)  losehp_m(4, mtmp);</span>
 
<span id="line336">336.  if(ctmp) losexp();</span>
 
<span id="line337">337.  break;</span>
 
<span id="line338">338.  case 'W':</span>
 
<span id="line339">339.  if(ctmp) losexp();</span>
 
<span id="line340">340.  break;</span>
 
<span id="line341">341.  #ifndef NOWORM</span>
 
<span id="line342">342.  case 'w':</span>
 
<span id="line343">343.  if(tmp) wormhit(mtmp);</span>
 
<span id="line344">344.  #endif</span>
 
<span id="line345">345.  break;</span>
 
<span id="line346">346.  case 'X':</span>
 
<span id="line347">347.  (void) hitu(mtmp,rnd(5));</span>
 
<span id="line348">348.  (void) hitu(mtmp,rnd(5));</span>
 
<span id="line349">349.  (void) hitu(mtmp,rnd(5));</span>
 
<span id="line350">350.  break;</span>
 
<span id="line351">351.  case 'x':</span>
 
<span id="line352">352.  { register long side = rn2(2) ? RIGHT_SIDE : LEFT_SIDE;</span>
 
<span id="line353">353.  #ifdef KAA</span>
 
<span id="line354">354.    if (mtmp->mcan)</span>
 
<span id="line355">355.      pline("%s nuzzles against your %s leg!",</span>
 
<span id="line356">356.    Monnam(mtmp), (side==RIGHT_SIDE)?"right":"left");</span>
 
<span id="line357">357.    else {</span>
 
<span id="line358">358.  #endif</span>
 
<span id="line359">359.      pline("%s pricks your %s leg!",</span>
 
<span id="line360">360.    Monnam(mtmp), (side==RIGHT_SIDE)?"right":"left");</span>
 
<span id="line361">361.      set_wounded_legs(side, rnd(50));</span>
 
<span id="line362">362.      losehp_m(2, mtmp);</span>
 
<span id="line363">363.  #ifdef KAA</span>
 
<span id="line364">364.    }</span>
 
<span id="line365">365.  #endif</span>
 
<span id="line366">366.    break;</span>
 
<span id="line367">367.  }</span>
 
<span id="line368">368.  case 'y':</span>
 
<span id="line369">369.  if(mtmp->mcan) break;</span>
 
<span id="line370">370.  mondead(mtmp);</span>
 
<span id="line371">371.  if(!Blind && (u.usym != 'y')) {</span>
 
<span id="line372">372.  pline("You are blinded by a blast of light!");</span>
 
<span id="line373">373.  Blind = d(4,12);</span>
 
<span id="line374">374.  seeoff(0);</span>
 
<span id="line375">375.  }</span>
 
<span id="line376">376.  return(1);</span>
 
<span id="line377">377.  case 'Y':</span>
 
<span id="line378">378.  (void) hitu(mtmp,rnd(6));</span>
 
<span id="line379">379.  break;</span>
 
<span id="line380">380.  }</span>
 
<span id="line381">381.  if(u.uhp < 1) done_in_by(mtmp);</span>
 
<span id="line382">382.  return(0);</span>
 
<span id="line383">383.  }</span>
 
<span id="line384">384.  </span>
 
<span id="line385">385.  hitu(mtmp,dam)</span>
 
<span id="line386">386.  register struct monst *mtmp;</span>
 
<span id="line387">387.  register dam;</span>
 
<span id="line388">388.  {</span>
 
<span id="line389">389.  register tmp, res;</span>
 
<span id="line390">390.  </span>
 
<span id="line391">391.  nomul(0);</span>
 
<span id="line392">392.  if (mtmp->mfroz || mtmp->mhp <= 0) return(0);</span>
 
<span id="line393">393.  /* If you are a 'a' or 'E' the monster might not get a second hit */</span>
 
<span id="line394">394.  if(u.uswallow) return(0);</span>
 
<span id="line395">395.  </span>
 
<span id="line396">396.  if(mtmp->mhide && mtmp->mundetected) {</span>
 
<span id="line397">397.  mtmp->mundetected = 0;</span>
 
<span id="line398">398.  if(!Blind) {</span>
 
<span id="line399">399.  register struct obj *obj;</span>
 
<span id="line400">400.  extern char * Xmonnam();</span>
 
<span id="line401">401.  if(obj = o_at(mtmp->mx,mtmp->my))</span>
 
<span id="line402">402.  pline("%s was hidden under %s!",</span>
 
<span id="line403">403.  Xmonnam(mtmp), doname(obj));</span>
 
<span id="line404">404.  }</span>
 
<span id="line405">405.  }</span>
 
<span id="line406">406.  </span>
 
<span id="line407">407.  tmp = u.uac;</span>
 
<span id="line408">408.  /* give people with Ac = -10 at least some vulnerability */</span>
 
<span id="line409">409.  if(tmp < 0) {</span>
 
<span id="line410">410.  dam += tmp; /* decrease damage */</span>
 
<span id="line411">411.  if(dam <= 0) dam = 1;</span>
 
<span id="line412">412.  tmp = -rn2(-tmp);</span>
 
<span id="line413">413.  }</span>
 
<span id="line414">414.  tmp += mtmp->data->mlevel;</span>
 
<span id="line415">415.  if(multi < 0) tmp += 4;</span>
 
<span id="line416">416.  if((Invis && mtmp->data->mlet != 'I') || !mtmp->mcansee) tmp -= 2;</span>
 
<span id="line417">417.  if(mtmp->mtrapped) tmp -= 2;</span>
 
<span id="line418">418.  if(tmp <= rnd(20)) {</span>
 
<span id="line419">419.  if(Blind) pline("It misses.");</span>
 
<span id="line420">420.  else pline("%s misses.",Monnam(mtmp));</span>
 
<span id="line421">421.  res = 0;</span>
 
<span id="line422">422.  } else {</span>
 
<span id="line423">423.  if(Blind) pline("It hits!");</span>
 
<span id="line424">424.  else pline("%s hits!",Monnam(mtmp));</span>
 
<span id="line425">425.  if (u.usym == 'a' && !rn2(4)) {</span>
 
<span id="line426">426.  pline("%s is splashed by your acid!",Monnam(mtmp));</span>
 
<span id="line427">427.  mtmp->mhp -= rnd(10);</span>
 
<span id="line428">428.  if(mtmp->mhp <= 0) {</span>
 
<span id="line429">429.  pline("%s dies!",Monnam(mtmp));</span>
 
<span id="line430">430.  xkilled(mtmp,0);</span>
 
<span id="line431">431.  }</span>
 
<span id="line432">432.  }</span>
 
<span id="line433">433.  losehp_m(dam, mtmp);</span>
 
<span id="line434">434.  res = 1;</span>
 
<span id="line435">435.  }</span>
 
<span id="line436">436.  stop_occupation();</span>
 
<span id="line437">437.  if(u.usym=='E' && mtmp->mcansee && rn2(2)) {</span>
 
<span id="line438">438.  pline("%s is frozen by your gaze!",Monnam(mtmp));</span>
 
<span id="line439">439.  mtmp->mfroz = 1;</span>
 
<span id="line440">440.  }</span>
 
<span id="line441">441.  return(res);</span>
 
<span id="line442">442.  }</span>
 
<span id="line443">443.  </span>
 
<span id="line444">444.  #define Athome (Inhell && !mtmp->cham)</span>
 
<span id="line445">445.  </span>
 
<span id="line446">446.  #ifdef HARD</span>
 
<span id="line447">447.  demon_talk(mtmp) /* returns 1 if we pay him off. */</span>
 
<span id="line448">448.  register struct monst *mtmp;</span>
 
<span id="line449">449.  {</span>
 
<span id="line450">450.  char *xmonnam(), *Xmonnam();</span>
 
<span id="line451">451.  int demand, offer;</span>
 
<span id="line452">452.  </span>
 
<span id="line453">453.  if(!strcmp(mtmp->data->mname, "demon")) {  /* not for regular '&'s */</span>
 
<span id="line454">454.  </span>
 
<span id="line455">455.      pline("%s mutters something about awful working conditions.",</span>
 
<span id="line456">456.    Xmonnam(mtmp));</span>
 
<span id="line457">457.      return(0);</span>
 
<span id="line458">458.  }</span>
 
<span id="line459">459.  </span>
 
<span id="line460">460.  if(u.usym == '&') { /* Won't blackmail their own. */</span>
 
<span id="line461">461.  </span>
 
<span id="line462">462.      pline("%s says, 'Good hunting %s.' and vanishes",</span>
 
<span id="line463">463.    Xmonnam(mtmp), flags.female ? "Sister" : "Brother");</span>
 
<span id="line464">464.      mondead(mtmp);</span>
 
<span id="line465">465.      return(1);</span>
 
<span id="line466">466.  }</span>
 
<span id="line467">467.  </span>
 
<span id="line468">468.  demand = (u.ugold * (rnd(80) + 20 * Athome)) / 100;</span>
 
<span id="line469">469.  if(!demand)  { /* you have no gold */</span>
 
<span id="line470">470.      mtmp->mpeaceful = 0;</span>
 
<span id="line471">471.      return(0);</span>
 
<span id="line472">472.  } else {</span>
 
<span id="line473">473.      char buf[80];</span>
 
<span id="line474">474.  </span>
 
<span id="line475">475.      pline("%s demands %d Zorkmids for safe passage.",</span>
 
<span id="line476">476.    Xmonnam(mtmp), demand);</span>
 
<span id="line477">477.      pline("how many will you offer him?");</span>
 
<span id="line478">478.      getlin(buf);</span>
 
<span id="line479">479.      sscanf(buf, "%d", &offer);</span>
 
<span id="line480">480.  </span>
 
<span id="line481">481.      if(offer >= u.ugold) {</span>
 
<span id="line482">482.  pline("You give %s all your gold.", xmonnam(mtmp));</span>
 
<span id="line483">483.  offer = u.ugold;</span>
 
<span id="line484">484.      } else pline("You give %s %d Zorkmids.", xmonnam(mtmp), offer);</span>
 
<span id="line485">485.      u.ugold -= offer;</span>
 
<span id="line486">486.  </span>
 
<span id="line487">487.      if(offer >= demand) {</span>
 
<span id="line488">488.  pline("%s vanishes laughing about cowardly mortals.",</span>
 
<span id="line489">489.        Xmonnam(mtmp));</span>
 
<span id="line490">490.      } else {</span>
 
<span id="line491">491.  if(rnd(40) > (demand - offer)) {</span>
 
<span id="line492">492.      pline("%s scowls at you menacingly, then vanishes.",</span>
 
<span id="line493">493.    Xmonnam(mtmp));</span>
 
<span id="line494">494.  } else {</span>
 
<span id="line495">495.      pline("%s gets angry...", Xmonnam(mtmp));</span>
 
<span id="line496">496.      mtmp->mpeaceful = 0;</span>
 
<span id="line497">497.      return(0);</span>
 
<span id="line498">498.  }</span>
 
<span id="line499">499.      }</span>
 
<span id="line500">500.  }</span>
 
<span id="line501">501.  mondead(mtmp);</span>
 
<span id="line502">502.  return(1);</span>
 
<span id="line503">503.  }</span>
 
<span id="line504">504.  #endif</span>
 
<span id="line505">505.  </span>
 
<span id="line506">506.  demon_hit(mtmp)</span>
 
<span id="line507">507.  register struct monst *mtmp;</span>
 
<span id="line508">508.  {</span>
 
<span id="line509">509.  register struct obj *otmp;</span>
 
<span id="line510">510.  int onum, nobj = 0,</span>
 
<span id="line511">511.  ml = mtmp->data->mlevel;</span>
 
<span id="line512">512.  </span>
 
<span id="line513">513.  if(!mtmp->cham && !mtmp->mcan && !rn2(13)) {</span>
 
<span id="line514">514.  (void) makemon(PM_DEMON,u.ux,u.uy);</span>
 
<span id="line515">515.  } else {</span>
 
<span id="line516">516.      switch((!mtmp->mcan) ? rn2(ml - 5 - !Athome) : 0)  {</span>
 
<span id="line517">517.  #ifdef HARD</span>
 
<span id="line518">518.  case 12:</span>
 
<span id="line519">519.  case 11:</span>
 
<span id="line520">520.  case 10:</span>
 
<span id="line521">521.  case 9: /* the wiz */</span>
 
<span id="line522">522.  (void) hitu(mtmp, 1);</span>
 
<span id="line523">523.  pline("Oh no, he's using the touch of death!");</span>
 
<span id="line524">524.  if (rn2(ml) > 12)  {</span>
 
<span id="line525">525.  </span>
 
<span id="line526">526.      if(Confusion)</span>
 
<span id="line527">527.  pline("You have an out of body experience.");</span>
 
<span id="line528">528.      else  {</span>
 
<span id="line529">529.  killer = "touch of death";</span>
 
<span id="line530">530.  done("died");</span>
 
<span id="line531">531.      }</span>
 
<span id="line532">532.  } else pline("Lucky for you, it didn't work!");</span>
 
<span id="line533">533.  break;</span>
 
<span id="line534">534.  case 8: /* demon princes */</span>
 
<span id="line535">535.  (void) hitu(mtmp, 1);</span>
 
<span id="line536">536.  if(!destroy_arm()) pline("Your skin itches.");</span>
 
<span id="line537">537.  break;</span>
 
<span id="line538">538.  case 7:</span>
 
<span id="line539">539.  (void) hitu(mtmp, 1);</span>
 
<span id="line540">540.  for (otmp = invent; otmp; otmp = otmp->nobj)  nobj++;</span>
 
<span id="line541">541.  onum = rn2(nobj);</span>
 
<span id="line542">542.  for(otmp = invent; onum != 0; onum--) otmp = otmp->nobj;</span>
 
<span id="line543">543.  otmp->cursed++;</span>
 
<span id="line544">544.  break;</span>
 
<span id="line545">545.  case 6: /* demon lords */</span>
 
<span id="line546">546.  (void) hitu(mtmp, 1);</span>
 
<span id="line547">547.  pline("You suddenly feel weaker!");</span>
 
<span id="line548">548.  losestr(rnd(ml - 6));</span>
 
<span id="line549">549.  break;</span>
 
<span id="line550">550.  case 5:</span>
 
<span id="line551">551.  (void) hitu(mtmp, 1);</span>
 
<span id="line552">552.  if (Confusion) pline("Hey, that tickles!");</span>
 
<span id="line553">553.  else pline("Huh, What? Where am I?");</span>
 
<span id="line554">554.  HConfusion += rn1(7, 16);</span>
 
<span id="line555">555.  break;</span>
 
<span id="line556">556.  #endif /* HARD /**/</span>
 
<span id="line557">557.  default: /* demons and chamelons as demons */</span>
 
<span id="line558">558.  (void) hitu(mtmp,d(2,5 + Athome));</span>
 
<span id="line559">559.  (void) hitu(mtmp,d(2,5 + Athome));</span>
 
<span id="line560">560.  (void) hitu(mtmp,rnd(2 + Athome));</span>
 
<span id="line561">561.  (void) hitu(mtmp,rnd(2 + Athome));</span>
 
<span id="line562">562.  (void) hitu(mtmp,rn1(4,1 + Athome));</span>
 
<span id="line563">563.  break;</span>
 
<span id="line564">564.      }</span>
 
<span id="line565">565.  }</span>
 
<span id="line566">566.  return(0);</span>
 
<span id="line567">567.  } </span>
 
[[Category:NetHack 1.4f source code|mhitu.c]]
 

Revision as of 20:48, 3 September 2006

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