# Ultimate Generators on the way - any advice?



## Luke (Jan 16, 2003)

I have a very open and thorough framework now in RolePlayingMaster for the ultimate in generators.
I'm keenly after any advice as to how make the best use of this framework. 
(Perhaps I should even modify the framework)

If you like, you can download the latest beta and check it out, but I'll explain the framework here. The different capabilities are so wide and open that I think it'll help to throw up lots of examples.

Basically, you can make lists out of virtually anything and then assign a chance weighting to generate it.
Its very important to note that these are not text generators. They refer to items in the RPM database, so that anything generated can be used to build your character, encounter, location, whatever. These items carry with them any game mechanics information. For example, a suit of armor has the correct effects on AC, total weight carried, max dex adj, and armor check penalty.
This gives you lists that you can either select from (eg select an Exotic weapon when you take the Exotic weapon proficiency feat), or that you can simply generate things from randomly (such as random generation of an exotic weapon for a random creature that has randomly had the Exotic weapon proficiency generated).

The basic structure I have for a generator table is as follows:


They have a "Type" (item, race, class, skill, feat, spell, ability, magic effect, or "free form").
They have a "Purpose" (such as "General", "Random Encounter", "Random Equipment", "Class Definition", "Race Definition" ).
When you build the table, you select from the RPM database for the type (eg equipment, race, abilities).
 You can use the "Filter" and "Multi-Select" button to add a large number of entries to a table (eg instanltly build a table of all the "CR=4" races, or the "Climate=Forest" races).
You can add another table as an entry to a table. If the item gets generated, the generator automatically jumps to the indicated table to determine the entry. For example,  you can add the "Dragon (Lev 4)" table as an entry to your wandering monster table. If you generate a Dragon, this gets you the particular type of Dragon.
You can batch a number of items together in the same chance. For example, you could group Hobgoblins and Orcs together as a party for a wandering monster table, or you could group together tables for armor, weapons and a shield, to get an entry that will generate a random weapon, suit of armor, and shield.
You can add a blank entry, which gives you a chance to generate nothing. In the example above, you may put in a blank entry for your armor and shield table, to allow for the possibility of a "swashbuckling" (no shield or armor) fighter.
You can "Copy" an existing table. This could be useful for customizing wandering monster tables according to location, or simply to create and customize campaign specific versions.
[/list=1] 

