> [!infobox|center wfull]
> # Chains of Asmodeus
> ![[Chains of Asmodeus Cover.jpg|320]]
> ###### Campaign
> | | |
> | ---- | ---- |
> | System | Dungeons and Dragons 5e |
> | Calendar | [[Calendar of Harptos]] |
>
> | | |
> | ---- | ---- |
> | Start Date | 03/01/2026 |
> | End Date | |
> | Campaign Duration | |
> | Number of Sessions | |
>
> | | |
> | ---- | ---- |
> | Start ([[Calendar of Harptos\|Harptos]]) | 12/21/1494 |
> | End ([[Calendar of Harptos\|Harptos]]) | |
> | In-game Duration | |
>
> | | |
> | ---- | ---- |
> | Dungeon Master | [[Lup]] |
## Cast
* [[Callista]] as [[Mystic|Mysty]], an infernal tiefling wizard (order of scribes)
* [[Connor]] as [[Blaedswith Ashenwynd|Blaed Ashenwynd]], a high elf paladin (oathbreaker)
* [[Jett]] as [[Kyward Apostasio]], a rock gnome apothecary (chemist)
* [[Rory]] as [[Marsh Ruldegost]], a water genasi cleric (life domain)
## All Characters
```base
filters:
and:
- file.hasTag("Character")
- note["Campaign"].contains(this)
formulas:
currentHarptos: this.file.properties["End (Harptos)"]
relHarptosExists: if(note["Born (Harptos - Relative)"].isEmpty(),false,true)
notBorn: if(note["Born (NY)"] || (note["Born (Harptos)"] - formula.currentHarptos).milliseconds < 0,false,true)
nyAge: (date("3859-12-30") - date(note["Born (NY)"])) + (formula.currentHarptos - date("0001-01-01"))
vrcyAge: if(Status != "Dead" && date(formula.currentHarptos.year + "-" + note["Born (VRCY)"].split("/")[0] + "-" + note["Born (VRCY)"].split("/")[1]) <= formula.currentHarptos,(35000 + formula.currentHarptos.year - number(note["Born (VRCY)"].split("/")[2])).toString() + " years",if(Status != "Dead",(35000 + formula.currentHarptos.year - 1 - number(note["Born (VRCY)"].split("/")[2])).toString() + " years",""))
harptosAge: formula.currentHarptos - note["Born (Harptos)"]
harptosAgeFloor: (formula.currentHarptos - note["Born (Harptos)"]).years.floor()
harptosAgeCalc: if(formula.harptosAgeFloor <= 0,formula.harptosAge,formula.harptosAgeFloor + " years")
relAge: formula.currentHarptos - note["Born (Harptos - Relative)"]
relAgeFloor: (formula.currentHarptos - note["Born (Harptos - Relative)"]).years.floor()
relAgeCalc: if(formula.relAgeFloor <= 0,formula.relAge,formula.relAgeFloor)
age_in_years: if(note["Born (Harptos)"] && formula.notBorn == false,formula.harptosAgeCalc,if(note["Born (VRCY)"],formula.vrcyAge,if(note["Born (NY)"],formula.nyAge,"Born in "+formula.harptosAgeCalc)))
rel_age_in_years: if(formula.relHarptosExists && note["Born (Harptos)"],formula.relAgeCalc,formula.age_in_years)
age_in_years_incl_rel: if(formula.relHarptosExists,formula.rel_age_in_years + " (Truly " + formula.age_in_years + ")",formula.age_in_years)
deathDate: if(note["Death Date (Harptos)"],note["Death Date (Harptos)"],note["Death Date (NY)"])
deathAgeInclRel: if(Status != "Dead",formula.rel_age_in_years,note["Death Age - Relative"] + " (Truly " + note["Death Age"] + ", Died " + formula.deathDate.format("MM/DD/YYYY") + ")")
campaign_age: if(Status != "Dead",formula.age_in_years_incl_rel,if(formula.relHarptosExists,formula.deathAgeInclRel,note["Death Age"] + " (Died " + formula.deathDate.format("MM/DD/YYYY") + ")"))
characterType: if(note["Character Type"].length == 2,"NPC",if(note["Character Type"].contains("Player Character"),"Player","NPC"))
properties:
file.name:
displayName: Character
formula.campaign_age:
displayName: Age at Campaign End
formula.characterType:
displayName: Character Type
views:
- type: table
name: Table
groupBy:
property: formula.characterType
direction: DESC
order:
- file.name
- formula.campaign_age
- Status
- formula.characterType
sort:
- property: formula.characterType
direction: DESC
- property: Status
direction: ASC
- property: file.name
direction: ASC
columnSize:
file.name: 275
formula.campaign_age: 235
```
## Timeline
See [[Chains of Asmodeus Timeline]] for a comprehensive timeline of the campaign.
## Locations
---
## Page Tags/Properties
**Tags:** #Campaign
**Category:** [[Campaigns.base|Campaigns]]