GURPS NPC generator

Although I have not finished my NPC GURPS generator, I have uploaded it to my site due to a few requests. It is a very ambitious project on my part and if anyone wants to dissect it and share any knowledge that would be great. Get it HERE

This does not work for full PC's. It is great for if you need a bunch of NPC's quickly. A random Monster one is in the design stages.

What it Does
    Currently it has just about every fantasy Race and Class in the generator. You can select it randomly or choose either (thanks Ed for ALL of you help)
    Selects Weapons based on class and attributes (needs work)
    Selects Equipment (needs work)
    Adds Traits
    Adds Armor (could use more work)
    Selects Skills
    Adds Natural Abilities and calculates the bonuses

To Do
    I'm still adding the random skills.
    I'm still working on a better weapons table.
    Need to Code Random Spells
    Add a sensible Advantages and Disadvantage option (maybe in the drop down selection box) and have all bonuses calculated
    Some how have it add the '+' sign when you get a positive mark. So if your strength is low you will get 1d-1 bit if you have a high strength result it will place 1d1 instead of 1d+1
    Figure how to add the Racial Skills into regulars skills
    Add better Name Generators for different Races
    Figure a way to have it Generate a Band of NPC's with proper classes and races (may require a separate generator)


I'm sure there is more on both lists that need to be added. Please let me know what you think.

