Blindfold removal fix
[slashemextended.git] / src / were.c
blobde061f19a2e10c528bfd593a37c2a1c51dc06fa0
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. */
5 #include "hack.h"
7 #ifdef OVL0
9 void
10 were_change(mon)
11 register struct monst *mon;
13 if (!is_were(mon->data))
14 return;
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)) {
22 const char *howler;
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;
31 if (howler) {
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 */
42 #endif /* OVL0 */
43 #ifdef OVLB
45 int
46 counter_were(pm)
47 int pm;
49 switch(pm) {
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);
232 default: return(0);
236 void
237 new_were(mon)
238 register struct monst *mon;
240 register int pm;
242 pm = counter_were(monsndx(mon->data));
243 if(!pm) {
244 impossible("unknown lycanthrope %d.", mon->mnum);
245 return;
248 if(canseemon(mon) && !Hallucination)
249 pline("%s changes into a %s.", Monnam(mon),
250 is_human(&mons[pm]) ? "human" :
251 mons[pm].mname+4);
253 set_mon_data(mon, &mons[pm], 0);
254 if (mon->msleeping || !mon->mcanmove) {
255 /* transformation wakens and/or revitalizes */
256 mon->msleeping = 0;
257 mon->mfrozen = 0; /* not asleep or paralyzed */
258 mon->mcanmove = 1;
259 mon->masleep = 0;
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 */
276 char *genbuf;
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;
281 int total = 0;
283 *visible = 0;
284 if(Protection_from_shape_changers && !yours)
285 return 0;
287 * Allow lycanthropes in normal form to summon hordes as well. --ALI
289 if (pm == PM_PLAYERMON)
290 pm = urace.malenum;
291 for(i = ((!rn2(5) && !yours) ? rnd(5) : rnd(2)); i > 0; i--) {
292 switch(pm) {
294 /* no concealing monsters due to possibility of abuse --Amy */
296 case PM_WERERAT:
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");
300 break;
301 case PM_WERERABBIT:
302 case PM_HUMAN_WERERABBIT:
303 typ = rn2(5) ? PM_RABBIT : PM_RABID_RABBIT ;
304 if (genbuf) strcpy(genbuf, "rabbit");
305 break;
306 case PM_WEREBOAR:
307 case PM_HUMAN_WEREBOAR:
308 typ = rn2(5) ? PM_BOAR : PM_DIRE_BOAR ;
309 if (genbuf) strcpy(genbuf, "boar");
310 break;
311 case PM_WERELOCUST:
312 case PM_HUMAN_WERELOCUST:
313 typ = rn2(5) ? PM_SMALL_LOCUST : PM_LOCUST ;
314 if (genbuf) strcpy(genbuf, "locust");
315 break;
316 case PM_WEREJACKAL:
317 case PM_HUMAN_WEREJACKAL:
318 typ = PM_JACKAL;
319 if (genbuf) strcpy(genbuf, "jackal");
320 break;
321 case PM_WEREWOLF:
322 case PM_HUMAN_WEREWOLF:
323 typ = rn2(5) ? PM_WOLF : PM_WINTER_WOLF ;
324 if (genbuf) strcpy(genbuf, "wolf");
325 break;
326 case PM_WEREPANTHER:
327 case PM_HUMAN_WEREPANTHER:
328 typ = rn2(5) ? PM_JAGUAR : PM_PANTHER ;
329 if (genbuf) strcpy(genbuf, "large cat");
330 break;
331 case PM_WERETIGER:
332 case PM_HUMAN_WERETIGER:
333 typ = rn2(5) ? PM_JAGUAR : PM_TIGER ;
334 if (genbuf) strcpy(genbuf, "large cat");
335 break;
336 case PM_WERESNAKE:
337 case PM_HUMAN_WERESNAKE:
338 typ = rn2(5) ? PM_STANDARD_SNAKE : PM_CHASM_VIPER ;
339 if (genbuf) strcpy(genbuf, "snake");
340 break;
341 case PM_WERESPIDER:
342 case PM_HUMAN_WERESPIDER:
343 typ = rn2(5) ? PM_LAND_SPIDER : PM_MUD_SPIDER ;
344 if (genbuf) strcpy(genbuf, "spider");
345 break;
346 case PM_WEREGHOST:
347 case PM_HUMAN_WEREGHOST:
348 typ = rn2(5) ? PM_GHOST : PM_BOO ;
349 if (genbuf) strcpy(genbuf, "spiritual");
350 break;
351 case PM_WEREGIANT:
352 case PM_HUMAN_WEREGIANT:
353 typ = rn2(5) ? PM_GIANT : PM_HILL_GIANT ;
354 if (genbuf) strcpy(genbuf, "giant");
355 break;
356 case PM_WERELICHEN:
357 case PM_HUMAN_WERELICHEN:
358 typ = rn2(5) ? PM_AGGRESSIVE_LICHEN : PM_POISON_LICHEN ;
359 if (genbuf) strcpy(genbuf, "fungus");
360 break;
361 case PM_WEREVORTEX:
362 case PM_HUMAN_WEREVORTEX:
363 typ = rn2(5) ? PM_ENERGY_VORTEX : PM_STEAM_VORTEX ;
364 if (genbuf) strcpy(genbuf, "vortex");
365 break;
366 case PM_WERECOW:
367 case PM_HUMAN_WERECOW:
368 typ = rn2(5) ? PM_COW : PM_BULL ;
369 if (genbuf) strcpy(genbuf, "bovine");
370 break;
371 case PM_WEREBEAR:
372 case PM_HUMAN_WEREBEAR:
373 typ = rn2(5) ? PM_BROWN_BEAR : PM_CAVE_BEAR ;
374 if (genbuf) strcpy(genbuf, "ursa major");
375 break;
376 case PM_VORPAL_WERE_ALHOONTRICE_ZOMBIE:
377 case PM_HUMAN_VORPAL_WERE_ALHOONTRICE_ZOMBIE:
378 typ = PM_ALHOON ;
379 if (genbuf) strcpy(genbuf, "alhoon");
380 break;
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");
387 break;
388 case PM_WEREDEMON:
389 case PM_HUMAN_WEREDEMON:
390 typ = rn2(5) ? PM_HELL_HOUND_PUP : PM_HELL_HOUND ;
391 if (genbuf) strcpy(genbuf, "demon");
392 break;
393 case PM_WEREPHANT:
394 case PM_HUMAN_WEREPHANT:
395 typ = PM_MUMAK ;
396 if (genbuf) strcpy(genbuf, "phant");
397 break;
398 case PM_WEREPIERCER:
399 case PM_HUMAN_WEREPIERCER:
400 typ = rn2(5) ? PM_ROCK_PIERCER : PM_IRON_PIERCER ;
401 if (genbuf) strcpy(genbuf, "piercer");
402 break;
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");
407 break;
408 case PM_WERESMASHER:
409 case PM_HUMAN_WERESMASHER:
410 typ = rn2(5) ? PM_ROCK_SMASHER : PM_IRON_SMASHER ;
411 if (genbuf) strcpy(genbuf, "smasher");
412 break;
413 case PM_WERENYMPH:
414 case PM_HUMAN_WERENYMPH:
415 typ = rn2(5) ? PM_WOOD_NYMPH : PM_WATER_NYMPH ;
416 if (genbuf) strcpy(genbuf, "nymph");
417 break;
418 case PM_WEREBEE:
419 case PM_HUMAN_WEREBEE:
420 typ = PM_KILLER_BEE;
421 if (genbuf) strcpy(genbuf, "bee");
422 break;
423 case PM_WEREMIMIC:
424 case PM_HUMAN_WEREMIMIC:
425 typ = rn2(5) ? PM_LARGE_MIMIC : PM_GIANT_MIMIC ;
426 if (genbuf) strcpy(genbuf, "mimic");
427 break;
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");
432 break;
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");
437 break;
438 case PM_WERECOCKATRICE:
439 case PM_HUMAN_WERECOCKATRICE:
440 typ = rn2(5) ? PM_CHICKATRICE : PM_COCKATRICE ;
441 if (genbuf) strcpy(genbuf, "cockatrice");
442 break;
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");
447 break;
448 case PM_WERETROLL:
449 case PM_HUMAN_WERETROLL:
450 typ = rn2(5) ? PM_TROLL : PM_ICE_TROLL ;
451 if (genbuf) strcpy(genbuf, "troll");
452 break;
453 case PM_WEREBAT:
454 case PM_HUMAN_WEREBAT:
455 typ = rn2(5) ? PM_BAT : PM_GIANT_BAT ;
456 if (genbuf) strcpy(genbuf, "bat");
457 break;
458 case PM_WEREPIRANHA:
459 case PM_HUMAN_WEREPIRANHA:
460 typ = rn2(5) ? PM_PIRANHA : PM_BLOODTHIRSTY_PIRANHA ;
461 if (genbuf) strcpy(genbuf, "piranha");
462 break;
463 case PM_WEREEEL:
464 case PM_HUMAN_WEREEEL:
465 typ = rn2(5) ? PM_GIANT_EEL : PM_ELECTRIC_EEL ;
466 if (genbuf) strcpy(genbuf, "eel");
467 break;
468 case PM_WEREFLYFISH:
469 case PM_HUMAN_WEREFLYFISH:
470 typ = rn2(5) ? PM_FLYING_RIBBON_FISH : PM_FLYING_SKELETON_FISH ;
471 if (genbuf) strcpy(genbuf, "flying fish");
472 break;
473 case PM_WEREKRAKEN:
474 case PM_HUMAN_WEREKRAKEN:
475 typ = rn2(5) ? PM_KRAKEN : PM_HENTAI_OCTOPUS ;
476 if (genbuf) strcpy(genbuf, "kraken");
477 break;
478 case PM_WERELICH:
479 case PM_HUMAN_WERELICH:
480 typ = rn2(5) ? PM_LICH : PM_LICH_WARRIOR ;
481 if (genbuf) strcpy(genbuf, "lich");
482 break;
483 case PM_WEREJABBERWOCK:
484 case PM_HUMAN_WEREJABBERWOCK:
485 typ = rn2(5) ? PM_JABBERWOCK : PM_VORPAL_JABBERWOCK ;
486 if (genbuf) strcpy(genbuf, "jabberwock");
487 break;
488 case PM_WEREGRIDBUG:
489 case PM_HUMAN_WEREGRIDBUG:
490 typ = rn2(5) ? PM_GRID_BUG : PM_TRON_BUG ;
491 if (genbuf) strcpy(genbuf, "grid bug");
492 break;
493 case PM_WEREACIDBLOB:
494 case PM_HUMAN_WEREACIDBLOB:
495 typ = PM_ACID_BLOB;
496 if (genbuf) strcpy(genbuf, "blob");
497 break;
498 case PM_WEREFOX:
499 case PM_HUMAN_WEREFOX:
500 typ = rn2(5) ? PM_FOX : PM_LARGE_FOX;
501 if (genbuf) strcpy(genbuf, "fox");
502 break;
503 case PM_WEREMONKEY:
504 case PM_HUMAN_WEREMONKEY:
505 typ = rn2(5) ? PM_MONKEY : PM_INTELLIGENT_MONKEY;
506 if (genbuf) strcpy(genbuf, "monkey");
507 break;
508 case PM_WEREFLOATINGEYE:
509 case PM_HUMAN_WEREFLOATINGEYE:
510 typ = PM_FLOATING_EYE;
511 if (genbuf) strcpy(genbuf, "eye");
512 break;
513 case PM_WEREGIANTANT:
514 case PM_HUMAN_WEREGIANTANT:
515 typ = PM_GIANT_ANT;
516 if (genbuf) strcpy(genbuf, "ant");
517 break;
518 case PM_WEREKOBOLD:
519 case PM_HUMAN_WEREKOBOLD:
520 typ = rn2(5) ? PM_KOBOLD : PM_LARGE_KOBOLD;
521 if (genbuf) strcpy(genbuf, "kobold");
522 break;
523 case PM_WERELEPRECHAUN:
524 case PM_HUMAN_WERELEPRECHAUN:
525 typ = PM_LEPRECHAUN;
526 if (genbuf) strcpy(genbuf, "leprechaun");
527 break;
528 case PM_WEREHORSE:
529 case PM_HUMAN_WEREHORSE:
530 typ = rn2(3) ? PM_PONY : PM_HORSE;
531 if (genbuf) strcpy(genbuf, "horse");
532 break;
533 case PM_WERERUSTMONSTER:
534 case PM_HUMAN_WERERUSTMONSTER:
535 typ = PM_RUST_MONSTER;
536 if (genbuf) strcpy(genbuf, "rust monster");
537 break;
538 case PM_WEREBLACKLIGHT:
539 case PM_HUMAN_WEREBLACKLIGHT:
540 typ = PM_BLACK_LIGHT;
541 if (genbuf) strcpy(genbuf, "light");
542 break;
543 case PM_WEREAUTON:
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");
547 break;
548 case PM_WEREGREMLIN:
549 case PM_HUMAN_WEREGREMLIN:
550 typ = PM_HEALING_GREMLIN;
551 if (genbuf) strcpy(genbuf, "gremlin");
552 break;
553 case PM_WEREGREENSLIME:
554 case PM_HUMAN_WEREGREENSLIME:
555 typ = PM_GREEN_SLIME;
556 if (genbuf) strcpy(genbuf, "slime");
557 break;
558 case PM_WEREJELLY:
559 case PM_HUMAN_WEREJELLY:
560 typ = PM_OCHRE_JELLY;
561 if (genbuf) strcpy(genbuf, "jelly");
562 break;
563 case PM_WEREXAN:
564 case PM_HUMAN_WEREXAN:
565 typ = PM_XAN;
566 if (genbuf) strcpy(genbuf, "xan");
567 break;
568 case PM_WEREMUMAK:
569 case PM_HUMAN_WEREMUMAK:
570 typ = PM_MUMAK;
571 if (genbuf) strcpy(genbuf, "mumak");
572 break;
573 case PM_WERECENTAUR:
574 case PM_HUMAN_WERECENTAUR:
575 typ = rn2(5) ? PM_PLAINS_CENTAUR : PM_FOREST_CENTAUR;
576 if (genbuf) strcpy(genbuf, "centaur");
577 break;
578 case PM_WERECOUATL:
579 case PM_HUMAN_WERECOUATL:
580 typ = PM_COUATL;
581 if (genbuf) strcpy(genbuf, "couatl");
582 break;
583 case PM_WEREGELATINOUSCUBE:
584 case PM_HUMAN_WEREGELATINOUSCUBE:
585 typ = PM_GELATINOUS_CUBE;
586 if (genbuf) strcpy(genbuf, "gelatinous cube");
587 break;
588 case PM_WEREAIRELEMENTAL:
589 case PM_HUMAN_WEREAIRELEMENTAL:
590 typ = PM_AIR_ELEMENTAL;
591 if (genbuf) strcpy(genbuf, "air elemental");
592 break;
593 case PM_WEREFIREELEMENTAL:
594 case PM_HUMAN_WEREFIREELEMENTAL:
595 typ = PM_FIRE_ELEMENTAL;
596 if (genbuf) strcpy(genbuf, "fire elemental");
597 break;
598 case PM_WEREEARTHELEMENTAL:
599 case PM_HUMAN_WEREEARTHELEMENTAL:
600 typ = PM_EARTH_ELEMENTAL;
601 if (genbuf) strcpy(genbuf, "earth elemental");
602 break;
603 case PM_WEREWATERELEMENTAL:
604 case PM_HUMAN_WEREWATERELEMENTAL:
605 typ = PM_WATER_ELEMENTAL;
606 if (genbuf) strcpy(genbuf, "water elemental");
607 break;
608 case PM_WEREASTRALELEMENTAL:
609 case PM_HUMAN_WEREASTRALELEMENTAL:
610 typ = PM_ASTRAL_ELEMENTAL;
611 if (genbuf) strcpy(genbuf, "astral elemental");
612 break;
613 case PM_WEREXORN:
614 case PM_HUMAN_WEREXORN:
615 typ = PM_XORN;
616 if (genbuf) strcpy(genbuf, "xorn");
617 break;
618 case PM_WERESTALKER:
619 case PM_HUMAN_WERESTALKER:
620 typ = PM_STALKER;
621 if (genbuf) strcpy(genbuf, "stalker");
622 break;
623 case PM_WEREDRACONIAN:
624 case PM_HUMAN_WEREDRACONIAN:
625 typ = PM_PLAIN_DRACONIAN;
626 if (genbuf) strcpy(genbuf, "draconian");
627 break;
628 case PM_WEREUMBERHULK:
629 case PM_HUMAN_WEREUMBERHULK:
630 typ = PM_UMBER_HULK;
631 if (genbuf) strcpy(genbuf, "hulk");
632 break;
633 case PM_WEREVAMPIRE:
634 case PM_HUMAN_WEREVAMPIRE:
635 typ = PM_VAMPIRE;
636 if (genbuf) strcpy(genbuf, "vampire");
637 break;
638 case PM_WEREKILLERBEE:
639 case PM_HUMAN_WEREKILLERBEE:
640 typ = PM_KILLER_BEE;
641 if (genbuf) strcpy(genbuf, "bee");
642 break;
643 case PM_WEREKANGAROO:
644 case PM_HUMAN_WEREKANGAROO:
645 typ = PM_KANGAROO;
646 if (genbuf) strcpy(genbuf, "kangaroo");
647 break;
648 case PM_WEREGRUE:
649 case PM_HUMAN_WEREGRUE:
650 typ = PM_DARK_GRUE;
651 if (genbuf) strcpy(genbuf, "grue");
652 break;
653 case PM_WERECOINS:
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");
657 break;
658 case PM_WERETRAPPER:
659 case PM_HUMAN_WERETRAPPER:
660 typ = PM_TRAPPER;
661 if (genbuf) strcpy(genbuf, "trapper");
662 break;
663 case PM_WERESHADE:
664 case PM_HUMAN_WERESHADE:
665 typ = PM_SHADE;
666 if (genbuf) strcpy(genbuf, "shade");
667 break;
668 case PM_WEREDISENCHANTER:
669 case PM_HUMAN_WEREDISENCHANTER:
670 typ = PM_DISENCHANTER;
671 if (genbuf) strcpy(genbuf, "disenchanter");
672 break;
673 case PM_WERENAGA:
674 case PM_HUMAN_WERENAGA:
675 typ = rn2(10) ? PM_WHITE_NAGA_HATCHLING : PM_WHITE_NAGA;
676 if (genbuf) strcpy(genbuf, "naga");
677 break;
678 case PM_WEREWORM:
679 case PM_HUMAN_WEREWORM:
680 typ = rn2(10) ? PM_BABY_PURPLE_WORM : PM_PURPLE_WORM;
681 if (genbuf) strcpy(genbuf, "worm");
682 break;
683 case PM_WEREDRAGON:
684 case PM_HUMAN_WEREDRAGON:
685 typ = rn2(2) ? PM_BABY_RED_DRAGON : PM_YOUNG_RED_DRAGON;
686 if (genbuf) strcpy(genbuf, "dragon");
687 break;
688 case PM_WEREWEDGESANDAL:
689 case PM_HUMAN_WEREWEDGESANDAL:
690 typ = PM_ANIMATED_WEDGE_SANDAL;
691 if (genbuf) strcpy(genbuf, "shoe");
692 break;
693 case PM_WEREHUGGINGBOOT:
694 case PM_HUMAN_WEREHUGGINGBOOT:
695 typ = PM_ANIMATED_HUGGING_BOOT;
696 if (genbuf) strcpy(genbuf, "shoe");
697 break;
698 case PM_WEREPEEPTOE:
699 case PM_HUMAN_WEREPEEPTOE:
700 typ = PM_ANIMATED_LEATHER_PEEP_TOE;
701 if (genbuf) strcpy(genbuf, "shoe");
702 break;
703 case PM_WERESEXYLEATHERPUMP:
704 case PM_HUMAN_WERESEXYLEATHERPUMP:
705 typ = PM_ANIMATED_SEXY_LEATHER_PUMP;
706 if (genbuf) strcpy(genbuf, "shoe");
707 break;
708 case PM_WEREBLOCKHEELEDCOMBATBOOT:
709 case PM_HUMAN_WEREBLOCKHEELEDCOMBATBOOT:
710 typ = PM_ANIMATED_BLOCK_HEELED_COMBAT_BOOT;
711 if (genbuf) strcpy(genbuf, "shoe");
712 break;
713 case PM_WERECOMBATSTILETTO:
714 case PM_HUMAN_WERECOMBATSTILETTO:
715 typ = PM_ANIMATED_COMBAT_STILETTO;
716 if (genbuf) strcpy(genbuf, "shoe");
717 break;
718 case PM_WEREBEAUTIFULFUNNELHEELEDPUMP:
719 case PM_HUMAN_WEREBEAUTIFULFUNNELHEELEDPUMP:
720 typ = PM_ANIMATED_BEAUTIFUL_FUNNEL_HEELED_PUMP;
721 if (genbuf) strcpy(genbuf, "shoe");
722 break;
723 case PM_WEREPROSTITUTESHOE:
724 case PM_HUMAN_WEREPROSTITUTESHOE:
725 typ = PM_ANIMATED_PROSTITUTE_SHOE;
726 if (genbuf) strcpy(genbuf, "shoe");
727 break;
728 case PM_WERESTILETTOSANDAL:
729 case PM_HUMAN_WERESTILETTOSANDAL:
730 typ = PM_ANIMATED_STILETTO_SANDAL;
731 if (genbuf) strcpy(genbuf, "shoe");
732 break;
733 case PM_WEREUNFAIRSTILETTO:
734 case PM_HUMAN_WEREUNFAIRSTILETTO:
735 typ = PM_ANIMATED_UNFAIR_STILETTO;
736 if (genbuf) strcpy(genbuf, "shoe");
737 break;
738 case PM_WEREWINTERSTILETTO:
739 case PM_HUMAN_WEREWINTERSTILETTO:
740 typ = PM_ANIMATED_WINTER_STILETTO;
741 if (genbuf) strcpy(genbuf, "shoe");
742 break;
743 default:
744 continue;
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);
748 if (mtmp) {
749 total++;
750 if (canseemon(mtmp)) *visible += 1;
752 if (yours && mtmp)
753 (void) tamedog(mtmp, (struct obj *) 0, TRUE);
755 return total;
758 void
759 you_were()
761 char qbuf[QBUFSZ];
762 char buf[BUFSZ];
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));
770 getlin(qbuf,buf);
771 (void) lcase (buf);
772 if (strcmp (buf, "yes")) return;
775 (void) polymon(u.ulycn);
778 void
779 you_unwere(purify)
780 boolean purify;
782 boolean in_wereform = (u.umonnum == u.ulycn);
784 if (purify) {
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) {
788 u.youaredead = 1;
789 killer_format = NO_KILLER_PREFIX;
790 killer = "purified while stuck in creature form";
791 pline_The("purification was deadly...");
792 done(DIED);
793 u.youaredead = 0;
794 } else {
795 You_feel("very bad!");
796 if (in_wereform && !Race_if(PM_UNGENOMOLD) )
797 rehumanize();
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",
801 KILLED_BY);
803 return;
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);
816 #endif /* OVLB */
818 /*were.c*/