1 /* SCCS Id: @(#)were.c 3.4 2002/11/07 */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed. See license for details. */
11 register struct monst
*mon
;
13 if (!is_were(mon
->data
))
16 if (is_human(mon
->data
)) {
17 if (!Protection_from_shape_changers
&&
18 !rn2(night() ? (flags
.moonphase
== FULL_MOON
? 3 : 30)
19 : (flags
.moonphase
== FULL_MOON
? 10 : 50))) {
20 new_were(mon
); /* change into animal form */
21 if (flags
.soundok
&& !canseemon(mon
)) {
24 switch (monsndx(mon
->data
)) {
25 case PM_HUMAN_WEREWOLF
: howler
= "wolf"; break;
26 case PM_HUMAN_WEREJACKAL
: howler
= "jackal"; break;
27 case PM_HUMAN_WEREPANTHER
: howler
= "panther"; break;
28 case PM_HUMAN_WERETIGER
: howler
= "tiger"; break;
29 default: howler
= (char *)0; break;
32 You_hear("a %s howling at the moon.", howler
);
33 if (PlayerHearsSoundEffects
) pline(issoviet
? "Vy stanete odnim iz nikh i kopirovat' vashi dospekhi v kloch'ya, potomu chto vy takoy lokh i, veroyatno, ne znayut o volshebnoy otmene." : "WOEAAAAAAAAAAAA-eaaaaaoh.");
37 } else if (!rn2(30) && !Protection_from_shape_changers
) {
38 new_were(mon
); /* change back into human form */
50 case PM_WEREWOLF
: return(PM_HUMAN_WEREWOLF
);
51 case PM_HUMAN_WEREWOLF
: return(PM_WEREWOLF
);
52 case PM_WEREJACKAL
: return(PM_HUMAN_WEREJACKAL
);
53 case PM_HUMAN_WEREJACKAL
: return(PM_WEREJACKAL
);
54 case PM_WERERAT
: return(PM_HUMAN_WERERAT
);
55 case PM_HUMAN_WERERAT
: return(PM_WERERAT
);
56 case PM_WERERABBIT
: return(PM_HUMAN_WERERABBIT
);
57 case PM_HUMAN_WERERABBIT
: return(PM_WERERABBIT
);
58 case PM_WEREBOAR
: return(PM_HUMAN_WEREBOAR
);
59 case PM_HUMAN_WEREBOAR
: return(PM_WEREBOAR
);
60 case PM_WERELOCUST
: return(PM_HUMAN_WERELOCUST
);
61 case PM_HUMAN_WERELOCUST
: return(PM_WERELOCUST
);
62 case PM_WEREPANTHER
: return(PM_HUMAN_WEREPANTHER
);
63 case PM_HUMAN_WEREPANTHER
:return(PM_WEREPANTHER
);
64 case PM_WERETIGER
: return(PM_HUMAN_WERETIGER
);
65 case PM_HUMAN_WERETIGER
: return(PM_WERETIGER
);
66 case PM_WERESNAKE
: return(PM_HUMAN_WERESNAKE
);
67 case PM_HUMAN_WERESNAKE
: return(PM_WERESNAKE
);
68 case PM_WERESPIDER
: return(PM_HUMAN_WERESPIDER
);
69 case PM_HUMAN_WERESPIDER
: return(PM_WERESPIDER
);
70 case PM_WERELICHEN
: return(PM_HUMAN_WERELICHEN
);
71 case PM_HUMAN_WERELICHEN
: return(PM_WERELICHEN
);
72 case PM_WEREVORTEX
: return(PM_HUMAN_WEREVORTEX
);
73 case PM_HUMAN_WEREVORTEX
: return(PM_WEREVORTEX
);
74 case PM_WEREPIERCER
: return(PM_HUMAN_WEREPIERCER
);
75 case PM_HUMAN_WEREPIERCER
: return(PM_WEREPIERCER
);
76 case PM_WEREPENETRATOR
: return(PM_HUMAN_WEREPENETRATOR
);
77 case PM_HUMAN_WEREPENETRATOR
: return(PM_WEREPENETRATOR
);
78 case PM_WERESMASHER
: return(PM_HUMAN_WERESMASHER
);
79 case PM_HUMAN_WERESMASHER
: return(PM_WERESMASHER
);
80 case PM_WERENYMPH
: return(PM_HUMAN_WERENYMPH
);
81 case PM_HUMAN_WERENYMPH
: return(PM_WERENYMPH
);
82 case PM_WEREBEE
: return(PM_HUMAN_WEREBEE
);
83 case PM_HUMAN_WEREBEE
: return(PM_WEREBEE
);
84 case PM_WERECOW
: return(PM_HUMAN_WERECOW
);
85 case PM_HUMAN_WERECOW
: return(PM_WERECOW
);
86 case PM_WEREBEAR
: return(PM_HUMAN_WEREBEAR
);
87 case PM_HUMAN_WEREBEAR
: return(PM_WEREBEAR
);
88 case PM_VORPAL_WERE_ALHOONTRICE_ZOMBIE
: return(PM_HUMAN_VORPAL_WERE_ALHOONTRICE_ZOMBIE
);
89 case PM_HUMAN_VORPAL_WERE_ALHOONTRICE_ZOMBIE
: return(PM_VORPAL_WERE_ALHOONTRICE_ZOMBIE
);
90 case PM_WEREBRONZEGRAM
: return(PM_HUMAN_WEREBRONZEGRAM
);
91 case PM_HUMAN_WEREBRONZEGRAM
: return(PM_WEREBRONZEGRAM
);
92 case PM_WERECHROMEGRAM
: return(PM_HUMAN_WERECHROMEGRAM
);
93 case PM_HUMAN_WERECHROMEGRAM
: return(PM_WERECHROMEGRAM
);
94 case PM_WEREDEMON
: return(PM_HUMAN_WEREDEMON
);
95 case PM_HUMAN_WEREDEMON
: return(PM_WEREDEMON
);
96 case PM_WEREPHANT
: return(PM_HUMAN_WEREPHANT
);
97 case PM_HUMAN_WEREPHANT
: return(PM_WEREPHANT
);
98 case PM_WERESOLDIERANT
: return(PM_HUMAN_WERESOLDIERANT
);
99 case PM_HUMAN_WERESOLDIERANT
: return(PM_WERESOLDIERANT
);
100 case PM_WERETROLL
: return(PM_HUMAN_WERETROLL
);
101 case PM_HUMAN_WERETROLL
: return(PM_WERETROLL
);
102 case PM_WEREBAT
: return(PM_HUMAN_WEREBAT
);
103 case PM_HUMAN_WEREBAT
: return(PM_WEREBAT
);
104 case PM_WERECOCKATRICE
: return(PM_HUMAN_WERECOCKATRICE
);
105 case PM_HUMAN_WERECOCKATRICE
: return(PM_WERECOCKATRICE
);
106 case PM_WEREMINDFLAYER
: return(PM_HUMAN_WEREMINDFLAYER
);
107 case PM_HUMAN_WEREMINDFLAYER
: return(PM_WEREMINDFLAYER
);
108 case PM_WEREMIMIC
: return(PM_HUMAN_WEREMIMIC
);
109 case PM_HUMAN_WEREMIMIC
: return(PM_WEREMIMIC
);
110 case PM_WEREPERMAMIMIC
: return(PM_HUMAN_WEREPERMAMIMIC
);
111 case PM_HUMAN_WEREPERMAMIMIC
: return(PM_WEREPERMAMIMIC
);
112 case PM_WEREGIANT
: return(PM_HUMAN_WEREGIANT
);
113 case PM_HUMAN_WEREGIANT
: return(PM_WEREGIANT
);
114 case PM_WEREGHOST
: return(PM_HUMAN_WEREGHOST
);
115 case PM_HUMAN_WEREGHOST
: return(PM_WEREGHOST
);
116 case PM_WEREPIRANHA
: return(PM_HUMAN_WEREPIRANHA
);
117 case PM_HUMAN_WEREPIRANHA
: return(PM_WEREPIRANHA
);
118 case PM_WEREEEL
: return(PM_HUMAN_WEREEEL
);
119 case PM_HUMAN_WEREEEL
: return(PM_WEREEEL
);
120 case PM_WEREFLYFISH
: return(PM_HUMAN_WEREFLYFISH
);
121 case PM_HUMAN_WEREFLYFISH
: return(PM_WEREFLYFISH
);
122 case PM_WEREKRAKEN
: return(PM_HUMAN_WEREKRAKEN
);
123 case PM_HUMAN_WEREKRAKEN
: return(PM_WEREKRAKEN
);
124 case PM_WERELICH
: return(PM_HUMAN_WERELICH
);
125 case PM_HUMAN_WERELICH
: return(PM_WERELICH
);
126 case PM_WEREJABBERWOCK
: return(PM_HUMAN_WEREJABBERWOCK
);
127 case PM_HUMAN_WEREJABBERWOCK
: return(PM_WEREJABBERWOCK
);
128 case PM_WEREGRIDBUG
: return(PM_HUMAN_WEREGRIDBUG
);
129 case PM_HUMAN_WEREGRIDBUG
: return(PM_WEREGRIDBUG
);
130 case PM_AK_THIEF_IS_DEAD_
: return(PM_UN_IN_PROTECT_MODE
);
131 case PM_UN_IN_PROTECT_MODE
: return(PM_AK_THIEF_IS_DEAD_
);
132 case PM_WEREACIDBLOB
: return(PM_HUMAN_WEREACIDBLOB
);
133 case PM_HUMAN_WEREACIDBLOB
: return(PM_WEREACIDBLOB
);
134 case PM_WEREFOX
: return(PM_HUMAN_WEREFOX
);
135 case PM_HUMAN_WEREFOX
: return(PM_WEREFOX
);
136 case PM_WEREMONKEY
: return(PM_HUMAN_WEREMONKEY
);
137 case PM_HUMAN_WEREMONKEY
: return(PM_WEREMONKEY
);
138 case PM_WEREFLOATINGEYE
: return(PM_HUMAN_WEREFLOATINGEYE
);
139 case PM_HUMAN_WEREFLOATINGEYE
: return(PM_WEREFLOATINGEYE
);
140 case PM_WEREGIANTANT
: return(PM_HUMAN_WEREGIANTANT
);
141 case PM_HUMAN_WEREGIANTANT
: return(PM_WEREGIANTANT
);
142 case PM_WEREKOBOLD
: return(PM_HUMAN_WEREKOBOLD
);
143 case PM_HUMAN_WEREKOBOLD
: return(PM_WEREKOBOLD
);
144 case PM_WERELEPRECHAUN
: return(PM_HUMAN_WERELEPRECHAUN
);
145 case PM_HUMAN_WERELEPRECHAUN
: return(PM_WERELEPRECHAUN
);
146 case PM_WEREHORSE
: return(PM_HUMAN_WEREHORSE
);
147 case PM_HUMAN_WEREHORSE
: return(PM_WEREHORSE
);
148 case PM_WERERUSTMONSTER
: return(PM_HUMAN_WERERUSTMONSTER
);
149 case PM_HUMAN_WERERUSTMONSTER
: return(PM_WERERUSTMONSTER
);
150 case PM_WEREBLACKLIGHT
: return(PM_HUMAN_WEREBLACKLIGHT
);
151 case PM_HUMAN_WEREBLACKLIGHT
: return(PM_WEREBLACKLIGHT
);
152 case PM_WEREAUTON
: return(PM_HUMAN_WEREAUTON
);
153 case PM_HUMAN_WEREAUTON
: return(PM_WEREAUTON
);
154 case PM_WEREGREMLIN
: return(PM_HUMAN_WEREGREMLIN
);
155 case PM_HUMAN_WEREGREMLIN
: return(PM_WEREGREMLIN
);
156 case PM_WEREGREENSLIME
: return(PM_HUMAN_WEREGREENSLIME
);
157 case PM_HUMAN_WEREGREENSLIME
: return(PM_WEREGREENSLIME
);
158 case PM_WEREJELLY
: return(PM_HUMAN_WEREJELLY
);
159 case PM_HUMAN_WEREJELLY
: return(PM_WEREJELLY
);
160 case PM_WEREXAN
: return(PM_HUMAN_WEREXAN
);
161 case PM_HUMAN_WEREXAN
: return(PM_WEREXAN
);
162 case PM_WEREMUMAK
: return(PM_HUMAN_WEREMUMAK
);
163 case PM_HUMAN_WEREMUMAK
: return(PM_WEREMUMAK
);
164 case PM_WERECENTAUR
: return(PM_HUMAN_WERECENTAUR
);
165 case PM_HUMAN_WERECENTAUR
: return(PM_WERECENTAUR
);
166 case PM_WEREGELATINOUSCUBE
: return(PM_HUMAN_WEREGELATINOUSCUBE
);
167 case PM_HUMAN_WEREGELATINOUSCUBE
: return(PM_WEREGELATINOUSCUBE
);
168 case PM_WERECOUATL
: return(PM_HUMAN_WERECOUATL
);
169 case PM_HUMAN_WERECOUATL
: return(PM_WERECOUATL
);
170 case PM_WEREAIRELEMENTAL
: return(PM_HUMAN_WEREAIRELEMENTAL
);
171 case PM_HUMAN_WEREAIRELEMENTAL
: return(PM_WEREAIRELEMENTAL
);
172 case PM_WEREFIREELEMENTAL
: return(PM_HUMAN_WEREFIREELEMENTAL
);
173 case PM_HUMAN_WEREFIREELEMENTAL
: return(PM_WEREFIREELEMENTAL
);
174 case PM_WEREEARTHELEMENTAL
: return(PM_HUMAN_WEREEARTHELEMENTAL
);
175 case PM_HUMAN_WEREEARTHELEMENTAL
: return(PM_WEREEARTHELEMENTAL
);
176 case PM_WEREWATERELEMENTAL
: return(PM_HUMAN_WEREWATERELEMENTAL
);
177 case PM_HUMAN_WEREWATERELEMENTAL
: return(PM_WEREWATERELEMENTAL
);
178 case PM_WEREASTRALELEMENTAL
: return(PM_HUMAN_WEREASTRALELEMENTAL
);
179 case PM_HUMAN_WEREASTRALELEMENTAL
: return(PM_WEREASTRALELEMENTAL
);
180 case PM_WEREXORN
: return(PM_HUMAN_WEREXORN
);
181 case PM_HUMAN_WEREXORN
: return(PM_WEREXORN
);
182 case PM_WERESTALKER
: return(PM_HUMAN_WERESTALKER
);
183 case PM_HUMAN_WERESTALKER
: return(PM_WERESTALKER
);
184 case PM_WEREDRACONIAN
: return(PM_HUMAN_WEREDRACONIAN
);
185 case PM_HUMAN_WEREDRACONIAN
: return(PM_WEREDRACONIAN
);
186 case PM_WEREUMBERHULK
: return(PM_HUMAN_WEREUMBERHULK
);
187 case PM_HUMAN_WEREUMBERHULK
: return(PM_WEREUMBERHULK
);
188 case PM_WEREVAMPIRE
: return(PM_HUMAN_WEREVAMPIRE
);
189 case PM_HUMAN_WEREVAMPIRE
: return(PM_WEREVAMPIRE
);
190 case PM_WEREKILLERBEE
: return(PM_HUMAN_WEREKILLERBEE
);
191 case PM_HUMAN_WEREKILLERBEE
: return(PM_WEREKILLERBEE
);
192 case PM_WEREKANGAROO
: return(PM_HUMAN_WEREKANGAROO
);
193 case PM_HUMAN_WEREKANGAROO
: return(PM_WEREKANGAROO
);
194 case PM_WEREGRUE
: return(PM_HUMAN_WEREGRUE
);
195 case PM_HUMAN_WEREGRUE
: return(PM_WEREGRUE
);
196 case PM_WERECOINS
: return(PM_HUMAN_WERECOINS
);
197 case PM_HUMAN_WERECOINS
: return(PM_WERECOINS
);
198 case PM_WERETRAPPER
: return(PM_HUMAN_WERETRAPPER
);
199 case PM_HUMAN_WERETRAPPER
: return(PM_WERETRAPPER
);
200 case PM_WERESHADE
: return(PM_HUMAN_WERESHADE
);
201 case PM_HUMAN_WERESHADE
: return(PM_WERESHADE
);
202 case PM_WEREDISENCHANTER
: return(PM_HUMAN_WEREDISENCHANTER
);
203 case PM_HUMAN_WEREDISENCHANTER
: return(PM_WEREDISENCHANTER
);
204 case PM_WERENAGA
: return(PM_HUMAN_WERENAGA
);
205 case PM_HUMAN_WERENAGA
: return(PM_WERENAGA
);
206 case PM_WEREWORM
: return(PM_HUMAN_WEREWORM
);
207 case PM_HUMAN_WEREWORM
: return(PM_WEREWORM
);
208 case PM_WEREDRAGON
: return(PM_HUMAN_WEREDRAGON
);
209 case PM_HUMAN_WEREDRAGON
: return(PM_WEREDRAGON
);
210 case PM_WEREWEDGESANDAL
: return(PM_HUMAN_WEREWEDGESANDAL
);
211 case PM_HUMAN_WEREWEDGESANDAL
: return(PM_WEREWEDGESANDAL
);
212 case PM_WEREHUGGINGBOOT
: return(PM_HUMAN_WEREHUGGINGBOOT
);
213 case PM_HUMAN_WEREHUGGINGBOOT
: return(PM_WEREHUGGINGBOOT
);
214 case PM_WEREPEEPTOE
: return(PM_HUMAN_WEREPEEPTOE
);
215 case PM_HUMAN_WEREPEEPTOE
: return(PM_WEREPEEPTOE
);
216 case PM_WERESEXYLEATHERPUMP
: return(PM_HUMAN_WERESEXYLEATHERPUMP
);
217 case PM_HUMAN_WERESEXYLEATHERPUMP
: return(PM_WERESEXYLEATHERPUMP
);
218 case PM_WEREBLOCKHEELEDCOMBATBOOT
: return(PM_HUMAN_WEREBLOCKHEELEDCOMBATBOOT
);
219 case PM_HUMAN_WEREBLOCKHEELEDCOMBATBOOT
: return(PM_WEREBLOCKHEELEDCOMBATBOOT
);
220 case PM_WERECOMBATSTILETTO
: return(PM_HUMAN_WERECOMBATSTILETTO
);
221 case PM_HUMAN_WERECOMBATSTILETTO
: return(PM_WERECOMBATSTILETTO
);
222 case PM_WEREBEAUTIFULFUNNELHEELEDPUMP
: return(PM_HUMAN_WEREBEAUTIFULFUNNELHEELEDPUMP
);
223 case PM_HUMAN_WEREBEAUTIFULFUNNELHEELEDPUMP
: return(PM_WEREBEAUTIFULFUNNELHEELEDPUMP
);
224 case PM_WEREPROSTITUTESHOE
: return(PM_HUMAN_WEREPROSTITUTESHOE
);
225 case PM_HUMAN_WEREPROSTITUTESHOE
: return(PM_WEREPROSTITUTESHOE
);
226 case PM_WERESTILETTOSANDAL
: return(PM_HUMAN_WERESTILETTOSANDAL
);
227 case PM_HUMAN_WERESTILETTOSANDAL
: return(PM_WERESTILETTOSANDAL
);
228 case PM_WEREUNFAIRSTILETTO
: return(PM_HUMAN_WEREUNFAIRSTILETTO
);
229 case PM_HUMAN_WEREUNFAIRSTILETTO
: return(PM_WEREUNFAIRSTILETTO
);
230 case PM_WEREWINTERSTILETTO
: return(PM_HUMAN_WEREWINTERSTILETTO
);
231 case PM_HUMAN_WEREWINTERSTILETTO
: return(PM_WEREWINTERSTILETTO
);
238 register struct monst
*mon
;
242 pm
= counter_were(monsndx(mon
->data
));
244 impossible("unknown lycanthrope %d.", mon
->mnum
);
248 if(canseemon(mon
) && !Hallucination
)
249 pline("%s changes into a %s.", Monnam(mon
),
250 is_human(&mons
[pm
]) ? "human" :
253 set_mon_data(mon
, &mons
[pm
], 0);
254 if (mon
->msleeping
|| !mon
->mcanmove
) {
255 /* transformation wakens and/or revitalizes */
257 mon
->mfrozen
= 0; /* not asleep or paralyzed */
261 /* regenerate by 1/4 of the lost hit points */
262 mon
->mhp
+= (mon
->mhpmax
- mon
->mhp
) / 4;
263 newsym(mon
->mx
,mon
->my
);
264 mon_break_armor(mon
, FALSE
);
265 possibly_unwield(mon
, FALSE
);
266 (void) stop_timer(UNPOLY_MON
, (void *) mon
);
267 (void) start_timer(rn1(1000,1000), TIMER_MONSTER
,
268 UNPOLY_MON
, (void *) mon
);
272 were_summon(ptr
,yours
,visible
,genbuf
,ownloc
) /* were-creature (even you) summons a horde */
273 register struct permonst
*ptr
;
274 register boolean yours
;
275 int *visible
; /* number of visible helpers created */
277 boolean ownloc
; /* TRUE = summon them at a random location, FALSE = summon them at player's location --Amy */
279 register int i
, typ
, pm
= monsndx(ptr
);
280 register struct monst
*mtmp
;
284 if(Protection_from_shape_changers
&& !yours
)
287 * Allow lycanthropes in normal form to summon hordes as well. --ALI
289 if (pm
== PM_PLAYERMON
)
291 for(i
= ((!rn2(5) && !yours
) ? rnd(5) : rnd(2)); i
> 0; i
--) {
294 /* no concealing monsters due to possibility of abuse --Amy */
297 case PM_HUMAN_WERERAT
:
298 typ
= rn2(3) ? PM_SEWER_RAT
: rn2(3) ? PM_GIANT_RAT
: PM_RABID_RAT
;
299 if (genbuf
) strcpy(genbuf
, "rat");
302 case PM_HUMAN_WERERABBIT
:
303 typ
= rn2(5) ? PM_RABBIT
: PM_RABID_RABBIT
;
304 if (genbuf
) strcpy(genbuf
, "rabbit");
307 case PM_HUMAN_WEREBOAR
:
308 typ
= rn2(5) ? PM_BOAR
: PM_DIRE_BOAR
;
309 if (genbuf
) strcpy(genbuf
, "boar");
312 case PM_HUMAN_WERELOCUST
:
313 typ
= rn2(5) ? PM_SMALL_LOCUST
: PM_LOCUST
;
314 if (genbuf
) strcpy(genbuf
, "locust");
317 case PM_HUMAN_WEREJACKAL
:
319 if (genbuf
) strcpy(genbuf
, "jackal");
322 case PM_HUMAN_WEREWOLF
:
323 typ
= rn2(5) ? PM_WOLF
: PM_WINTER_WOLF
;
324 if (genbuf
) strcpy(genbuf
, "wolf");
327 case PM_HUMAN_WEREPANTHER
:
328 typ
= rn2(5) ? PM_JAGUAR
: PM_PANTHER
;
329 if (genbuf
) strcpy(genbuf
, "large cat");
332 case PM_HUMAN_WERETIGER
:
333 typ
= rn2(5) ? PM_JAGUAR
: PM_TIGER
;
334 if (genbuf
) strcpy(genbuf
, "large cat");
337 case PM_HUMAN_WERESNAKE
:
338 typ
= rn2(5) ? PM_STANDARD_SNAKE
: PM_CHASM_VIPER
;
339 if (genbuf
) strcpy(genbuf
, "snake");
342 case PM_HUMAN_WERESPIDER
:
343 typ
= rn2(5) ? PM_LAND_SPIDER
: PM_MUD_SPIDER
;
344 if (genbuf
) strcpy(genbuf
, "spider");
347 case PM_HUMAN_WEREGHOST
:
348 typ
= rn2(5) ? PM_GHOST
: PM_BOO
;
349 if (genbuf
) strcpy(genbuf
, "spiritual");
352 case PM_HUMAN_WEREGIANT
:
353 typ
= rn2(5) ? PM_GIANT
: PM_HILL_GIANT
;
354 if (genbuf
) strcpy(genbuf
, "giant");
357 case PM_HUMAN_WERELICHEN
:
358 typ
= rn2(5) ? PM_AGGRESSIVE_LICHEN
: PM_POISON_LICHEN
;
359 if (genbuf
) strcpy(genbuf
, "fungus");
362 case PM_HUMAN_WEREVORTEX
:
363 typ
= rn2(5) ? PM_ENERGY_VORTEX
: PM_STEAM_VORTEX
;
364 if (genbuf
) strcpy(genbuf
, "vortex");
367 case PM_HUMAN_WERECOW
:
368 typ
= rn2(5) ? PM_COW
: PM_BULL
;
369 if (genbuf
) strcpy(genbuf
, "bovine");
372 case PM_HUMAN_WEREBEAR
:
373 typ
= rn2(5) ? PM_BROWN_BEAR
: PM_CAVE_BEAR
;
374 if (genbuf
) strcpy(genbuf
, "ursa major");
376 case PM_VORPAL_WERE_ALHOONTRICE_ZOMBIE
:
377 case PM_HUMAN_VORPAL_WERE_ALHOONTRICE_ZOMBIE
:
379 if (genbuf
) strcpy(genbuf
, "alhoon");
381 case PM_WEREBRONZEGRAM
:
382 case PM_HUMAN_WEREBRONZEGRAM
:
383 case PM_WERECHROMEGRAM
:
384 case PM_HUMAN_WERECHROMEGRAM
:
385 typ
= PM_JOURNEYMAN_ROLL_WALL
;
386 if (genbuf
) strcpy(genbuf
, "pentagram");
389 case PM_HUMAN_WEREDEMON
:
390 typ
= rn2(5) ? PM_HELL_HOUND_PUP
: PM_HELL_HOUND
;
391 if (genbuf
) strcpy(genbuf
, "demon");
394 case PM_HUMAN_WEREPHANT
:
396 if (genbuf
) strcpy(genbuf
, "phant");
399 case PM_HUMAN_WEREPIERCER
:
400 typ
= rn2(5) ? PM_ROCK_PIERCER
: PM_IRON_PIERCER
;
401 if (genbuf
) strcpy(genbuf
, "piercer");
403 case PM_WEREPENETRATOR
:
404 case PM_HUMAN_WEREPENETRATOR
:
405 typ
= rn2(5) ? PM_ROCK_PENETRATOR
: PM_IRON_PENETRATOR
;
406 if (genbuf
) strcpy(genbuf
, "penetrator");
409 case PM_HUMAN_WERESMASHER
:
410 typ
= rn2(5) ? PM_ROCK_SMASHER
: PM_IRON_SMASHER
;
411 if (genbuf
) strcpy(genbuf
, "smasher");
414 case PM_HUMAN_WERENYMPH
:
415 typ
= rn2(5) ? PM_WOOD_NYMPH
: PM_WATER_NYMPH
;
416 if (genbuf
) strcpy(genbuf
, "nymph");
419 case PM_HUMAN_WEREBEE
:
421 if (genbuf
) strcpy(genbuf
, "bee");
424 case PM_HUMAN_WEREMIMIC
:
425 typ
= rn2(5) ? PM_LARGE_MIMIC
: PM_GIANT_MIMIC
;
426 if (genbuf
) strcpy(genbuf
, "mimic");
428 case PM_WEREPERMAMIMIC
:
429 case PM_HUMAN_WEREPERMAMIMIC
:
430 typ
= rn2(5) ? PM_LARGE_PERMAMIMIC
: PM_GIANT_PERMAMIMIC
;
431 if (genbuf
) strcpy(genbuf
, "mimic");
433 case PM_WEREMINDFLAYER
:
434 case PM_HUMAN_WEREMINDFLAYER
:
435 typ
= rn2(5) ? PM_MIND_FLAYER
: PM_MASTER_MIND_FLAYER
;
436 if (genbuf
) strcpy(genbuf
, "mind flayer");
438 case PM_WERECOCKATRICE
:
439 case PM_HUMAN_WERECOCKATRICE
:
440 typ
= rn2(5) ? PM_CHICKATRICE
: PM_COCKATRICE
;
441 if (genbuf
) strcpy(genbuf
, "cockatrice");
443 case PM_WERESOLDIERANT
:
444 case PM_HUMAN_WERESOLDIERANT
:
445 typ
= rn2(5) ? PM_SOLDIER_ANT
: PM_GIANT_RED_ANT
;
446 if (genbuf
) strcpy(genbuf
, "ant");
449 case PM_HUMAN_WERETROLL
:
450 typ
= rn2(5) ? PM_TROLL
: PM_ICE_TROLL
;
451 if (genbuf
) strcpy(genbuf
, "troll");
454 case PM_HUMAN_WEREBAT
:
455 typ
= rn2(5) ? PM_BAT
: PM_GIANT_BAT
;
456 if (genbuf
) strcpy(genbuf
, "bat");
459 case PM_HUMAN_WEREPIRANHA
:
460 typ
= rn2(5) ? PM_PIRANHA
: PM_BLOODTHIRSTY_PIRANHA
;
461 if (genbuf
) strcpy(genbuf
, "piranha");
464 case PM_HUMAN_WEREEEL
:
465 typ
= rn2(5) ? PM_GIANT_EEL
: PM_ELECTRIC_EEL
;
466 if (genbuf
) strcpy(genbuf
, "eel");
469 case PM_HUMAN_WEREFLYFISH
:
470 typ
= rn2(5) ? PM_FLYING_RIBBON_FISH
: PM_FLYING_SKELETON_FISH
;
471 if (genbuf
) strcpy(genbuf
, "flying fish");
474 case PM_HUMAN_WEREKRAKEN
:
475 typ
= rn2(5) ? PM_KRAKEN
: PM_HENTAI_OCTOPUS
;
476 if (genbuf
) strcpy(genbuf
, "kraken");
479 case PM_HUMAN_WERELICH
:
480 typ
= rn2(5) ? PM_LICH
: PM_LICH_WARRIOR
;
481 if (genbuf
) strcpy(genbuf
, "lich");
483 case PM_WEREJABBERWOCK
:
484 case PM_HUMAN_WEREJABBERWOCK
:
485 typ
= rn2(5) ? PM_JABBERWOCK
: PM_VORPAL_JABBERWOCK
;
486 if (genbuf
) strcpy(genbuf
, "jabberwock");
489 case PM_HUMAN_WEREGRIDBUG
:
490 typ
= rn2(5) ? PM_GRID_BUG
: PM_TRON_BUG
;
491 if (genbuf
) strcpy(genbuf
, "grid bug");
493 case PM_WEREACIDBLOB
:
494 case PM_HUMAN_WEREACIDBLOB
:
496 if (genbuf
) strcpy(genbuf
, "blob");
499 case PM_HUMAN_WEREFOX
:
500 typ
= rn2(5) ? PM_FOX
: PM_LARGE_FOX
;
501 if (genbuf
) strcpy(genbuf
, "fox");
504 case PM_HUMAN_WEREMONKEY
:
505 typ
= rn2(5) ? PM_MONKEY
: PM_INTELLIGENT_MONKEY
;
506 if (genbuf
) strcpy(genbuf
, "monkey");
508 case PM_WEREFLOATINGEYE
:
509 case PM_HUMAN_WEREFLOATINGEYE
:
510 typ
= PM_FLOATING_EYE
;
511 if (genbuf
) strcpy(genbuf
, "eye");
513 case PM_WEREGIANTANT
:
514 case PM_HUMAN_WEREGIANTANT
:
516 if (genbuf
) strcpy(genbuf
, "ant");
519 case PM_HUMAN_WEREKOBOLD
:
520 typ
= rn2(5) ? PM_KOBOLD
: PM_LARGE_KOBOLD
;
521 if (genbuf
) strcpy(genbuf
, "kobold");
523 case PM_WERELEPRECHAUN
:
524 case PM_HUMAN_WERELEPRECHAUN
:
526 if (genbuf
) strcpy(genbuf
, "leprechaun");
529 case PM_HUMAN_WEREHORSE
:
530 typ
= rn2(3) ? PM_PONY
: PM_HORSE
;
531 if (genbuf
) strcpy(genbuf
, "horse");
533 case PM_WERERUSTMONSTER
:
534 case PM_HUMAN_WERERUSTMONSTER
:
535 typ
= PM_RUST_MONSTER
;
536 if (genbuf
) strcpy(genbuf
, "rust monster");
538 case PM_WEREBLACKLIGHT
:
539 case PM_HUMAN_WEREBLACKLIGHT
:
540 typ
= PM_BLACK_LIGHT
;
541 if (genbuf
) strcpy(genbuf
, "light");
544 case PM_HUMAN_WEREAUTON
:
545 typ
= rn2(3) ? PM_MONOTON
: rn2(2) ? PM_DUTON
: rn2(2) ? PM_TRITON
: rn2(3) ? PM_QUATON
: PM_QUINON
;
546 if (genbuf
) strcpy(genbuf
, "auton");
549 case PM_HUMAN_WEREGREMLIN
:
550 typ
= PM_HEALING_GREMLIN
;
551 if (genbuf
) strcpy(genbuf
, "gremlin");
553 case PM_WEREGREENSLIME
:
554 case PM_HUMAN_WEREGREENSLIME
:
555 typ
= PM_GREEN_SLIME
;
556 if (genbuf
) strcpy(genbuf
, "slime");
559 case PM_HUMAN_WEREJELLY
:
560 typ
= PM_OCHRE_JELLY
;
561 if (genbuf
) strcpy(genbuf
, "jelly");
564 case PM_HUMAN_WEREXAN
:
566 if (genbuf
) strcpy(genbuf
, "xan");
569 case PM_HUMAN_WEREMUMAK
:
571 if (genbuf
) strcpy(genbuf
, "mumak");
574 case PM_HUMAN_WERECENTAUR
:
575 typ
= rn2(5) ? PM_PLAINS_CENTAUR
: PM_FOREST_CENTAUR
;
576 if (genbuf
) strcpy(genbuf
, "centaur");
579 case PM_HUMAN_WERECOUATL
:
581 if (genbuf
) strcpy(genbuf
, "couatl");
583 case PM_WEREGELATINOUSCUBE
:
584 case PM_HUMAN_WEREGELATINOUSCUBE
:
585 typ
= PM_GELATINOUS_CUBE
;
586 if (genbuf
) strcpy(genbuf
, "gelatinous cube");
588 case PM_WEREAIRELEMENTAL
:
589 case PM_HUMAN_WEREAIRELEMENTAL
:
590 typ
= PM_AIR_ELEMENTAL
;
591 if (genbuf
) strcpy(genbuf
, "air elemental");
593 case PM_WEREFIREELEMENTAL
:
594 case PM_HUMAN_WEREFIREELEMENTAL
:
595 typ
= PM_FIRE_ELEMENTAL
;
596 if (genbuf
) strcpy(genbuf
, "fire elemental");
598 case PM_WEREEARTHELEMENTAL
:
599 case PM_HUMAN_WEREEARTHELEMENTAL
:
600 typ
= PM_EARTH_ELEMENTAL
;
601 if (genbuf
) strcpy(genbuf
, "earth elemental");
603 case PM_WEREWATERELEMENTAL
:
604 case PM_HUMAN_WEREWATERELEMENTAL
:
605 typ
= PM_WATER_ELEMENTAL
;
606 if (genbuf
) strcpy(genbuf
, "water elemental");
608 case PM_WEREASTRALELEMENTAL
:
609 case PM_HUMAN_WEREASTRALELEMENTAL
:
610 typ
= PM_ASTRAL_ELEMENTAL
;
611 if (genbuf
) strcpy(genbuf
, "astral elemental");
614 case PM_HUMAN_WEREXORN
:
616 if (genbuf
) strcpy(genbuf
, "xorn");
619 case PM_HUMAN_WERESTALKER
:
621 if (genbuf
) strcpy(genbuf
, "stalker");
623 case PM_WEREDRACONIAN
:
624 case PM_HUMAN_WEREDRACONIAN
:
625 typ
= PM_PLAIN_DRACONIAN
;
626 if (genbuf
) strcpy(genbuf
, "draconian");
628 case PM_WEREUMBERHULK
:
629 case PM_HUMAN_WEREUMBERHULK
:
631 if (genbuf
) strcpy(genbuf
, "hulk");
634 case PM_HUMAN_WEREVAMPIRE
:
636 if (genbuf
) strcpy(genbuf
, "vampire");
638 case PM_WEREKILLERBEE
:
639 case PM_HUMAN_WEREKILLERBEE
:
641 if (genbuf
) strcpy(genbuf
, "bee");
643 case PM_WEREKANGAROO
:
644 case PM_HUMAN_WEREKANGAROO
:
646 if (genbuf
) strcpy(genbuf
, "kangaroo");
649 case PM_HUMAN_WEREGRUE
:
651 if (genbuf
) strcpy(genbuf
, "grue");
654 case PM_HUMAN_WERECOINS
:
655 typ
= rn2(5) ? PM_PILE_OF_KILLER_COINS
: PM_LARGE_PILE_OF_KILLER_COINS
;
656 if (genbuf
) strcpy(genbuf
, "coin");
659 case PM_HUMAN_WERETRAPPER
:
661 if (genbuf
) strcpy(genbuf
, "trapper");
664 case PM_HUMAN_WERESHADE
:
666 if (genbuf
) strcpy(genbuf
, "shade");
668 case PM_WEREDISENCHANTER
:
669 case PM_HUMAN_WEREDISENCHANTER
:
670 typ
= PM_DISENCHANTER
;
671 if (genbuf
) strcpy(genbuf
, "disenchanter");
674 case PM_HUMAN_WERENAGA
:
675 typ
= rn2(10) ? PM_WHITE_NAGA_HATCHLING
: PM_WHITE_NAGA
;
676 if (genbuf
) strcpy(genbuf
, "naga");
679 case PM_HUMAN_WEREWORM
:
680 typ
= rn2(10) ? PM_BABY_PURPLE_WORM
: PM_PURPLE_WORM
;
681 if (genbuf
) strcpy(genbuf
, "worm");
684 case PM_HUMAN_WEREDRAGON
:
685 typ
= rn2(2) ? PM_BABY_RED_DRAGON
: PM_YOUNG_RED_DRAGON
;
686 if (genbuf
) strcpy(genbuf
, "dragon");
688 case PM_WEREWEDGESANDAL
:
689 case PM_HUMAN_WEREWEDGESANDAL
:
690 typ
= PM_ANIMATED_WEDGE_SANDAL
;
691 if (genbuf
) strcpy(genbuf
, "shoe");
693 case PM_WEREHUGGINGBOOT
:
694 case PM_HUMAN_WEREHUGGINGBOOT
:
695 typ
= PM_ANIMATED_HUGGING_BOOT
;
696 if (genbuf
) strcpy(genbuf
, "shoe");
699 case PM_HUMAN_WEREPEEPTOE
:
700 typ
= PM_ANIMATED_LEATHER_PEEP_TOE
;
701 if (genbuf
) strcpy(genbuf
, "shoe");
703 case PM_WERESEXYLEATHERPUMP
:
704 case PM_HUMAN_WERESEXYLEATHERPUMP
:
705 typ
= PM_ANIMATED_SEXY_LEATHER_PUMP
;
706 if (genbuf
) strcpy(genbuf
, "shoe");
708 case PM_WEREBLOCKHEELEDCOMBATBOOT
:
709 case PM_HUMAN_WEREBLOCKHEELEDCOMBATBOOT
:
710 typ
= PM_ANIMATED_BLOCK_HEELED_COMBAT_BOOT
;
711 if (genbuf
) strcpy(genbuf
, "shoe");
713 case PM_WERECOMBATSTILETTO
:
714 case PM_HUMAN_WERECOMBATSTILETTO
:
715 typ
= PM_ANIMATED_COMBAT_STILETTO
;
716 if (genbuf
) strcpy(genbuf
, "shoe");
718 case PM_WEREBEAUTIFULFUNNELHEELEDPUMP
:
719 case PM_HUMAN_WEREBEAUTIFULFUNNELHEELEDPUMP
:
720 typ
= PM_ANIMATED_BEAUTIFUL_FUNNEL_HEELED_PUMP
;
721 if (genbuf
) strcpy(genbuf
, "shoe");
723 case PM_WEREPROSTITUTESHOE
:
724 case PM_HUMAN_WEREPROSTITUTESHOE
:
725 typ
= PM_ANIMATED_PROSTITUTE_SHOE
;
726 if (genbuf
) strcpy(genbuf
, "shoe");
728 case PM_WERESTILETTOSANDAL
:
729 case PM_HUMAN_WERESTILETTOSANDAL
:
730 typ
= PM_ANIMATED_STILETTO_SANDAL
;
731 if (genbuf
) strcpy(genbuf
, "shoe");
733 case PM_WEREUNFAIRSTILETTO
:
734 case PM_HUMAN_WEREUNFAIRSTILETTO
:
735 typ
= PM_ANIMATED_UNFAIR_STILETTO
;
736 if (genbuf
) strcpy(genbuf
, "shoe");
738 case PM_WEREWINTERSTILETTO
:
739 case PM_HUMAN_WEREWINTERSTILETTO
:
740 typ
= PM_ANIMATED_WINTER_STILETTO
;
741 if (genbuf
) strcpy(genbuf
, "shoe");
746 if (ownloc
) mtmp
= makemon(&mons
[typ
], 0, 0, yours
? MM_NOSPECIALS
: NO_MM_FLAGS
);
747 else mtmp
= makemon(&mons
[typ
], u
.ux
, u
.uy
, yours
? MM_NOSPECIALS
: NO_MM_FLAGS
);
750 if (canseemon(mtmp
)) *visible
+= 1;
753 (void) tamedog(mtmp
, (struct obj
*) 0, TRUE
);
764 if (Unchanging
|| (u
.umonnum
== u
.ulycn
)) return;
765 if (Polymorph_control
&& rn2(5) ) {
766 /* `+4' => skip "were" prefix to get name of beast */
767 sprintf(qbuf
, "Do you want to change into %s? [yes/no]",
768 an(mons
[u
.ulycn
].mname
+4));
772 if (strcmp (buf
, "yes")) return;
775 (void) polymon(u
.ulycn
);
782 boolean in_wereform
= (u
.umonnum
== u
.ulycn
);
785 if (Race_if(PM_HUMAN_WEREWOLF
) || Role_if(PM_LUNATIC
) || Race_if(PM_AK_THIEF_IS_DEAD_
) ) {
786 /* An attempt to purify you has been made! */
787 if (in_wereform
&& Unchanging
) {
789 killer_format
= NO_KILLER_PREFIX
;
790 killer
= "purified while stuck in creature form";
791 pline_The("purification was deadly...");
795 You_feel("very bad!");
796 if (in_wereform
&& !Race_if(PM_UNGENOMOLD
) )
798 (void) adjattrib(A_STR
, -rn1(3,3), 2, TRUE
);
799 (void) adjattrib(A_CON
, -rn1(3,3), 1, TRUE
);
800 losehp(u
.uhp
- (u
.uhp
> 10 ? rnd(5) : 1), "purification",
805 You_feel("purified.");
806 u
.ulycn
= NON_PM
; /* cure lycanthropy */
807 upermonst
.mflags2
&= ~M2_WERE
;
809 if (!Unchanging
&& in_wereform
&&
810 (!Polymorph_control
|| yn("Remain in beast form?") == 'n')) {
811 if (!Race_if(PM_UNGENOMOLD
)) rehumanize();
812 else polyself(FALSE
);