X-Git-Url: https://git.yukkurigames.com/?p=rogue-pphs.git;a=blobdiff_plain;f=romance.c;h=f1daa06fb5f0fd1623b88b417c694cefeab7f868;hp=1a73fbe5e478efe3154d6337b5f3a1b973b00913;hb=42f03179903be5a86084b56dd2c25d984049ee99;hpb=e915733375580be35ab04e70dd080fea59586dd8 diff --git a/romance.c b/romance.c index 1a73fbe..f1daa06 100644 --- a/romance.c +++ b/romance.c @@ -3,7 +3,7 @@ * * @(#)romance.c 3.2 (Berkeley) 6/15/81 * - * Rogue: Exploring the Dungeons of Doom + * Rogue: Exploring the Cavern of Cuties * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman * All rights reserved. * @@ -54,7 +54,7 @@ int ydelta, xdelta; { register struct thing *tp = (struct thing *) ldata(mob); int attr = count_bits_set(tp->t_stats.s_ont ^ player.t_stats.s_ont); - attr += tp->t_stats.s_int - 1; + attr += tp->t_stats.s_int - 2; if (rnd(NUM_FEATURES) < attr) { tp->t_stats.s_int++; @@ -63,7 +63,7 @@ int ydelta, xdelta; "You catch the %s staring at you out of the corner of eir eye.", "The %s blushes and waves cautiously.", }; - msg(rndchoice(msgs), monsters[tp->t_type - 'A'].m_name); + msg(rndchoice(msgs), killname(tp->t_type)); } else if (attr <= 0) { @@ -73,7 +73,8 @@ int ydelta, xdelta; "The %s tells you to stop it.", "The %s is sick of your crap.", }; - msg(rndchoice(msgs), monsters[tp->t_type - 'A'].m_name); + msg(rndchoice(msgs), killname(tp->t_type)); + wake_monster(tp->t_pos.y, tp->t_pos.x); } else { @@ -83,7 +84,7 @@ int ydelta, xdelta; "The %s acts like it can't hear you.", "The %s doesn't care.", }; - msg(rndchoice(msgs), monsters[tp->t_type - 'A'].m_name); + msg(rndchoice(msgs), killname(tp->t_type)); } } } @@ -95,7 +96,7 @@ int ydelta, xdelta; register struct linked_list *mob; register struct object *op; register struct thing *tp; - register bool did_hit = TRUE; + register int liking; if ((mob = find_mons(hero.y + ydelta, hero.x + xdelta)) == NULL) { @@ -109,6 +110,41 @@ int ydelta, xdelta; op = (struct object *) ldata(obj); if (!dropcheck(op)) return; + + liking = count_bits_set( + hash(op->o_type * op->o_which) & tp->t_stats.s_ont) - 1; + if ((liking == 0 || liking == -1) + || liking > 0 && tp->t_stats.s_int <= MAYBE_INTERESTED) + { + const char *msgs[] = { + "The %s ignores %s", + "The %s doesn't care for %s", + "The %s isn't interested in %s", + }; + msg(rndchoice(msgs), killname(tp->t_type), inv_name(op, TRUE)); + return; + } + else if (liking > 0) + { + const char *msgs[] = { + "The %s accepts %s.", + "The %s smiles and takes %s.", + }; + msg(rndchoice(msgs), killname(tp->t_type), inv_name(op, TRUE)); + tp->t_stats.s_int += liking * 10; + } + else + { + const char *msgs[] = { + "The %s throws away %s.", + "The %s breaks %s.", + "The %s hates %s.", + }; + msg(rndchoice(msgs), killname(tp->t_type), inv_name(op, TRUE)); + tp->t_stats.s_int -= liking * 2; + wake_monster(tp->t_pos.y, tp->t_pos.x); + } + /* * Take it out of the pack */ @@ -130,4 +166,46 @@ int ydelta, xdelta; embrace() { + register struct thing *tp = NULL; + register int liking; + register int dx, dy; + + for (dx = -1; dx <= 1; ++dx) + { + for (dy = -1; dy <= 1; ++dy) + { + register struct linked_list *mob; + if ((mob = find_mons(hero.y + dy, hero.x + dx))) + { + register struct thing *atp = (struct thing *)ldata(mob); + if (!tp || atp->t_stats.s_int > tp->t_stats.s_int) + tp = atp; + } + } + } + + + if (tp == NULL) + { + msg("You wrap your arms around yourself."); + return; + } + else if (tp->t_stats.s_int < READY) + { + if (tp->t_stats.s_int > 0) + tp->t_stats.s_int /= 2; + else + tp->t_stats.s_int--; + msg("The %s dodges out of the way.", killname(tp->t_type)); + return; + } + + if (amulet) + { + total_winner(tp->t_type); + } + else + { + mostly_winner(tp->t_type); + } }