Update character creation

+7 -6
SRD-UE.typ
··· 3 3 4 4 #let SRD_VERSION = [0.1.0] 5 5 6 + #let today = datetime.today() 7 + 6 8 #set document(title: [ 7 9 Unchained System Reference Document v#[SRD_VERSION] 8 10 ]) ··· 38 40 columns: (auto, auto), 39 41 column-gutter: 0.25in, 40 42 grid.cell[ 41 - #strong( 42 - counter(page).display( 43 - "1", 44 - ), 43 + #counter(page).display( 44 + "1", 45 45 ) 46 46 ], 47 - grid.cell[ 48 - #sym.copyright #datetime.today().display("[year]") 47 + grid.cell(align: center + horizon)[ 48 + #sym.copyright 49 49 CC BY 4.0 50 + #upper(today.display("[month repr:short]")) #today.year() 50 51 ], 51 52 ) 52 53 ],
+129
sections/character-creation.typ
··· 3 3 4 4 = Choose a Character Sheet 5 5 6 + You'll record the main details of your character on a character sheet. 7 + Throughout this chapter, we use the term "character sheet" to mean whatever you use to track your character's details, whether it's a printed character sheet, a digital character sheet, or plain paper. 8 + Choose whichever style of sheet works for you, and then embark on creating a character! 9 + 10 + = Create Your Character 11 + 12 + Here are the steps to make a character; each step is explored in detail: 13 + 14 + + 15 + #strong[Choose a Class.] 16 + Every adventurer is a member of a class. 17 + A class broadly describes a character's vocation, special talents, and favored tactics. 18 + + 19 + #strong[Determine Origin.] 20 + A character's origin includes two elements: 21 + background and species. 22 + How did the character spend the years leading up to a life of adventure? 23 + Who are the character's ancestors? 24 + You can also choose your character's languages. 25 + + 26 + #strong[Determine Ability Scores.] 27 + Much of what your character does in the game depends on the character's six abilities. 28 + + 29 + #strong[Choose an Alignment.] 30 + Alignment is a shorthand for your character's moral compass. 31 + + 32 + #strong[Fill in Details.] 33 + Using the choices you've made, fill in the remaining details on your character sheet. 34 + 35 + == Step 1: Choose Class 36 + 37 + Choose a class, and write it on your character sheet. 38 + The Class Overview table summarizes the classes. 39 + See "Classes" for the classes' details. 40 + 41 + #{ 42 + let class-overviews = ( 43 + ( 44 + class: [Barbarian], 45 + likes: [Battle], 46 + primary-ability: [Strength], 47 + complexity: [Average], 48 + ), 49 + ( 50 + class: [Bard], 51 + likes: [Performing], 52 + primary-ability: [Charisma], 53 + complexity: [High], 54 + ), 55 + ( 56 + class: [Cleric], 57 + likes: [Gods], 58 + primary-ability: [Wisdom], 59 + complexity: [Average], 60 + ), 61 + ( 62 + class: [Druid], 63 + likes: [Nature], 64 + primary-ability: [Wisdom], 65 + complexity: [High], 66 + ), 67 + ( 68 + class: [Fighter], 69 + likes: [Weapons], 70 + primary-ability: [Strength or Dexterity], 71 + complexity: [Low], 72 + ), 73 + ( 74 + class: [Monk], 75 + likes: [Unarmed Combat], 76 + primary-ability: [Dexterity and Wisdom], 77 + complexity: [High], 78 + ), 79 + ( 80 + class: [Paladin], 81 + likes: [Defense], 82 + primary-ability: [Strength and Charism], 83 + complexity: [Average], 84 + ), 85 + ( 86 + class: [Ranger], 87 + likes: [Survival], 88 + primary-ability: [Dexterity and Wisdom], 89 + complexity: [Average], 90 + ), 91 + ( 92 + class: [Rogue], 93 + likes: [Stealth], 94 + primary-ability: [Dexterity], 95 + complexity: [Low], 96 + ), 97 + ( 98 + class: [Sorcerer], 99 + likes: [Power], 100 + primary-ability: [Charisma], 101 + complexity: [High], 102 + ), 103 + ( 104 + class: [Warlock], 105 + likes: [Occult lore], 106 + primary-ability: [Charisma], 107 + complexity: [High], 108 + ), 109 + ( 110 + class: [Wizard], 111 + likes: [Spellbooks], 112 + primary-ability: [Intelligence], 113 + complexity: [Average], 114 + ), 115 + ) 116 + show: figure.with(caption: [Class Overview]) 117 + set table.cell(breakable: true) 118 + table( 119 + columns: (1fr, 1fr, 1fr, 1fr), 120 + table.header([*Class*], [*Likes...*], [*Primary Ability*], [*Complexity*]), 121 + ..class-overviews 122 + .map(((class, likes, primary-ability, complexity)) => (class, likes, primary-ability, complexity)) 123 + .flatten(), 124 + ) 125 + } 126 + 127 + == Step 2: Character Origin 128 + 129 + == Step 3: Ability Scores 130 + 131 + == Step 4: Alignment 132 + 133 + == Step 5: Character Creation Details 134 + 6 135 = Create Your Character 7 136 8 137 = Level Advancement
+191 -56
sections/classes/barbarian.typ
··· 1 1 #import "/shared.typ": * 2 2 3 + #let barbarian-features-table-data = ( 4 + ( 5 + level: 1, 6 + proficiency-bonus: [+2], 7 + class-features: [Rage, Unarmored Defense, Weapon Mastery], 8 + rages: [2], 9 + rage-damage: [+2], 10 + weapon-masteries: [2], 11 + ), 12 + ( 13 + level: 2, 14 + proficiency-bonus: [+2], 15 + class-features: [Danger Sense], 16 + rages: [2], 17 + rage-damage: [+2], 18 + weapon-masteries: [2], 19 + ), 20 + ( 21 + level: 3, 22 + proficiency-bonus: [+2], 23 + class-features: [Barbarian Subclass, Primal Knowledge], 24 + rages: [3], 25 + rage-damage: [+2], 26 + weapon-masteries: [2], 27 + ), 28 + ( 29 + level: 4, 30 + proficiency-bonus: [+2], 31 + class-features: [Ability Score Improvement], 32 + rages: [3], 33 + rage-damage: [+2], 34 + weapon-masteries: [3], 35 + ), 36 + ( 37 + level: 5, 38 + proficiency-bonus: [+3], 39 + class-features: [Extra Attack, Fast Movement], 40 + rages: [3], 41 + rage-damage: [+2], 42 + weapon-masteries: [3], 43 + ), 44 + ( 45 + level: 6, 46 + proficiency-bonus: [+3], 47 + class-features: [Subclass feature], 48 + rages: [4], 49 + rage-damage: [+2], 50 + weapon-masteries: [3], 51 + ), 52 + ( 53 + level: 7, 54 + proficiency-bonus: [+3], 55 + class-features: [Feral Instinct, Instinctive Pounce], 56 + rages: [4], 57 + rage-damage: [+2], 58 + weapon-masteries: [3], 59 + ), 60 + ( 61 + level: 8, 62 + proficiency-bonus: [+3], 63 + class-features: [Ability Score Improvement], 64 + rages: [4], 65 + rage-damage: [+2], 66 + weapon-masteries: [3], 67 + ), 68 + ( 69 + level: 9, 70 + proficiency-bonus: [+4], 71 + class-features: [Brutal Strike], 72 + rages: [4], 73 + rage-damage: [+3], 74 + weapon-masteries: [3], 75 + ), 76 + ( 77 + level: 10, 78 + proficiency-bonus: [+4], 79 + class-features: [Subclass feature], 80 + rages: [4], 81 + rage-damage: [+3], 82 + weapon-masteries: [3], 83 + ), 84 + ( 85 + level: 11, 86 + proficiency-bonus: [+4], 87 + class-features: [Relentless Rage], 88 + rages: [4], 89 + rage-damage: [+3], 90 + weapon-masteries: [4], 91 + ), 92 + ( 93 + level: 12, 94 + proficiency-bonus: [+4], 95 + class-features: [Ability Score Improvement], 96 + rages: [5], 97 + rage-damage: [+3], 98 + weapon-masteries: [4], 99 + ), 100 + ( 101 + level: 13, 102 + proficiency-bonus: [+5], 103 + class-features: [Improved Brutal Strike], 104 + rages: [5], 105 + rage-damage: [+3], 106 + weapon-masteries: [4], 107 + ), 108 + ( 109 + level: 14, 110 + proficiency-bonus: [+5], 111 + class-features: [Subclass feature], 112 + rages: [5], 113 + rage-damage: [+3], 114 + weapon-masteries: [4], 115 + ), 116 + ( 117 + level: 15, 118 + proficiency-bonus: [+5], 119 + class-features: [Persistant Rage], 120 + rages: [5], 121 + rage-damage: [+3], 122 + weapon-masteries: [4], 123 + ), 124 + ( 125 + level: 16, 126 + proficiency-bonus: [+5], 127 + class-features: [Ability Score Improvement], 128 + rages: [5], 129 + rage-damage: [+4], 130 + weapon-masteries: [4], 131 + ), 132 + ( 133 + level: 17, 134 + proficiency-bonus: [+6], 135 + class-features: [Improved Brutal Strike], 136 + rages: [6], 137 + rage-damage: [+4], 138 + weapon-masteries: [4], 139 + ), 140 + ( 141 + level: 18, 142 + proficiency-bonus: [+6], 143 + class-features: [Indomitable Might], 144 + rages: [6], 145 + rage-damage: [+4], 146 + weapon-masteries: [4], 147 + ), 148 + ( 149 + level: 19, 150 + proficiency-bonus: [+6], 151 + class-features: [Epic Boon], 152 + rages: [6], 153 + rage-damage: [+4], 154 + weapon-masteries: [4], 155 + ), 156 + ( 157 + level: 20, 158 + proficiency-bonus: [+6], 159 + class-features: [Primal Champion], 160 + rages: [6], 161 + rage-damage: [+4], 162 + weapon-masteries: [4], 163 + ), 164 + ) 165 + 3 166 #place(bottom, float: true, scope: "parent")[ 4 167 #figure(caption: [Barbarian Features])[ 5 - #let features = table.cell.with(align: start) 168 + #let features = table.cell.with(align: start + bottom) 6 169 #table( 7 170 align: center, 8 - columns: (auto, auto, auto, auto, auto, auto), 9 - [*Level*], 10 - [*Proficiency Bonus*], 171 + columns: (auto, 1fr, 3fr, auto, auto, auto), 172 + table.cell(align: bottom)[*Level*], 173 + table.cell(align: bottom)[*Proficiency Bonus*], 11 174 features[*Class Features*], 12 - [*Rages*], 13 - [*Rage Damage*], 14 - [*Weapon Mastery*], 15 - 16 - [1], [+2], features[Rage, Unarmored Defense, Weapon Mastery], [2], [+2], [2], 17 - 18 - [2], [+2], features[Danger Sense], [2], [+2], [2], 19 - 20 - [3], [+2], features[Barbarian Subclass, Primal Knowledge], [3], [+2], [2], 21 - 22 - [4], [+2], features[Ability Score Improvement], [3], [+2], [3], 23 - 24 - [5], [+3], features[Extra Attack, Fast Movement], [3], [+2], [3], 25 - 26 - [6], [+3], features[Subclass feature], [4], [+2], [3], 27 - 28 - [7], [+3], features[Feral Instinct, Instinctive Pounce], [4], [+2], [3], 29 - 30 - [8], [+3], features[Ability Score Improvement], [4], [+2], [3], 31 - 32 - [9], [+4], features[Brutal Strike], [4], [+3], [3], 33 - 34 - [10], [+4], features[Subclass feature], [4], [+3], [3], 35 - 36 - [11], [+4], features[Relentless Rage], [4], [+3], [4], 37 - 38 - [12], [+4], features[Ability Score Improvement], [5], [+3], [4], 39 - 40 - [13], [+5], features[Improved Brutal Strike], [5], [+3], [4], 41 - 42 - [14], [+5], features[Subclass feature], [5], [+3], [4], 43 - 44 - [15], [+5], features[Persistant Rage], [5], [+3], [4], 45 - 46 - [16], [+5], features[Ability Score Improvement], [5], [+4], [4], 47 - 48 - [17], [+6], features[Improved Brutal Strike], [6], [+4], [4], 49 - 50 - [18], [+6], features[Indomitable Might], [6], [+4], [4], 51 - 52 - [19], [+6], features[Epic Boon], [6], [+4], [4], 53 - 54 - [20], [+6], features[Primal Champion], [6], [+4], [4], 175 + table.cell(align: bottom)[*Rages*], 176 + table.cell(align: bottom)[*Rage Damage*], 177 + table.cell(align: bottom)[*Weapon Mastery*], 178 + ..barbarian-features-table-data 179 + .map( 180 + ((level, proficiency-bonus, class-features, rages, rage-damage, weapon-masteries)) => ( 181 + [#level], 182 + proficiency-bonus, 183 + features(class-features), 184 + rages, 185 + rage-damage, 186 + weapon-masteries, 187 + ), 188 + ) 189 + .flatten(), 55 190 ) 56 191 ] 57 192 ] ··· 269 404 You embody primal power. 270 405 Your Strength and Constitution scores increase by 4, to a maximum of 25. 271 406 272 - #[ 273 - #set heading(outlined: true) 274 - == Barbarian Subclass: Path of the Berserker 275 - ] 276 - 277 - _Channel Rage into Violent Fury_ 278 - 279 - Barbarians who walk the Path of the Berserker direct their Rage primarily toward violence. 280 - Their path is one of untrammeled fury, and they thrill in the chaos of battle as they allow their Rage to seize and empower them. 407 + #{ 408 + set heading(outlined: true) 409 + [== Barbarian Subclass: Path of the Berserker] 410 + block[_Channel Rage into Violent Fury_] 411 + block[ 412 + Barbarians who walk the Path of the Berserker direct their Rage primarily toward violence. 413 + Their path is one of untrammeled fury, and they thrill in the chaos of battle as they allow their Rage to seize and empower them. 414 + ] 415 + } 281 416 282 417 === Level 3: Frenzy 283 418
+1 -2
sections/classes/bard.typ
··· 578 578 #[ 579 579 #set heading(outlined: true) 580 580 == Barbarian Subclass: Path of the Berserker 581 + _Channel Rage into Violent Fury_ 581 582 ] 582 - 583 - _Channel Rage into Violent Fury_ 584 583 585 584 Barbarians who walk the Path of the Berserker direct their Rage primarily toward violence. 586 585 Their path is one of untrammeled fury, and they thrill in the chaos of battle as they allow
+43 -39
sections/playing-the-game.typ
··· 60 60 show: block.with(above: u(2), below: u(2)) 61 61 show: figure.with(caption: [Ability Descriptions]) 62 62 table( 63 - columns: (1.2fr, 3fr), 63 + columns: (auto, 1fr), 64 64 [*Ability*], [*Score Measures...*], 65 65 [Strength], [Physical might], 66 66 [Dexterity], [Agiliy, reflexes, and balance], ··· 73 73 74 74 == Ability Scores 75 75 76 - Each ability has a score from 1 to 20, although some monsters have a score as high as 30. 77 - The score represents the magnitude of an ability. 78 - The Ability Scores table summarizes what the scores mean. 76 + #block[ 77 + Each ability has a score from 1 to 20, although some monsters have a score as high as 30. 78 + The score represents the magnitude of an ability. 79 + The Ability Scores table summarizes what the scores mean. 79 80 80 - #{ 81 - show: block.with(above: u(2), below: u(2)) 82 - show: figure.with(caption: [Ability Scores]) 83 - let score = table.cell.with(align: center) 84 - table( 85 - columns: (1fr, 5fr), 86 - score[*Score*], [*Meaning*], 87 - score[1], 88 - [ 89 - This is the lowest a score can normally go. If an effect reduces a score to 0, that effect explains what happens. 90 - ], 81 + #{ 82 + show: block.with(above: u(2), below: u(2)) 83 + show: figure.with(caption: [Ability Scores]) 84 + let score = table.cell.with(align: center) 85 + table( 86 + columns: (auto, 1fr), 87 + score[*Score*], [*Meaning*], 88 + score[1], 89 + [ 90 + This is the lowest a score can normally go. If an effect reduces a score to 0, that effect explains what happens. 91 + ], 91 92 92 - score[2--9], [This represents a weak capability.], 93 - score[10--11], [This represents the human average.], 94 - score[12--19], [This represents a strong capability.], 95 - score[20], 96 - [ 97 - This is the highest an adventurer's score can go unless a feature says otherwise. 98 - ], 93 + score[2--9], [This represents a weak capability.], 94 + score[10--11], [This represents the human average.], 95 + score[12--19], [This represents a strong capability.], 96 + score[20], 97 + [ 98 + This is the highest an adventurer's score can go unless a feature says otherwise. 99 + ], 99 100 100 - score[21--29], [This represents an extraordinary capability.], 101 - score[30], [This is the highest a score can go.], 102 - ) 103 - } 101 + score[21--29], [This represents an extraordinary capability.], 102 + score[30], [This is the highest a score can go.], 103 + ) 104 + } 105 + ] 104 106 105 107 == Ability Modifiers 106 108 107 - Each ability has a modifier that you apply whenever you make a D20 Test with that ability (explained in "D20 Tests"). 108 - An ability modifier is derived from its score, as shown in the Ability Modifiers table. 109 + #block[ 110 + Each ability has a modifier that you apply whenever you make a D20 Test with that ability (explained in "D20 Tests"). 111 + An ability modifier is derived from its score, as shown in the Ability Modifiers table. 112 + ] 109 113 110 114 = D20 Tests 111 115 ··· 120 124 + 121 125 *Add Modifiers.* 122 126 Add these modifiers to the number rolled on the d20. 123 - - 124 - *The Relevant Ability Modifier.* 125 - "Playing the Game" and "Rules Glossary" explain which ability modifiers to use for various D20 Tests. 126 - - 127 - *Your Proficiency Bonus If Relevant.* 128 - Each creature has a Proficiency Bonus, a number added when making a D20 Test that uses something, such as a skill, in which the creature has proficiency. 129 - See "Proficiency" later in "Playing the Game." 130 - - 131 - *Circumstantial Bonuses and Penalties.* 132 - A class feature, a spell, or another rule might give a bonus or penalty to the die roll. 127 + - 128 + *The Relevant Ability Modifier.* 129 + "Playing the Game" and "Rules Glossary" explain which ability modifiers to use for various D20 Tests. 130 + - 131 + *Your Proficiency Bonus If Relevant.* 132 + Each creature has a Proficiency Bonus, a number added when making a D20 Test that uses something, such as a skill, in which the creature has proficiency. 133 + See "Proficiency" later in "Playing the Game." 134 + - 135 + *Circumstantial Bonuses and Penalties.* 136 + A class feature, a spell, or another rule might give a bonus or penalty to the die roll. 133 137 + 134 138 *Compare the Total to a Target Number.* 135 139 If the total of the d20 and its modifiers equals or exceeds the target number ··· 246 250 247 251 show: figure.with(caption: [Skills]) 248 252 table( 249 - columns: (1fr, 1fr, 4fr), 253 + columns: (auto, auto, 1fr), 250 254 [*Skill*], [*Ability*], [*Example Uses*], 251 255 ..skills.map(((name, ability, example)) => (name, ability, example)).flatten(), 252 256 )
+3 -1
shared.typ
··· 35 35 #let base-template(content) = context { 36 36 // Typopgraphy 37 37 show title: set text(size: 2.2em) 38 + show heading: set block(above: u(2), below: u(1)) 38 39 show heading: set par(leading: u(0.5)) 39 40 show heading: set text(bottom-edge: "baseline") 40 41 show heading.where(level: 1): set text(size: 2em) ··· 66 67 // Paragraphs 67 68 set par(justify: true, first-line-indent: 1em, spacing: u()) 68 69 // Lists 69 - show list: set par(spacing: u(2)) 70 + show list: set par(spacing: u()) 70 71 71 72 // Figures 73 + show figure: set block(breakable: true) 72 74 set figure(numbering: none) 73 75 show figure: set text(weight: 500, number-type: "lining") 74 76 show strong: set text(weight: 400)