*The current use I have in place for the tables is as follows:*
The random encounter option lets you select from available race tables (Purpose = Random Encounter") to create creatures.
Classes and Races have the following lists available : Class Skills, Weapon proficencies, Compulsory Equipment, Ramdom Feats, Randon Equipment, Random Skills. The mandatory lists are obviously the "Class Skills" and "Weapon Proficiencies". The "Compulsory Equipment" I've put in are things such as a religious symbol for a Cleric, or a phylactery for a Lich.
Purpose built lists as required

Hopefully you can see  the more basic uses , as with the following examples:

The D20 Modern occupations are impemented as abilities (with appropriate skill modifiers), and the table can be used either by PCs for selcting a profession, or to generate appropriate spreads (eg more chance of a blue or white collar worker than a criminal or athlete).
Purpose-built tables can be used as required for PC selection (eg the list of Clerical domains, or Schools of Wizardry - both implemented in RPM as "abilities"). 
Purpose-built tables can be built for feats, such as a PC wizard selecting (or a random wizard generating) from the list of special feats available as Wizard bonus.
_I should point out that many things in RPM are implemented as "abilities" (such as domains, D20 modern occupations, or schools of wizardry), for a good reason. 

Though it may seem a bit abstract, it does allow you to openly expand into D20 areas, and also put in any game mechanics needed (such as modifiers, or even scripts).
_

*How can you help?*
You could let me know what you think of the framework, and how it could be best built on, perhaps with the following issues in mind:
What would be a good solution for "defaults"? Whilst you can configure any class or race to your heart's content (RPM can happily cope with 1000s of separate generator tables), you certainly wouldn't have all the categories mentioned above for all races and all classes.
Any good ideas on managing campaign sources? I've built my current tables for standard, core D&D. If you download and install DragonStar, for example, you won't find the DragonStar specific weapons in the list. The generators can be attached to specific sources, and do import/export with them, but thats not quite the same as having "default" lists that span multiple Sources.
Blinkers Off! Perhaps there are some good possibilites that I've completely missed. Yes, I'm aware that creating rooms as Item types, along with clever use of multiply linked tables could be used to generate random dungeons with encounters and equipment, but that sort of thing is a bit "frivolous" for now 
Bad misses? There are always difficult issues with respect to generators and sensible outcomes. If you can pick any, along with advice, I'd greatly appreciate it.


I would be very pleased to recieve any ideas or comments e-mailed to luke_jones@bigpond.com . Alternatively, a comment posted here for public comment could be more useful.

If my explanations all sound very abstract, and you'd like to download and check out the current form of the generators, just e-mail me for the beta link. The current version isn't the official download yet. Basically, instability and corruption issues have forced me to replace the underlying database manage for RPM. Volenteers have almost completed the testing, with very positive results - but its still not the official version for public download.

Many Thanks,


----------



## Luke (Jan 16, 2003)

Well, read through my post, and decided that there's no way I explained what I'm on about well enough. I'm sure not going to make it any more wordy than it already is.

Here's a few pictures to help explain what I mean...

1. The basic list of generators (maintenance screen):
- It shows some random magic item tables (organized by value), lists of race types by CR, dragon tables by level, and lists of monster races by their climate.
- Most of these tables were instantly generated using the search/filter button (see picture 2).






2. How a table is put together:
- This example is from the DMG table for level 1 random dungeons.
- You select or multi-select from the "Available Items" to build the table.
- The magnifying glass opens up a search/filter on the available items to search for a particular entry, or do a mass multi-select.
- Note the middle entry is actually another table "Table - Dragon (Lev 1)" which select a particular dragon, if a dragon is generated.





3. "Complex" example of random equipment for a Fighter (from the class definition for fighters).
- There are only 2 random entries (one for a roll of 1-3, and another for a roll of 4-13).
- The First entry will generate a simple weapon and piece of heavy armor, and the second will generate a martial weapon, a piece of heavy armor, and a random shield.
- Pressing the "Test" button here generated a classic equipment set for a "tank" fighter.






Hope that adequately conveys what I'm trying to explain.
Thoughts, suggestions, and/or issues are very welcome...


----------



## smetzger (Jan 16, 2003)

From your description its difficult to tell if the following is possible.
1) Can you randomly select a feat from a list of feats that you qualify for?

2) After you have selected the feat, can you randomly select the subcategory, i.e. the specific weapon for weapon focus?

3) Would it be possible to have a list of racial prefered weapons and associated weights.  Then can you randomly determine, from your weapons your proficient and add the weights of your racial prefferred weapons, a weapon?
How about if the class also has a list of preffered weapons and their weights, would you be able to add those weights in?  This would be a general need where having something increases(or decreases, negative numbers shoud be allowed) your chances for selection of another item.

4) How are your spells grouped?  Would I be able to randomly select a 3rd level wizard attack spell?

5) Can you randomly determine the weapon a Bard chooses to be proficient in?  How about an Elf?

6) Am I able to assign weights to ability scores for different classes?  Or can I assign a primary ability and secondary ability score for a class?  For example for a typical Fighter Str and Con are most important, therefore when randomly making a fighter there should be a greater chance that Str and Con are the higher ability scores.

7) After doing 1-6, is it possible to 'build' the character?

If you can do all that, I'll have to seriously consider abandoning my little project and jumping on your bandwagon.

*:> Scott


----------



## Luke (Jan 16, 2003)

HiYa Scott,
Thanks for this. You've got curly ones, which is what I need 



			
				smetzger said:
			
		

> *From your description its difficult to tell if the following is possible.
> 1) Can you randomly select a feat from a list of feats that you qualify for?*



What I have in mind is that you can pass in 2 sets of codes when you call a generator. One set could describe allowable entry IDs, and the other could describe disallowed entry IDs.