Comments

  • Here is a quick example of an Air-Infused Archer
    Sadak Air-Infused Archer
    ST: 11 HP: 11 Speed: 6.75
    DX: 14 Will: 0 Move: 5
    IQ: 10 Per:10
    HT: 9 FP: 9 SM: 0
    Dodge: 9 Parry: 10 DR: 0/5*

    Armor: Cloth Armor (DR 1, Torso, Groin)
    Weapons:
    [*]Knife-Wheel: Thrust: 1d0 cut; Thrust: 1d-2 imp; Reach: C; Parry: 10;SL: 16 ,Unarmed: Kick: 1d-1 cr; SL: 12; Punch: 1d-2 cr; Parry: 10; SL: 20,[/*]
    [*]Crossbow: 1d3 imp; Acc 4; Range: 140/125; RoF: 1; Shots: 1(4); ST: 7†; SL: 10 ,[/*]
    [*]Whip: Swung: 1d-1 cr; Parry: 9 [/*]
    Traits: Catfall (Mana Sensitive), Damage Resistance 5* (Limited, Air and Weather, Mana Sensitive), Reputation +3 (Air Elementals), Resistant to Metabolic Hazards (+3), Walk on Air (Mana Sensitive) (Limited, Air and Weather, Mana Sensitive); Acute Vision 2, Bloodlust, Chummy, Fit, Striking Strength
    Skills: Armoury (Missile Weapons)- 6, Brawling- 17, Camouflage- 8, Fast-Draw (Ammo)- 14, Fast-Draw (Arrow)- 14, First Aid- 8, Hiking- 7, Soldier- 6, Stealth- -3, Survival (any)- 8
  • Whoops :oops: I just noticed Will was broken. Fixed now. I forgot to add a '(' to the line.
  • I'm not sure how to do this.

    I have a race that can select abilities from a list. Easy. However some of those abilities are natural weapons like teeth and horns. How do I get the table to take the randomly selected weapons and place them in the weapon section.

    Example
    Table: Infernal
    Set: Skills =[@{$Class}Skills&;#93;
    Set: ST ={! ({1d3+10} + [#1 {$Class}Bonus])}
    set: DX ={! ({1d3+9} + [#2 {$Class}Bonus])}
    set: IQ ={! ({1d3+8} + [#3 {$Class}Bonus])}
    set: HT ={! ({1d3+9} + [#4 {$Class}Bonus])}
    set: HP ={! ({$ST} + [#5 {$Class}Bonus])}
    set: Speed ={! (({$HT} + {$DX}) /4) + [#6 {$Class}Bonus] +0.5} 
    set: Will ={! ({$IQ} + [#7 {$Class}Bonus])}
    set: Move ={! floor(({$HT} + {$DX}) /4) + [#8 {$Class}Bonus]}
    set: Per ={! {$IQ} + [#9 {$Class}Bonus]}
    set: FP ={! ({$HT} +1) + [#10 {$Class}Bonus]}
    set: Dodge = {! floor({$Speed})+3}
    set: Parry = {! floor({$DX} /2)+3}
    
    <table border="0"><tr><td><b>[@MasterHumanName&;#93;</b></td><td><small>Infernal {$Class}</small></td></tr><tr><td>ST: {$ST}</td><td>HP: {$HP}</td><td>Speed: {$Speed}</td></tr><tr><td>DX: {$DX} </td><td>Will: {$Will}</td><td>Move: {$Move}</td></tr><tr><td>IQ: {$IQ}</td><td>Per:{$Per}</td></tr><tr><td>HT: {$HT}</td><td>FP: {$FP}</td><td>SM: 0</td></tr><tr><td>Dodge: {$Dodge}</td><td>Parry: {$Parry}</td><td>DR: 1</td></tr></table><br><b>Armor:</b> [@Armor&;#93;\n<b>Weapons:</b> <li>[#10 BrawlingWeapons]</li><li>[when][$Infernal Gifts] = Teeth (Sharp) do [#8 Brawlingweapons][end]</li><li>[when][$Infernal Gifts] = Teeth (Fangs) do [#6 Brawlingweapons][end]</li><li>[!Weapons]</li>[!{$Class}Weapons >> <li></li>]\n<b>Traits:</b> Claws (Hooves), Damage Resistance 1, Dark Vision [25], Fit, Infernal Gifts: [!3 Infernal Gifts >> implode]; Social Stigma (Infernal), Spirit Empathy, Weakness (Blessed areas and areas of high or better sanctity to Good gods; Occasional 1d/minute), [!5 {$Class}Traits >> implode >> sort]\n<b>Skills:</b> [!10 {$Class}Skills >> implode >> sort]
    

    Now here is what I tried to do
    <li>[when][$Infernal Gifts] = Teeth (Sharp) do [#8 Brawlingweapons][end]</li><li>[when][$Infernal Gifts] = Teeth (Fangs) do [#6 Brawlingweapons][end]</li>
    

    The Infernal Gifts table looks like this
    Table: Infernal Gifts
    \z
    Doesn't Breathe
    Doesn't Eat or Drink
    Doesn't Sleep
    Extra Life
    Flight (Winged, -25%)
    Immunity to Metabolic Hazards
    [|Striker, Horns (Crushing)|Striker, Horns (Impaling)|Striker, Horns (Tail)]
    [|Striker, Tail (Piercing)|Striker, Tail (Large Piercing)|Striker, Tail (Impaling)]
    [|Teeth (Sharp)|Teeth (Fangs)]
    Temerature Tolerance
    

    The Brawling Weapons table looks like this
    Table: BrawlingWeapons
    <b>Kick:</b> [#{$ST} ThrustDamage][#{$ST} ThrustDamageModifier] cr; SL: {!({$DX}-2) + {[$SL]}}
    <b>Punch:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cr; Parry: {! floor ((({$DX}-1) + {[@SL&;#93;})/2)+3}; SL: {!{$DX} + {[@SL&;#93;}}
    <b>Sharp Claws:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cut; Parry: {! floor ((({$DX}-1) + {[@SL&;#93;})/2)+3}; SL: {!{$DX} + {[@SL&;#93;}}
    <b>Talons:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cut or imp; Parry: {! floor ((({$DX}-1) + {[@SL&;#93;})/2)+3}; SL: {!{$DX} + {[@SL&;#93;}}
    <b>Blunt Teeth:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cr; SL: {!({$DX}-2) + {[$SL]}}
    <b>Fangs Teeth:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} imp; SL: {!({$DX}-2) + {[$SL]}}
    <b>Sharp Beak:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} pi+; SL: {!({$DX}-2) + {[$SL]}}
    <b>Sharp Teeth:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cut; SL: {!({$DX}-2) + {[$SL]}}
    <b>Blunt Claws:</b> [#{$ST} ThrustDamage]{! [#{$ST} ThrustDamageModifier]-1} cr; SL: {!{$DX} + {[$SL]}}
    <b>Hooves:</b> [#{$ST} ThrustDamage]{! ([#{$ST} ThrustDamageModifier] + [#{$ST} PlusOnePerDieThrust])} cr; SL: {!{$DX} + {[$SL]}}
    

    This will produce something like this.
    Clifri Infernal Average
    ST: 12 HP: 12 Speed: 6
    DX: 10 Will: 10 Move: 5
    IQ: 10 Per:10
    HT: 12 FP: 13 SM: 0
    Dodge: 9 Parry: 8 DR: 1

    Armor: Light Scale, Leather Limb (DR 3 Torso, DR 2 Arms, Legs)
    Weapons:
    1d0 cr; SL: 10
    (invalid conditional) this is were I want the damage stats to show but stated under Traits.
    (invalid conditional)

    Knife-Wheel: Thrust: 1d0 cut; Thrust: 1d-2 imp; Reach: C; Parry: 7;SL: 9 Very Fine Quality: -2 to break, +2 cut & imp damage(missing)
    Traits: Claws (Hooves), Damage Resistance 1, Dark Vision 25, Fit, Infernal Gifts: Doesn't Eat or Drink, Striker, Tail (Piercing), Doesn't Breathe; Social Stigma (Infernal), Spirit Empathy, Weakness (Blessed areas and areas of high or better sanctity to Good gods; Occasional 1d/minute), (missing)
    Skills: (missing)


    So how do I go about this?
  • Going to be changing some of this for IP3.

    Starting with the Weapons tables. I have currently this
    [when] {$ST} > 8 [do]<b>Shortsword:</b> Swung: [#{$ST} SwingDamage][#{$ST} SwingDamageModifier >> +-] cut; Thrust: [#{$ST} ThrustDamage][#{$ST} ThrustDamageModifier >> +-] imp; Parry: {floor ((({$DX}-1) + {[@SL&;#93;})/2)+3}; SL: {({$DX}-1) + {[@SL&;#93;}} [@QualityWeapons&;#93;[end]
    
    Table: QualityWeapons
    20: \z
    1: Fine Quality: 3 times the list price
    2: Good Quality: +40% of list price
    1: Fine Quality: -1 to Break, +1 cut & imp damage 
    1: Very Fine Quality: -2 to break, +2 cut & imp damage 
     
    Table: SL
    20: 0
    15: 1
    11: 2
    10: 3
    5: 4
    3: 5
    1: 6
    1: 7
    1: 8
    1: 9
    EndTable:
    
    
    Table: ThrustDamage 
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    1d
    2d
    2d
    
    Table: ThrustDamageModifier 
    -6
    -6
    -5
    -5
    -4
    -4
    -3
    -3
    -2
    -2
    -1
    -1
    0
    0
    1
    1
    2
    2
    -1
    -1
    
    

    This could return this

    Shortsword: Swung: 1d+2 cut; Thrust: 1d-1 imp; Parry: 9; SL: 19 Good Quality: +40% of list price

    Which is fine but if it returned this

    Shortsword: Swung: 1d+2 cut; Thrust: 1d-1 imp; Parry: 9; SL: 19 Fine Quality: -1 to Break, +1 cut & imp damage

    How could I get it to automatically insert the +1 into the two damage modifiers
  • You maybe over thinking this. I would use:
    ...<li>[!InfernalGift]</li><li>[!InfernalGift]</li>
    

    and make the following change to the table
    Table: InfernalGift
    \z
    Doesn't Breathe
    Doesn't Eat or Drink
    Doesn't Sleep
    Extra Life
    Flight (Winged, -25%)
    Immunity to Metabolic Hazards
    [|Striker, Horns (Crushing)|Striker, Horns (Impaling)|Striker, Horns (Tail)]
    [|Striker, Tail (Piercing)|Striker, Tail (Large Piercing)|Striker, Tail (Impaling)]
    [|[#8 Brawlingweapons]|[#6 Brawlingweapons]]
    Temerature Tolerance
    
  • I don't have enough code to test this, but I would probably try something like this:
    set: QWI = [@QualityWeaponsIndex&;#93;
    set: AddDam = [when]{$QWI}=3[do]1[else]0[end] + [when]{$QWI}=4[do]2[else]0[end] 
    [when] {$ST} > 8 [do]<b>Shortsword:</b> Swung: [#{$ST} SwingDamage][#{$ST} SwingDamageModifier +{$AddDam} >> +-] cut; Thrust: [#{$ST} ThrustDamage][#{$ST} ThrustDamageModifier +{$AddDam} >> +-] imp; Parry: {floor ((({$DX}-1) + {[@SL&;#93;})/2)+3}; SL: {({$DX}-1) + {[@SL&;#93;}} [{$QWI}QualityWeapons][end]
    
    Table: QualityWeaponsIndex
    20: 1
    1: 2
    2: 3
    1: 4
    1: 5
    
    
    Table: QualityWeapons
    \z
    Fine Quality: 3 times the list price
    Good Quality: +40% of list price
    Fine Quality: -1 to Break, +1 cut & imp damage
    Very Fine Quality: -2 to break, +2 cut & imp damage
    
  • Cheers I will give this a try.

Leave a Comment