Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Monster languages should be NamedAPIResource #272

Open
markbastian opened this issue Sep 20, 2020 · 4 comments
Open

Monster languages should be NamedAPIResource #272

markbastian opened this issue Sep 20, 2020 · 4 comments
Assignees

Comments

@markbastian
Copy link
Contributor

The key "languages" is inconsistent across the API and so either the monster languages should be NamedAPIResources or perhaps changed to a different key (maybe "communication").

@bagelbits
Copy link
Collaborator

Good shout out! I think that makes a lot of sense!

@bagelbits
Copy link
Collaborator

bagelbits commented Sep 20, 2020

So, this also falls into a similar issue with damage_vulnerabilities, damage_resistances, and damage_immunities. Most cases follow the normal amounts but there are a lot of places where this breaks down. The first two monsters are good examples of this:
Aboleth has "Deep Speech, telepathy 120 ft."
Acolyte has "any one language (usually Common)"

While the latter could benefit from the choice structure, the former is a bit more complicated. Here is a list of all of the ways that language will not fall into an easy structure like this:

"languages": "Abyssal, Common, Infernal, Primordial",
"languages": "Abyssal, Common, Infernal, telepathy 60 ft.",
"languages": "Abyssal, telepathy 120 ft.",
"languages": "Abyssal, telepathy 60 ft. (works only with creatures that understand Abyssal)",
"languages": "all, telepathy 120 ft.",
"languages": "any four languages",
"languages": "any languages it knew in life",
"languages": "any one language (usually Common)",
"languages": "any one language",
"languages": "any six languages",
"languages": "any two languages",
"languages": "Auran, understands Common but doesn't speak it",
"languages": "Blink Dog, understands Sylvan but can't speak it",
"languages": "Celestial, Elvish, Sylvan, telepathy 60 ft.",
"languages": "Common (can't speak in bear form)",
"languages": "Common (can't speak in boar form)",
"languages": "Common (can't speak in rat form)",
"languages": "Common (can't speak in tiger form)",
"languages": "Common (can't speak in wolf form)",
"languages": "Common plus up to five other languages",
"languages": "Common, Giant, Winter Wolf",
"languages": "Deep Speech, telepathy 120 ft.",
"languages": "Druidic plus any two languages",
"languages": "Giant Eagle, understands Common and Auran but can't speak",
"languages": "Giant Elk, understands Common, Elvish, and Sylvan but can't speak",
"languages": "Giant Owl, understands Common, Elvish, and Sylvan but can't speak",
"languages": "Gnoll",
"languages": "Goblin, Worg",
"languages": "Infernal, telepathy 120 ft.",
"languages": "one language known by its creator",
"languages": "Otyugh",
"languages": "Sahuagin",
"languages": "the languages it knew in life",
"languages": "Thieves' cant plus any two languages",
"languages": "understands Abyssal but can't speak",
"languages": "understands Abyssal, Celestial, Infernal, and Primordial but can't speak, telepathy 
"languages": "understands Abyssal, Common, and Infernal but can't speak",
"languages": "understands all languages it knew in life but can't speak",
"languages": "understands all languages it spoke in life but can't speak",
"languages": "understands Celestial, Common, Elvish, and Sylvan but can't speak",
"languages": "understands commands given in any language but can't speak",
"languages": "understands Common and Draconic but can't speak",
"languages": "understands Common and Giant but can't speak",
"languages": "understands Common but can't speak",
"languages": "understands Deep Speech but can't speak",
"languages": "understands Draconic but can't speak",
"languages": "understands Infernal but can't speak it",
"languages": "understands infernal but can't speak",
"languages": "understands the languages of its creator but can't speak",

@bagelbits
Copy link
Collaborator

A way that we could potentially handle this is turn the string into a list of entries. All of the ones that have a corresponding language we could use the APIReference structure. And the rest stay as just a string in the list. Not sure how best to handle understands Infernal but can't speak it. Maybe a boolean for languages that it can't speak?

@fergcb
Copy link
Member

fergcb commented Sep 20, 2020

An array of entries is a sound idea, but perhaps rather than each entry being either a string or a reference, the array (for "Blink Dog, understands Sylvan but can't speak it") could look something more like:

[
    {
        "name": "Blink Dog"
    },
    {
        "name": "Sylvan",
        "references": {
            "index": "sylvan",
            "name": "Sylvan",
            "url": "/api/languages/sylvan"
        },
        "passive": true
    }
]

Here references is optional, and only given for languages given in the SRD, and which therefore exist in the API.

passive is also optional, defaulting to false. If it is true, the monster has a passive skill, meaning it can understand but not speak the language.

Whatever we settle on, preserving the source text as a separate attribute is definitely a good call.

@bagelbits bagelbits self-assigned this Dec 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants