Under major construction. This is a pre-alpha version of what will hopefully be a very useful player and DM aid. All you can do now is generate a couple naked demihumans. Note, This utility will probably NEVER do automatic feat selection because without a very complex algorithm, very inferior feat choices will be made (as is currently the case with the skill selection system). Spell selection will likewise never take place unless someone wants to volunteer to write the selection algorithms.
0){ $i=0; } } if($i){$class_levels["warrior"]=1;$_POST["warrior_levels"]=1;} foreach($class_option as $value){ $levels=$value."_levels"; if($_POST[$levels]>0){ $class_levels[$value]=$_POST[$levels]; eval($class_features[$value][0]); $i=0; } } arsort($class_levels); # \/ generating the stats $stats=generate($_POST["generate"]); for($i=0;$i<6;$i++){ foreach($class_levels as $key => $value){ $temp[]=$stat_order[$key][$i]; } } $stat_order["npc"]=array(); for($m = 0;$m < count($temp);$m++){ if(!in_array($temp[$m],$stat_order["npc"])){ $stat_order["npc"][]=$temp[$m]; } } $temp=array("strength","dexterity","constitution","intelligence","wisdom","charisma"); for($i=0;$i<3;$i++){ $s=$stat_order["npc"][$i]; $npc["stats"][$s]=$stats[$i]; unset($temp[array_search($s,$temp)]); } for(;$i<6;$i++){ $s=$temp[array_rand($temp)]; $npc["stats"][$s]=$stats[$i]; unset($temp[array_search($s,$temp)]); } if(stat_bonus($npc["stats"]["intelligence"])>=0){ $npc["skills"]["speak language"]["ranks"]=stat_bonus($npc["stats"]["intelligence"]); }else{ $npc["skills"]["speak language"]["ranks"]=0; } eval($race_features[$_POST["race"]][0]); for($i=1;$i<=$_POST["race_levels"];$i++){add_level($race,"race");} size($npc["size"]); foreach($class_levels as $class => $level){ for($i=1;$i<=$level;$i++){add_level($class);} } foreach($npc["special_instructions"] as $value){eval($value);} echo ""); print(" "); print(""); if(isset($mail)){ $body=" Name: $name Qty: $quantity Method: $generate Race: $race.$race_levels"; foreach($class_levels as $class => $levels){$body.=" $class.$levels";} $body.=" $comments"; $headers = "From: <$email>\r\n"; if($comments!=""){mail("dndform@gameknave.net","Comments for an NPC",$body,$headers);} } } ?>
Name or Description: Quantity:
Generation Method:
Race: Levels: Only select levels > 0 for Drow!

");} $levels=$value."_levels"; print(ucfirst($value)." "); print("
"); } ?>

"; # output the stat box stat_box($npc); print("
Make a Difference!! If you have generated an NPC and you've noticed that something is not right or that my math is off somewhere, please tell me about it. No need to give me the race or levels or anything, just describe what the error is and I'll take it from there.
"); foreach($class_option as $value){ $levels=$value."_levels"; print(""); } print(" E-mail address:
Comments:

Disclaimer: This utility requires the use of the Dungeons & Dragons(R) Player's Handbook, (edition 3 or 3.5), published by Wizards of the Coast�. Dungeons & Dragons(R) and Wizards of the Coast(R) are Registered Trademarks of Wizards of the Coast. You will need the excellent 3E or 3.5E Dungeons and Dragons Core Rulebooks of WotC to properly use this utility. Without them, this utility is worthless. I recommend you visit their website at www.wizards.com/dnd.
". credits($npc)."




below this section is for planned updates and notes.

This is an incomplete list of the updates that I'm planning on implementing. If you think of something that I haven't, please contact me.