Blindfold removal fix
[slashemextended.git] / src / mplayer.c
blobee5bce7d0328279e0e79b944b8177303add6ed63
1 /* SCCS Id: @(#)mplayer.c 3.4 1997/02/04 */
2 /* Copyright (c) Izchak Miller, 1992. */
3 /* NetHack may be freely redistributed. See license for details. */
5 #include "hack.h"
7 STATIC_DCL const char *dev_name(void);
8 STATIC_DCL void get_mplname(struct monst *, char *);
10 /* These are the names of those who
11 * contributed to the development of NetHack 3.2/3.3/3.4.
13 * Keep in alphabetical order within teams.
14 * Same first name is entered once within each team.
16 static const char *developers[] = {
17 /* devteam */
18 "Dave", "Dean", "Eric", "Izchak", "Janet", "Jessie",
19 "Ken", "Kevin", "Michael", "Mike", "Pat", "Paul", "Steve", "Timo",
20 "Warwick",
21 /* PC team */
22 "Bill", "Eric", "Keizo", "Ken", "Kevin", "Michael", "Mike", "Paul",
23 "Stephen", "Steve", "Timo", "Yitzhak",
24 /* Amiga team */
25 "Andy", "Gregg", "Janne", "Keni", "Mike", "Olaf", "Richard",
26 /* Mac team */
27 "Andy", "Chris", "Dean", "Jon", "Jonathan", "Kevin", "Wang",
28 /* Atari team */
29 "Eric", "Marvin", "Warwick",
30 /* NT team */
31 "Alex", "Dion", "Michael",
32 /* OS/2 team */
33 "Helge", "Ron", "Timo",
34 /* VMS team */
35 "Joshua", "Pat",
36 ""};
39 /* return a randomly chosen developer name */
40 STATIC_OVL const char *
41 dev_name()
43 register int i, m = 0, n = SIZE(developers);
44 register struct monst *mtmp;
45 register boolean match;
47 do {
48 match = FALSE;
49 i = rn2(n);
50 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
51 if(!is_mplayer(mtmp->data)) continue;
52 if(!strncmp(developers[i], NAME(mtmp),
53 strlen(developers[i]))) {
54 match = TRUE;
55 break;
58 m++;
59 } while (match && m < 100); /* m for insurance */
61 if (match) return (const char *)0;
62 return(developers[i]);
65 STATIC_OVL void
66 get_mplname(mtmp, nam)
67 register struct monst *mtmp;
68 char *nam;
70 boolean fmlkind = mtmp->female; /* wtf why did that use "is_female"??? that's retarded! --Amy */
71 const char *devnam;
73 /* Amy edit: more names, mainly ones of active players and variant developers */
74 if (!rn2(2)) {
76 if (fmlkind) { /* awwwwww there's way too few female players :( */
78 switch (rnd(17)) {
80 case 1: strcpy(nam, "GoldenIvy"); break;
81 case 2: strcpy(nam, "AmyBSOD"); break;
82 case 3: strcpy(nam, "Dolores"); break;
83 case 4: strcpy(nam, "Mariari"); break;
84 case 5: strcpy(nam, "Lynn"); break;
85 case 6: strcpy(nam, "Emily"); break;
86 case 7: strcpy(nam, "Elenmirie"); break;
87 case 8: strcpy(nam, "Raisse"); break;
88 case 9: strcpy(nam, "MiseryMyra"); break;
89 case 10: strcpy(nam, "Lymia"); break;
90 case 11: strcpy(nam, "Naganadel"); break;
91 case 12: strcpy(nam, "Icerose"); break;
92 case 13: strcpy(nam, "AntiGulp"); break;
93 case 14: strcpy(nam, "Malena"); break;
94 case 15: strcpy(nam, "Aoei"); break;
95 case 16: strcpy(nam, "CntFai"); break;
96 case 17: strcpy(nam, "Cebolla"); break;
97 default: strcpy(nam, "BugFemName"); break;
100 } else {
102 switch (rnd(87)) {
104 case 1: strcpy(nam, "Bhaak"); break;
105 case 2: strcpy(nam, "Jonadab"); break;
106 case 3: strcpy(nam, "Ais523"); break;
107 case 4: strcpy(nam, "Chris_ANG"); break;
108 case 5: strcpy(nam, "Tungtn"); break;
109 case 6: strcpy(nam, "SGrunt"); break;
110 case 7: strcpy(nam, "Lorimer"); break;
111 case 8: strcpy(nam, "Adeon"); break;
112 case 9: strcpy(nam, "FIQ"); break;
113 case 10: strcpy(nam, "Mandevil"); break;
114 case 11: strcpy(nam, "Luxidream"); break;
115 case 12: strcpy(nam, "Noty"); break;
116 case 13: strcpy(nam, "Psymar"); break;
117 case 14: strcpy(nam, "ProzacElf"); break;
118 case 15: strcpy(nam, "Tangles"); break;
119 case 16: strcpy(nam, "Yasdorian"); break;
120 case 17: strcpy(nam, "Bugsniper"); break;
121 case 18: strcpy(nam, "Heliokopis"); break;
122 case 19: strcpy(nam, "ShivanHunter"); break;
123 case 20: strcpy(nam, "Khor"); break;
124 case 21: strcpy(nam, "Kerio"); break;
125 case 22: strcpy(nam, "Stenno"); break;
126 case 23: strcpy(nam, "Deepy"); break;
127 case 24: strcpy(nam, "Damerell"); break;
128 case 25: strcpy(nam, "Elronnd"); break;
129 case 26: strcpy(nam, "Blindcoder"); break;
130 case 27: strcpy(nam, "Ilbelkyr"); break;
131 case 28: strcpy(nam, "GreyKnight"); break;
132 case 29: strcpy(nam, "Paxed"); break;
133 case 30: strcpy(nam, "Crawldragon"); break;
134 case 31: strcpy(nam, "Glycan"); break;
135 case 32: strcpy(nam, "QDesjardin"); break;
136 case 33: strcpy(nam, "Demo"); break;
137 case 34: strcpy(nam, "GagarinX"); break;
138 case 35: strcpy(nam, "Introspective"); break;
139 case 36: strcpy(nam, "Grasshopper"); break;
140 case 37: strcpy(nam, "Tarmunora"); break;
141 case 38: strcpy(nam, "SourSlime"); break;
142 case 39: strcpy(nam, "Mr0t"); break;
143 case 40: strcpy(nam, "Irrenhaus"); break;
144 case 41: strcpy(nam, "Greqrg"); break;
145 case 42: strcpy(nam, "Bouquet"); break;
146 case 43: strcpy(nam, "Lorskel"); break;
147 case 44: strcpy(nam, "Regret"); break;
148 case 45: strcpy(nam, "Tariru"); break;
149 case 46: strcpy(nam, "Goreval"); break;
150 case 47: strcpy(nam, "Winter"); break;
151 case 48: strcpy(nam, "StatueSurfer"); break;
152 case 49: strcpy(nam, "Yer Mivvagah"); break;
153 case 50: strcpy(nam, "Arrhythmia"); break;
154 case 51: strcpy(nam, "Tubs"); break;
155 case 52: strcpy(nam, "Winsalot"); break;
156 case 53: strcpy(nam, "Hothraxxa"); break;
157 case 54: strcpy(nam, "Aosdict"); break;
158 case 55: strcpy(nam, "Ziratha"); break;
159 case 56: strcpy(nam, "Volt"); break;
160 case 57: strcpy(nam, "Kritixilithos"); break;
161 case 58: strcpy(nam, "Rikersan"); break;
162 case 59: strcpy(nam, "K2"); break;
163 case 60: strcpy(nam, "Leeroy"); break;
164 case 61: strcpy(nam, "Hypnotist"); break;
165 case 62: strcpy(nam, "Anerag"); break;
166 case 63: strcpy(nam, "Madotsuki"); break;
167 case 64: strcpy(nam, "PeterQ"); break;
168 case 65: strcpy(nam, "PavelB"); break;
169 case 66: strcpy(nam, "FlamingGuacamole"); break;
170 case 67: strcpy(nam, "Dracopent"); break;
171 case 68: strcpy(nam, "Andrio"); break;
172 case 69: strcpy(nam, "Metanite"); break;
173 case 70: strcpy(nam, "Greyberyl"); break;
174 case 71: strcpy(nam, "Pellsson"); break;
175 case 72: strcpy(nam, "Recluse"); break;
176 case 73: strcpy(nam, "Pinkbeast"); break;
177 case 74: strcpy(nam, "Mickmane"); break;
178 case 75: strcpy(nam, "Porkman"); break;
179 case 76: strcpy(nam, "Micromoog"); break;
180 case 77: strcpy(nam, "Malor"); break;
181 case 78: strcpy(nam, "Merlek"); break;
182 case 79: strcpy(nam, "Musicdemon"); break;
183 case 80: strcpy(nam, "Amateurhour"); break;
184 case 81: strcpy(nam, "Mobileuser"); break;
185 case 82: strcpy(nam, "Rebatela"); break;
186 case 83: strcpy(nam, "Microlance"); break;
187 case 84: strcpy(nam, "NetSysFire"); break;
188 case 85: strcpy(nam, "Umbire"); break;
189 case 86: strcpy(nam, "Roho"); break;
190 case 87: strcpy(nam, "Pineapple Tycoon"); break;
191 default: strcpy(nam, "BugMalName"); break;
197 goto namedecided;
200 devnam = dev_name();
201 if (!devnam)
202 strcpy(nam, fmlkind ? "Eve" : "Adam");
203 else if (fmlkind && !!strcmp(devnam, "Janet"))
204 strcpy(nam, rn2(2) ? "Maud" : "Eve");
205 else strcpy(nam, devnam);
207 namedecided:
208 /* why don't we just let the RNG decide whether the player monster is female... --Amy */
209 /* if (fmlkind || !strcmp(nam, "Janet"))
210 mtmp->female = 1;
211 else
212 mtmp->female = 0;*/
213 if (is_mplayer(mtmp->data)) {
214 strcat(nam, " the ");
215 strcat(nam, rank_of((int)mtmp->m_lev, monsndx(mtmp->data), (boolean)mtmp->female));
219 void
220 mk_mplayer_armor(mon, typ)
221 struct monst *mon;
222 short typ;
224 struct obj *obj;
226 if (typ == STRANGE_OBJECT) return;
227 obj = mksobj(typ, FALSE, FALSE, FALSE);
228 if (obj) {
229 if (!rn2(3)) obj->oerodeproof = 1;
230 if (!rn2(3)) curse(obj);
231 if (!rn2(3)) bless(obj);
232 /* Most players who get to the endgame who have cursed equipment
233 * have it because the wizard or other monsters cursed it, so its
234 * chances of having plusses is the same as usual....
236 obj->spe = rn2(10) ? (rn2(3) ? rn2(5) : rn1(4,4)) : -rnd(3);
237 if (obj->spe > 0 && !rn2(5)) obj->spe += rne(2);
238 else if (obj->spe < 0 && !rn2(3)) obj->spe -= rne(2);
240 /* Come on, this isn't vanilla. Artifact armors are a thing. --Amy */
241 if (rn2(2)) obj = mk_artifact(obj, A_NONE, TRUE);
243 (void) mpickobj(mon, obj, TRUE);
247 struct monst *
248 mk_mplayer(ptr, x, y, special)
249 register struct permonst *ptr;
250 xchar x, y;
251 register boolean special;
253 register struct monst *mtmp;
254 char nam[PL_PSIZ];
256 if(!is_mplayer(ptr) && !is_umplayer(ptr))
257 return((struct monst *)0);
259 if(MON_AT(x, y))
260 (void) rloc(m_at(x, y), FALSE); /* insurance */
262 /* seriously why is this here? we already set "special" in the calling function... --Amy */
263 /* if(!In_endgame(&u.uz)) special = FALSE; */
265 if ((mtmp = makemon(ptr, x, y, NO_MM_FLAGS)) != 0) {
266 short weapon = rn2(2) ? LONG_SWORD : rnd_class(SPEAR, BULLWHIP);
268 /* Not every ascension kit includes dragon scale mail... I've ascended a monk with crystal plate mail :P --Amy */
269 short armor = rn2(5) ? rnd_class(GRAY_DRAGON_SCALE_MAIL, YELLOW_DRAGON_SCALE_MAIL) : rnd_class(PLATE_MAIL, YELLOW_DRAGON_SCALES);
270 short cloak = !rn2(8) ? STRANGE_OBJECT :
271 rnd_class(OILSKIN_CLOAK, CLOAK_OF_DISPLACEMENT);
272 short helm = !rn2(8) ? STRANGE_OBJECT :
273 rnd_class(ELVEN_LEATHER_HELM, HELM_OF_TELEPATHY);
274 short shield = !rn2(8) ? STRANGE_OBJECT :
275 rnd_class(ELVEN_SHIELD, SHIELD_OF_REFLECTION);
276 int quan;
277 struct obj *otmp;
279 mtmp->m_lev = (special ? rn1(16,15) : rnd(16));
280 mtmp->mhp = mtmp->mhpmax = d((int)mtmp->m_lev,10) +
281 (special ? (30 + rnd(30)) : 30);
282 if(special) {
283 get_mplname(mtmp, nam);
284 mtmp = christen_monst(mtmp, nam);
285 /* that's why they are "stuck" in the endgame :-) */
286 (void)mongets(mtmp, FAKE_AMULET_OF_YENDOR);
288 mtmp->mpeaceful = 0;
289 set_malign(mtmp); /* peaceful may have changed again */
291 switch(monsndx(ptr)) {
292 case PM_ARCHEOLOGIST:
293 case PM_UNDEAD_ARCHEOLOGIST:
294 if (rn2(2)) weapon = BULLWHIP;
295 break;
296 case PM_ANACHRONIST:
297 case PM_UNDEAD_ANACHRONIST:
298 weapon = FORCE_PIKE;
299 break;
300 case PM_BARBARIAN:
301 case PM_UNDEAD_BARBARIAN:
302 case PM_NOOB_MODE_BARB:
303 case PM_UNDEAD_NOOB_MODE_BARB:
304 if (rn2(2)) {
305 weapon = rn2(2) ? TWO_HANDED_SWORD : BATTLE_AXE;
306 shield = STRANGE_OBJECT;
308 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
309 if (helm == HELM_OF_BRILLIANCE) helm = STRANGE_OBJECT;
310 break;
311 case PM_BLEEDER:
312 case PM_UNDEAD_BLEEDER:
313 weapon = KNIFE;
314 break;
315 case PM_ANACHRONOUNBINDER:
316 case PM_UNDEAD_ANACHRONOUNBINDER:
317 weapon = SILVER_SHORT_SWORD;
318 break;
319 case PM_HUSSY:
320 case PM_UNDEAD_HUSSY:
321 weapon = HIGH_HEELED_SANDAL;
322 break;
323 case PM_MASON:
324 case PM_UNDEAD_MASON:
325 weapon = DWARVISH_MATTOCK;
326 armor = FULL_PLATE_MAIL;
327 break;
328 case PM_DEMAGOGUE:
329 case PM_UNDEAD_DEMAGOGUE:
330 armor = FULL_PLATE_MAIL;
331 weapon = THUNDER_HAMMER;
332 break;
333 case PM_CELLAR_CHILD:
334 case PM_UNDEAD_CELLAR_CHILD:
335 weapon = BATTLE_STAFF;
336 armor = MAGE_PLATE_MAIL;
337 break;
338 case PM_GRENADONIN:
339 case PM_UNDEAD_GRENADONIN:
340 weapon = KATANA;
341 break;
342 case PM_SOFTWARE_ENGINEER:
343 case PM_UNDEAD_SOFTWARE_ENGINEER:
344 weapon = AXE;
345 break;
346 case PM_CRACKER:
347 case PM_UNDEAD_CRACKER:
348 weapon = BATTLE_AXE;
349 break;
350 case PM_JANITOR:
351 case PM_UNDEAD_JANITOR:
352 weapon = SPECIAL_MOP;
353 break;
354 case PM_SPACE_MARINE:
355 case PM_UNDEAD_SPACE_MARINE:
356 weapon = WAR_HAMMER;
357 break;
358 case PM_STORMBOY:
359 case PM_UNDEAD_STORMBOY:
360 weapon = TSURUGI;
361 break;
362 case PM_YAUTJA:
363 case PM_UNDEAD_YAUTJA:
364 weapon = !rn2(3) ? DRAGON_SPEAR : rn2(2) ? BULLETPROOF_CHAINWHIP : HUGE_CLUB;
365 break;
366 case PM_JOCKEY:
367 case PM_UNDEAD_JOCKEY:
368 weapon = FLAME_WHIP;
369 if (rn2(2)) armor = LEATHER_JACKET;
370 break;
371 case PM_QUARTERBACK:
372 case PM_UNDEAD_QUARTERBACK:
373 weapon = METAL_CLUB;
374 break;
375 case PM_PSYKER:
376 case PM_UNDEAD_PSYKER:
377 break;
378 case PM_EMPATH:
379 case PM_UNDEAD_EMPATH:
380 weapon = CRYSKNIFE;
381 break;
382 case PM_MASTERMIND:
383 case PM_UNDEAD_MASTERMIND:
384 break;
385 case PM_WEIRDBOY:
386 case PM_UNDEAD_WEIRDBOY:
387 weapon = BRONZE_MORNING_STAR;
388 break;
389 case PM_ASTRONAUT:
390 case PM_UNDEAD_ASTRONAUT:
391 break;
392 case PM_CYBERNINJA:
393 case PM_UNDEAD_CYBERNINJA:
394 weapon = KATANA;
395 break;
396 case PM_DISSIDENT:
397 case PM_UNDEAD_DISSIDENT:
398 weapon = SPIKED_CLUB;
399 break;
400 case PM_XELNAGA:
401 case PM_UNDEAD_XELNAGA:
402 break;
403 case PM_SINGSLAVE:
404 case PM_UNDEAD_SINGSLAVE:
405 weapon = STRANGE_OBJECT;
406 break;
407 case PM_WALSCHOLAR:
408 case PM_UNDEAD_WALSCHOLAR:
409 weapon = CONGLOMERATE_PICK;
410 armor = EVIL_LEATHER_ARMOR;
411 break;
412 case PM_SOCIAL_JUSTICE_WARRIOR:
413 case PM_UNDEAD_SOCIAL_JUSTICE_WARRIOR:
414 helm = FEDORA;
415 weapon = INSECT_SQUASHER;
416 break;
417 case PM_BINDER:
418 case PM_UNDEAD_BINDER:
419 weapon = RANSEUR;
420 armor = ELVEN_MITHRIL_COAT;
421 cloak = LEATHER_CLOAK;
422 break;
423 case PM_CAVEMAN:
424 case PM_CAVEWOMAN:
425 case PM_UNDEAD_CAVEMAN:
426 case PM_UNDEAD_CAVEWOMAN:
427 if (rn2(4)) weapon = MACE;
428 else if (rn2(2)) weapon = CLUB;
429 if (helm == HELM_OF_BRILLIANCE) helm = STRANGE_OBJECT;
430 break;
431 case PM_CONVICT:
432 case PM_UNDEAD_CONVICT:
433 weapon = HEAVY_IRON_BALL;
434 break;
435 case PM_MURDERER:
436 case PM_UNDEAD_MURDERER:
437 weapon = HEAVY_IRON_BALL;
438 break;
439 case PM_TRACER:
440 case PM_UNDEAD_TRACER:
441 weapon = SHORT_SWORD;
442 break;
443 case PM_FEMINIST:
444 case PM_UNDEAD_FEMINIST:
445 weapon = HIGH_HEELED_SANDAL;
446 break;
447 case PM_FORM_CHANGER:
448 case PM_UNDEAD_FORM_CHANGER:
449 weapon = CLUB;
450 break;
451 case PM_NUCLEAR_PHYSICIST:
452 case PM_UNDEAD_NUCLEAR_PHYSICIST:
453 weapon = INKA_SPEAR;
454 break;
455 case PM_GANG_SCHOLAR:
456 case PM_UNDEAD_GANG_SCHOLAR:
457 weapon = TWO_HANDED_SWORD;
458 break;
459 case PM_GEEK:
460 case PM_UNDEAD_GEEK:
461 weapon = ELECTRIC_SWORD;
462 break;
463 case PM_GRADUATE:
464 case PM_UNDEAD_GRADUATE:
465 weapon = FLY_SWATTER;
466 break;
467 case PM_GANGSTER:
468 case PM_UNDEAD_GANGSTER:
469 weapon = SCOURGE;
470 break;
471 case PM_PIRATE:
472 case PM_UNDEAD_PIRATE:
473 weapon = SCIMITAR;
474 break;
475 case PM_DRUNK:
476 case PM_UNDEAD_DRUNK:
477 weapon = RUBBER_HOSE;
478 break;
479 case PM_OFFICER:
480 case PM_UNDEAD_OFFICER:
481 weapon = CLUB;
482 break;
483 case PM_KORSAIR:
484 case PM_UNDEAD_KORSAIR:
485 weapon = SCIMITAR;
486 break;
487 case PM_DIVER:
488 case PM_UNDEAD_DIVER:
489 weapon = TRIDENT;
490 break;
491 case PM_BARD:
492 case PM_UNDEAD_BARD:
493 weapon = WAR_HAMMER;
494 break;
495 case PM_GLADIATOR:
496 case PM_UNDEAD_GLADIATOR:
497 weapon = SILVER_SABER;
498 break;
499 case PM_GOFF:
500 case PM_UNDEAD_GOFF:
501 weapon = QUARTERSTAFF;
502 break;
503 case PM_AMAZON:
504 case PM_UNDEAD_AMAZON:
505 weapon = JAVELIN;
506 break;
507 case PM_ALTMER:
508 case PM_UNDEAD_ALTMER:
509 weapon = QUARTERSTAFF;
510 break;
511 case PM_BOSMER:
512 case PM_UNDEAD_BOSMER:
513 weapon = ELVEN_DAGGER;
514 break;
515 case PM_INTEL_SCRIBE:
516 case PM_UNDEAD_INTEL_SCRIBE:
517 weapon = DAGGER;
518 break;
519 case PM_DUNMER:
520 case PM_UNDEAD_DUNMER:
521 weapon = DARK_ELVEN_DAGGER;
522 break;
523 case PM_THALMOR:
524 case PM_UNDEAD_THALMOR:
525 weapon = ELVEN_BROADSWORD;
526 break;
527 case PM_ORDINATOR:
528 case PM_UNDEAD_ORDINATOR:
529 weapon = TSURUGI;
530 break;
531 case PM_ARTIST:
532 case PM_UNDEAD_ARTIST:
533 weapon = MALLET;
534 break;
535 case PM_GAMER:
536 case PM_UNDEAD_GAMER:
537 weapon = CLUB;
538 break;
539 case PM_LIBRARIAN:
540 case PM_UNDEAD_LIBRARIAN:
541 weapon = KNIFE;
542 break;
543 case PM_COOK:
544 case PM_UNDEAD_COOK:
545 weapon = KNIFE;
546 break;
547 case PM_JESTER:
548 case PM_UNDEAD_JESTER:
549 weapon = HEAVY_IRON_BALL;
550 break;
551 case PM_CRUEL_ABUSER:
552 case PM_UNDEAD_CRUEL_ABUSER:
553 weapon = KNOUT;
554 break;
555 case PM_SUPERMARKET_CASHIER:
556 case PM_UNDEAD_SUPERMARKET_CASHIER:
557 weapon = KNIFE;
558 break;
559 case PM_LADIESMAN:
560 case PM_UNDEAD_LADIESMAN:
561 weapon = KNIFE;
562 break;
563 case PM_FIGHTER:
564 case PM_UNDEAD_FIGHTER:
565 weapon = LONG_SWORD;
566 break;
567 case PM_FENCER:
568 case PM_UNDEAD_FENCER:
569 weapon = BLACK_AESTIVALIS;
570 break;
571 case PM_MEDIUM:
572 case PM_UNDEAD_MEDIUM:
573 weapon = QUARTERSTAFF;
574 break;
575 case PM_STAND_USER:
576 case PM_UNDEAD_STAND_USER:
577 weapon = LOG;
578 break;
579 case PM_JUSTICE_KEEPER:
580 case PM_UNDEAD_JUSTICE_KEEPER:
581 weapon = SLEDGE_HAMMER;
582 break;
583 case PM_SEXYMATE:
584 case PM_UNDEAD_SEXYMATE:
585 weapon = STURDY_PLATEAU_BOOT_FOR_GIRLS;
586 break;
587 case PM_GUNNER:
588 case PM_UNDEAD_GUNNER:
589 weapon = KNIFE;
590 break;
591 case PM_DOOM_MARINE:
592 case PM_UNDEAD_DOOM_MARINE:
593 weapon = CHAINSWORD;
594 break;
595 case PM_WANDKEEPER:
596 case PM_UNDEAD_WANDKEEPER:
597 weapon = KNIFE;
598 break;
599 case PM_FOXHOUND_AGENT:
600 case PM_UNDEAD_FOXHOUND_AGENT:
601 weapon = KNIFE;
602 break;
603 case PM_FEAT_MASTER:
604 case PM_UNDEAD_FEAT_MASTER:
605 weapon = FLAIL;
606 break;
607 case PM_MAHOU_SHOUJO:
608 case PM_UNDEAD_MAHOU_SHOUJO:
609 weapon = WEDGED_LITTLE_GIRL_SANDAL;
610 break;
611 case PM_BLOODSEEKER:
612 case PM_UNDEAD_BLOODSEEKER:
613 weapon = SHORT_SWORD;
614 break;
615 case PM_SAIYAN:
616 case PM_UNDEAD_SAIYAN:
617 weapon = BROADSWORD;
618 break;
619 case PM_DOLL_MISTRESS:
620 case PM_UNDEAD_DOLL_MISTRESS:
621 weapon = CRYSKNIFE;
622 break;
623 case PM_MYSTIC:
624 case PM_UNDEAD_MYSTIC:
625 weapon = TORPEDO;
626 break;
627 case PM_ASSASSIN:
628 case PM_UNDEAD_ASSASSIN:
629 weapon = GREAT_DAGGER;
630 break;
631 case PM_BULLY:
632 case PM_UNDEAD_BULLY:
633 weapon = KNIFE;
634 break;
635 case PM_PICKPOCKET:
636 case PM_UNDEAD_PICKPOCKET:
637 weapon = STILETTO;
638 break;
639 case PM_OTAKU:
640 case PM_UNDEAD_OTAKU:
641 weapon = KATANA;
642 break;
643 case PM_PALADIN:
644 case PM_UNDEAD_PALADIN:
645 weapon = LONG_SWORD;
646 break;
647 case PM_SAGE:
648 case PM_UNDEAD_SAGE:
649 weapon = SILVER_MACE;
650 break;
651 case PM_SLAVE_MASTER:
652 case PM_UNDEAD_SLAVE_MASTER:
653 weapon = STEEL_WHIP;
654 break;
655 case PM_NOBLEMAN:
656 case PM_NOBLEWOMAN:
657 case PM_UNDEAD_NOBLEMAN:
658 case PM_UNDEAD_NOBLEWOMAN:
659 weapon = RAPIER;
660 break;
661 case PM_POKEMON:
662 case PM_UNDEAD_POKEMON:
663 case PM_MUSICIAN:
664 case PM_UNDEAD_MUSICIAN:
665 weapon = CLUB;
666 break;
667 case PM_DEATH_EATER:
668 case PM_UNDEAD_DEATH_EATER:
669 weapon = QUARTERSTAFF;
670 break;
671 case PM_HEALER:
672 case PM_SCIENTIST:
673 case PM_UNDEAD_HEALER:
674 case PM_UNDEAD_SCIENTIST:
675 if (rn2(4)) weapon = QUARTERSTAFF;
676 else if (rn2(2)) weapon = rn2(2) ? UNICORN_HORN : SCALPEL;
677 if (rn2(4)) helm = rn2(2) ? HELM_OF_BRILLIANCE : HELM_OF_TELEPATHY;
678 if (rn2(2)) shield = STRANGE_OBJECT;
679 break;
680 case PM_YEOMAN:
681 case PM_KNIGHT:
682 case PM_UNDEAD_YEOMAN:
683 case PM_UNDEAD_KNIGHT:
684 if (rn2(4)) weapon = LONG_SWORD;
685 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
686 break;
687 case PM_WARRIOR:
688 case PM_UNDEAD_WARRIOR:
689 if (rn2(4)) weapon = MACE;
690 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
691 case PM_MONK:
692 case PM_PSION:
693 case PM_UNDEAD_MONK:
694 case PM_UNDEAD_PSION:
695 weapon = STRANGE_OBJECT;
696 armor = STRANGE_OBJECT;
697 cloak = ROBE;
698 if (rn2(2)) shield = STRANGE_OBJECT;
699 break;
700 case PM_HALF_BAKED:
701 case PM_UNDEAD_HALF_BAKED:
702 weapon = STRANGE_OBJECT;
703 armor = STRANGE_OBJECT;
704 if (rn2(2)) shield = STRANGE_OBJECT;
705 break;
706 case PM_CHEVALIER:
707 case PM_UNDEAD_CHEVALIER:
708 weapon = TRIDENT;
709 break;
710 case PM_AUGURER:
711 case PM_UNDEAD_AUGURER:
712 weapon = STRANGE_OBJECT;
713 break;
714 case PM_POLITICIAN:
715 case PM_UNDEAD_POLITICIAN:
716 weapon = STRANGE_OBJECT;
717 break;
718 case PM_UNDERTAKER:
719 case PM_UNDEAD_UNDERTAKER:
720 weapon = SCALPEL;
721 break;
722 case PM_ZOOKEEPER:
723 case PM_UNDEAD_ZOOKEEPER:
724 weapon = BULLWHIP;
725 break;
726 case PM_CLIMACTERIAL:
727 case PM_UNDEAD_CLIMACTERIAL:
728 weapon = RUBBER_HOSE;
729 break;
730 case PM_WOMANIZER:
731 case PM_UNDEAD_WOMANIZER:
732 weapon = SEXPLAY_WHIP;
733 break;
734 case PM_FIREFIGHTER:
735 case PM_UNDEAD_FIREFIGHTER:
736 weapon = AXE;
737 break;
738 case PM_LOCKSMITH:
739 case PM_UNDEAD_LOCKSMITH:
740 weapon = DAGGER;
741 break;
742 case PM_ERDRICK:
743 case PM_DQ_SLIME:
744 case PM_UNDEAD_ERDRICK:
745 case PM_UNDEAD_DQ_SLIME:
746 weapon = BATTLE_STAFF;
747 break;
748 case PM_NINJA:
749 case PM_UNDEAD_NINJA:
750 weapon = KATANA;
751 break;
752 case PM_SPACEWARS_FIGHTER:
753 case PM_UNDEAD_SPACEWARS_FIGHTER:
754 weapon = BLUE_LIGHTSABER;
755 break;
756 case PM_CAMPERSTRIKER:
757 case PM_UNDEAD_CAMPERSTRIKER:
758 weapon = GREEN_LIGHTSABER;
759 break;
760 case PM_CARTOMANCER:
761 case PM_UNDEAD_CARTOMANCER:
762 weapon = GREAT_DAGGER;
763 break;
764 case PM_DRAGONMASTER:
765 case PM_UNDEAD_DRAGONMASTER:
766 weapon = ELVEN_BROADSWORD;
767 break;
768 case PM_COMBATANT:
769 case PM_UNDEAD_COMBATANT:
770 break;
771 case PM_FJORDE:
772 case PM_UNDEAD_FJORDE:
773 weapon = TRIDENT;
774 break;
775 case PM_PRACTICANT:
776 case PM_UNDEAD_PRACTICANT:
777 weapon = STEEL_CAPPED_SANDAL;
778 break;
779 case PM_EMERA:
780 case PM_UNDEAD_EMERA:
781 weapon = BULLETPROOF_CHAINWHIP;
782 break;
783 case PM_TOSSER:
784 case PM_UNDEAD_TOSSER:
785 weapon = TORPEDO;
786 break;
787 case PM_AKLYST:
788 case PM_UNDEAD_AKLYST:
789 weapon = AKLYS;
790 break;
791 case PM_MILL_SWALLOWER:
792 case PM_UNDEAD_MILL_SWALLOWER:
793 weapon = CHEMISTRY_SPACE_AXE;
794 break;
795 case PM_SYMBIANT:
796 case PM_UNDEAD_SYMBIANT:
797 weapon = ORNATE_MACE;
798 break;
799 case PM_GENDERSTARIST:
800 case PM_UNDEAD_GENDERSTARIST:
801 weapon = TELEPHONE;
802 break;
803 case PM_BUTT_LOVER:
804 case PM_UNDEAD_BUTT_LOVER:
805 weapon = SEXPLAY_WHIP;
806 break;
807 case PM_DANCER:
808 case PM_UNDEAD_DANCER:
809 weapon = MOP;
810 break;
811 case PM_DIABLIST:
812 case PM_UNDEAD_DIABLIST:
813 weapon = !rn2(3) ? CAMO_QATAR : !rn2(2) ? VARIED_GRINDER : CIGARETTE;
814 break;
815 case PM_PREVERSIONER:
816 case PM_UNDEAD_PREVERSIONER:
817 weapon = GREAT_DAGGER;
818 break;
819 case PM_SECRET_ADVICE_MEMBER:
820 case PM_UNDEAD_SECRET_ADVICE_MEMBER:
821 weapon = SHADOWBLADE;
822 break;
823 case PM_SHOE_FETISHIST:
824 case PM_UNDEAD_SHOE_FETISHIST:
825 weapon = PROSTITUTE_SHOE;
826 break;
827 case PM_PRIEST:
828 case PM_PRIESTESS:
829 case PM_UNDEAD_PRIEST:
830 case PM_UNDEAD_PRIESTESS:
831 if (rn2(2)) weapon = MACE;
832 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
833 if (rn2(4)) cloak = ROBE;
834 if (rn2(4)) helm = rn2(2) ? HELM_OF_BRILLIANCE : HELM_OF_TELEPATHY;
835 if (rn2(2)) shield = STRANGE_OBJECT;
836 break;
837 case PM_RANGER:
838 case PM_UNDEAD_RANGER:
839 if (rn2(2)) weapon = ELVEN_DAGGER;
840 break;
841 case PM_ELPH:
842 case PM_UNDEAD_ELPH:
843 weapon = ELVEN_DAGGER;
844 break;
845 case PM_TWELPH:
846 case PM_UNDEAD_TWELPH:
847 weapon = DARK_ELVEN_DAGGER;
848 break;
849 case PM_GOLDMINER:
850 case PM_UNDEAD_GOLDMINER:
851 weapon = PICK_AXE;
852 break;
853 case PM_MIDGET:
854 case PM_UNDEAD_MIDGET:
855 weapon = DWARVISH_MATTOCK;
856 break;
857 case PM_RINGSEEKER:
858 case PM_UNDEAD_RINGSEEKER:
859 weapon = ELVEN_DAGGER;
860 break;
861 case PM_DRUID:
862 case PM_UNDEAD_DRUID:
863 weapon = BATTLE_STAFF;
864 break;
865 case PM_SHAPESHIFTER:
866 case PM_UNDEAD_SHAPESHIFTER:
867 weapon = ATHAME;
868 break;
869 case PM_COURIER:
870 case PM_UNDEAD_COURIER:
871 weapon = KNIFE;
872 break;
873 case PM_ZYBORG:
874 case PM_UNDEAD_ZYBORG:
875 weapon = RED_LIGHTSABER;
876 break;
877 case PM_LUNATIC:
878 case PM_UNDEAD_LUNATIC:
879 weapon = STEEL_WHIP;
880 break;
881 case PM_PROSTITUTE:
882 case PM_KURWA:
883 case PM_UNDEAD_PROSTITUTE:
884 case PM_UNDEAD_KURWA:
885 weapon = INKA_SHACKLE;
886 break;
887 case PM_TRANSVESTITE:
888 case PM_UNDEAD_TRANSVESTITE:
889 weapon = SEXY_LEATHER_PUMP;
890 break;
891 case PM_TRANSSYLVANIAN:
892 case PM_UNDEAD_TRANSSYLVANIAN:
893 weapon = BLOCK_HEELED_COMBAT_BOOT;
894 break;
895 case PM_TOPMODEL:
896 case PM_UNDEAD_TOPMODEL:
897 weapon = KNIFE;
898 break;
899 case PM_UNBELIEVER:
900 case PM_UNDEAD_UNBELIEVER:
901 weapon = BLACK_AESTIVALIS;
902 break;
903 case PM_FAILED_EXISTENCE:
904 case PM_UNDEAD_FAILED_EXISTENCE:
905 weapon = KNIFE;
906 break;
907 case PM_ACTIVISTOR:
908 case PM_UNDEAD_ACTIVISTOR:
909 weapon = FLY_SWATTER;
910 break;
911 case PM_ROGUE:
912 case PM_UNDEAD_ROGUE:
913 weapon = SHORT_SWORD;
914 armor = LEATHER_ARMOR;
915 break;
916 case PM_SAMURAI:
917 case PM_UNDEAD_SAMURAI:
918 if (rn2(2)) weapon = KATANA;
919 break;
920 case PM_TOURIST:
921 case PM_UNDEAD_TOURIST:
922 /* Defaults are just fine */
923 break;
924 case PM_ROCKER:
925 case PM_UNDEAD_ROCKER:
926 weapon = HEAVY_HAMMER;
927 break;
928 case PM_UNDEAD_SLAYER:
929 case PM_NON_UNDEAD_SLAYER:
930 if (rn2(2)) weapon = SILVER_SPEAR;
931 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
932 break;
933 case PM_VALKYRIE:
934 case PM_UNDEAD_VALKYRIE:
935 case PM_VANILLA_VALK:
936 case PM_UNDEAD_VANILLA_VALK:
937 if (rn2(2)) weapon = WAR_HAMMER;
938 if (rn2(2)) armor = rnd_class(PLATE_MAIL, CHAIN_MAIL);
939 break;
940 case PM_FLAME_MAGE:
941 case PM_ACID_MAGE:
942 case PM_ICE_MAGE:
943 case PM_ELECTRIC_MAGE:
944 case PM_POISON_MAGE:
945 case PM_NECROMANCER:
946 case PM_WIZARD:
947 case PM_UNDEAD_FLAME_MAGE:
948 case PM_UNDEAD_ACID_MAGE:
949 case PM_UNDEAD_ICE_MAGE:
950 case PM_UNDEAD_ELECTRIC_MAGE:
951 case PM_UNDEAD_POISON_MAGE:
952 case PM_UNDEAD_NECROMANCER:
953 case PM_UNDEAD_WIZARD:
954 if (rn2(4)) weapon = rn2(2) ? QUARTERSTAFF : ATHAME;
955 if (rn2(2)) {
956 armor = rn2(2) ? BLACK_DRAGON_SCALE_MAIL :
957 SILVER_DRAGON_SCALE_MAIL;
958 cloak = CLOAK_OF_MAGIC_RESISTANCE;
960 if (rn2(4)) helm = HELM_OF_BRILLIANCE;
961 shield = STRANGE_OBJECT;
962 break;
964 case PM_OCCULT_MASTER:
965 case PM_UNDEAD_OCCULT_MASTER:
966 weapon = COLLUSION_KNIFE;
967 break;
969 case PM_ELEMENTALIST:
970 case PM_UNDEAD_ELEMENTALIST:
971 weapon = FIRE_STICK;
972 break;
974 case PM_CHAOS_SORCEROR:
975 case PM_UNDEAD_CHAOS_SORCEROR:
976 weapon = IMPACT_STAFF;
977 break;
979 case PM_WILD_TALENT:
980 case PM_UNDEAD_WILD_TALENT:
981 weapon = HEAVY_IRON_BALL;
982 break;
984 case PM_JEDI:
985 case PM_SHADOW_JEDI:
986 case PM_PADAWAN:
987 case PM_UNDEAD_JEDI:
988 case PM_UNDEAD_PADAWAN:
989 case PM_UNDEAD_SHADOW_JEDI:
990 case PM_HEDDERJEDI:
991 case PM_UNDEAD_HEDDERJEDI:
992 switch(rnd(13)){
993 case 1: weapon = RED_LIGHTSABER; break;
994 case 2: weapon = BLUE_LIGHTSABER; break;
995 case 3: weapon = GREEN_LIGHTSABER; break;
996 case 4: weapon = WHITE_LIGHTSABER; break;
997 case 5: weapon = YELLOW_LIGHTSABER; break;
998 case 6: weapon = VIOLET_LIGHTSABER; break;
999 case 7: weapon = RED_DOUBLE_LIGHTSABER; break;
1000 case 8: weapon = WHITE_DOUBLE_LIGHTSABER; break;
1001 case 9: weapon = MYSTERY_LIGHTSABER; break;
1002 case 10: weapon = ORANGE_LIGHTSABER; break;
1003 case 11: weapon = BLACK_LIGHTSABER; break;
1004 case 12: weapon = CYAN_DOUBLE_LIGHTSABER; break;
1005 case 13: weapon = DARK_LIGHTSABER; break;
1007 cloak = STRANGE_OBJECT;
1008 armor = rn2(2) ? ROBE : ROBE_OF_POWER;
1009 helm = STRANGE_OBJECT;
1010 shield = STRANGE_OBJECT;
1011 break;
1012 default: impossible("bad mplayer monster");
1013 weapon = /*0*/LONG_SWORD;
1014 break;
1017 if (weapon != STRANGE_OBJECT) {
1018 otmp = mksobj(weapon, TRUE, FALSE, FALSE);
1019 if (otmp) {
1020 otmp->spe = (special ? rn1(5,4) : (rn2(4) - rn2(7) ) );
1021 if (!rn2(3)) otmp->oerodeproof = 1;
1022 else if (!rn2(2)) otmp->greased = 1;
1023 if (special && rn2(2))
1024 otmp = mk_artifact(otmp, A_NONE, TRUE);
1025 /* mplayers knew better than to overenchant Magicbane */
1026 if (otmp->oartifact == ART_MAGICBANE && otmp->spe > 0)
1027 otmp->spe = rnd(4);
1028 (void) mpickobj(mtmp, otmp, TRUE);
1032 if(special) {
1033 if (!rn2(10))
1034 (void) mongets(mtmp, rn2(3) ? LUCKSTONE : LOADSTONE);
1035 mk_mplayer_armor(mtmp, armor);
1036 mk_mplayer_armor(mtmp, cloak);
1037 mk_mplayer_armor(mtmp, helm);
1038 mk_mplayer_armor(mtmp, shield);
1039 if (rn2(8))
1040 mk_mplayer_armor(mtmp, rnd_class(REGULAR_GLOVES,
1041 GAUNTLETS_OF_DEXTERITY));
1042 if (rn2(8))
1043 mk_mplayer_armor(mtmp, rnd_class(LOW_BOOTS, LEVITATION_BOOTS));
1045 /* These are supposed to be ascension kits. Why were the shirts missing??? --Amy */
1046 if (rn2(15))
1047 mk_mplayer_armor(mtmp, rnd_class(HAWAIIAN_SHIRT, VICTORIAN_UNDERWEAR));
1048 m_dowear(mtmp, TRUE);
1050 quan = rn2(3) ? rn2(3) : rn2(16);
1051 while(quan--)
1052 (void)mongets(mtmp, rnd_class(DILITHIUM_CRYSTAL, JADE));
1053 /* To get the gold "right" would mean a player can double his */
1054 /* gold supply by killing one mplayer. Not good. */
1055 #ifndef GOLDOBJ
1056 mtmp->mgold = rn2(1000);
1057 #else
1058 mkmonmoney(mtmp, rn2(1000));
1059 #endif
1060 quan = rn2(10);
1061 while(quan--)
1062 (void) mpickobj(mtmp, mkobj(RANDOM_CLASS, FALSE, FALSE), TRUE);
1063 } else { /* wandering characters... */
1064 #ifndef GOLDOBJ
1065 mtmp->mgold = rn2((mtmp->m_lev)*100);
1066 #else
1067 mkmonmoney(mtmp, rn2((mtmp->m_lev)*100));
1068 #endif
1070 quan = rnd(3);
1071 while(quan--) {
1072 (void)mongets(mtmp, rnd_offensive_item(mtmp));
1073 if (!rn2(100)) (void) mongets(mtmp, rnd_offensive_item_new(mtmp));
1075 quan = rnd(3);
1076 while(quan--) {
1077 (void)mongets(mtmp, rnd_defensive_item(mtmp));
1078 if (!rn2(100)) (void) mongets(mtmp, rnd_defensive_item_new(mtmp));
1080 quan = rnd(3);
1081 while(quan--) {
1082 (void)mongets(mtmp, rnd_misc_item(mtmp));
1083 if (!rn2(100)) (void) mongets(mtmp, rnd_misc_item_new(mtmp));
1087 return(mtmp);
1090 /* create the indicated number (num) of monster-players,
1091 * randomly chosen, and in randomly chosen (free) locations
1092 * on the level. If "special", the size of num should not
1093 * be bigger than the number of _non-repeated_ names in the
1094 * developers array, otherwise a bunch of Adams and Eves will
1095 * fill up the overflow.
1097 void
1098 create_mplayers(num, special)
1099 register int num;
1100 boolean special;
1102 int pm, x, y;
1103 struct monst fakemon;
1105 while(num) {
1106 int tryct = 0;
1108 /* roll for character class */
1109 pm = PM_ARCHEOLOGIST + rn2(PM_WIZARD - PM_ARCHEOLOGIST + 1);
1110 fakemon.data = &mons[pm];
1112 /* roll for an available location */
1113 do {
1114 x = rn1(COLNO-4, 2);
1115 y = rnd(ROWNO-2);
1116 } while(!goodpos(x, y, &fakemon, 0) && tryct++ <= 50);
1118 /* if pos not found in 50 tries, don't bother to continue */
1119 if(tryct > 50) return;
1121 (void) mk_mplayer(&mons[pm], (xchar)x, (xchar)y, special);
1122 num--;
1126 void
1127 create_umplayers(num, special)
1128 register int num;
1129 boolean special;
1131 int pm, x, y;
1132 struct monst fakemon;
1134 while(num) {
1135 int tryct = 0;
1137 /* roll for character class */
1138 pm = PM_UNDEAD_ARCHEOLOGIST + rn2(PM_UNDEAD_WIZARD - PM_UNDEAD_ARCHEOLOGIST + 1);
1139 fakemon.data = &mons[pm];
1141 /* roll for an available location */
1142 do {
1143 x = rn1(COLNO-4, 2);
1144 y = rnd(ROWNO-2);
1145 } while(!goodpos(x, y, &fakemon, 0) && tryct++ <= 50);
1147 /* if pos not found in 50 tries, don't bother to continue */
1148 if(tryct > 50) return;
1150 (void) mk_mplayer(&mons[pm], (xchar)x, (xchar)y, special);
1151 num--;
1155 void
1156 mplayer_talk(mtmp)
1157 register struct monst *mtmp;
1159 static const char *same_class_msg[5] = {
1160 "I can't win, and neither will you!",
1161 "You don't deserve to win!",
1162 "Mine should be the honor, not yours!",
1163 "Just give me that amulet so I can ascend, or I'll take it by force!",
1164 "I have many more artifacts than you! You're a disgrace to your profession!",
1165 }, *other_class_msg[5] = {
1166 "The low-life wants to talk, eh?",
1167 "Fight, scum!",
1168 "Here is what I have to say!",
1169 "If I had the Vorpal Blade, I would decapitate you on the spot!",
1170 "Well your profession is stupid, I'm something much better than you.",
1173 if(mtmp->mpeaceful) return; /* will drop to humanoid talk */
1175 pline("Talk? -- %s",
1176 (mtmp->data == &mons[urole.malenum] ||
1177 mtmp->data == &mons[urole.femalenum]) ?
1178 same_class_msg[rn2(4)] : other_class_msg[rn2(4)]);
1181 /*mplayer.c*/