The point for feats would be as follows:
- Allowed IDs would describe feats you qualify for. This would ignore any entries not in the list.
- Disallowed IDs would similarly ban items you don't want. In the case of feats this could describe feats you already have (where duplicates aren't allowed). Similar examples would be to ban generation of multiple sets of the same equipment, or more particularly spells appearing more than once in a spell list.
- A table could be configured to automatically add generated items to its disallowed list.

The approach I describe isn't very specific to feats, which is how I like to design things. I prefer to build frameworks that give you power to apply functionality in creative ways. The challenge then becomes finding intuitive user interfaces that don't restrict the power available 

I'm weary that this sort of "on-the-fly" fiddling could slow things down, since *lots* of generators could be called to generate a completely random encounter (skills, feats, items, classes etc).
A quick test on my 1Ghh processor gave me 1000 monster generations in about 1/2 sec (race only generated), so speed shouldn't be an issue.




			
				smetzger said:
			
		

> *2) After you have selected the feat, can you randomly select the subcategory, i.e. the specific weapon for weapon focus?*



This would be automatic. The current (private) version of RPM has "OnCreate" scripts behind feats that have SubTypes (eg Skill list for the "Skill Focus" feat, and various appropriate Weapon tables for the weapon subType feats, such as the list of Exotic weapons for the Exotic Weapon proficiency feat).
What happens now is that when you add the feat to your character, the script throws up the table for you to select from.

What I'm thinking is to have a mode for the list selector function: "manual", or "generate". When you add a character, RPM goes into "manual" mode, and list selctors throw up tables for you to select from.
When you generate a random encounter, RPM goes into "generate" mode, and instead of throwing up a list for selection, an entry is randomly selected, according to its weighting.




			
				smetzger said:
			
		

> *3) Would it be possible to have a list of racial prefered weapons and associated weights.  Then can you randomly determine, from your weapons your proficient and add the weights of your racial prefferred weapons, a weapon??*



This is one of the interesting problems I was alluding to.
Basically, "yes". The races and the classes can all have tables for compulsory equipment, random equipment etc.
What do you then do? Add up the various tables to come up with a combined table? How would the weightings make sense across multiple tables? You'd probably want to scale fighter weapon tables much higher than Wizard tables in the case of a multi-class Ftr/Wiz - to the point where the wizard weapons are ignored.

This is a whole level of management above my current framework. Is the effort, and possible user confusion, worth doing it? Do you do a "weapons special", perhaps scaling a table's weighting according to its race or class hit dice? This would be on the simplification that higher hit dice indicates a stronger fighting class, and hence more appropriate weapon selection.




			
				smetzger said:
			
		

> *How about if the class also has a list of preffered weapons and their weights, would you be able to add those weights in?  This would be a general need where having something increases(or decreases, negative numbers shoud be allowed) your chances for selection of another item.*



Its a bit like you've been sitting on questions like these, waiting for a post like this 

I'm not sure. Currently I just have a concept of items for class and race definitions. Looking back to the top of my original post, only "Weapon proficiencies"  is actually specific to items that are weapons.

Should I have specific race and class categories for "Weapons" and for "Armor", and leave "Random Equipment" for other items? Perhaps so. Its very easily done. I originally wanted to limit the number of categories to keep down the configuration effort, but you do make a lot of sense.



			
				smetzger said:
			
		

> *4) How are your spells grouped?  Would I be able to randomly select a 3rd level wizard attack spell?*



The beauty of the system is that you can build as many tables as you like, breaking them down as you like.
My original thoughts are to simply have a table for each level of each spell casting class.
Of course, specialty schools would want quite different lists from each other. Then again, as you suggest, grouping according to attack, defense and other categories could be useful.

All this sugegsts an extension of the framework. Whilst  the filter/search capability would quickly auto-fill tables for you, theres still a lot of possible tables, and you need some kind of management system to automatically pick the right table for a given creature.




			
				smetzger said:
			
		

> *5) Can you randomly determine the weapon a Bard chooses to be proficient in?  How about an Elf?*



