+ Reply to Thread
Page 1 of 5
1 2 3 4 5 LastLast
Results 1 to 10 of 44

Thread: d20 creature conversion

  1. #1
    Join Date
    Jan 2008
    Location
    Lidingö, Sweden
    Posts
    134
    Downloads
    49
    Uploads
    0

    Default d20 creature conversion

    I’ve been fiddling with a conversion of creatures from the d20 SRD (i.e. from the DnD Monster Manual) to BRP. I need the data for my Creature Generator spreadsheet. Since the data is available in XML and DB formats it’s not that difficult to do a translation. I’ve chosen the quick and dirty route and imported all data into Excel and now I’m almost done with the translation scripts.

    When I’m done, creating a word document and a PDF printout of all the creatures won’t be that much trouble, in fact it will just be a matter of writing a VBA script in Word that merges the all the information from the Excel spreadsheets per each creature and stores that as a creature description in a Word document. Before I do that I’d like to see if anyone has any objections to my transformation algorithms.

    1) Stats
    I base the conversion on the average given in the SRD. The stat is divided by the average dice value and the reminder is added as a dice bonus. The choice of dice is based on the average value.

    Code:
    '---------------------------------------------------------------------------------------
    ' Procedure : getDiceString
    ' Author    : Peter Brink
    ' Date      : 2008-05-10
    ' Purpose   : The average stat value / 6 would give you the number of dices used. But
    '             we dont use more than a handfull dices. We first need to analyze the
    '             average value and decide how many dices we will use. We then use the
    '             remainder as a point bonus.
    '---------------------------------------------------------------------------------------
    '
    Public Function getDiceString(averageVal As Integer) As String
        
        Dim noDice As Integer
        Dim diceType As Integer
        Dim diceMod As Integer
        
        diceType = 6
        
        Select Case averageVal
            Case 1 To 4 'split in number of d3 and add reminder as +p
                noDice = CInt(averageVal / 1.5)
                diceMod = averageVal Mod 1.5
                diceType = 3
            Case 5 To 10 'split in number of d4 and add reminder as +p
                noDice = CInt(averageVal / 2.5)
                diceMod = averageVal Mod 2.5
                diceType = 4
            Case 11 To 17 'split in 3d6 and add reminder as +p
                noDice = 3
                diceMod = averageVal - 11
            Case 11 To 20 'split in 4d6 and add reminder as +p
                noDice = 4
                diceMod = averageVal - 14
            Case 21 To 40 'split in 6d6 and add reminder as +p
                noDice = 6
                diceMod = averageVal - 21
            Case 41 To 60 'split in 8d6 and add reminder as +p
                noDice = 8
                diceMod = averageVal - 28
            Case 61 To 80 'split in 10d6 and add reminder as +p
                noDice = 10
                diceMod = averageVal - 35
            Case Else 'split in 10d10 and add reminder as +p
                noDice = 10
                diceMod = averageVal - 55
                diceType = 10
        End Select
        
        If averageVal = 0 Then
            getDiceString = "0"
        ElseIf Not diceMod = 0 Then
            getDiceString = noDice & "d" & diceType & "+" & diceMod
        Else
            getDiceString = noDice & "d" & diceType
        End If
        
    End Function
    SIZ is a little bit different matter as it's not given in the SRD. I base the conversion on the broad size category and the STR stat value.

    Code:
    '---------------------------------------------------------------------------------------
    ' Procedure : getSizDice
    ' Author    : Peter Brink
    ' Date      : 2008-05-10
    ' Purpose   : Uses the STR dice and the Size value of a creature to create it's SIZ dice
    '---------------------------------------------------------------------------------------
    '
    Public Function getSizDice(creatureSize As String, strDice As String) As String
        
        Select Case LCase(creatureSize)
            Case "fine" 'SIZ 1
                getSizDice = "1"
            Case "diminutive" 'SIZ 1-2
                getSizDice = "1d2"
            Case "tiny" 'SIZ 2-4
                getSizDice = "1d3+1"
            Case Else
                getSizDice = parseStrDice(strDice, creatureSize)
        End Select
        
    End Function
    2) Move
    I divide the d20 move rate by 10 and drop all reminders, this gives a reliable translation to BRP, IMO.

    3) Armour
    Here I just parses the armour record and uses the natural AC bonus as a AP value.

    4) Skills
    I wrote a skill conversion function for the Creature Creator and I use it here to convert a d20 skill to an equivalent BRP skill. The skill ranks are multiplied by 5 and this gives a first rudimentary conversion. However, the skill levels seems a bit high so I'm wondering if I don't need to write a more intelligent conversion routine.

    5) Weapons
    Same as with skills, the skill rank is converted. This can lead to quite high base chances. But some creatures in RQ also had high base chances. A more general conversion algorithm is probably needed here... The weapon type checked against those I have in the Creator.

    6) Hit Locations
    I use the categories of hit locations from RQ Creatures. I also need to create a few new ones. No problems here as far as I can see.

    7) Description
    The description contains of a few sections. The first is just a short description of the creature and that only needs to be extracted. The second is a very brief note on the creature's combat tactics, also only needs to be extracted. Then there are notes about special powers and the like. I don't really plan to keep those - but I haven't decided yet. There are also notes on the creatures skills, or what skills the creature has any racial bonuses in. I'm wondering if one perhaps should use these notes when assessing the average skill values and perhaps that will lead to a better choice of base skill levels.

  2. #2
    Join Date
    Mar 2008
    Posts
    10
    Downloads
    1
    Uploads
    0

    Default

    That's a great idea. DnD has great monsters.

  3. #3
    Join Date
    Oct 2007
    Location
    Bingley, Yorkshire
    Posts
    1,153
    Downloads
    44
    Uploads
    2

    Default

    I'm not very familiar with the 3.x monster stats. (Still struggling to find a good way to convert the old MM ones!)

    Does your method distinguish AC factors that are due to DEX-type bonuses? They should add to parry and/or dodge skills somehow.

    Once you know their CON, how about using their HPs to calculate SIZ?
    "Frogspawner usually only speaks gibberish..." [280/420]

  4. #4
    Join Date
    Jan 2008
    Location
    Lidingö, Sweden
    Posts
    134
    Downloads
    49
    Uploads
    0

    Default

    Quote Originally Posted by frogspawner View Post
    Does your method distinguish AC factors that are due to DEX-type bonuses? They should add to parry and/or dodge skills somehow.
    The d20 SRD has been translated into XML and from there into various DB formats, that's my source. The armour class record for an Aboleth, for example, looks like this:

    Code:
    16 (-2 size, +1 Dex, +7 natural), touch 9, flat-footed 15
    This function parses that string and returns the natural AC bonus, which I use as natural AP.
    Code:
    Public Function parseAC(armourString As String) As Integer
        Dim armour As Variant
        Dim tempStr As Variant
        Dim natural As Variant
        Dim cleanedStr As Variant
        Dim apValue As Variant
        
        armour = Split(armourString, ",")
        apValue = 0
        
        For Each tempStr In armour
            If InStr(LCase(tempStr), "natural") > 0 Then
                cleanedStr = Trim(tempStr)
                natural = Split(cleanedStr, " ")
                apValue = natural(0)
                apValue = CInt(Right(apValue, Len(apValue) - InStr(apValue, "+")))
            End If
        Next
        
        parseAC = apValue
        
    End Function
    So, no I don't use the DEX bonuses in my calculation.

    Quote Originally Posted by frogspawner View Post
    Once you know their CON, how about using their HPs to calculate SIZ?
    But HP in DnD does not reflect CON + SIZ, at least I have not been able to any such relationship. In 3E all creatures are sorted into a set of Size categories. I base my calculation on that plus the STR value of the creature. SIZ and STR are often somewhat related in BRP.
    Last edited by peterb; May 17th, 2008 at 12:11.

  5. #5
    Join Date
    Oct 2007
    Location
    Bingley, Yorkshire
    Posts
    1,153
    Downloads
    44
    Uploads
    2

    Default

    Quote Originally Posted by peterb View Post
    So, no I don't use the DEX bonuses in my calculation.
    That's good, then!

    Quote Originally Posted by peterb View Post
    But HP in DnD does not reflect CON + SIZ, at least I have not been able to any such relationship.
    I think HP is very important for the 'character' of a monster, and should be kept close to the D&D HPs where reasonable. Knowing HP and CON, SIZ would then be defined. Obviously it doesn't work for all D&D creatures: some have more HP/HD than they should from Size alone. So I'd apply some sort of 'cap', according to size category (the extra HD/HP giving extra Dodge capability, say). Or are you taking the view that D&D HPs need to change, being generally too high for BRP?
    "Frogspawner usually only speaks gibberish..." [280/420]

  6. #6
    Join Date
    Jan 2008
    Location
    Lidingö, Sweden
    Posts
    134
    Downloads
    49
    Uploads
    0

    Default

    Quote Originally Posted by frogspawner View Post
    I think HP is very important for the 'character' of a monster, and should be kept close to the D&D HPs where reasonable. Knowing HP and CON, SIZ would then be defined. Obviously it doesn't work for all D&D creatures: some have more HP/HD than they should from Size alone. So I'd apply some sort of 'cap', according to size category (the extra HD/HP giving extra Dodge capability, say). Or are you taking the view that D&D HPs need to change, being generally too high for BRP?
    I try to convert the creatures so that they conform to the normal scale of powers in d100 games. From this follows that I change the HP value of the creatures - so yes I do think the HPs needs to change, they are too high for BRP, IMO.

  7. #7
    Join Date
    Oct 2007
    Location
    Bingley, Yorkshire
    Posts
    1,153
    Downloads
    44
    Uploads
    2

    Default

    Yes, you're probably right. I prefer to keep the D&D HP values, but that's non-standard and may be too much.

    Does your algorithm match creatures already published in BRP well? For example (dragons are too variable)...
    T.Rex: STR 10D6+32 (av.67); CON 4D6+21 (av.35); SIZ 6D6+32 (av.53); HP 44; AP 10; Bite 50% 2d6+db; Claw 35% d4+db/2; Kick 45% D6+db.

    My way would give 'em 80-90hp (from MM, not sure how many HD they have in 3.x). How about yours?
    "Frogspawner usually only speaks gibberish..." [280/420]

  8. #8
    Join Date
    Apr 2008
    Location
    Chicago, IL
    Posts
    332
    Downloads
    37
    Uploads
    1

    Default

    I ran 5 or 6 sessions of BRP&D, a fast and dirty conversion to classless d100.

    I loved the simplicity of size in D&D. I pretty much doubled HP for each category larger than Medium. Im not sure if I used the same progression in the reverse direction.

    Sure, it wasn't as granular as having an actual Size score, but no one semed to mind.

  9. #9
    Join Date
    Oct 2007
    Location
    Bingley, Yorkshire
    Posts
    1,153
    Downloads
    44
    Uploads
    2

    Default

    Quote Originally Posted by Harshax View Post
    I ran 5 or 6 sessions of BRP&D, a fast and dirty conversion to classless d100. ... I pretty much doubled HP for each category larger than Medium.
    And a 'slow and dirty' conversion is all I usually run!
    But I don't quite understand the conversion you used - how many HP would an 18 HD T.Rex have had in yours?
    "Frogspawner usually only speaks gibberish..." [280/420]

  10. #10
    Join Date
    Jan 2008
    Location
    Lidingö, Sweden
    Posts
    134
    Downloads
    49
    Uploads
    0

    Default

    Quote Originally Posted by frogspawner View Post
    Yes, you're probably right. I prefer to keep the D&D HP values, but that's non-standard and may be too much.

    Does your algorithm match creatures already published in BRP well? For example (dragons are too variable)...
    T.Rex: STR 10D6+32 (av.67); CON 4D6+21 (av.35); SIZ 6D6+32 (av.53); HP 44; AP 10; Bite 50% 2d6+db; Claw 35% d4+db/2; Kick 45% D6+db.

    My way would give 'em 80-90hp (from MM, not sure how many HD they have in 3.x). How about yours?
    From the data in the SRD a Tyranosaurus would have:
    STR 10d6+32, CON 6d6+14, SIZ 10d6+48, HP 59, AP 5, Bite 55%.

    Because I decided to use the STR value as a base for SIZ some inconsistencies with existing creatures will happen. I figure that most large creatures have more SIZ than STR, but that might be a false assumption on my part... Maybe one should use the average of the average values of STR and CON instead and possibly add or subtract a few points based on size class.
    Last edited by peterb; May 17th, 2008 at 19:29.

+ Reply to Thread
Page 1 of 5
1 2 3 4 5 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts