1 /* NetHack 3.6 sit.c $NHDT-Date: 1458341129 2016/03/18 22:45:29 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.53 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /*-Copyright (c) Robert Patrick Rankin, 2012. */
4 /* NetHack may be freely redistributed. See license for details. */
6 /* JNetHack Copyright */
7 /* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
8 /* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
9 /* JNetHack may be freely redistributed. See license for details. */
15 /* take away the hero's money */
19 struct obj *otmp, *nobj;
22 for (otmp = invent; otmp; otmp = nobj) {
24 if (otmp->oclass == COIN_CLASS) {
26 remove_worn_item(otmp, FALSE);
32 You_feel("a strange sensation.");
34 You("
\8aï
\96
\82È
\8a´
\8ao
\82ð
\8ao
\82¦
\82½
\81D");
37 You("notice you have no money!");
39 You("
\82¨
\8bà
\82ð
\8e\9d\82Á
\82Ä
\82È
\82¢
\82±
\82Æ
\82É
\8bC
\82ª
\82Â
\82¢
\82½
\81I");
49 static const char sit_message[] = "sit on the %s.";
51 static const char sit_message[] = "%s
\82É
\8dÀ
\82Á
\82½
\81D";
52 register struct trap *trap = t_at(u.ux, u.uy);
53 register int typ = levl[u.ux][u.uy].typ;
57 You("are already sitting on %s.", mon_nam(u.usteed));
59 You("
\82à
\82¤%s
\82É
\8dÀ
\82Á
\82Ä
\82¢
\82é
\81D", mon_nam(u.usteed));
62 if (u.uundetected && is_hider(youmonst.data) && u.umonnum != PM_TRAPPER)
63 u.uundetected = 0; /* no longer on the ceiling */
65 if (!can_reach_floor(FALSE)) {
68 There("are no seats in here!");
70 pline("
\82±
\82±
\82É
\82Í
\88Ö
\8eq
\82ª
\82È
\82¢
\81I");
73 You("tumble in place.");
75 You("
\82»
\82Ì
\8fê
\82Å
\92\88\95Ô
\82è
\82µ
\82½
\81D");
78 You("are sitting on air.");
80 You("
\8bó
\92\86\82É
\8dÀ
\82Á
\82½
\81D");
82 } else if (u.ustuck && !sticks(youmonst.data)) {
83 /* holding monster is next to hero rather than beneath, but
84 hero is in no condition to actually sit at has/her own spot */
85 if (humanoid(u.ustuck->data))
87 pline("%s won't offer %s lap.", Monnam(u.ustuck), mhis(u.ustuck));
89 pline("%s
\82Í
\82Ð
\82´
\82ð
\8fo
\82³
\82È
\82©
\82Á
\82½
\81D", Monnam(u.ustuck));
92 pline("%s has no lap.", Monnam(u.ustuck));
94 pline("%s
\82É
\82Í
\82Ð
\82´
\82ª
\82È
\82¢
\81D", Monnam(u.ustuck));
96 } else if (is_pool(u.ux, u.uy) && !Underwater) { /* water walking */
100 if (OBJ_AT(u.ux, u.uy)
101 /* ensure we're not standing on the precipice */
102 && !uteetering_at_seen_pit(trap)) {
103 register struct obj *obj;
105 obj = level.objects[u.ux][u.uy];
106 if (youmonst.data->mlet == S_DRAGON && obj->oclass == COIN_CLASS) {
108 You("coil up around your %shoard.",
109 (obj->quan + money_cnt(invent) < u.ulevel * 1000) ? "meager "
112 You("%s
\82¨
\95ó
\82Ì
\82Ü
\82í
\82è
\82Å
\82Æ
\82®
\82ë
\82ð
\8aª
\82¢
\82½
\81D",
113 (obj->quan + money_cnt(invent) < u.ulevel * 1000) ? "
\82í
\82¸
\82©
\82È"
118 You("sit on %s.", the(xname(obj)));
120 You("%s
\82É
\8dÀ
\82Á
\82½
\81D", the(xname(obj)));
121 if (!(Is_box(obj) || objects[obj->otyp].oc_material == CLOTH))
123 pline("It's not very comfortable...");
125 pline("
\82 \82Ü
\82è
\8dÀ
\82è
\82²
\82±
\82¿
\82ª
\82æ
\82
\82È
\82¢
\81D
\81D
\81D");
127 } else if (trap != 0 || (u.utrap && (u.utraptype >= TT_LAVA))) {
129 exercise(A_WIS, FALSE); /* you're getting stuck longer */
130 if (u.utraptype == TT_BEARTRAP) {
132 You_cant("sit down with your %s in the bear trap.",
134 pline("%s
\82ª
\8cF
\82Ìã©
\82É
\82Í
\82³
\82Ü
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\8dÀ
\82ê
\82È
\82¢
\81D",
137 } else if (u.utraptype == TT_PIT) {
138 if (trap && trap->ttyp == SPIKED_PIT) {
140 You("sit down on a spike. Ouch!");
142 You("
\83g
\83Q
\82Ì
\8fã
\82É
\8dÀ
\82Á
\82½
\81D
\82¢
\82Ä
\82Á
\81I");
143 losehp(Half_physical_damage ? rn2(2) : 1,
145 "sitting on an iron spike", KILLED_BY);
147 "
\93S
\82Ì
\83g
\83Q
\82Ì
\8fã
\82É
\8dÀ
\82Á
\82Ä", KILLED_BY);
148 exercise(A_STR, FALSE);
151 You("sit down in the pit.");
153 You("
\97\8e\82µ
\8c\8a\82Ì
\92\86\82Å
\8dÀ
\82Á
\82½
\81D");
155 } else if (u.utraptype == TT_WEB) {
157 You("sit in the spider web and get entangled further!");
159 You("
\82
\82à
\82Ì
\91\83\82Ì
\92\86\82Å
\8dÀ
\82Á
\82½
\82ç
\81C
\82Ü
\82·
\82Ü
\82·
\97\8d\82Ü
\82Á
\82½
\81I");
160 u.utrap += rn1(10, 5);
161 } else if (u.utraptype == TT_LAVA) {
162 /* Must have fire resistance or they'd be dead already */
164 You("sit in the %s!", hliquid("lava"));
166 You("%s
\82Ì
\92\86\82É
\8dÀ
\82Á
\82½
\81I", hliquid("
\97n
\8aâ"));
171 losehp(d(2, 10), "sitting in lava",
173 losehp(d(2, 10), "
\97n
\8aâ
\82Ì
\92\86\82É
\8dÀ
\82Á
\82Ä",
174 KILLED_BY); /* lava damage */
175 } else if (u.utraptype == TT_INFLOOR
176 || u.utraptype == TT_BURIEDBALL) {
178 You_cant("maneuver to sit!");
180 You("
\8dÀ
\82é
\82æ
\82¤
\82È
\93®
\8dì
\82ª
\82Å
\82«
\82È
\82¢
\81I");
187 You("
\8dÀ
\82Á
\82½
\81D");
188 dotrap(trap, VIASITTING);
190 } else if (Underwater || Is_waterlevel(&u.uz)) {
191 if (Is_waterlevel(&u.uz))
193 There("are no cushions floating nearby.");
195 pline("
\8bß
\82
\82É
\95\82\82¢
\82Ä
\82¢
\82é
\83N
\83b
\83V
\83\87\83\93\82Í
\82È
\82¢
\81D");
198 You("sit down on the muddy bottom.");
200 You("
\82Ç
\82ë
\82Ç
\82ë
\82µ
\82½
\92ê
\82É
\8dÀ
\82Á
\82½
\81D");
201 } else if (is_pool(u.ux, u.uy)) {
204 You("sit in the %s.", hliquid("water"));
206 You("%s
\82Ì
\92\86\82Å
\8dÀ
\82Á
\82½
\81D", hliquid("
\90\85"));
207 if (!rn2(10) && uarm)
209 (void) water_damage(uarm, "armor", TRUE);
211 (void) water_damage(uarm, "
\8aZ", TRUE);
212 if (!rn2(10) && uarmf && uarmf->otyp != WATER_WALKING_BOOTS)
214 (void) water_damage(uarm, "armor", TRUE);
216 (void) water_damage(uarm, "
\8aZ", TRUE);
217 } else if (IS_SINK(typ)) {
218 You(sit_message, defsyms[S_sink].explanation);
220 Your("%s gets wet.", humanoid(youmonst.data) ? "rump" : "underside");
222 Your("%s
\82Í
\94G
\82ê
\82½
\81D", humanoid(youmonst.data) ? "
\90K" : "
\89º
\95\94");
223 } else if (IS_ALTAR(typ)) {
224 You(sit_message, defsyms[S_altar].explanation);
225 altar_wrath(u.ux, u.uy);
226 } else if (IS_GRAVE(typ)) {
227 You(sit_message, defsyms[S_grave].explanation);
228 } else if (typ == STAIRS) {
230 You(sit_message, "stairs");
232 You(sit_message, "
\8aK
\92i");
233 } else if (typ == LADDER) {
235 You(sit_message, "ladder");
237 You(sit_message, "
\82Í
\82µ
\82²");
238 } else if (is_lava(u.ux, u.uy)) {
239 /* must be WWalking */
241 You(sit_message, hliquid("lava"));
243 You(sit_message, hliquid("
\97n
\8aâ"));
245 if (likes_lava(youmonst.data)) {
247 pline_The("%s feels warm.", hliquid("lava"));
249 pline_The("%s
\82Í
\92g
\82©
\82¢
\81D", hliquid("
\97n
\8aâ"));
253 pline_The("%s burns you!", hliquid("lava"));
255 pline_The("%s
\82Å
\94R
\82¦
\82½
\81I", hliquid("
\97n
\8aâ"));
256 losehp(d((Fire_resistance ? 2 : 10), 10), /* lava damage */
258 "sitting on lava", KILLED_BY);
260 "
\97n
\8aâ
\82É
\8dÀ
\82Á
\82Ä", KILLED_BY);
261 } else if (is_ice(u.ux, u.uy)) {
262 You(sit_message, defsyms[S_ice].explanation);
263 if (!Cold_resistance)
265 pline_The("ice feels cold.");
267 pline("
\95X
\82Í
\97â
\82½
\82
\8a´
\82¶
\82½
\81D");
268 } else if (typ == DRAWBRIDGE_DOWN) {
270 You(sit_message, "drawbridge");
272 You(sit_message, "
\92µ
\82Ë
\8b´");
273 } else if (IS_THRONE(typ)) {
274 You(sit_message, defsyms[S_throne].explanation);
278 (void) adjattrib(rn2(A_MAX), -rn1(4, 3), FALSE);
280 losehp(rnd(10), "cursed throne", KILLED_BY_AN);
282 losehp(rnd(10), "
\8eô
\82í
\82ê
\82½
\8bÊ
\8dÀ
\82Å", KILLED_BY_AN);
285 (void) adjattrib(rn2(A_MAX), 1, FALSE);
289 pline("A%s electric shock shoots through your body!",
290 (Shock_resistance) ? "n" : " massive");
292 pline("%s
\93d
\8bC
\82ª
\82 \82È
\82½
\82Ì
\91Ì
\82ð
\91\96\82è
\94²
\82¯
\82½
\81I",
293 (Shock_resistance) ? "" : "
\8c\83\82µ
\82¢");
296 losehp(Shock_resistance ? rnd(6) : rnd(30), "electric chair",
298 losehp(Shock_resistance ? rnd(6) : rnd(30), "
\93d
\8bC
\88Ö
\8eq
\82Å",
300 exercise(A_CON, FALSE);
304 You_feel("much, much better!");
306 You_feel("
\82Æ
\82Ä
\82à
\81C
\82Æ
\82Ä
\82à
\8c³
\8bC
\82É
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81I");
308 if (u.mh >= (u.mhmax - 5))
312 if (u.uhp >= (u.uhpmax - 5))
316 make_blinded(0L, TRUE);
317 make_sick(0L, (char *) 0, FALSE, SICK_ALL);
325 if (u.uluck + rn2(5) < 0) {
327 You_feel("your luck is changing.");
329 pline("
\89^
\82ª
\8cü
\82¢
\82Ä
\82«
\82½
\8bC
\82ª
\82·
\82é
\81D");
338 /* Magical voice not affected by deafness */
340 pline("A voice echoes:");
342 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
344 verbalize("Thy audience hath been summoned, %s!",
345 flags.female ? "Dame" : "Sire");
347 verbalize("%s
\82æ
\81I
\93ð
\82Ì
\92®
\8fO
\8f¢
\8a«
\82³
\82ê
\82µ
\81D",
348 flags.female ? "
\8f\97" : "
\92j");
351 (void) makemon(courtmon(), u.ux, u.uy, NO_MM_FLAGS);
355 /* Magical voice not affected by deafness */
357 pline("A voice echoes:");
359 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
361 verbalize("By thine Imperious order, %s...",
362 flags.female ? "Dame" : "Sire");
364 verbalize("%s
\82æ
\81I
\93ð
\82Ì
\98ü
\96\9d\95·
\82«
\82¢
\82ê
\82æ
\82¤
\82¼
\81D",
365 flags.female ? "
\8f\97" : "
\92j");
367 do_genocide(5); /* REALLY|ONTHRONE, see do_genocide() */
370 /* Magical voice not affected by deafness */
372 pline("A voice echoes:");
374 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
377 "A curse upon thee for sitting upon this most holy throne!");
379 "
\90¹
\82È
\82é
\8bÊ
\8dÀ
\82É
\8dÀ
\82è
\82µ
\93ð
\82É
\8eô
\82¢
\82 \82ê
\81I");
381 make_blinded(Blinded + rn1(100, 250), TRUE);
382 change_luck((Luck > 1) ? -rnd(2) : -1);
387 if (Luck < 0 || (HSee_invisible & INTRINSIC)) {
388 if (level.flags.nommap) {
390 pline("A terrible drone fills your head!");
392 pline("
\8b°
\82µ
\82¢
\83u
\83\93\83u
\83\93\82Æ
\82¢
\82¤
\89¹
\82ª
\93ª
\82É
\8b¿
\82¢
\82½
\81I");
393 make_confused((HConfusion & TIMEOUT) + (long) rnd(30),
397 pline("An image forms in your mind.");
399 pline("
\82 \82é
\83C
\83\81\81[
\83W
\82ª
\93ª
\82É
\95\82\82ñ
\82¾
\81D");
404 Your("vision becomes clear.");
406 Your("
\8e\8b\8aE
\82Í
\8dá
\82¦
\93n
\82Á
\82½
\81D");
407 HSee_invisible |= FROMOUTSIDE;
414 You_feel("threatened.");
416 You("
\8bº
\94\97\82³
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
420 You_feel("a wrenching sensation.");
422 You("
\82Ë
\82¶
\82ç
\82ê
\82½
\82æ
\82¤
\82È
\8a´
\8ao
\82ð
\8a´
\82¶
\82½
\81D");
423 tele(); /* teleport him */
428 You("are granted an insight!");
430 You("
\93´
\8e@
\97Í
\82ð
\93¾
\82½
\81I");
432 /* rn2(5) agrees w/seffects() */
433 identify_pack(rn2(5), FALSE);
438 Your("mind turns into a pretzel!");
440 Your("
\90S
\82Í
\83N
\83l
\83N
\83l
\82É
\82È
\82Á
\82½
\81I");
441 make_confused((HConfusion & TIMEOUT) + (long) rn1(7, 16),
445 impossible("throne effect");
449 if (is_prince(youmonst.data))
451 You_feel("very comfortable here.");
453 You("
\82±
\82±
\82Í
\82Æ
\82Ä
\82à
\97\8e\82¿
\92\85\82
\81D");
456 You_feel("somehow out of place...");
458 You("
\89½
\82©
\8fê
\88á
\82¢
\82Ì
\8bC
\82ª
\82µ
\82½
\81D
\81D
\81D");
461 if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) {
462 /* may have teleported */
463 levl[u.ux][u.uy].typ = ROOM;
465 pline_The("throne vanishes in a puff of logic.");
467 pline("
\8bÊ
\8dÀ
\82Í
\82Ó
\82Á
\82Æ
\8fÁ
\82¦
\82½
\81D");
470 } else if (lays_eggs(youmonst.data)) {
475 pline("%s can't lay eggs!",
477 ? "You may think you are a platypus, but a male still"
480 pline("%s
\97Y
\82Í
\97\91\82ð
\8eY
\82ß
\82È
\82¢
\81I",
482 ? "
\82 \82È
\82½
\82Í
\8e©
\95ª
\82ª
\83J
\83\82\83m
\83n
\83V
\82¾
\82Æ
\8ev
\82Á
\82Ä
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\82ª
\81C
\82â
\82Á
\82Ï
\82è"
486 } else if (u.uhunger < (int) objects[EGG].oc_nutrition) {
488 You("don't have enough energy to lay an egg.");
490 You("
\97\91\82ð
\8eY
\82Þ
\82¾
\82¯
\82Ì
\83G
\83l
\83\8b\83M
\81[
\82ª
\82È
\82¢
\81D");
494 uegg = mksobj(EGG, FALSE, FALSE);
497 uegg->owt = weight(uegg);
498 /* this sets hatch timers if appropriate */
499 set_corpsenm(uegg, egg_type_from_parent(u.umonnum, FALSE));
500 uegg->known = uegg->dknown = 1;
504 You("
\97\91\82ð
\8eY
\82ñ
\82¾
\81D");
507 morehungry((int) objects[EGG].oc_nutrition);
510 pline("Having fun sitting on the %s?", surface(u.ux, u.uy));
512 pline("%s
\82É
\8dÀ
\82Á
\82Ä
\8ay
\82µ
\82¢
\82©
\82¢
\81H", surface(u.ux,u.uy));
517 /* curse a few inventory items at random! */
525 static const char mal_aura[] = "feel a malignant aura surround %s.";
527 static const char mal_aura[] = "
\8e×
\88«
\82È
\83I
\81[
\83\89\82ð%s
\82Ì
\89ñ
\82è
\82É
\8a´
\82¶
\82½
\81D";
529 if (uwep && (uwep->oartifact == ART_MAGICBANE) && rn2(20)) {
531 You(mal_aura, "the magic-absorbing blade");
533 You(mal_aura, "
\96\82\97Í
\82ð
\8bz
\82¢
\82Æ
\82é
\93\81");
538 shieldeff(u.ux, u.uy);
540 You(mal_aura, "you");
542 You(mal_aura, "
\82 \82È
\82½");
545 for (otmp = invent; otmp; otmp = otmp->nobj) {
546 /* gold isn't subject to being cursed or blessed */
547 if (otmp->oclass == COIN_CLASS)
552 for (cnt = rnd(6 / ((!!Antimagic) + (!!Half_spell_damage) + 1));
555 for (otmp = invent; otmp; otmp = otmp->nobj) {
557 if (otmp->oclass == COIN_CLASS)
560 break; /* found the target */
562 /* the !otmp case should never happen; picking an already
563 cursed item happens--avoid "resists" message in that case */
564 if (!otmp || otmp->cursed)
565 continue; /* next target */
567 if (otmp->oartifact && spec_ability(otmp, SPFX_INTEL)
570 pline("%s!", Tobjnam(otmp, "resist"));
572 pline("%s
\82Í
\89e
\8b¿
\82ð
\8eó
\82¯
\82È
\82¢
\81I", xname(otmp));
584 /* treat steed's saddle as extended part of hero's inventory */
585 if (u.usteed && !rn2(4) && (otmp = which_armor(u.usteed, W_SADDLE)) != 0
586 && !otmp->cursed) { /* skip if already cursed */
593 pline("%s %s.", Yobjnam2(otmp, "glow"),
594 hcolor(otmp->cursed ? NH_BLACK : (const char *) "brown"));
596 pline("%s
\82Í%s
\8bP
\82¢
\82½
\81D", xname(otmp),
597 jconj_adj(hcolor(otmp->cursed ? NH_BLACK : (const char *)"
\92\83\90F
\82Ì")));
604 /* remove a random INTRINSIC ability */
610 if (HFire_resistance & INTRINSIC) {
611 HFire_resistance &= ~INTRINSIC;
615 You("
\92g
\82©
\82³
\82ð
\8a´
\82¶
\82½
\81D");
620 if (HTeleportation & INTRINSIC) {
621 HTeleportation &= ~INTRINSIC;
623 You_feel("less jumpy.");
625 You("
\82¿
\82å
\82Á
\82Æ
\97\8e\82¿
\82Â
\82¢
\82½
\81D");
630 if (HPoison_resistance & INTRINSIC) {
631 HPoison_resistance &= ~INTRINSIC;
633 You_feel("a little sick!");
635 You("
\8f
\82µ
\8bC
\95ª
\82ª
\88«
\82
\82È
\82Á
\82½
\81I");
640 if (HTelepat & INTRINSIC) {
641 HTelepat &= ~INTRINSIC;
642 if (Blind && !Blind_telepat)
643 see_monsters(); /* Can't sense mons anymore! */
645 Your("senses fail!");
647 Your("
\8cÜ
\8a´
\82Í
\96\83á
\83\82µ
\82½
\81I");
652 if (HCold_resistance & INTRINSIC) {
653 HCold_resistance &= ~INTRINSIC;
657 You("
\97Á
\82µ
\82³
\82ð
\8a´
\82¶
\82½
\81D");
662 if (HInvis & INTRINSIC) {
663 HInvis &= ~INTRINSIC;
665 You_feel("paranoid.");
667 You("
\96Ï
\91z
\82ð
\95ø
\82¢
\82½
\81D");
672 if (HSee_invisible & INTRINSIC) {
673 HSee_invisible &= ~INTRINSIC;
675 You("%s!", Hallucination ? "tawt you taw a puttie tat"
676 : "thought you saw something");
679 You("
\82¾
\82ê
\8aI
\82Ý
\82ç
\81C
\82ê
\82Ä
\82¢
\82é
\81D");
681 You("
\92N
\82©
\82É
\8c©
\82ç
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81I");
687 if (HFast & INTRINSIC) {
692 You("
\92x
\82
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
697 if (HStealth & INTRINSIC) {
698 HStealth &= ~INTRINSIC;
702 You("
\95s
\8aí
\97p
\82É
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
707 /* intrinsic protection is just disabled, not set back to 0 */
708 if (HProtection & INTRINSIC) {
709 HProtection &= ~INTRINSIC;
711 You_feel("vulnerable.");
713 You("
\96³
\96h
\94õ
\82É
\82È
\82Á
\82½
\8bC
\82ª
\82µ
\82½
\81D");
718 if (HAggravate_monster & INTRINSIC) {
719 HAggravate_monster &= ~INTRINSIC;
721 You_feel("less attractive.");
723 You("
\96£
\97Í
\82ª
\8e¸
\82¹
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");