Seems the same as the earlier point to me. We can have tables for Elves, and we can have tables for Bards, but how are we to combine the tables for an elvish bard?



			
				smetzger said:
			
		

> *6) Am I able to assign weights to ability scores for different classes?  Or can I assign a primary ability and secondary ability score for a class?  For example for a typical Fighter Str and Con are most important, therefore when randomly making a fighter there should be a greater chance that Str and Con are the higher ability scores.*



Thats a good idea. The tables currently only do the types I listed (items, races, etc).
I think I would do management like that as a separate issue, much as races already have ability adjustments, I think I'd put ability ranking lists into classes. I don't think this table structure is tha tplace for that, though.




			
				smetzger said:
			
		

> *7) After doing 1-6, is it possible to 'build' the character?*



That's definitely the whole point.

There are 2 very distinct approaches to this, though:

- The very simple approach is the "Jamis NPC Generator" approach, where you just have a list of random feats, skills etc to add.

- There's another "super-realism" approach, where you "grow" an NPC up to its final level. The point here is that something like the list of available (qualified) feats grows as you level up. So does the list of available classes that you qualify for.
For a lot more effort, you could grow an NPC a level at a time, recalculating the available classes, feats, and even available skills at each level point.
I don't know if the demand for such a facility is strong enough to make it worth the programming effort (initially, at least).
I have seen requests out there for NPC generators with prestige classes. Its pretty difficult to generate random characters like this without growing them a level at a time. The only other way is to work your way backwards, which isn't ramdom, and doesn't really work.


Good ideas there Scott. I think I can see how most of them could be done within a simple framework, although I don't know how people think tables should be combined across different races and classes (such as for weapon selection).

Thanks,


----------



## smetzger (Jan 16, 2003)

Luke said:
			
		

> *HiYa Scott,
> Thanks for this. You've got curly ones, which is what I need *




Your welcome.



			
				Luke said:
			
		

> *
> Its a bit like you've been sitting on questions like these, waiting for a post like this
> *




Well, I have tackled all these issues in my current unreleased RogueGenerator program, so I have given them alot of thought.  Let me see if I can answer some of your questions about the relationships between two tables.  I see two different relationships:
1) A Master/Detail relationship.  This is where you randomly choose an Item and then you randomly choose a subitem.  ala Weapon Focus--->Greatsword

2) Additive relationship.  For example having a table for weapons your proficient in and then another table that has a racial preference list of weapons.  If an item is in both tables its Weight is added together to get a new Weight.  This could be done by haveing separate Weapon/Weight table for each race; but I think its better to have a racial preference table that then modifies the original Weapon table.  This all goes to solve the problem that a Dwarf Fighter should have a greater probablity of using an Axe than a Sword.

Note: I am doing my design completly opposite of yours.  I am coding specific cases and while doing this I look for generalities that I can pull into my base object(s).


----------



## Luke (Jan 17, 2003)

smetzger said:
			
		

> *2) Additive relationship.  For example having a table for weapons your proficient in and then another table that has a racial preference list of weapons.  If an item is in both tables its Weight is added together to get a new Weight.  This could be done by haveing separate Weapon/Weight table for each race; but I think its better to have a racial preference table that then modifies the original Weapon table.  This all goes to solve the problem that a Dwarf Fighter should have a greater probablity of using an Axe than a Sword.
> 
> Note: I am doing my design completly opposite of yours.  I am coding specific cases and while doing this I look for generalities that I can pull into my base object(s). *




For RPM its particularly important to start with generalities, then allow for personalized customization of tables to get specific. All this focus has been on weapons, but in RPM weapons are only one category of item out of many categories. Further, the generators are about much more than items, and they can also span several sources (Forgetten Realms, D20 Modern, home-brew campiangs). I don't actually have the luxury of assuming that an RPM user is simply into straight D&D.

