Date: Sun, 23 Aug 92 12:46:13 -0400 From: alvalent@husc.harvard.edu (Alvin Valentine) Subject: RL-L: Anton Misroi, help flesh him out Mordu, a crzy man in Marai's d' Tarascon has a book with this man's story in it. Here's my version. Help me flesh it out or flush it out if you think that it's garbage. PS DOrvinia info will come after af oops after I finish running my scenario there in the first weeks of school. Bye Anton Misroi grew up on a large bayou plantation. His father, Louis Misroi, was a tyrant, and before his death he taught Anton all of the tricks of the trade. Louis, tyrant that he was, always pushed his slaves hard, but as he was interested in turning a profit, he only went so far. Anton, however, had no such obstacle in his path, for his father was quite rich upon his death, and nearly all of the inheritance went to the eldest son, Anton. He would work slaves on little food and water, feeling that those were more expensive than your average slave, and took great delight watching the unforgiving sun scorch the flesh right off the bones of his field workers. By night, the slaves got little rest either. Anton, who was marginally a gentlemen with those of his race and class, took great liberties with the slaves at night. A slave's wife was Anton's woman for the asking, screaming and wailing would do little good, for it only added to Anton's belief that these folk lived and died by his command. Should a man put up a fight, he would be chained up outside near Anton's window to hear the wailing pleas of his wife, and then flayed alive with the whip on the following morning, at times by Anton, but more often by other slaves who Anton would force the task upon with threats of a similar fate. This bread dissension among the ranks, a feeling of powerlessness, and an overwhelming hatred for their master. Anton, was the ultimate task master, driving men to work harder and harder, with less and less rest, until they dropped in the field and were carried away by others when the corpses got in the way of the labor. A steady stream of slaves made watching the slaves in his fields work themselves to the bone, an expensive but enjoyable passtime for the savage. Soon, his demand for slaves rose such that new sources were sought out. An island, a week's journey away was chosen as a likely spot. Soon, his ranks of slaves were filled to overflowing again. One man, though, one X (<- fill in this blank with the name of your choice--see end note), was not one to take slavery so lightly. He had been taken unawares in his sleep, and so for a time felt as bewildered and as defenseless as the others about him. Even after he realized what was happening to him, he succumbed to the whip of Anton Misroi for a time, for fear that any actions he might take, might bring the wrath of the slave owner down upon others though he might escape. When X saw the slave working along side of him cut his own wrists with sharp rocks he found lying in the fields, he realized that these people would rather die than spend one more day in Anton's service. It was later that evening that X took action. His father had been a houngan, a voodoo priest, and although he was not a priest, he had learned the ways of contacting the loa, the spirits which had answered his father before him, and he was boccor (or bocoru), a black magician. Anton's men soon became the subjects of all sorts of horrible, unexplicable accidents upon the plantation. Anton was soon short-handed and took out his anger on his slaves, for he felt certain, that somehow one of them was responsible-- "Maybe one of those damned animals brought some sickness with them from that island," Anton thought to himself. One night, when a slave woman was subjected to Anton's pleasures, she brought back a bit of his hair which she had managed to tear out during their night of pain. It was not long before Anton himself would be not just sick, and the restful peace of death was not a comfort he had in mind for Anton, instead something far more malevolent was brewing in the boccor's mind.. All the he needed was a bit of root that he was sure to find at the edge of the swamp, and their pains were over. Still, Anton had been on his guard, and one of the newest slaves had been promised that his woman would go untouched if he would keep Anton informed about the goings on amongst the slaves. The man sensed something omenous about Anton, purely evil, and as his fear for the slave master grew, his confidence in the likelihood that the boccor's magicks would work on this monster vanished. And so, Anton, who had been suspicious of recent events was forewarned, and on the night when the boccor tried to sneak out of camp, he found Anton and his remaining men waiting for him. Anton's informant had mentioned voodoun a magic the boccor had brought from his island. He had heard of what evil's the boccor had planned for him, and to break the slowly growing morale of his slaves, and further his hold over them, he tortured the boccor over day's until he had revealed his secret's. Anton, did not really take the notion's of these magicks seriously, but thought to himself that if the slaves believed in them, and thought he knew them, he would never see an ounce of rebellion again. As the last of the boccor's secrets slipped from his lips, and the life faded from his hollowed frame, Anton smiled a gamely smile to himself, and wondered if what the man had said might be true. He really did not believe it, he told himself, but what the hell... Even as a storm was raging overhead, he wandered around the edge of the bayou near his plantation, he thought little of the mist that was rolling in, for he had found the root he was looking for. He proceded to use the boccor's own magicks against him, and as the boccor's corpse rose slowly and methodically from it's ground, Anton Misroi stared into the eye's of death and was not afraid. Instead, he smiled, and then laughed out loud for some time, as Ravenloft captured him in it's cold embrace. As he walked outside the barn where he had tortured the boccor, he looked and saw his house was no more, as he looked behind him, the barn he had just exited faded into the Mists. Around him was swamp on all sides, and though uncertain of what was going on, he was not afraid, for he felt as though something in the swamp was calling him. He staggered on and finally came to a plantation, he went up to one of the slaves and asked who was the lord of the manor, and the slave looked bewildered, and answered, "W-why y- you ahr Massah Misroi." He smiled to himself, and realized that he had apparently just inherited a new estate which spanned miles-- Souragne. ------------- Anton Misroi now works his slaves to the bone, literally. He takes great pleasure in working man and beast until they drop, and then making them work some more. Many have described slavery as a kind of hell, a living death; in Souragne, that statement is more than a figure of speech. ------------- Anton is a strikingly handsome man, some 6 and a half feet tall. He is every bit the aristocrat, from the fine black leather riding boots and gloves, to the cravat he wears at his neck. Normally he keeps his hair pulled back, but occasionally lets it down. He has let it grow out quite a bit--the boccor had tried to hold sway over him with a lock of his hair, and now his mane is a a symbol to him, daring those who would test his power to try, and suffer the consequences of their failure. Although he eventually gets bored and discards clothes, companions, beasts, etc., he is fond of the best things in life--fine food, beautiful women, strong beasts (like Nova Vaasan horses named Incubus --all good Dark Lords ride Nova Vaasan horses, right Zigon?), and good drink (namely hot spiced cider, warmed with a scalding hot fireplace poker). Storms are signs of great evil in Souragne: "Death Rides the Rain!" they say. Anton, loves the rain, for it reminds him of the night he gained the power of the boccor. He often rides a large black horse, while wearing black cloak, etc. at full tilt through the streets of Port d'Elhour and infrequently down the Tristepas through Marais d'Tarascon. People shut themselves in, and the streets are empty. He has been known to rip men who dare ride his streets during the storm, right off their saddles, and spirit them away without breaking the stride of his horse. ------------ I leave powers, curse (if any), and stats to you guys. Apparently he has a HUGE network of informants, and has an information network of the likes of Strahd himself. Read Dance of the Dead, and you'll know the man is on the ball. Also, he appears very charismatic, and VERY strong. If zombies have the strength of the damned you can bet Misroi does too. If you doubt, read the description of him dragging away a rider on the streets of Port d'Ehlour in Dance of the Dead. He can, by his own words, under most circumstances, control any zombie in Souragne (although his power has limits under certain circumstances). He should, of course, be familiar with the Dance of the Dead, and use the variant Animate Dead ability of a Zombie Lord (which would allow him to use it on the living). In addition, one might rate him a necromancer, but I fancy that he doesn't cast spells as such usually, though if one follows my description, he knows well how to throw a curse, brew a poison, make magical powders, and, of course, make zombies. My suggestion is that if he be created as a Necromancer, to make him dual-classed, for he appears more the strapping gentleman warrior, than he does a mage. Still, most of his powers should be at will rather than spell-based. If you need a reason for him to be cursed, have the boccor throw a nasty one on him with his dying breath. Also, don't forget to come up with a name for the boccor. Should be Haitian or at worst from Louisiana. I put him in his 20s, or at worst early 30s. He's too studly for anything else. What became of any sisters and brothers he had--who knows? Still a crazy old man named Mordu in Marais d'Tarascon has a book about Anton Misroi, so somebody, a former slave, a relative, etc., must have written it. So a family tree is up to you guys too, OK? Hope you like it, and use it if need be for the Night of the Walking Dead. ------------------------------------------------ Check out GURPS horror if you don't have it already (I don't like GURPS that much, but the source books are usually good and this one is especially so). Check out Witches by Mayfair games. It works with the 2nd ed. PHB. Good stuff. I have a book called (I think) the book on the Book of Fantastic Spells. It includes notes on all tyupes of witchcraft and sorcery. Sorry folks for the lack of a delete key. I found lots of nifty voodoo things in it for your average houngan and boccor in Night of the Walking Dead's vacation wonderland--Souragne. Talk it up folks. Lee ---------------------------------------------- From: alvalent@husc.harvard.edu (Alvin Valentine) Message-Id: <9208250118.AA21017@husc9.harvard.edu> To: rl-list@ais.org Subject: RL-L: Be careful what you wish for Be careful what you wish for, for your what you wish for may come true. Or so the old saying goes. How about a cursed item for you. An item cursed all to hell, literally. A short story by Robert Louis Stevenson entitled the Bottled Imp or something of the sort was a recent reading of mine. WOW!! Cool stuff. An imp, with the power to grant your every wish in a fancy, unbreakable, porcelain decanter. You must buy it from the previous owner with COINED MONEY, but he can only sell it for less than he paid for it. If he tries to sell it for what he bought it for or more, the cash and the bottle switch places when you're not looking. If you try to get rid of it any other way it comes back to haunt you. Anyone who dies with it in their possession goes straight to hell (and thus the guy who buys it for 1 penny, let's say, gets stuck with the goods). Sometimes the imp fulfills the wishes in an undesirable way a la the Monkey's Paw, but usually it does what you ask for (otherwise no one would want the damned thing). Still bad things will befall you after you get rid of it if you're not satisfied with what you have. If you strive for more--BAM!!--bad things happen and you wish you hadn't sold it. Of course, if you try to get it back, you have to get it back at a price less than you sold it for, and as the thing has the "keep me and go to hell" curse on it, it passes hands many times, causing someone seeking it to go on a wild goose chase after it. People like Napoleon conquered the globe with it in their possession, but we all know what happened to Napoleon after he got rid of the bottle and was not pleased with what he had and decided to go for more. Capt. Cook, had many a successful sea voyage, but after he got rid of it, he tried to take Hawaii (the story's setting, YEAH!! from those of us with Hawaiian heritage, we get Gothics too), and died there. A man gets it, wishes for a grand house, and disposes of it. It passes through many hands while it is away from him. One day he spies a beautiful girl that he'd like to marry and who wanted to marry him (he was unsatisfied living in the grand house all alone---DOOM!!!). Soon, before their marriage, he found he had leprosy and would never be with his beloved. He felt that he'd braved hell for a house and ought to brave it so that he could marry his beloved. Trouble is, when he finally tracks it down, the last guy who bought it, bought it for 2 cents. That means if he buys it, he's stuck and damned all to hell, literally. He does it for love of the girl, but she is dismayed, for he was such a happy man before their marriage, but because of her (so she thinks) life is bad for him. After much time he finally breaks down and tells her that he sold his soul for her and is doomed to the flames of hell. She informs him that the United States is not the only nation in the world, and that the French centime is 5 to a penny. Trouble is the coin is hard to come by in those days in Hawaii. Still they manage to get 5 centimes. Now he finds the other difficulty. The first time he bought it, he bought it for $50. Try to sell such a nice decanter for such little money and no one wants to buy it. They are sure there is something wrong with it or when told the curse, they're sure they won't be able to sell it. Also, no one in Hawaii carries around lots of centimes in their pocket. In short, he's doomed. One day his wife decides, that if they can't sell it, she should be willing to damn herself for a man who loves her so. Still, she knows he'd never sell it to her (he'd never damn her), so she talks a sweet old man into buying it for 4 centimes and then selling it to her for 3 centimes. Her husband rejoices, and says he cares little for the silly old man's fate. She chastises him weepingly and he accuses her of betrayal, for caring so little about her husband, and he goes out carousing. When he needs more money, he comes back home and looks in a foot locker and spies the bottle and at first thinks that maybe something went wrong during the sale and the bottle boomeranged. Then he realizes what happened and he apologizes to her and leaves, saying he knows someone who'll buy it. Outside is a sailor he's been telling tall tales about said flask to all eve. He begs the man (who really doesn't believe the tales) to buy the flask off his wife (who'd surely never sell it to her husband direct, see a trend), make a wish if he'd like, and then sell it back to him for 1 centime, damning him again. The sailor gets the flask, and makes a wish and is shocked to see it work. He decides his carousing buddy must be hiding something, for the flask works great, it's the best thing he's ever found. Plus, the sailor adds, he's done enough carousing and brawling in his day that he's bound for hell anyway. Might as well enjoy life this time around. He carries off the bottled imp, and our fair couple lives in a beatiful home happily ever after, and far wiser for the experience. Well folks, there's my tale, or rater Stevenson's. Hope you use it in good health (and stay away from the bottle, ye hear!). >:) If you have a good group of role-players with NPCs they're fond of (or if 2+ are exceedingly fond of each other, drop this on 'em when their in a bind, and make it difficult to get rid of. Make 'em sweat. Even if they tell you they're not worried, 'cause they know they cannot ever be taken away from Ravenloft, tell them that only necessarily applies to their body, their disembodied soul might well be free to be devoured and tormented by our friendly neighborhood fiend. HA HA! Being evil is great, eh? Well, not really. Take care campers Bye for now. Lee Shawn, Zigon, wake these dead folks up. Fluffy, Andy. Help. By the way. FLUFFY, thanks for the contribution to the Ravenloft fund. If think ooops if things go well, our list will be receiving it's new home for always and always by the end of Sept. Thanks Fluff-monster. You will receive the official Vistani Evil Eye award for conduct above and beneath the cl call of duty. Beneath? Gotta dig a few graves to keep this list alive or bury those who've seemingly died, eh? Thanks to Rod and Jeff. To all, Jeff is working over time adding new members and such whilst I telnet in from Puerto Rico. Jeff, you are a real man!! To our netters who've not been sucked off the map by the Mists, those who post still and make me think the list is alive even though all have gone who for summer break--a decayed thumbs up!! >From a Ravenlofter lost in the Mists of the Domain of Puerto Rico: LIve long and SUFFER!!! Mwuhawtrhawrhawr!!! zee you later Lee ------------------------------------------------ From Z_COOLIDGEJS@CCSVAX.SFASU.EDU Tue Aug 18 12:57:22 1992 Subject: RL-L: A voice in the mists Yes, someone besides Lee, Lord of the Dark Powers, is actually posting. RISE FROM YOUR GRAVES, DUNGEON MASTERS! (Doesn't that sound demonic or something?) I wanted to mention that I have recently read about yet another case of someone losing his head with role playing games. It pains me to think that there are people out there who use role playing games, particularly our alma mater (Advanced) Dungeons and Dragons as an excuse to commit cruel acts of murder or Satanic rituals. No doubt, many of these RPG abusers use Ravenloft material, because, let's face it--Ravenloft deals with evil on a far more intimate level than the other campaigns. I can hardly see a group of evil cultists using Forgotten Realms material. I don't think any of us on the list does, so I wanted to take a moment to discuss my feelings. These looneys are giving RPGs an unwarrented bad name. Role Playing Games in their proper place are great entertainment, a source of good ideas, and can even have practical psychological applications. I hate it that so many people must associate them instead with evil cults and insane murders. Ravenloft could be next. Perhaps it has already been used. It is possible that Ravenloft has been saved only by the media's tendency to generalize ("Dungeons and Dragons" to refer to D&D, AD&D, and a host of other fantasy RPGs), at least as far as the public eye goes. Any suggestions as to what to do to let the media know that there are good sides to RPGs? Another observation I have made is that some people, particularly younger gamers, miss the point of Ravenloft. RL has gained a notoriety among gamers as a place of dread. But it is not just a game with a sadistic DM. There is a certain style about the game--it is built around frightening events and terrifying encounters. But it is not just a game about a DM thinking of new ways to be mean. (OK, maybe a little bit. But not that much!) I am curious; how does each of you handle your Ravenloft campaign? Do you try to follow the overall scheme of subtle terror? Do you play it as a modified AD&D and still have treasure seekers? Is the goal of the campaign to rule, escape, win, or just survive? Or do you go for a more Lovecraftian "Sooner or later we're all screwed" feel? How about a party that doesn't really think about Ravenloft as anything unusual (like Van Richten, who was born there, or anyone who has lived in Darkon long enough to have been born there)? And now to stab myself in the back, let us proceed on discussing ways of scaring players to death. ------------------------------ From albert@crick.ssctr.bcm.tmc.edu Tue Aug 18 14:28:01 1992 Subject: Re: RL-L: A voice in the mists > It pains me to think that there are people out there who use role > playing games, particularly our alma mater (Advanced) Dungeons and Dragons as > an excuse to commit cruel acts of murder or Satanic rituals. No doubt, many of > these RPG abusers use Ravenloft material, because, let's face it--Ravenloft > deals with evil on a far more intimate level than the other campaigns. I can > hardly see a group of evil cultists using Forgotten Realms material. I don't > think any of us on the list does, so I wanted to take a moment to discuss my > feelings. These looneys are giving RPGs an unwarrented bad name. Role Playing > Games in their proper place are great entertainment, a source of good ideas, > and can even have practical psychological applications. I hate it that so many > people must associate them instead with evil cults and insane murders. Yeah, the fundies could easily take a look at D&D and go nuts. But there are much easier targets. (Vampire, for one. They'd LOVE that.) Anyway, T$R has always been _very_ careful to avoid putting exact decriptions of the nasty rituals or tortures that the Evil people of Ravenloft commit. (I heard "somewhere" that TSR puts that explictly in their rules for module design.) Ravenloft is no more in danger from the fundies than the rest of D&D. (which is to say, not much. Their threat shouldn't be ignored, but it's not that bad.) What sections of Ravenloft would especially snark "them" off. Most of the evil acts are committed by cursed, damned creatures, who are eternally damned for their evil actions. Heck, they even have parts about if the PC's act evil, they too would eventually be damned as well, and no longer PC's. While, I thumb my nose at T$R for bowing to pressure and calling demons and devils "Tanari" or something silly like that, they're very good about not putting descriptions of actual spellcasting or occult stuff in there. Loonies will alwats ruin fun things for those that can handle it maturely. That's why I skin them alive and feed them to my my pet vampire bats. ;-> (for the huomr impaired) -- From us0d+@andrew.cmu.edu Wed Aug 19 12:48:33 1992 From tellab5!yclept!eternal!jgostin@clout.chi.il.us Thu Aug 20 03:33:29 1992 Subject: Re: Are you all alive? *GASP* Someone has actually escaped the mists!! :-) Here's an interesting question that I wasnt entirely sure about, and figured this is the place to ask. 1. Would you consider teleportation via the mists as a conjuration, summoning, or similiar dweomer? Assuming #1 to be true: 2. Could one be Abjured back to their home plane? Keep in mind, Ravenloft is a Demi-Plane in its own right. 3. What would this do for Paladins protection from evil ability? Paladins have PfE which protects them from, if I remember correctly, conjured/summoned nastiness. If this is true, and there some nasty, not-of-ravenloft, evil nasties, would the Paladin be immune from their melee attacks? (10' radius) Just wondering what all of you think. I might let the mists count as a conjuration, unless the party was pulling a hose, and trying to weasel out of the adventure-- In that case, I wouldn't let it work... :-) Jeff ------------------------- From @CUNYVM.CUNY.EDU:STUPAYNE@EKU.BITNET Thu Aug 20 10:05:21 1992 --------------------------- From @pucc.Princeton.EDU:NCCUT132@TWNMOE10.BITNET Thu Aug 20 23:42:39 1992 Subject: DM Aides, Computer Programs Hail Eris, All You Horrific Folks: Oh stalwarts, mages, and the likes . . . I am trying to put together some sort of helpful listing of NETable {and other} resources for DM/GM Computer Aides . . . so if you know of any good programs, please-please- please let me know. So far, I've been given a couple good FTP sites and program descriptions, but mostly just requests for the list when I get it done. Please . . . send more info . . . and fewer requests (don't worry - - when I've a sizeable enough listing, I'll post the sucker - - hopefully, the list will grow enough to justify regular updates too). I must thank those who've given me help thus far . . . it is appreciated, now give me MORE! While locations of FTP Sites are useful, I really don't have the time, wherewithal, or resources to FTP to every site myself AND walk through the maze of directories AND download AND test every program (besides, I can't test any of the Mac stuff at all). End of aside - - back to business: What I'm really interested in is a listing of PROGRAMS available on the NET. I'm thinking along the lines of something like some of the MUD-type FAQs which list the name of the program, describes its function (with perhaps tips on how its employed), the file name, and where it can be gotten {FTP site(s), Mailservers, individual NET people, companies [although, we don't want this to be advertising...besides most of people seem to be more especially interested in FREEWARE], or whatever}. Be sure to note the Computer-Platform/Operating- System along with the Game System (although my own interests run pretty much along AD&D lines, I'll be happy to include other gaming systems in the list). Don't just think in terms of Monster-Character-Dragon-NPC-Whatever- Generators {albeit these are avidly sought after}, but think in terms of whatever helps you . . . mapping aides, character data-bases, spell sorters, sound effects programs, whatever-gets-you-goin'-is okay. A sample entry might (and does) look like this: PROGRAM NAME: "Genesis" [initial] {@1992} GAME SYSTEM: Advanced Dungeons and Dragons (2) AUTHOR (if known): Cpt. Goodnight FUNCTION: Character Generator OPERATING SYSTEM(s): IBM (DOS), Amiga PRICE: Freeware (this version, see below for conditions) COMMENTS: Generates any standard 2nd Ed. character class, straight or multi-class, restricted to 1-20th level. Also, it will generate 1st. Ed. UNEARTHED ARCANA Cavaliers and Barbarians (but no thief-acrobats). No race restrictions for class (so dwarven paladins are possible). Can use both random or menu selection options. Strictly utilitarian (no bells and whistles). The author would appreciate E-Mail feedback from users regarding bugs and\or suggestions (including a new name for the beastie). He can be reached on the NET at avatar@socs.uts.edu.au. FILE(s): acg.readme & acgdist.lzh SOURCE(s): Available via FTP. greyhawk.stanford.edu in /D_D/incoming Soooo . . . if you've a favo-super-favorite program out there which you feel others might benefit from, don't be bashful . . . just zap me a bit of poetic electronic brilliance with some info on the sucker and I'll try to get it in "The List" - - to be posted whenever I've a decent enough number of entries to make it worth everyone's while (or sooner, if I don't get much of anything). Of course, you can also post the info individually to the list if you want to hear people's reactions to the same program (kind of a "What-do-y'all- think-of-this'n?" posting). That's fine too (I can snarf up the data that way too -- but ideally you would e-mail me a copy too so I'm sure to get the beastie). Okay . . . enough said. Peace be with y'all, and . . . All Hail Discordia, Brian David Phillips Meiguo Langren Zai Taibei NCCUT132@TWNMOE10.BITNET {An American Werewolf in Taipei} NCCUT132@TWNMOE10.EDU.TW ------------------------------ From: blackman@acsu.buffalo.edu (Cancholech) Subject: Re: DM Aides, Computer Programs there used to be a really good copy of a C program for random character generation on the net somewhere. I have a copy that has been eaten somewhat, but I will see if i can get it to work again if anyone is interested. darkling ----------------------------- From blackman@acsu.buffalo.edu Fri Aug 21 00:06:22 1992 Subject: Re: DM Aides, Computer Programs Guess what i found the file... and i fixed the problem. My new word of advice is : Don't try to fix something that is written in a language you don't know. Well here is the C file. /* program by Jeff Standish * primary version written May, 1991 * * (it may be possible to reach me at standish@mentor.cc.purdue.edu, * depending upon which semesters the account is active, no promises) * * This program generates AD&D characters. Compiler it and run it, * the 'usage' statement should be sufficiently coherent enough to * tell you what to enter to get it to do what you want it to. * * Any suggestions are welcome. * * Note that the settings for monks are for either the monks out of * the Players Handbook, or for the ones from Dragon Magazine (Best * of, Vol III). * */ #include #include #include #define Strength 0 #define Intelligence 1 #define Wisdom 2 #define Dexterity 3 #define Constitution 4 #define Charisma 5 #define Comeliness 6 #define Excep_Str 7 #define Hit_Points 8 #define Race 9 #define DemiPercent 20 /* % of NPC's who are demi-humans, should be 20 */ #define MonkLevel 17 /* max level for monks, 17 normal or 21 Dragon */ #define MonkHitDice 4 /* hit dice for monks, 4 normal or 6 Dragon Mgz */ /* random character level for given level of dungeon */ static int donjon[16][20] = { { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3 }, /* 1 */ { 1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,4,5 }, { 1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,4,5 }, { 1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,4,5,6 }, { 1,1,1,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,7 }, /* 5 */ { 1,1,2,2,3,3,4,4,4,4,4,4,5,5,5,5,6,6,7,8 }, { 1,2,2,3,3,4,4,4,4,4,5,5,5,5,6,6,7,7,8,9 }, { 1,2,3,3,4,4,4,5,5,5,6,6,6,6,7,7,8,8,9,10 }, { 1,2,3,4,4,5,5,5,6,6,6,6,7,7,7,8,8,9,9,10 }, { 1,2,3,4,5,5,6,6,6,7,7,7,8,8,8,9,9,9,9,10 }, /* 10 */ { 1,2,3,4,5,5,6,6,6,7,7,7,8,8,8,9,9,9,9,10 }, { 1,2,3,4,5,6,6,7,7,8,8,8,9,9,9,9,9,9,10,10 }, { 1,2,3,4,5,6,6,7,7,8,8,8,9,9,9,9,9,9,10,10 }, { 1,2,3,4,5,6,7,7,8,8,8,9,9,9,9,9,9,10,10,10 }, { 1,2,3,4,5,6,7,7,8,8,8,9,9,9,9,9,9,10,10,10 }, /* 15 */ { 1,2,3,4,5,6,7,8,8,8,9,9,9,9,9,9,10,10,10,10 } }; /* comeliness bonues due to charisma */ static int come_bonus[19] = {-5,-5,-5,-5,-3,-3,-1,-1,-1,0,0,0,0,1,1,1,2,2,3}; /* size of die to roll for hit points */ static int hit_dice[12] = {8,8,10,12,10,10,8,4,4,6,6,MonkHitDice}; /* bonus hit points gained per level when reach title level */ static int hit_bonus[12] = {2,2,3,4,3,3,2,1,1,2,1,1}; /* minimum number of hit points rolled on the dice */ static int min_hit[12] = {3,3,4,4,4,4,3,2,2,3,3,3}; /* level at which reach max number of hit dice */ static int max_hit_dice[12] = {9,14,9,8,10,9,11,11,10,10,15,MonkLevel}; /* hit point bonus from constitution */ static int con_bonus[20] = {-3,-2,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5}; /* maximum level character class can achieve */ static int max_level[12] = {0,23,0,0,0,0,0,0,0,0,15,MonkLevel}; /* numbers of single classes for multi-classed characters, for purposes of rolling hit points */ static int multi_hd[11][2] = { { 0,10 }, { 0,2 }, { 0,7 }, { 0,6 }, { 0,9 }, { 2,10 }, { 2,8 }, { 2,7 }, { 2,9 }, { 8,9 }, { 7,9 } }; /* mimimum ability scores for classes, does not include comeliness */ static int min_ability[23][6] = { { 5,5,9,3,5,5 }, { 5,5,12,5,5,15 }, { 9,3,5,5,7,5 }, { 15,3,5,14,15,5 }, { 15,10,10,15,15,5 }, { 12,9,13,5,9,17 }, { 13,13,14,5,14,5 }, { 3,9,5,6,5,5 }, { 5,15,5,16,3,5 }, { 5,5,3,9,5,5 }, { 12,11,5,12,5,3 }, { 15,5,15,15,11,5 }, { 12,11,9,12,5,5 }, { 9,5,9,5,7,5 }, { 5,9,9,6,5,5 }, { 13,13,14,5,14,5 }, { 5,5,9,9,5,5 }, { 12,11,5,12,7,5 }, { 9,15,5,16,7,5 }, { 9,9,5,6,7,5 }, { 9,5,5,9,7,5 }, { 5,15,5,16,5,5 }, { 5,9,5,9,5,5 } }; /* maximum exeptional strength by race */ static int max_x_str[7] = { 99,75,50,90,0,99,100 }; /* names of races */ static char *races[7] = { "Dwarf", "Elf", "Gnome", "Half-Elf", "Halfling", "Half-Orc", "Human" }; /* abbreviated names of races */ static char *race_abrev[7] = { "D ", "E ", "G ", "HE", "Hl", "HO", "Hu" }; /* minimum racial ability scores, not including comeliness */ static int race_min[7][6] = { { 8,3,3,3,12,3 }, { 3,8,3,7,6,8 }, { 6,7,3,3,8,3 }, { 3,4,3,6,6,3 }, { 6,6,3,8,10,3 }, { 6,3,3,3,13,3 }, { 3,3,3,3,3,3 } }; /* maximum racial ability scores, not including comeliness */ static int race_max[7][6] = { { 18,18,18,17,19,16 }, { 18,18,18,19,18,18 }, { 18,18,18,18,18,18 }, { 18,18,18,18,18,18 }, { 17,18,17,18,19,18 }, { 18,17,14,17,19,12 }, { 18,18,18,18,18,18 } }; /* racial ability bonuses/penalties, includes comeliness */ static int race_bonus[7][7] = { { 0,0,0,0,1,-1,-1 }, { 0,0,0,1,-1,0,2 }, { 0,0,0,0,0,0,-1 }, { 0,0,0,0,0,0,1 }, { -1,0,0,1,0,0,0 }, { 1,0,0,0,1,-2,-3 }, { 0,0,0,0,0,0,0 } }; /* names of character classes */ static char *class_name[23] = { "Cleric", "Druid", "Fighter", "Barbarian", "Cavalier", "Paladin", "Ranger", "Magic-user", "Illusionist", "Thief", "Assassin", "Martial artist (Monk)", "Cleric/Assassin", "Cleric/Fighter", "Cleric/Magic-User", "Cleric/Ranger", "Cleric/Thief", "Fighter/Assassin", "Fighter/Illusionist", "Fighter/Magic-User", "Fighter/Thief", "Illusionist/Thief", "Magic-User/Thief" }; /* abbreviations for character classes */ static char *class_abrev[23] = { "Clrc", "Drid", "Fght", "Brbn", "Cvlr", "Pldn", "Rngr", "Mage", "Ilsn", "Thif", "Assn", "Monk", "C/A ", "C/F ", "C/MU", "C/R ", "C/T ", "F/A ", "F/I ", "F/MU", "F/T ", "I/T ", "MU/T" }; /* list of true/false values for whether or not characters of a given class can have exceptional strength */ static int is_exp_str[23] = { 0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0 }; /* which random magic table does character class roll on? */ static int class_magic[23] = { 0,0,1,1,1,1,1,2,2,3,3,4,0,1,2,1,0,1,2,2,1,2,2 }; /* number of dice to roll for a abilites scores, by class */ static int die_num[23][7] = { { 7,4,9,5,8,6,3 }, { 7,4,8,5,6,9,3 }, { 9,3,5,7,8,6,4 }, { 9,3,5,7,8,6,4 }, { 8,6,4,7,9,3,5 }, { 7,5,8,3,6,9,4 }, { 7,6,8,5,9,4,3 }, { 4,9,7,8,6,5,3 }, { 3,8,7,9,5,6,4 }, { 6,5,3,9,7,4,8 }, { 6,7,4,9,8,3,5 }, { 7,5,9,8,6,4,3 }, { 6,5,7,8,9,4,3 }, { 9,4,7,6,8,5,3 }, { 5,7,9,6,8,4,3 }, { 7,5,8,6,9,4,3 }, { 7,3,6,8,9,5,4 }, { 7,6,5,9,8,4,3 }, { 7,5,6,9,8,4,3 }, { 7,6,5,9,8,4,3 }, { 8,4,3,9,7,6,5 }, { 3,8,5,9,7,4,6 }, { 6,8,5,9,7,3,4 } }; /* for each demi-human race, which single-class classes can a character have? */ static int demisingle[6][12] = { { 1,0,1,0,0,0,0,0,0,1,1,0 }, { 1,1,1,0,1,0,1,1,0,1,1,0 }, { 1,0,1,0,0,0,0,0,1,1,1,0 }, { 1,1,1,0,1,1,1,1,0,1,1,0 }, { 1,1,1,0,0,0,0,0,0,1,0,0 }, { 1,0,1,0,0,0,0,0,0,1,1,0 } }; /* listing of multi-class classes that demi-human can have, first number is chance of being multi-classed, second number is number of possible classes, and following numbers are numbers of multi-class classes can be */ static int demiclass[6][8] = { { 15, 2,12,20 }, { 85, 3,19,20,22 }, { 25, 3,18,20,21 }, { 85, 6,13,14,15,19,20,22 }, { 10, 1,20 }, { 50, 5,12,13,16,17,20 } }; /* by level, grouped in four pairs, the first number of the pair if the chance of having an item from that group, and the second number is the number of items that will have from the group */ static int items_level[13][8] = { { 10,1, 0,0, 0,0, 0,0 }, { 20,2, 0,0, 0,0, 0,0 }, { 30,2, 10,1, 0,0, 0,0 }, { 40,2, 20,1, 0,0, 0,0 }, { 50,2, 30,1, 0,0, 0,0 }, { 60,3, 40,2, 0,0, 0,0 }, { 70,3, 50,2, 10,1, 0,0 }, { 80,3, 60,2, 20,1, 0,0 }, { 90,3, 70,2, 30,1, 0,0 }, { 100,3, 80,2, 40,1, 0,0 }, { 100,3, 90,2, 50,1, 10,1 }, { 100,3, 100,2, 60,1, 20,1 }, { 100,3, 100,2, 100,1, 60,1 } }; /* random magic items for clerics, first number is number of items that are possible, and the following numbers are the numbers of the items on the lists of magic items below */ static int cleric_magic[4][21] = { { 14, 1, 2, 3, 4, 6, 8, 9,10,11,12,13,14,15,20 }, { 14, 1, 2, 3, 4, 6, 7, 8, 9,10,11,13,14,15,16 }, { 14, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,15 }, { 8, 1, 2, 3, 5, 7, 8, 9,10 } }; static int fighter_magic[4][21] = { { 18, 1, 2, 3, 4, 5, 6, 7,10,11,12,13,14,15,16,17,18,19,20 }, { 13, 2, 3, 6, 7, 8, 9,10,11,12,13,14,15,16 }, { 15, 1, 2, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16 }, { 8, 1, 2, 3, 5, 7,10,11,12 } }; static int mage_magic[4][21] = { { 11, 1, 2, 3, 4, 6, 8, 9,10,11,12,18 }, { 11, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11 }, { 10, 1, 2, 3, 4, 5, 6, 7, 9,10,11 }, { 7, 1, 2, 4, 5, 6, 7, 8 } }; static int thief_magic[4][21] = { { 14, 1, 2, 3, 4, 6, 8, 9,10,11,12,13,15,16,18 }, { 9, 2, 3, 6, 7, 8, 9,10,11,15 }, { 11, 1, 2, 4, 5, 6, 7, 8, 9,10,11,14 }, { 6, 1, 2, 5, 7,11,12 } }; static int monk_magic[4][21] = { { 12, 1, 2, 3, 4, 6,10,11,12,15,17,18,19 }, { 10, 2, 3, 6, 7, 8, 9,10,11,12,15 }, { 12, 1, 2, 4, 5, 6, 7, 8, 9,10,11,14,16 }, { 5, 1, 2, 5, 7,11 } }; /* first group of magic items */ static char *magic_I[20] = { "2 potions: climbing, flying", "2 potions: extra-healing, polymorph (self)", "2 potions: fire resistance, speed", "2 potions: healing, giant strength", "2 potions: heroism, invulnerability", "2 potions: human control, levitation", "2 potions: super-heroism, animal control", "1 scroll: 1 spell, level 1-6", "1 scroll: 2 spells, level 1-4", "1 scroll: protection from magic", "ring of mammal control", "ring of protection +1", "leather armor +1", "shield +1", "sword +1", "10 arrows +1", "4 bolts +2", "dagger +1", "javelin +2", "mace +1" }; /* second group of magic items */ static char *magic_II[16] = { "1 scroll: 3 spells, level 2-9 or 2-7", "2 rings: fire resistance, invisibility", "ring of protection +3", "staff of striking", "wand of illusion", "wand of negation", "bracers of defense, armor class 4", "broach of shielding", "cloak of elvenkind", "dust of disappearance", "1 figurine of wondrous power: serpentine owl", "3 javelins of lightning", "chainmail +1, shield +2", "splint mail +3", "sword +3", "crossbow of speed, hammer +2" }; /* third group of magic items */ static char *magic_III[16] = { "ring of spell storing", "rod of cancellation", "staff of the serpent -- python or adder", "bag of tricks", "boots of speed", "boots of striding and leaping", "cloak of displacement", "gauntlets of ogre power", "pipe of sewers", "robe of blending", "2 ropes: climbing, entanglement", "plate mail +2, shield +2", "shield +4", "sword +4 (25% special type)", "mace +3", "spear +3" }; /* fourth group of magic items */ static char *magic_IV[12] = { "ring of djinni summoning", "ring of spell turning", "rod of smiting", "wand of fire", "cube of force", "eyes of charming", "horn of Valhalla", "robe of scintillating colors", "talisman of ultimate evil or pure good", "plate mail +4, shield +3", "sword (special type)", "1 arrow of slaying" }; /* grouping of some messages to cut out bunch of printf statements */ static char *messages[22] = { "Random AD&D NPC generator, by Jeff Standish", "", "This program produces a file called \"npcs\" which contains several", "randomly generated NPC's. It will create a random NPC party for a", "given level of a dungeon, or it will roll up a number of random NPC's.", "", "Here are the currently existing character classes and chances of occurring.", " a) 17% Cleric", " b) 3% Druid", " c) 27% Fighter", " d) 2% Barbarian", " e) 4% Cavalier", " f) 1% Paladin", " g) 7% Ranger", " h) 14% Magic-User", " i) 6% Illusionist", " j) 16% Thief", " k) 2% Assassin", " l) 1% Martial Artist (Monk)", "", "Race is limited to Humans. Enter the letters of the desired character", "classes to be used in the generation, and hit when done." }; /************************************************************************ ************************************************************************/ main (argc, argv) int argc; char *argv[]; { int i; FILE *fopen(), *outfile; /* seed random generator, may require system dependant command if time(0) does not work, or might need to use a scanf to get seed */ srand(time(0)); /* print out header message */ for (i = 0; i < 6; ++i) printf("%s\n", messages[i]); /* if not enough arguments, print usage statement */ if (argc < 2) usage(argv); else { /* open output file and call corrent function for generation */ outfile = fopen("npcs", "w"); if ((!strcmp(argv[1], "R")) || (!strcmp(argv[1], "r"))) rand_npc(outfile, atoi(argv[2]), atoi(argv[3])); else if ((!strcmp(argv[1], "P")) || (!strcmp(argv[1], "p"))) npc_party(outfile, atoi(argv[2])); else usage(argv); fclose(outfile); } } /************************************************************************ * usage() - prints the usage statement ************************************************************************/ usage(argv) char *argv[]; { printf("Usage: %s [r l n] or [p l]\n", argv[0]); printf(" r indicates random generate of NPC's, where 'l' is their\n"); printf(" level (0 results in random levels), and 'n' is the number\n"); printf(" of NPC's to generate\n"); printf(" p indicates NPC party, appearing on dungeon level 'l'\n"); } /************************************************************************ * rand_npc() - generate a given number of characters * * lvl - level of all characters, zero results in random levels * num - number of characters to generate ************************************************************************/ rand_npc(outfile, lvl, num) FILE *outfile; int lvl, num; { int char_lvl, i, j, clas, abilities[10], classes[12], human=0; char c, stg[100]; /* check to see if want to use all character classes */ printf("Use all available character classes [Y/n]? "); /* in order to get a char, will need to get a string and check its first character, since some systems will not pick up a char with getchar until hit , which messes up input stream when have to bother with considering it a return follows */ gets(stg); c = stg[0]; /* if don't want to use all classes, indicate that only using humans and go and read in all of the classes desired */ if ((c == 'n') || (c == 'N')) { human = 1; read_classes(classes); } /* otherwise just indicate that all single classes are valid */ else for (i = 0; i < 12; ++i) classes[i] = 1; /* reset number of characters if is too huge to allow for possible constraints on the size of the output file */ if (num > 1000) num = 1000; /* if negative level, reset it as zero to default to random levels */ if (lvl < 0) lvl = 0; fprintf(outfile, "Class Lvl Race HP Str Int Wis Dex Con Chr Com\n"); fprintf(outfile, "--------------------------------------------------\n"); /* main loop for individual character generation */ for (i = 0; i < num; ++i) { /* if level is non-zero, set the character's level to level */ if (lvl) char_lvl = lvl; /* else randomly generate a level in range 1-16 */ else { j = die_roll(10); /* weighted probability of low level characters */ if (j < 6) char_lvl = die_roll(5); else if (j < 9) char_lvl = die_roll(5) + 5; else char_lvl = die_roll(6) + 10; } /* if explicitly human, make character human, else go and randomly select a race */ if (human) abilities[Race] = 6; else abilities[Race] = set_race(); /* randomly select a class by given list of possible classes and individual character's race */ clas = set_class(abilities[Race], classes); /* is single-classed, allow for maximum level of certain classes */ if (clas < 12) if ((char_lvl > max_level[clas]) && (max_level[clas] != 0)) char_lvl = max_level[clas]; /* roll the character's ability scores and then print him out */ roll_ability(abilities, clas, char_lvl); show_npc(abilities, clas, char_lvl, outfile); } } /************************************************************************ * read_classes() - read in the classes to include in character generation * when user decides to not use all possible classes ************************************************************************/ read_classes(classes) int classes[]; { int i, j, done; char c, claz[100]; /* initialize array of classes to false */ for (i = 0; i < 12; ++i) classes[i] = 0; /* print instructions */ for (i = 6; i < 22; ++i) printf("%s\n", messages[i]); /* repeat until get a valid list of characters to use */ do { /* read in a string of letters */ gets(claz); done = 0; /* go trough the letters and for valid letter of a class, add that class to the list of possible classes to use */ for (i = 0; i < strlen(claz); ++i) { /* get the letter, make sure is lower case, and add the class to the list of desired classes, or error if bad */ c = claz[i]; if (isupper(c)) c = c + 32; if ((c >= 'a') && (c <= 'l')) { j = c - 'a'; classes[j] = 1; printf("Class %s added to list.\n", class_name[j]); ++done; } else printf("Class \"%c\" unknown.\n", c); } /* done = number of selected classes, error if zero */ if (done == 0) printf("Must choose at least one class.\n"); } while (done == 0); } /************************************************************************ * npc_party() - generate a random dungeon adventuring party * * dungeon_lvl - level of dungeon upon which the party is encountered ************************************************************************/ npc_party(outfile, dungeon_lvl) FILE *outfile; int dungeon_lvl; { int char_lvl, abilities[10], clas, num_of_chars, i, classes[12]; /* indicate that all possible single-classes are to be considered */ for (i = 0; i < 12; ++i) classes[i] = 1; /* make sure is valid dungeon level */ if (dungeon_lvl < 1) dungeon_lvl = 1; /* characters on the first five levels have a level = dungeon level */ if (dungeon_lvl <= 5) { char_lvl = find_level(dungeon_lvl); if (dungeon_lvl > char_lvl) char_lvl = dungeon_lvl; } /* else randomly select a high level, and adjust it */ else { char_lvl = die_roll(6) + 6; if (char_lvl > dungeon_lvl) --char_lvl; else if (char_lvl < dungeon_lvl) ++char_lvl; } /* determine number of characters in the party */ num_of_chars = die_roll(4) + 1; /* print out header message to output file */ fprintf(outfile, "Random NPC party for dungeon level %d\n", dungeon_lvl); /* generate all of the characters in the party */ for (i = 0; i < num_of_chars; ++i) { fprintf(outfile, "\n"); /* select a race, select a class, make sure character does not exceed maximum level for certain classes */ abilities[Race] = set_race(); clas = set_class(abilities[Race], classes); if (clas < 12) if ((char_lvl > max_level[clas]) && (max_level[clas] != 0)) char_lvl = max_level[clas]; /* generate abilites and print out the character */ roll_ability(abilities, clas, char_lvl); show_abilities(abilities, clas, char_lvl, outfile); } } /************************************************************************ * find_level() - given the level of the dungeon, generate the level of * the character party encountered on the level ************************************************************************/ int find_level(dungeon_level) int dungeon_level; { /* if level of dungeon is too large for look-up table, use the deepest level listed */ if (dungeon_level > 16) dungeon_level = 16; /* randomly determine the level of the party and return it */ return (donjon[dungeon_level - 1][die_roll(20) - 1]); } /************************************************************************ * die_roll() - simple function to roll one die of the given size ************************************************************************/ int die_roll(size) int size; { return ((rand() % size) + 1); } /************************************************************************ * set_race() - randomly select the race of a character ************************************************************************/ int set_race() { int i, rac; rac = 6; /* the chance of the NPC being a demi-human */ if (die_roll(100) <= DemiPercent) { i = die_roll(100); if (i <= 25) rac = 0; else if (i <= 50) rac = 1; else if (i <= 60) rac = 2; else if (i <= 85) rac = 3; else if (i <= 95) rac = 4; else rac = 5; } return(rac); } /************************************************************************ * set_class() - randomly select the class of a character * * rac - the race of the character * classes - array of boolean values for if a given single-class is used ************************************************************************/ int set_class(rac, classes) int rac, classes[]; { int clas, i; /* if human, then must select a single-class class */ if (rac == 6) clas = single_class(classes); /* else, could be multi-classed */ else { /* roll against the chance for a given demi-human to be a multi-classed character */ if (die_roll(100) <= demiclass[rac][0]) { i = die_roll(demiclass[rac][1]); clas = demiclass[rac][i+1]; } /* else is single-classed, so randomly select single-classes until find one suitable for a character of the given race */ else { do { clas = single_class(classes); } while (!demisingle[rac][clas]); } } return(clas); } /************************************************************************ * single_classes() - randomly select a single-class class * * classes - array of boolean values for if a given single-class is used ************************************************************************/ int single_class(classes) int classes[]; { int rol, clas; do { rol = die_roll(100); /* select a single-class */ if (rol <= 17) clas = 0; else if (rol <= 20) clas = 1; else if (rol <= 47) clas = 2; else if (rol <= 49) clas = 3; else if (rol <= 53) clas = 4; else if (rol <= 54) clas = 5; else if (rol <= 61) clas = 6; else if (rol <= 75) clas = 7; else if (rol <= 81) clas = 8; else if (rol <= 97) clas = 9; else if (rol <= 99) clas = 10; else clas = 11; /* repeat loop until reach an acceptable single-class */ } while (!classes[clas]); return(clas); } /************************************************************************ * roll_ability() - roll the ability scores for a character of the * given class, adjusting for race and such * * abilities - array containing ability scores * clas - clas of the character * lvl - level of the character ************************************************************************/ roll_ability(abilities, clas, lvl) int abilities[], clas, lvl; { int i, j, k, l, rolz[9]; /* randomly generate all seven abilities */ for (i = 0; i < 7; ++i) { /* initialize an array to contain all of the die rolls */ for (j = 0; j < 9; ++j) rolz[j] = 0; /* roll as many dice as required for the ability */ for (j = 0; j < die_num[clas][i]; ++j) rolz[j] = die_roll(6); /* do a bubble sort so that three highest die rolls are the first three values in the rolz array */ for (j = 8; j >= 0; --j) for (k = 0; k < j; ++k) if (rolz[k] < rolz[k+1]) { l = rolz[k]; rolz[k] = rolz[k+1]; rolz[k+1] = l; } /* set the ability score equal to the sum of the three highest die rolls, plus the racial ability bonus */ abilities[i] = rolz[0]+rolz[1]+rolz[2]+race_bonus[abilities[Race]][i]; /* for the first six abilities (not comeliness), check to make sure that ability score is the mimimum for the given class, and is not out the range for the given race */ if (i < 6) { if (abilities[i] < min_ability[clas][i]) abilities[i] = min_ability[clas][i]; if (abilities[i] < race_min[abilities[Race]][i]) abilities[i] = race_min[abilities[Race]][i]; if (abilities[i] > race_max[abilities[Race]][i]) abilities[i] = race_max[abilities[Race]][i]; } } /* add in the comeliness bonus due to charisma */ abilities[Comeliness] += come_bonus[abilities[Charisma]]; /* reset the exceptional strength score to zero */ abilities[Excep_Str] = 0; /* if have an 18 strength and are of a class which can have an exceptional strength score, then generate the excp. str. */ if ((is_exp_str[clas]) && (abilities[Strength] == 18)) { abilities[Excep_Str] = die_roll(100); /* if the exceptional strength score exceeds the limit for the given race, then reduce the score to the maximum allowed */ if (abilities[Excep_Str] > max_x_str[abilities[Race]]) abilities[Excep_Str] = max_x_str[abilities[Race]]; } /* generate the character's hit points */ if (clas < 12) abilities[Hit_Points] = hit_pts(clas, lvl, abilities); /* else is multi-classed, so roll the hit points for both classes and average them together */ else { i = hit_pts(multi_hd[clas-12][0], lvl, abilities); i += hit_pts(multi_hd[clas-12][1], lvl, abilities); abilities[Hit_Points] = (i + 1) / 2; } } /************************************************************************ * hit_points() - roll the hits points for the given class at given level ************************************************************************/ int hit_pts(clas, lvl, abilities) int clas, lvl, abilities[]; { int i, j, hp; /* hp = bonus hit points for higher levels */ /* i = number of levels to roll hit points for */ if (lvl > max_hit_dice[clas]) { i = max_hit_dice[clas]; hp = (lvl - max_hit_dice[clas]) * hit_bonus[clas]; } else { i = lvl; hp = 0; } /* add an extra die for rangers and monks */ if ((clas == 6) || (clas == 11)) hp += roll_hits(clas, abilities); /* call roll_hits the necessary number of times to generate HP's */ for (j = 1; j <= i; ++j) { hp += roll_hits(clas, abilities); /* add in the extra bonus for barbarians */ if (clas == 3) hp += con_bonus[abilities[Constitution]]; } return(hp); } /************************************************************************ * roll_hits() - roll the hit points for one level of given class ************************************************************************/ int roll_hits(clas, abilities) int clas, abilities[]; { int hp, i; /* roll the hit die */ hp = die_roll(hit_dice[clas]); /* if the roll is too low, make it equal to minimum score */ if (hp < min_hit[clas]) hp = min_hit[clas]; /* get the constitution bonus */ i = con_bonus[abilities[Constitution]]; /* if character is not a fighter and bonus is > 2, reset it to 2 */ if ((i > 2) && ((clas < 2) || (clas > 6))) i = 2; /* add in the corrected constitution bonus */ hp += i; return(hp); } /************************************************************************ * show_abilities() - prints out a character in the extended format for * a dungeon party, and includes any magic items ************************************************************************/ show_abilities(abilities, clas, lvl, outfile) int abilities[], clas, lvl; FILE *outfile; { /* print out race, class, and level */ fprintf(outfile, "%s %s, ", races[abilities[Race]], class_name[clas]); fprintf(outfile, "Level: %d", lvl); /* if multiclassed, include level of second class, even though it is assumed to bethe same as the first level */ if (clas > 11) fprintf(outfile, "/%d", lvl); /* print out hit points and strength */ fprintf(outfile, "\nHit Points: %d\n", abilities[Hit_Points]); fprintf(outfile, "Str: %d", abilities[Strength]); /* print out exceptional strength if there is any, and print it in the 01-00 format */ if (abilities[Excep_Str] > 0) { fprintf(outfile, "/"); if (abilities[Excep_Str] == 100) abilities[Excep_Str] = 0; if (abilities[Excep_Str] < 10) fprintf(outfile, "0"); fprintf(outfile, "%d", abilities[Excep_Str]); } /* print out the rest of the ability scores */ fprintf(outfile, " Int: %d", abilities[Intelligence]); fprintf(outfile, " Wis: %d", abilities[Wisdom]); fprintf(outfile, " Dex: %d", abilities[Dexterity]); fprintf(outfile, " Con: %d", abilities[Constitution]); fprintf(outfile, " Chr: %d", abilities[Charisma]); fprintf(outfile, " Com: %d\n", abilities[Comeliness]); /* select and print out some magic items, but don't give any to the barbarians! (they don't need them anyway) */ if (clas != 3) { /* convert level into index for look-up table */ if (lvl > 13) lvl = 12; else --lvl; /* check to see if have any magical items and print them */ if (die_roll(100) <= items_level[lvl][0]) select_magic(0, items_level[lvl][1], clas, outfile); if (die_roll(100) <= items_level[lvl][2]) select_magic(1, items_level[lvl][3], clas, outfile); if (die_roll(100) <= items_level[lvl][4]) select_magic(2, items_level[lvl][5], clas, outfile); if (die_roll(100) <= items_level[lvl][6]) select_magic(3, items_level[lvl][7], clas, outfile); } } /************************************************************************ * show_npc() - prints out a character in the condensed, mass-listing * format, and includes a brief list of significant magic ************************************************************************/ show_npc(abilities, clas, lvl, outfile) int abilities[], clas, lvl; FILE *outfile; { int i; /* print out class and level */ fprintf(outfile, "%s", class_abrev[clas]); print_abil(lvl, outfile); /* print out race and hit points */ fprintf(outfile, " %s", race_abrev[abilities[Race]]); if (abilities[Hit_Points] < 100) fprintf(outfile, " "); print_abil(abilities[Hit_Points], outfile); fprintf(outfile, " "); /* print strength and include expectional strength if exists */ print_abil(abilities[Strength], outfile); if (abilities[Excep_Str]) { fprintf(outfile,"/"); if (abilities[Excep_Str] == 100) abilities[Excep_Str] = 0; if (abilities[Excep_Str] < 10) fprintf(outfile, "0"); fprintf(outfile, "%d", abilities[Excep_Str]); } else fprintf(outfile, " "); /* print out the rest of the abilities */ for (i = Intelligence; i < Excep_Str; ++i) print_abil(abilities[i], outfile); /* if not a barbarian, try to pick some magic items */ if (clas != 3) random_magic(lvl, clas, outfile); fprintf(outfile, "\n"); } /************************************************************************ * print_abil() - print out ability score right-justified ************************************************************************/ print_abil(num, outfile) int num; FILE *outfile; { if (num < 10) fprintf(outfile, " "); fprintf(outfile, " %d", num); } /************************************************************************ * random_magic() - randomly select some basic magic items ************************************************************************/ random_magic(lvl, clas, outfile) int lvl, clas; FILE *outfile; { int i, j=0; /* set i = level * 8%, as the chance of having a magic item */ i = lvl * 8; /* roll to see if have a weapon */ if (die_roll(100) <= i) { j = item_bonus(lvl); fprintf(outfile, " weapon +%d", j); } /* roll to see if have a protective device */ if (die_roll(100) <= i) { if (j) fprintf(outfile, ", "); else fprintf(outfile, " "); j = item_bonus(lvl); i = die_roll(5); if ((i==1) && !((clas==7) || (clas==8) || (clas==9) || (clas==11))) fprintf(outfile, "shield +%d", j); else if ((i < 3) && !((clas==7) || (clas==8) || (clas==11))) fprintf(outfile, "armor +%d", j); else if (i < 4) fprintf(outfile, "bracers AC %d", (7-j)); else if (i < 5) fprintf(outfile, "ring +%d", j); else fprintf(outfile, "cloak +%d", j); } } /************************************************************************ * item_bonus() - calculate the bonus of a magical item, maximum bonus is * equal to half of character's level, to a max of 5 ************************************************************************/ int item_bonus(lvl) int lvl; { lvl = die_roll((lvl + 1) / 2); if (lvl > 5) lvl = 5; return(lvl); } /************************************************************************ * select_magic() - selects some magic items from generic tables * * lst - the number of the table to look at * items - the number of items to generate * clas - the character's class, assumed fighter, cleric, theif, mage, monk ************************************************************************/ select_magic(lst, items, clas, outfile) int lst, items, clas; FILE *outfile; { int i, j; /* generate the indicated number of items */ for (i = 0; i < items; ++i) { if (class_magic[clas] == 0) { j = die_roll(cleric_magic[lst][0]); j = cleric_magic[lst][j] - 1; } else if (class_magic[clas] == 1) { j = die_roll(fighter_magic[lst][0]); j = fighter_magic[lst][j] - 1; } else if (class_magic[clas] == 2) { j = die_roll(mage_magic[lst][0]); j = mage_magic[lst][j] - 1; } else if (class_magic[clas] == 3) { j = die_roll(thief_magic[lst][0]); j = thief_magic[lst][j] - 1; } else { j = die_roll(monk_magic[lst][0]); j = monk_magic[lst][j] - 1; } show_magic(lst, j, outfile); } } /************************************************************************ * show_magic() - print out a magic item from indicated table * * lst - table to look at * num - number of item in that table ************************************************************************/ show_magic(lst, num, outfile) int lst, num; FILE *outfile; { if (lst == 3) fprintf(outfile, "%s\n", magic_IV[num]); else if (lst == 2) fprintf(outfile, "%s\n", magic_III[num]); else if (lst == 1) fprintf(outfile, "%s\n", magic_II[num]); else fprintf(outfile, "%s\n", magic_I[num]); } ----------------------- From Z_COOLIDGEJS@CCSVAX.SFASU.EDU Fri Aug 21 10:16:24 1992 Subject: RL-L: Misteleportation Jeff asks: > 1. Would you consider teleportation via the mists as a conjuration, > summoning, or similiar dweomer? Well, yes, but I would not consider it wise. The mists have their own mind, and one may very well end up teleporting to locations other than where one wishes to go. In Ravenloft, that would not be fun. >Assuming #1 to be true: > > 2. Could one be Abjured back to their home plane? Keep in mind, > Ravenloft is a Demi-Plane in its own right. Possibly. It all depends on whether or not the DM is ready to quit his Ravenloft campaign and go on to Spelljamming or something. If the DM does allow it, Ravenloft could leave the party with souvenieurs (sp?), see below. It might not always work to teleport in such a manner. > 3. What would this do for Paladins protection from evil ability? > Paladins have PfE which protects them from, if I remember > correctly, conjured/summoned nastiness. If this is true, and there > some nasty, not-of-ravenloft, evil nasties, would the Paladin > be immune from their melee attacks? (10' radius) I don't think a paladin in his or her right mind would trust the mists in the first place unless it was absolutely necessary. A wizard or priest who can use magic to summon the mists is calling upon a great evil. The odds that the Ravenloft powers will notice this are considerable, since the mists are OF the Ravenloft powers. I presume the evil nasties that are "not-of-ravenloft" are the things that lurk in the mists. I don't think the paladin would get back his normal protection until he (or she) is out of the mists completely. IMHO, the mists are part of Ravenloft, and so are the evil things that lurk within. > Just wondering what all of you think. I might let the mists count as >a conjuration, unless the party was pulling a hose, and trying to weasel >out of the adventure-- In that case, I wouldn't let it work... :-) I say, go ahead and let it work. There has to be a way to get the party from one isle of terror to the next, or to go from Ship of Horror to Feast of Goblyns, ha ha ha! / Zigon Marovich (Z_COOLIDGEJS@CCSVAX.SFASU.EDU) \ < "Holy diver, you're the star of the masquerade, > \ No need to look so afraid..." --Dio / < (O) > Y -------------------- From riff@coos.dartmouth.edu Fri Aug 21 10:39:24 1992 ------------------------- From witzki@cs.wmich.edu Fri Aug 21 15:57:59 1992 Subject: Re: The Fury of Dracula In response to Alvin Valentine's message: > If you have not played the Fury of Dracula by Games Workshop (the folks > who brought us Talisman) then you Ravenlofters have missed out. It > recreates the chase of 3 vampire hunters scouring Europe for Dracula > who has servants to stop them plus the ability to control the elements > and the animals of the world. I was wondering if anyone had checked this one out. I have never played it myself, but GW usually produces good boardgames. ============================================================= From warren@apple.com Fri Aug 21 16:12:25 1992 From @pucc.Princeton.EDU:NCCUT132@TWNMOE10.BITNET Sun Aug 23 06:55:44 1992 Subject: DM Aides, Computer Programs [FTP Sites] Hail Eris, All: Okay, here are the FTP Sites for Role-Playing Games I've received thus far from various sources. I'm not sure, but I believe the eklektik and topgun sites may be down now. For those who can't FTP, I tagged some info about FTPing through the mail at the back. I've used the BITFTP@PUCC.BITNET service before and have not major complaints. Happy FTPing! -- and remember to pass on any info on computer aides you might find to yours truly for the list. <=================================================> Anonymous FTP Sites for Role-Playing Games <=================================================> tybalt.caltech.edu (131.215.139.100) /pub/adnd/* /pub/adnd/programs/msdos greyhawk.stanford.edu (36.8.0.243) /D_D/* /D_D/incoming soda.berkeley.edu (128.32.121.179) /pub/* /pub/ars-magica/* /pub/vampire/* potemkin.cs.pdx.edu (131.252.20.145) /pub/frp/* quayle.mu.wvnet.edu (129.71.32.151) /pub/rpg/* /pub/rpg/dnd /* /pub/rpg/incoming/* /pub/rpg/uploads/* garfield.catt.ncsu.edu /pub/DND/* /incoming/Dnd.stuff/* ftp.nau.edu /public/rpg/* beelzebub.acusd.edu usdcsv.acusd.edu (192.55.87.6) ics.uci.edu /usenet/rec.games.frp/* eklektik.cs.pitt.edu (130.49.2.135) ftp.cc.gatech.edu /pub/frp/* ftp.white.toronto.edu /pub/frp/* topgun.agps.lanl.gov (192.12.184.4) /pub/usml/* ocf.berkeley.edu (128.32.184.254) /pub/? /pub/Traveller/vehicles plague.berkeley.edu (128.32.234.21) tornado.berkeley.edu (128.32.234.15) iesd.auc.dk (130.225.48.4) /incoming ? rainbow.cse.nau.edu (134.114.64.24) sunbane.engrg.uwo.ca (128.100.100.12) morticia.cnns.unt.edu <=========================================> FTP Archives <=========================================> The following comes from one of the rec.games.frp FAQ's: Anonymous FTP archives can be accessed from Unix machines on the Internet by typing ftp
, where
is either an Internet address or a routing number. At the "Name:" prompt, type "anonymous"; at the "Password:" prompt, type your userid or "guest" (or something equally thoughtful). For further information on ftp, check the documentation at your site or consult a local guru. Users at non-Internet sites (especially those on BITNET/Netnorth/EARN) may want to try the BITNET FTP server at Princeton. To obtain directions on the use of the server, send a mail file containing the line HELP to BITFTP@PUCC.BITNET. An alternative is the ftpmail service at decwrl.dec.com. Again send a message containing the one line help to ftpmail@decwrl.dec.com. ------------------------------------ From alvalent@husc Tue Aug 25 18:37:07 1992 Subject: RL-L: Someone asked about abjuration On Abjuration from the plane--Jeff's big question of the week. I know you have no boxed set sitting in the corner as you are an avid fan but not a glutton for monetary slavery at the hands of Ravenloft as am I. So, I open my Dark Grimoire and: Altered Priest spells-- Abjure, 4th level: Normally, this spell sends creatures from the outer planes back to their own dimension. Its chance of success is 50% plus 5% for each difference in level between the caster and the target. If the spell succeeds in Ravenloft, the creature is sent to another random location in the demiplane. You can't even be given the boot out of Ravenloft, for if you could surely those with 4th level priest spells would abjure their friends back to their various homes (not being natives of the demi-plane -- unless you run a mostly demi-plane origen crowd like me). Heck, I'd chance a system shock roll to get out of Ravenloft, wouldn't you? Dismissal works similarly, but if the if the spell works you have to take it a step farther. There is a 50% chance for randomized demi-plane teleport and another 50% chance that even if the critter fails it's save that the spell has no effect in Ravenloft. All forms of teleport work WITHIN the dami-plane but cannot be used to leave. Also, no magic of the likes of a a teleport can cross a closed domain border. Once the Lord of the Domain has you, you aren't going anywhere. That;'s all for now. Hope you guys are having fun. Take care of yourselves. Later. PS Yeah thanks to a friendly Ravenlofter, I now have between Puerto Rico and the United states, all the Ravenloft books and modules publishesd. I am missing one issure of Polyhedron I think. Next thing I should collect are the tournament modules for Ravenloft. But I played in one and it was horrible. Anyone else played in any. Are they good? How about the one's at GENCON...heard anything about them? Lee ---------------------- End of Digest #14