2 * Functions for dealing with problems of the heart
4 * @(#)romance.c 3.2 (Berkeley) 6/15/81
6 * Rogue: Exploring the Dungeons of Doom
7 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
10 * See the file LICENSE.TXT for full copyright and licensing information.
19 unsigned v
; // count bits set in this (32-bit value)
21 unsigned c
= v
- ((v
>> 1) & 0x55555555);
22 c
= ((c
>> 2) & 0x33333333) + (c
& 0x33333333);
23 c
= ((c
>> 4) + c
) & 0x0F0F0F0F;
24 c
= ((c
>> 8) + c
) & 0x00FF00FF;
25 c
= ((c
>> 16) + c
) & 0x0000FFFF;
31 * Make eyes in the given direction
37 register struct linked_list
*mob
;
38 struct object obj
= {};
42 do_motion(&obj
, ydelta
, xdelta
);
43 mvwaddch(cw
, hero
.y
, hero
.x
, PLAYER
);
44 if ((mob
= find_mons(obj
.o_pos
.y
, obj
.o_pos
.x
)) == NULL
)
46 const char *msgs
[] = {
47 "You wink at nothing in particular.",
48 "You smile suggestively at the wall.",
49 "Unprompted, you suddenly blush.",
55 register struct thing
*tp
= (struct thing
*) ldata(mob
);
56 int attr
= count_bits_set(tp
->t_stats
.s_ont
& player
.t_stats
.s_ont
);
57 attr
+= tp
->t_stats
.s_int
- 1;
58 if (rnd(NUM_FEATURES
) < attr
)
61 const char *msgs
[] = {
62 "The %s smiles back at you.",
63 "You catch the %s staring at you out of the corner of eir eye.",
64 "The %s blushes and waves cautiously.",
66 msg(rndchoice(msgs
), monsters
[tp
->t_type
- 'A'].m_name
);
71 const char *msgs
[] = {
72 "The %s scowls at you.",
73 "The %s tells you to stop it.",
74 "The %s is sick of your crap.",
76 msg(rndchoice(msgs
), monsters
[tp
->t_type
- 'A'].m_name
);
80 const char *msgs
[] = {
81 "The %s ignores you.",
82 "The %s is completely uninterested in you.",
83 "The %s acts like it can't hear you.",
84 "The %s doesn't care.",
86 msg(rndchoice(msgs
), monsters
[tp
->t_type
- 'A'].m_name
);
94 register struct linked_list
*obj
, *nobj
;
95 register struct linked_list
*mob
;
96 register struct object
*op
;
97 register struct thing
*tp
;
98 register bool did_hit
= TRUE
;
100 if ((mob
= find_mons(hero
.y
+ ydelta
, hero
.x
+ xdelta
)) == NULL
)
102 msg("There's no-one around here.");
105 tp
= (struct thing
*) ldata(mob
);
107 if ((obj
= get_item("give", 0)) == NULL
)
109 op
= (struct object
*) ldata(obj
);
113 * Take it out of the pack
115 if (op
->o_count
>= 2 && op
->o_type
!= WEAPON
)
117 nobj
= new_item(sizeof *op
);
119 op
= (struct object
*) ldata(nobj
);
120 *op
= *((struct object
*) ldata(obj
));
123 if (op
->o_group
!= 0)