I'm keen on the "additive tables" idea, but I'll throw some curly questions your way about assumptions made, using your Dwarf Fighter as an example.
- Generally I like the idea that racial prejudice will influance weapon choice for a class. How would your system automatically cope with the Dwarf having a few levels of Druid? That pretty much relegates the Axe to the display cabinet back at home. I'm thinking that my idea for allowed IDs could be helpful. A creature with Druidic levels could take on the list of non-metallic weapons for "allowed IDs", and the generators would automatically work in with that.
- All this seems to be assuming that we're trying to find the *one* weapon. Looking back to the picture I have here for the randomly generated Fighter equipment, I'm thinking that weapon tables could probably benefit from being split into melee and range weapons. It would certainly make sense to ensure that a Fighter *always* gets a melee weapon, and has a reasonable chance of a range weapon.  A fighter with "just a bow" is going to get into an awful lot of trouble at close quarters.
That's what I like about the open, general concept of generators. Rather than be too tightly bound to some tight calculation strategy, you can get creative, and easily work around issues.
Based on the Ftr equipment picture above, I could easily link in an extra table link called "Ranged Weapons", which has a blank entry, along with several other options. That way the fighter could get his main weapon, a suit of armor, a shield, and *possibly* a ranged weapon.
Is an exhaustive analysis of every possible weapon really worth all the effort? Combining all weapon proficiencies, with all proficiency groups (eg all Simple weapons), for the racial bias and all the different classes (weighted according to relative levels when multi-classed), to get a final probability distribution? Perhaps.
Most of the time, you probably get Longsword or Axe anyway. As a computing example, Microsoft put a large amount of effort into optimizing their memory allocator, but the statistics came out roughly the same as the original, simple K+R algorithm. A better analgy could be a system that predicts weather based on a huge input of variables. It probably still comes out with results similar to a comparatively simple and "brain-dead" predictive program.

Its worth mentioning that RPM's generators are quite different from what most people are used to. Typically generators spit out a complete result - a piece of statblock text - and that's the end of the story.
RPM generators can easily let you tweak the results, or regenerate individual parts (skills, feats, classes etc). Hence expanding 10 times the effort on complex and time-consuming generators possibly isn't in the best interests of users who'd like to keep things simple.
That said, the ideas are good, and worth following through.

I might need to do some time trials to see how much complexity can be allowed for before things slow down too much. Its *very* important that players don't wait for the DMs computer to spit out results if he's generating a random encounter at the table. I can generate a simple race from the Dungeon Level 1 table 100000 times in 3 seconds - which is a good starting point. 

Thanks Again,


----------



## smetzger (Jan 17, 2003)

Yeah, I have been simplifieing the process.  
1) The Proficient Weapon table should only contain those weapons that you are using in this campaign.  So that throws a little twist in.

2) Fighter/Druid example.  If you are playing by Core Rules then the Proficient Weapon Table should only contain those weapons that are not restricted to one of your classes.  Of course the Druid Weapons are a common house rule so this should be settable somewhere.  So, If Axe isn't in the Proficent Weapon table then there should be No chance of having an Axe show up randomly even if its on your Racial Weapon Preference Table.  So yeah another twist.

4) True, there will need to be a table for Melee and Ranged Weapons; which will be used for selecting the weapons you actually posses.  However, you still need the All Weapon table for things such as Weapon Focus.  So another twist.

I haven't gotten to assigning equipment to a character yet, so I have just done the All Weapon table.

Like I said I am looking at a specific way of doing things and then trying to derive the Generalities.  I think you are doing the opposite generalities-->specifics.  

Also, take a look at the 2e Familiar program (not DM's Familiar).  
http://www.rwe-uk.com/Familiar/
This program did alot of what you are attempting to do;  but I don't think it did the 'additive' table stuff.

I definantly believe the only way to do random character generation for 3e is 1 level at a time.  You can't do the feats at the end because your pre-reqs at 7th level are not the same as they were at 1st level.  This also presents a problem for the GUI when allowing the user to add new feats.  Its one thing to build a character up level by level, and this is usually fine for creating a new character.  However, what if you want to enter an existing character from say RttToEE, you don't want to be restricted by the feat requirements you just want to enter them.  

Performance, is definantly an issue when building the character 1 level at a time.

*:> Scott


----------

