1 /* NetHack 3.6 sit.c $NHDT-Date: 1445906863 2015/10/27 00:47:43 $ $NHDT-Branch: master $:$NHDT-Revision: 1.51 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed. See license for details. */
5 /* JNetHack Copyright */
6 /* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7 /* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8 /* JNetHack may be freely redistributed. See license for details. */
14 /* take away the hero's money */
18 struct obj *otmp, *nobj;
21 for (otmp = invent; otmp; otmp = nobj) {
23 if (otmp->oclass == COIN_CLASS) {
25 remove_worn_item(otmp, FALSE);
31 You_feel("a strange sensation.");
33 You("
\8aï
\96
\82È
\8a´
\8ao
\82ð
\8ao
\82¦
\82½
\81D");
36 You("notice you have no money!");
38 You("
\82¨
\8bà
\82ð
\8e\9d\82Á
\82Ä
\82È
\82¢
\82±
\82Æ
\82É
\8bC
\82ª
\82Â
\82¢
\82½
\81I");
48 static const char sit_message[] = "sit on the %s.";
50 static const char sit_message[] = "%s
\82É
\8dÀ
\82Á
\82½
\81D";
51 register struct trap *trap = t_at(u.ux, u.uy);
52 register int typ = levl[u.ux][u.uy].typ;
56 You("are already sitting on %s.", mon_nam(u.usteed));
58 You("
\82à
\82¤%s
\82É
\8dÀ
\82Á
\82Ä
\82¢
\82é
\81D", mon_nam(u.usteed));
61 if (u.uundetected && is_hider(youmonst.data) && u.umonnum != PM_TRAPPER)
62 u.uundetected = 0; /* no longer on the ceiling */
64 if (!can_reach_floor(FALSE)) {
67 There("are no seats in here!");
69 pline("
\82±
\82±
\82É
\82Í
\88Ö
\8eq
\82ª
\82È
\82¢
\81I");
72 You("tumble in place.");
74 You("
\82»
\82Ì
\8fê
\82Å
\92\88\95Ô
\82è
\82µ
\82½
\81D");
77 You("are sitting on air.");
79 You("
\8bó
\92\86\82É
\8dÀ
\82Á
\82½
\81D");
81 } else if (u.ustuck && !sticks(youmonst.data)) {
82 /* holding monster is next to hero rather than beneath, but
83 hero is in no condition to actually sit at has/her own spot */
84 if (humanoid(u.ustuck->data))
86 pline("%s won't offer %s lap.", Monnam(u.ustuck), mhis(u.ustuck));
88 pline("%s
\82Í
\82Ð
\82´
\82ð
\8fo
\82³
\82È
\82©
\82Á
\82½
\81D", Monnam(u.ustuck));
91 pline("%s has no lap.", Monnam(u.ustuck));
93 pline("%s
\82É
\82Í
\82Ð
\82´
\82ª
\82È
\82¢
\81D", Monnam(u.ustuck));
95 } else if (is_pool(u.ux, u.uy) && !Underwater) { /* water walking */
99 if (OBJ_AT(u.ux, u.uy)
100 /* ensure we're not standing on the precipice */
101 && !uteetering_at_seen_pit(trap)) {
102 register struct obj *obj;
104 obj = level.objects[u.ux][u.uy];
105 if (youmonst.data->mlet == S_DRAGON && obj->oclass == COIN_CLASS) {
107 You("coil up around your %shoard.",
108 (obj->quan + money_cnt(invent) < u.ulevel * 1000) ? "meager "
111 You("%s
\82¨
\95ó
\82Ì
\82Ü
\82í
\82è
\82Å
\82Æ
\82®
\82ë
\82ð
\8aª
\82¢
\82½
\81D",
112 (obj->quan + money_cnt(invent) < u.ulevel * 1000) ? "
\82í
\82¸
\82©
\82È"
117 You("sit on %s.", the(xname(obj)));
119 You("%s
\82É
\8dÀ
\82Á
\82½
\81D", the(xname(obj)));
120 if (!(Is_box(obj) || objects[obj->otyp].oc_material == CLOTH))
122 pline("It's not very comfortable...");
124 pline("
\82 \82Ü
\82è
\8dÀ
\82è
\82²
\82±
\82¿
\82ª
\82æ
\82
\82È
\82¢
\81D
\81D
\81D");
126 } else if (trap != 0 || (u.utrap && (u.utraptype >= TT_LAVA))) {
128 exercise(A_WIS, FALSE); /* you're getting stuck longer */
129 if (u.utraptype == TT_BEARTRAP) {
131 You_cant("sit down with your %s in the bear trap.",
133 pline("%s
\82ª
\8cF
\82Ìã©
\82É
\82Í
\82³
\82Ü
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\8dÀ
\82ê
\82È
\82¢
\81D",
136 } else if (u.utraptype == TT_PIT) {
137 if (trap && trap->ttyp == SPIKED_PIT) {
139 You("sit down on a spike. Ouch!");
141 You("
\83g
\83Q
\82Ì
\8fã
\82É
\8dÀ
\82Á
\82½
\81D
\82¢
\82Ä
\82Á
\81I");
142 losehp(Half_physical_damage ? rn2(2) : 1,
144 "sitting on an iron spike", KILLED_BY);
146 "
\93S
\82Ì
\83g
\83Q
\82Ì
\8fã
\82É
\8dÀ
\82Á
\82Ä", KILLED_BY);
147 exercise(A_STR, FALSE);
150 You("sit down in the pit.");
152 You("
\97\8e\82µ
\8c\8a\82Ì
\92\86\82Å
\8dÀ
\82Á
\82½
\81D");
154 } else if (u.utraptype == TT_WEB) {
156 You("sit in the spider web and get entangled further!");
158 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");
159 u.utrap += rn1(10, 5);
160 } else if (u.utraptype == TT_LAVA) {
161 /* Must have fire resistance or they'd be dead already */
163 You("sit in the lava!");
165 You("
\97n
\8aâ
\82Ì
\92\86\82É
\8dÀ
\82Á
\82½
\81I");
170 losehp(d(2, 10), "sitting in lava",
172 losehp(d(2, 10), "
\97n
\8aâ
\82Ì
\92\86\82É
\8dÀ
\82Á
\82Ä",
173 KILLED_BY); /* lava damage */
174 } else if (u.utraptype == TT_INFLOOR
175 || u.utraptype == TT_BURIEDBALL) {
177 You_cant("maneuver to sit!");
179 You("
\8dÀ
\82é
\82æ
\82¤
\82È
\93®
\8dì
\82ª
\82Å
\82«
\82È
\82¢
\81I");
186 You("
\8dÀ
\82Á
\82½
\81D");
189 } else if (Underwater || Is_waterlevel(&u.uz)) {
190 if (Is_waterlevel(&u.uz))
192 There("are no cushions floating nearby.");
194 pline("
\8bß
\82
\82É
\95\82\82¢
\82Ä
\82¢
\82é
\83N
\83b
\83V
\83\87\83\93\82Í
\82È
\82¢
\81D");
197 You("sit down on the muddy bottom.");
199 You("
\82Ç
\82ë
\82Ç
\82ë
\82µ
\82½
\92ê
\82É
\8dÀ
\82Á
\82½
\81D");
200 } else if (is_pool(u.ux, u.uy)) {
203 You("sit in the water.");
205 You("
\90\85\82Ì
\92\86\82Å
\8dÀ
\82Á
\82½
\81D");
206 if (!rn2(10) && uarm)
208 (void) water_damage(uarm, "armor", TRUE);
210 (void) water_damage(uarm, "
\8aZ", TRUE);
211 if (!rn2(10) && uarmf && uarmf->otyp != WATER_WALKING_BOOTS)
213 (void) water_damage(uarm, "armor", TRUE);
215 (void) water_damage(uarm, "
\8aZ", TRUE);
216 } else if (IS_SINK(typ)) {
217 You(sit_message, defsyms[S_sink].explanation);
219 Your("%s gets wet.", humanoid(youmonst.data) ? "rump" : "underside");
221 Your("%s
\82Í
\94G
\82ê
\82½
\81D", humanoid(youmonst.data) ? "
\90K" : "
\89º
\95\94");
222 } else if (IS_ALTAR(typ)) {
223 You(sit_message, defsyms[S_altar].explanation);
224 altar_wrath(u.ux, u.uy);
225 } else if (IS_GRAVE(typ)) {
226 You(sit_message, defsyms[S_grave].explanation);
227 } else if (typ == STAIRS) {
229 You(sit_message, "stairs");
231 You(sit_message, "
\8aK
\92i");
232 } else if (typ == LADDER) {
234 You(sit_message, "ladder");
236 You(sit_message, "
\82Í
\82µ
\82²");
237 } else if (is_lava(u.ux, u.uy)) {
238 /* must be WWalking */
240 You(sit_message, "lava");
242 You(sit_message, "
\97n
\8aâ");
244 if (likes_lava(youmonst.data)) {
246 pline_The("lava feels warm.");
248 pline("
\97n
\8aâ
\82Í
\92g
\82©
\82¢
\81D");
252 pline_The("lava burns you!");
254 You("
\97n
\8aâ
\82Å
\94R
\82¦
\82½
\81I");
255 losehp(d((Fire_resistance ? 2 : 10), 10), /* lava damage */
257 "sitting on lava", KILLED_BY);
259 "
\97n
\8aâ
\82É
\8dÀ
\82Á
\82Ä", KILLED_BY);
260 } else if (is_ice(u.ux, u.uy)) {
261 You(sit_message, defsyms[S_ice].explanation);
262 if (!Cold_resistance)
264 pline_The("ice feels cold.");
266 pline("
\95X
\82Í
\97â
\82½
\82
\8a´
\82¶
\82½
\81D");
267 } else if (typ == DRAWBRIDGE_DOWN) {
269 You(sit_message, "drawbridge");
271 You(sit_message, "
\92µ
\82Ë
\8b´");
272 } else if (IS_THRONE(typ)) {
273 You(sit_message, defsyms[S_throne].explanation);
277 (void) adjattrib(rn2(A_MAX), -rn1(4, 3), FALSE);
279 losehp(rnd(10), "cursed throne", KILLED_BY_AN);
281 losehp(rnd(10), "
\8eô
\82í
\82ê
\82½
\8bÊ
\8dÀ
\82Å", KILLED_BY_AN);
284 (void) adjattrib(rn2(A_MAX), 1, FALSE);
288 pline("A%s electric shock shoots through your body!",
289 (Shock_resistance) ? "n" : " massive");
291 pline("%s
\93d
\8bC
\82ª
\82 \82È
\82½
\82Ì
\91Ì
\82ð
\91\96\82è
\94²
\82¯
\82½
\81I",
292 (Shock_resistance) ? "" : "
\8c\83\82µ
\82¢");
295 losehp(Shock_resistance ? rnd(6) : rnd(30), "electric chair",
297 losehp(Shock_resistance ? rnd(6) : rnd(30), "
\93d
\8bC
\88Ö
\8eq
\82Å",
299 exercise(A_CON, FALSE);
303 You_feel("much, much better!");
305 You_feel("
\82Æ
\82Ä
\82à
\81C
\82Æ
\82Ä
\82à
\8c³
\8bC
\82É
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81I");
307 if (u.mh >= (u.mhmax - 5))
311 if (u.uhp >= (u.uhpmax - 5))
314 make_blinded(0L, TRUE);
315 make_sick(0L, (char *) 0, FALSE, SICK_ALL);
323 if (u.uluck + rn2(5) < 0) {
325 You_feel("your luck is changing.");
327 pline("
\89^
\82ª
\8cü
\82¢
\82Ä
\82«
\82½
\8bC
\82ª
\82·
\82é
\81D");
336 /* Magical voice not affected by deafness */
338 pline("A voice echoes:");
340 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
342 verbalize("Thy audience hath been summoned, %s!",
343 flags.female ? "Dame" : "Sire");
345 verbalize("%s
\82æ
\81I
\93ð
\82Ì
\92®
\8fO
\8f¢
\8a«
\82³
\82ê
\82µ
\81D",
346 flags.female ? "
\8f\97" : "
\92j");
349 (void) makemon(courtmon(), u.ux, u.uy, NO_MM_FLAGS);
353 /* Magical voice not affected by deafness */
355 pline("A voice echoes:");
357 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
359 verbalize("By thine Imperious order, %s...",
360 flags.female ? "Dame" : "Sire");
362 verbalize("%s
\82æ
\81I
\93ð
\82Ì
\98ü
\96\9d\95·
\82«
\82¢
\82ê
\82æ
\82¤
\82¼
\81D",
363 flags.female ? "
\8f\97" : "
\92j");
365 do_genocide(5); /* REALLY|ONTHRONE, see do_genocide() */
368 /* Magical voice not affected by deafness */
370 pline("A voice echoes:");
372 pline("
\90º
\82ª
\8b¿
\82¢
\82½:");
375 "A curse upon thee for sitting upon this most holy throne!");
377 "
\90¹
\82È
\82é
\8bÊ
\8dÀ
\82É
\8dÀ
\82è
\82µ
\93ð
\82É
\8eô
\82¢
\82 \82ê
\81I");
379 make_blinded(Blinded + rn1(100, 250), TRUE);
384 if (Luck < 0 || (HSee_invisible & INTRINSIC)) {
385 if (level.flags.nommap) {
387 pline("A terrible drone fills your head!");
389 pline("
\8b°
\82µ
\82¢
\83u
\83\93\83u
\83\93\82Æ
\82¢
\82¤
\89¹
\82ª
\93ª
\82É
\8b¿
\82¢
\82½
\81I");
390 make_confused((HConfusion & TIMEOUT) + (long) rnd(30),
394 pline("An image forms in your mind.");
396 pline("
\82 \82é
\83C
\83\81\81[
\83W
\82ª
\93ª
\82É
\95\82\82ñ
\82¾
\81D");
401 Your("vision becomes clear.");
403 Your("
\8e\8b\8aE
\82Í
\8dá
\82¦
\93n
\82Á
\82½
\81D");
404 HSee_invisible |= FROMOUTSIDE;
411 You_feel("threatened.");
413 You("
\8bº
\94\97\82³
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
417 You_feel("a wrenching sensation.");
419 You("
\82Ë
\82¶
\82ç
\82ê
\82½
\82æ
\82¤
\82È
\8a´
\8ao
\82ð
\8a´
\82¶
\82½
\81D");
420 tele(); /* teleport him */
425 You("are granted an insight!");
427 You("
\93´
\8e@
\97Í
\82ð
\93¾
\82½
\81I");
429 /* rn2(5) agrees w/seffects() */
430 identify_pack(rn2(5), FALSE);
435 Your("mind turns into a pretzel!");
437 Your("
\90S
\82Í
\83N
\83l
\83N
\83l
\82É
\82È
\82Á
\82½
\81I");
438 make_confused((HConfusion & TIMEOUT) + (long) rn1(7, 16),
442 impossible("throne effect");
446 if (is_prince(youmonst.data))
448 You_feel("very comfortable here.");
450 You("
\82±
\82±
\82Í
\82Æ
\82Ä
\82à
\97\8e\82¿
\92\85\82
\81D");
453 You_feel("somehow out of place...");
455 You("
\89½
\82©
\8fê
\88á
\82¢
\82Ì
\8bC
\82ª
\82µ
\82½
\81D
\81D
\81D");
458 if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) {
459 /* may have teleported */
460 levl[u.ux][u.uy].typ = ROOM;
462 pline_The("throne vanishes in a puff of logic.");
464 pline("
\8bÊ
\8dÀ
\82Í
\82Ó
\82Á
\82Æ
\8fÁ
\82¦
\82½
\81D");
467 } else if (lays_eggs(youmonst.data)) {
472 pline("%s can't lay eggs!",
474 ? "You may think you are a platypus, but a male still"
477 pline("%s
\97Y
\82Í
\97\91\82ð
\8eY
\82ß
\82È
\82¢
\81I",
479 ? "
\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è"
483 } else if (u.uhunger < (int) objects[EGG].oc_nutrition) {
485 You("don't have enough energy to lay an egg.");
487 You("
\97\91\82ð
\8eY
\82Þ
\82¾
\82¯
\82Ì
\83G
\83l
\83\8b\83M
\81[
\82ª
\82È
\82¢
\81D");
491 uegg = mksobj(EGG, FALSE, FALSE);
494 uegg->owt = weight(uegg);
495 /* this sets hatch timers if appropriate */
496 set_corpsenm(uegg, egg_type_from_parent(u.umonnum, FALSE));
497 uegg->known = uegg->dknown = 1;
501 You("
\97\91\82ð
\8eY
\82ñ
\82¾
\81D");
504 morehungry((int) objects[EGG].oc_nutrition);
507 pline("Having fun sitting on the %s?", surface(u.ux, u.uy));
509 pline("%s
\82É
\8dÀ
\82Á
\82Ä
\8ay
\82µ
\82¢
\82©
\82¢
\81H", surface(u.ux,u.uy));
514 /* curse a few inventory items at random! */
522 static const char mal_aura[] = "feel a malignant aura surround %s.";
524 static const char mal_aura[] = "
\8e×
\88«
\82È
\83I
\81[
\83\89\82ð%s
\82Ì
\89ñ
\82è
\82É
\8a´
\82¶
\82½
\81D";
526 if (uwep && (uwep->oartifact == ART_MAGICBANE) && rn2(20)) {
528 You(mal_aura, "the magic-absorbing blade");
530 You(mal_aura, "
\96\82\97Í
\82ð
\8bz
\82¢
\82Æ
\82é
\93\81");
535 shieldeff(u.ux, u.uy);
537 You(mal_aura, "you");
539 You(mal_aura, "
\82 \82È
\82½");
542 for (otmp = invent; otmp; otmp = otmp->nobj) {
543 /* gold isn't subject to being cursed or blessed */
544 if (otmp->oclass == COIN_CLASS)
549 for (cnt = rnd(6 / ((!!Antimagic) + (!!Half_spell_damage) + 1));
552 for (otmp = invent; otmp; otmp = otmp->nobj) {
554 if (otmp->oclass == COIN_CLASS)
557 break; /* found the target */
559 /* the !otmp case should never happen; picking an already
560 cursed item happens--avoid "resists" message in that case */
561 if (!otmp || otmp->cursed)
562 continue; /* next target */
564 if (otmp->oartifact && spec_ability(otmp, SPFX_INTEL)
567 pline("%s!", Tobjnam(otmp, "resist"));
569 pline("%s
\82Í
\89e
\8b¿
\82ð
\8eó
\82¯
\82È
\82¢
\81I", xname(otmp));
581 /* treat steed's saddle as extended part of hero's inventory */
582 if (u.usteed && !rn2(4) && (otmp = which_armor(u.usteed, W_SADDLE)) != 0
583 && !otmp->cursed) { /* skip if already cursed */
590 pline("%s %s.", Yobjnam2(otmp, "glow"),
591 hcolor(otmp->cursed ? NH_BLACK : (const char *) "brown"));
593 pline("%s
\82Í%s
\8bP
\82¢
\82½
\81D", xname(otmp),
594 jconj_adj(hcolor(otmp->cursed ? NH_BLACK : (const char *)"
\92\83\90F
\82Ì")));
601 /* remove a random INTRINSIC ability */
607 if (HFire_resistance & INTRINSIC) {
608 HFire_resistance &= ~INTRINSIC;
612 You("
\92g
\82©
\82³
\82ð
\8a´
\82¶
\82½
\81D");
616 if (HTeleportation & INTRINSIC) {
617 HTeleportation &= ~INTRINSIC;
619 You_feel("less jumpy.");
621 You("
\82¿
\82å
\82Á
\82Æ
\97\8e\82¿
\82Â
\82¢
\82½
\81D");
625 if (HPoison_resistance & INTRINSIC) {
626 HPoison_resistance &= ~INTRINSIC;
628 You_feel("a little sick!");
630 You("
\8f
\82µ
\8bC
\95ª
\82ª
\88«
\82
\82È
\82Á
\82½
\81I");
634 if (HTelepat & INTRINSIC) {
635 HTelepat &= ~INTRINSIC;
636 if (Blind && !Blind_telepat)
637 see_monsters(); /* Can't sense mons anymore! */
639 Your("senses fail!");
641 Your("
\8cÜ
\8a´
\82Í
\96\83á
\83\82µ
\82½
\81I");
645 if (HCold_resistance & INTRINSIC) {
646 HCold_resistance &= ~INTRINSIC;
650 You("
\97Á
\82µ
\82³
\82ð
\8a´
\82¶
\82½
\81D");
654 if (HInvis & INTRINSIC) {
655 HInvis &= ~INTRINSIC;
657 You_feel("paranoid.");
659 You("
\96Ï
\91z
\82ð
\95ø
\82¢
\82½
\81D");
663 if (HSee_invisible & INTRINSIC) {
664 HSee_invisible &= ~INTRINSIC;
666 You("%s!", Hallucination ? "tawt you taw a puttie tat"
667 : "thought you saw something");
670 You("
\82¾
\82ê
\8aI
\82Ý
\82ç
\81C
\82ê
\82Ä
\82¢
\82é
\81D");
672 You("
\92N
\82©
\82É
\8c©
\82ç
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81I");
677 if (HFast & INTRINSIC) {
682 You("
\92x
\82
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
686 if (HStealth & INTRINSIC) {
687 HStealth &= ~INTRINSIC;
691 You("
\95s
\8aí
\97p
\82É
\82È
\82Á
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");
695 /* intrinsic protection is just disabled, not set back to 0 */
696 if (HProtection & INTRINSIC) {
697 HProtection &= ~INTRINSIC;
699 You_feel("vulnerable.");
701 You("
\96³
\96h
\94õ
\82É
\82È
\82Á
\82½
\8bC
\82ª
\82µ
\82½
\81D");
705 if (HAggravate_monster & INTRINSIC) {
706 HAggravate_monster &= ~INTRINSIC;
708 You_feel("less attractive.");
710 You("
\96£
\97Í
\82ª
\8e¸
\82¹
\82½
\82æ
\82¤
\82È
\8bC
\82ª
\82µ
\82½
\81D");