I am trying to put together a D&D character sheet in obsidian using the dataview plugin. It is going well but I have run into the fact some stats which I want to display (e.g. AC) are a function of Ability Modifiers (e.g. Con of +3) which themselves are a function of the character’s Ability Scores (e.g. Con of 16).

As far as I can see, dataview lets you define variables (properties) in the front matter of a page and then reference them on different pages, but I cant seem to find a way to define one of these variable as a function of other variables.

I have tried this kind of thing with no success:

---

con: 16

conmod: floor((number(this.con) - 10)/2)

ac: 10 + this.conmod

---

`=ac`

This video was super helpful but only got me so far… Any advice? Maybe this is just a limitation of dataview.

  • SkinList@lemmy.worldOP
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    18 hours ago

    Basically solved! Code is as follows. This requires dataview and numerals add-ons for obsidian. I think there is some weird behaviour with the floor function that should be at the start of the g(x) function but i would guess that it is because it isnt a function that numerals supports perhaps? I haven’t looked at this yet.

    --- numerals: all

    strsco: 10

    consco: 16

    dexsco: 16

    intsco: 10

    wissco: 12

    chasco: 8

    ---

    ```math

    # define ability modifier calculation function

    g(x) = (x - 10)/2

    # ability scores are specified in the properties

    # calculate the modifiers using the ability modifier function g(x)

    @[strmod::0] = g(strsco)

    @[conmod::3] = g(consco)

    @[dexmod::3] = g(dexsco)

    @[intmod::0] = g(intsco)

    @[wismod::1] = g(wissco)

    @[chamod::-1] = g(chasco)

    # calculate AC

    @[ac::16] = 10 + conmod + dexmod

    ```

    AC is `=this.ac`

    References: