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. */
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
[] = {
18 "Dave", "Dean", "Eric", "Izchak", "Janet", "Jessie",
19 "Ken", "Kevin", "Michael", "Mike", "Pat", "Paul", "Steve", "Timo",
22 "Bill", "Eric", "Keizo", "Ken", "Kevin", "Michael", "Mike", "Paul",
23 "Stephen", "Steve", "Timo", "Yitzhak",
25 "Andy", "Gregg", "Janne", "Keni", "Mike", "Olaf", "Richard",
27 "Andy", "Chris", "Dean", "Jon", "Jonathan", "Kevin", "Wang",
29 "Eric", "Marvin", "Warwick",
31 "Alex", "Dion", "Michael",
33 "Helge", "Ron", "Timo",
39 /* return a randomly chosen developer name */
40 STATIC_OVL
const char *
43 register int i
, m
= 0, n
= SIZE(developers
);
44 register struct monst
*mtmp
;
45 register boolean match
;
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
]))) {
59 } while (match
&& m
< 100); /* m for insurance */
61 if (match
) return (const char *)0;
62 return(developers
[i
]);
66 get_mplname(mtmp
, nam
)
67 register struct monst
*mtmp
;
70 boolean fmlkind
= mtmp
->female
; /* wtf why did that use "is_female"??? that's retarded! --Amy */
73 /* Amy edit: more names, mainly ones of active players and variant developers */
76 if (fmlkind
) { /* awwwwww there's way too few female players :( */
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;
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;
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
);
208 /* why don't we just let the RNG decide whether the player monster is female... --Amy */
209 /* if (fmlkind || !strcmp(nam, "Janet"))
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
));
220 mk_mplayer_armor(mon
, typ
)
226 if (typ
== STRANGE_OBJECT
) return;
227 obj
= mksobj(typ
, FALSE
, FALSE
, FALSE
);
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
);
248 mk_mplayer(ptr
, x
, y
, special
)
249 register struct permonst
*ptr
;
251 register boolean special
;
253 register struct monst
*mtmp
;
256 if(!is_mplayer(ptr
) && !is_umplayer(ptr
))
257 return((struct monst
*)0);
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
);
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);
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
);
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
;
297 case PM_UNDEAD_ANACHRONIST
:
301 case PM_UNDEAD_BARBARIAN
:
302 case PM_NOOB_MODE_BARB
:
303 case PM_UNDEAD_NOOB_MODE_BARB
:
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
;
312 case PM_UNDEAD_BLEEDER
:
315 case PM_ANACHRONOUNBINDER
:
316 case PM_UNDEAD_ANACHRONOUNBINDER
:
317 weapon
= SILVER_SHORT_SWORD
;
320 case PM_UNDEAD_HUSSY
:
321 weapon
= HIGH_HEELED_SANDAL
;
324 case PM_UNDEAD_MASON
:
325 weapon
= DWARVISH_MATTOCK
;
326 armor
= FULL_PLATE_MAIL
;
329 case PM_UNDEAD_DEMAGOGUE
:
330 armor
= FULL_PLATE_MAIL
;
331 weapon
= THUNDER_HAMMER
;
333 case PM_CELLAR_CHILD
:
334 case PM_UNDEAD_CELLAR_CHILD
:
335 weapon
= BATTLE_STAFF
;
336 armor
= MAGE_PLATE_MAIL
;
339 case PM_UNDEAD_GRENADONIN
:
342 case PM_SOFTWARE_ENGINEER
:
343 case PM_UNDEAD_SOFTWARE_ENGINEER
:
347 case PM_UNDEAD_CRACKER
:
351 case PM_UNDEAD_JANITOR
:
352 weapon
= SPECIAL_MOP
;
354 case PM_SPACE_MARINE
:
355 case PM_UNDEAD_SPACE_MARINE
:
359 case PM_UNDEAD_STORMBOY
:
363 case PM_UNDEAD_YAUTJA
:
364 weapon
= !rn2(3) ? DRAGON_SPEAR
: rn2(2) ? BULLETPROOF_CHAINWHIP
: HUGE_CLUB
;
367 case PM_UNDEAD_JOCKEY
:
369 if (rn2(2)) armor
= LEATHER_JACKET
;
372 case PM_UNDEAD_QUARTERBACK
:
376 case PM_UNDEAD_PSYKER
:
379 case PM_UNDEAD_EMPATH
:
383 case PM_UNDEAD_MASTERMIND
:
386 case PM_UNDEAD_WEIRDBOY
:
387 weapon
= BRONZE_MORNING_STAR
;
390 case PM_UNDEAD_ASTRONAUT
:
393 case PM_UNDEAD_CYBERNINJA
:
397 case PM_UNDEAD_DISSIDENT
:
398 weapon
= SPIKED_CLUB
;
401 case PM_UNDEAD_XELNAGA
:
404 case PM_UNDEAD_SINGSLAVE
:
405 weapon
= STRANGE_OBJECT
;
408 case PM_UNDEAD_WALSCHOLAR
:
409 weapon
= CONGLOMERATE_PICK
;
410 armor
= EVIL_LEATHER_ARMOR
;
412 case PM_SOCIAL_JUSTICE_WARRIOR
:
413 case PM_UNDEAD_SOCIAL_JUSTICE_WARRIOR
:
415 weapon
= INSECT_SQUASHER
;
418 case PM_UNDEAD_BINDER
:
420 armor
= ELVEN_MITHRIL_COAT
;
421 cloak
= LEATHER_CLOAK
;
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
;
432 case PM_UNDEAD_CONVICT
:
433 weapon
= HEAVY_IRON_BALL
;
436 case PM_UNDEAD_MURDERER
:
437 weapon
= HEAVY_IRON_BALL
;
440 case PM_UNDEAD_TRACER
:
441 weapon
= SHORT_SWORD
;
444 case PM_UNDEAD_FEMINIST
:
445 weapon
= HIGH_HEELED_SANDAL
;
447 case PM_FORM_CHANGER
:
448 case PM_UNDEAD_FORM_CHANGER
:
451 case PM_NUCLEAR_PHYSICIST
:
452 case PM_UNDEAD_NUCLEAR_PHYSICIST
:
455 case PM_GANG_SCHOLAR
:
456 case PM_UNDEAD_GANG_SCHOLAR
:
457 weapon
= TWO_HANDED_SWORD
;
461 weapon
= ELECTRIC_SWORD
;
464 case PM_UNDEAD_GRADUATE
:
465 weapon
= FLY_SWATTER
;
468 case PM_UNDEAD_GANGSTER
:
472 case PM_UNDEAD_PIRATE
:
476 case PM_UNDEAD_DRUNK
:
477 weapon
= RUBBER_HOSE
;
480 case PM_UNDEAD_OFFICER
:
484 case PM_UNDEAD_KORSAIR
:
488 case PM_UNDEAD_DIVER
:
496 case PM_UNDEAD_GLADIATOR
:
497 weapon
= SILVER_SABER
;
501 weapon
= QUARTERSTAFF
;
504 case PM_UNDEAD_AMAZON
:
508 case PM_UNDEAD_ALTMER
:
509 weapon
= QUARTERSTAFF
;
512 case PM_UNDEAD_BOSMER
:
513 weapon
= ELVEN_DAGGER
;
515 case PM_INTEL_SCRIBE
:
516 case PM_UNDEAD_INTEL_SCRIBE
:
520 case PM_UNDEAD_DUNMER
:
521 weapon
= DARK_ELVEN_DAGGER
;
524 case PM_UNDEAD_THALMOR
:
525 weapon
= ELVEN_BROADSWORD
;
528 case PM_UNDEAD_ORDINATOR
:
532 case PM_UNDEAD_ARTIST
:
536 case PM_UNDEAD_GAMER
:
540 case PM_UNDEAD_LIBRARIAN
:
548 case PM_UNDEAD_JESTER
:
549 weapon
= HEAVY_IRON_BALL
;
551 case PM_CRUEL_ABUSER
:
552 case PM_UNDEAD_CRUEL_ABUSER
:
555 case PM_SUPERMARKET_CASHIER
:
556 case PM_UNDEAD_SUPERMARKET_CASHIER
:
560 case PM_UNDEAD_LADIESMAN
:
564 case PM_UNDEAD_FIGHTER
:
568 case PM_UNDEAD_FENCER
:
569 weapon
= BLACK_AESTIVALIS
;
572 case PM_UNDEAD_MEDIUM
:
573 weapon
= QUARTERSTAFF
;
576 case PM_UNDEAD_STAND_USER
:
579 case PM_JUSTICE_KEEPER
:
580 case PM_UNDEAD_JUSTICE_KEEPER
:
581 weapon
= SLEDGE_HAMMER
;
584 case PM_UNDEAD_SEXYMATE
:
585 weapon
= STURDY_PLATEAU_BOOT_FOR_GIRLS
;
588 case PM_UNDEAD_GUNNER
:
592 case PM_UNDEAD_DOOM_MARINE
:
596 case PM_UNDEAD_WANDKEEPER
:
599 case PM_FOXHOUND_AGENT
:
600 case PM_UNDEAD_FOXHOUND_AGENT
:
604 case PM_UNDEAD_FEAT_MASTER
:
607 case PM_MAHOU_SHOUJO
:
608 case PM_UNDEAD_MAHOU_SHOUJO
:
609 weapon
= WEDGED_LITTLE_GIRL_SANDAL
;
612 case PM_UNDEAD_BLOODSEEKER
:
613 weapon
= SHORT_SWORD
;
616 case PM_UNDEAD_SAIYAN
:
619 case PM_DOLL_MISTRESS
:
620 case PM_UNDEAD_DOLL_MISTRESS
:
624 case PM_UNDEAD_MYSTIC
:
628 case PM_UNDEAD_ASSASSIN
:
629 weapon
= GREAT_DAGGER
;
632 case PM_UNDEAD_BULLY
:
636 case PM_UNDEAD_PICKPOCKET
:
640 case PM_UNDEAD_OTAKU
:
644 case PM_UNDEAD_PALADIN
:
649 weapon
= SILVER_MACE
;
651 case PM_SLAVE_MASTER
:
652 case PM_UNDEAD_SLAVE_MASTER
:
657 case PM_UNDEAD_NOBLEMAN
:
658 case PM_UNDEAD_NOBLEWOMAN
:
662 case PM_UNDEAD_POKEMON
:
664 case PM_UNDEAD_MUSICIAN
:
668 case PM_UNDEAD_DEATH_EATER
:
669 weapon
= QUARTERSTAFF
;
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
;
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
);
688 case PM_UNDEAD_WARRIOR
:
689 if (rn2(4)) weapon
= MACE
;
690 if (rn2(2)) armor
= rnd_class(PLATE_MAIL
, CHAIN_MAIL
);
694 case PM_UNDEAD_PSION
:
695 weapon
= STRANGE_OBJECT
;
696 armor
= STRANGE_OBJECT
;
698 if (rn2(2)) shield
= STRANGE_OBJECT
;
701 case PM_UNDEAD_HALF_BAKED
:
702 weapon
= STRANGE_OBJECT
;
703 armor
= STRANGE_OBJECT
;
704 if (rn2(2)) shield
= STRANGE_OBJECT
;
707 case PM_UNDEAD_CHEVALIER
:
711 case PM_UNDEAD_AUGURER
:
712 weapon
= STRANGE_OBJECT
;
715 case PM_UNDEAD_POLITICIAN
:
716 weapon
= STRANGE_OBJECT
;
719 case PM_UNDEAD_UNDERTAKER
:
723 case PM_UNDEAD_ZOOKEEPER
:
726 case PM_CLIMACTERIAL
:
727 case PM_UNDEAD_CLIMACTERIAL
:
728 weapon
= RUBBER_HOSE
;
731 case PM_UNDEAD_WOMANIZER
:
732 weapon
= SEXPLAY_WHIP
;
735 case PM_UNDEAD_FIREFIGHTER
:
739 case PM_UNDEAD_LOCKSMITH
:
744 case PM_UNDEAD_ERDRICK
:
745 case PM_UNDEAD_DQ_SLIME
:
746 weapon
= BATTLE_STAFF
;
749 case PM_UNDEAD_NINJA
:
752 case PM_SPACEWARS_FIGHTER
:
753 case PM_UNDEAD_SPACEWARS_FIGHTER
:
754 weapon
= BLUE_LIGHTSABER
;
756 case PM_CAMPERSTRIKER
:
757 case PM_UNDEAD_CAMPERSTRIKER
:
758 weapon
= GREEN_LIGHTSABER
;
761 case PM_UNDEAD_CARTOMANCER
:
762 weapon
= GREAT_DAGGER
;
764 case PM_DRAGONMASTER
:
765 case PM_UNDEAD_DRAGONMASTER
:
766 weapon
= ELVEN_BROADSWORD
;
769 case PM_UNDEAD_COMBATANT
:
772 case PM_UNDEAD_FJORDE
:
776 case PM_UNDEAD_PRACTICANT
:
777 weapon
= STEEL_CAPPED_SANDAL
;
780 case PM_UNDEAD_EMERA
:
781 weapon
= BULLETPROOF_CHAINWHIP
;
784 case PM_UNDEAD_TOSSER
:
788 case PM_UNDEAD_AKLYST
:
791 case PM_MILL_SWALLOWER
:
792 case PM_UNDEAD_MILL_SWALLOWER
:
793 weapon
= CHEMISTRY_SPACE_AXE
;
796 case PM_UNDEAD_SYMBIANT
:
797 weapon
= ORNATE_MACE
;
799 case PM_GENDERSTARIST
:
800 case PM_UNDEAD_GENDERSTARIST
:
804 case PM_UNDEAD_BUTT_LOVER
:
805 weapon
= SEXPLAY_WHIP
;
808 case PM_UNDEAD_DANCER
:
812 case PM_UNDEAD_DIABLIST
:
813 weapon
= !rn2(3) ? CAMO_QATAR
: !rn2(2) ? VARIED_GRINDER
: CIGARETTE
;
815 case PM_PREVERSIONER
:
816 case PM_UNDEAD_PREVERSIONER
:
817 weapon
= GREAT_DAGGER
;
819 case PM_SECRET_ADVICE_MEMBER
:
820 case PM_UNDEAD_SECRET_ADVICE_MEMBER
:
821 weapon
= SHADOWBLADE
;
823 case PM_SHOE_FETISHIST
:
824 case PM_UNDEAD_SHOE_FETISHIST
:
825 weapon
= PROSTITUTE_SHOE
;
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
;
838 case PM_UNDEAD_RANGER
:
839 if (rn2(2)) weapon
= ELVEN_DAGGER
;
843 weapon
= ELVEN_DAGGER
;
846 case PM_UNDEAD_TWELPH
:
847 weapon
= DARK_ELVEN_DAGGER
;
850 case PM_UNDEAD_GOLDMINER
:
854 case PM_UNDEAD_MIDGET
:
855 weapon
= DWARVISH_MATTOCK
;
858 case PM_UNDEAD_RINGSEEKER
:
859 weapon
= ELVEN_DAGGER
;
862 case PM_UNDEAD_DRUID
:
863 weapon
= BATTLE_STAFF
;
865 case PM_SHAPESHIFTER
:
866 case PM_UNDEAD_SHAPESHIFTER
:
870 case PM_UNDEAD_COURIER
:
874 case PM_UNDEAD_ZYBORG
:
875 weapon
= RED_LIGHTSABER
;
878 case PM_UNDEAD_LUNATIC
:
883 case PM_UNDEAD_PROSTITUTE
:
884 case PM_UNDEAD_KURWA
:
885 weapon
= INKA_SHACKLE
;
887 case PM_TRANSVESTITE
:
888 case PM_UNDEAD_TRANSVESTITE
:
889 weapon
= SEXY_LEATHER_PUMP
;
891 case PM_TRANSSYLVANIAN
:
892 case PM_UNDEAD_TRANSSYLVANIAN
:
893 weapon
= BLOCK_HEELED_COMBAT_BOOT
;
896 case PM_UNDEAD_TOPMODEL
:
900 case PM_UNDEAD_UNBELIEVER
:
901 weapon
= BLACK_AESTIVALIS
;
903 case PM_FAILED_EXISTENCE
:
904 case PM_UNDEAD_FAILED_EXISTENCE
:
908 case PM_UNDEAD_ACTIVISTOR
:
909 weapon
= FLY_SWATTER
;
912 case PM_UNDEAD_ROGUE
:
913 weapon
= SHORT_SWORD
;
914 armor
= LEATHER_ARMOR
;
917 case PM_UNDEAD_SAMURAI
:
918 if (rn2(2)) weapon
= KATANA
;
921 case PM_UNDEAD_TOURIST
:
922 /* Defaults are just fine */
925 case PM_UNDEAD_ROCKER
:
926 weapon
= HEAVY_HAMMER
;
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
);
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
);
943 case PM_ELECTRIC_MAGE
:
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
;
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
;
964 case PM_OCCULT_MASTER
:
965 case PM_UNDEAD_OCCULT_MASTER
:
966 weapon
= COLLUSION_KNIFE
;
969 case PM_ELEMENTALIST
:
970 case PM_UNDEAD_ELEMENTALIST
:
974 case PM_CHAOS_SORCEROR
:
975 case PM_UNDEAD_CHAOS_SORCEROR
:
976 weapon
= IMPACT_STAFF
;
980 case PM_UNDEAD_WILD_TALENT
:
981 weapon
= HEAVY_IRON_BALL
;
988 case PM_UNDEAD_PADAWAN
:
989 case PM_UNDEAD_SHADOW_JEDI
:
991 case PM_UNDEAD_HEDDERJEDI
:
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
;
1012 default: impossible("bad mplayer monster");
1013 weapon
= /*0*/LONG_SWORD
;
1017 if (weapon
!= STRANGE_OBJECT
) {
1018 otmp
= mksobj(weapon
, TRUE
, FALSE
, FALSE
);
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)
1028 (void) mpickobj(mtmp
, otmp
, TRUE
);
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
);
1040 mk_mplayer_armor(mtmp
, rnd_class(REGULAR_GLOVES
,
1041 GAUNTLETS_OF_DEXTERITY
));
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 */
1047 mk_mplayer_armor(mtmp
, rnd_class(HAWAIIAN_SHIRT
, VICTORIAN_UNDERWEAR
));
1048 m_dowear(mtmp
, TRUE
);
1050 quan
= rn2(3) ? rn2(3) : rn2(16);
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. */
1056 mtmp
->mgold
= rn2(1000);
1058 mkmonmoney(mtmp
, rn2(1000));
1062 (void) mpickobj(mtmp
, mkobj(RANDOM_CLASS
, FALSE
, FALSE
), TRUE
);
1063 } else { /* wandering characters... */
1065 mtmp
->mgold
= rn2((mtmp
->m_lev
)*100);
1067 mkmonmoney(mtmp
, rn2((mtmp
->m_lev
)*100));
1072 (void)mongets(mtmp
, rnd_offensive_item(mtmp
));
1073 if (!rn2(100)) (void) mongets(mtmp
, rnd_offensive_item_new(mtmp
));
1077 (void)mongets(mtmp
, rnd_defensive_item(mtmp
));
1078 if (!rn2(100)) (void) mongets(mtmp
, rnd_defensive_item_new(mtmp
));
1082 (void)mongets(mtmp
, rnd_misc_item(mtmp
));
1083 if (!rn2(100)) (void) mongets(mtmp
, rnd_misc_item_new(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.
1098 create_mplayers(num
, special
)
1103 struct monst fakemon
;
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 */
1114 x
= rn1(COLNO
-4, 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
);
1127 create_umplayers(num
, special
)
1132 struct monst fakemon
;
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 */
1143 x
= rn1(COLNO
-4, 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
);
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?",
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)]);