Skip to content

Commit

Permalink
Add Stormcast Eternals Battletome (fixes #1396) (#1401)
Browse files Browse the repository at this point in the history
* Artifacts/Command Traits/Battle Traits

* Update spells.ts

* Add prayers

* Command/mount traits

* Update flavors.ts

* Remove comments

* Done with data entry!

* Consolidate rules

* Fix up/remove tests

* Update app_banner.tsx
  • Loading branch information
daviseford authored Sep 19, 2021
1 parent 0227b2c commit cc21751
Show file tree
Hide file tree
Showing 42 changed files with 891 additions and 3,698 deletions.
2 changes: 2 additions & 0 deletions clean.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const replaceOptions = {
/(?<!:)(?<=desc: `.+[\w()])[,(/#!$^&;=\-_~]`/g, // Replace trailing punctuation with periods in descriptions
/(?<!:)(?<=desc: `.+\w)`/g, // Add a period to descriptions
/(?<=[desc]: `)[\w' ]+ has a casting value of+(?=.+`)/g, // Shorten casting descriptions
/(?<=[desc]: `)[\w' ]+ is a prayer that has an answer value of+(?=.+`)/g, // Shorten prayer descriptions
/R[eE] ?- ?[rR][oO][lL]{2}/g, // Handle "Re - roll" -> "Reroll"
/r[eE] ?- ?[rR][oO][lL]{2}/g, // Handle "re-roll" -> "reroll"
],
Expand All @@ -36,6 +37,7 @@ const replaceOptions = {
'.`', // Replace trailing punctuation with periods in descriptions
'.`', // Add a period to descriptions
`Casting value of`, // Shorten casting descriptions
`Answer value of`, // Shorten prayer descriptions
`Reroll`, // Handle "Re - roll" -> "Reroll"
`reroll`, // Handle "re-roll" -> "reroll"
],
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "aos-reminders",
"version": "5.1.1",
"version": "5.1.2",
"private": true,
"homepage": "./",
"dependencies": {
Expand All @@ -9,7 +9,7 @@
"@stripe/react-stripe-js": "1.4.1",
"@stripe/stripe-js": "1.17.1",
"bootstrap": "4.6.0",
"core-js": "3.17.3",
"core-js": "3.18.0",
"deepmerge": "4.2.2",
"jspdf": "1.5.3",
"lodash": "4.17.21",
Expand Down Expand Up @@ -84,7 +84,7 @@
"@types/jspdf": "1.3.3",
"@types/lodash": "4.14.173",
"@types/luxon": "2.0.4",
"@types/node": "16.9.2",
"@types/node": "16.9.4",
"@types/parse5": "6.0.1",
"@types/pdfjs-dist": "2.7.1",
"@types/qs": "6.9.7",
Expand Down
11 changes: 3 additions & 8 deletions src/components/info/banners/app_banner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import React from 'react'

const AppBanner = () => {
const { isDark } = useTheme()
const name = 'aos-3-new-warhammer-app-import'
const name = 'aos-3-orruk-sce-battletome-release'

return (
<NotificationBanner
Expand All @@ -15,13 +15,8 @@ const AppBanner = () => {
variant={isDark ? `info` : `info`}
>
<span>
<strong>NEW: </strong>We've added the ability to import lists from the new Warhammer App. Just hit
"Import List" and then copy + paste your list to get started!
<br />
<small>
This feature is still in development and may change rapidly! Please let me know if you encounter
issues.
</small>
<strong>NEW: </strong>The newly-released Orruk Warclans and Stormcast Eternal battletomes have been
added!
</span>
</NotificationBanner>
)
Expand Down
2 changes: 1 addition & 1 deletion src/factions/cities_of_sigmar/prayers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ const Prayers = {
effects: [
{
name: `Incitement to Murder`,
desc: `This is a prayer that has an answer value of 3. If answered, pick 1 friendly HAR KURON unit wholly within 12" of the chanter. Until the start of your next hero phase, if the unmodified hit roll for an attack made by that unit is 6, that attack scores 2 hits on the target instead of 1. Make a wound and save roll for each hit. You cannot pick the same unit to benefit from this prayer more than once per phase.`,
desc: `Answer value of 3. If answered, pick 1 friendly HAR KURON unit wholly within 12" of the chanter. Until the start of your next hero phase, if the unmodified hit roll for an attack made by that unit is 6, that attack scores 2 hits on the target instead of 1. Make a wound and save roll for each hit. You cannot pick the same unit to benefit from this prayer more than once per phase.`,
when: [HERO_PHASE],
rule_sources: [meta_rule_sources.ERRATA_BROKEN_REALMS_MORATHI_JULY_2021],
},
Expand Down
8 changes: 4 additions & 4 deletions src/factions/daughters_of_khaine/prayers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ const Prayers = {
},
{
name: `Animated`,
desc: `Animated is a prayer that has an answer value of 3.`,
desc: `Answer value of 3.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.ERRATA_DAUGHTERS_OF_KHAINE_JULY_2021],
},
Expand All @@ -127,7 +127,7 @@ const Prayers = {
effects: [
{
name: `Rune of Khaine`,
desc: `Rune of Khaine is a prayer that has an answer value of 3. If answered, pick 1 of the chanter's melee weapons (it cannot be a weapon used by a mount). Until your next hero phase, that melee weapon has a Damage characteristic of D3 instead of the value shown in its profile.`,
desc: `Answer value of 3. If answered, pick 1 of the chanter's melee weapons (it cannot be a weapon used by a mount). Until your next hero phase, that melee weapon has a Damage characteristic of D3 instead of the value shown in its profile.`,
when: [HERO_PHASE],
rule_sources: [
rule_sources.BATTLETOME_DAUGHTERS_OF_KHAINE,
Expand All @@ -149,7 +149,7 @@ const Prayers = {
effects: [
{
name: `Touch of Death`,
desc: `Touch of Death is a prayer that has an answer value of 3 and a range of 3". If answered, pick 1 enemy unit within range and visible to the chanter. Then, take a dice and hide it in one of your hands. Your opponent must pick one of your hands. If they pick the one holding the dice, that enemy unit suffers D3 mortal wounds.`,
desc: `Answer value of 3 and a range of 3". If answered, pick 1 enemy unit within range and visible to the chanter. Then, take a dice and hide it in one of your hands. Your opponent must pick one of your hands. If they pick the one holding the dice, that enemy unit suffers D3 mortal wounds.`,
when: [HERO_PHASE],
rule_sources: [
rule_sources.BATTLETOME_DAUGHTERS_OF_KHAINE,
Expand All @@ -162,7 +162,7 @@ const Prayers = {
effects: [
{
name: `Dance of Doom`,
desc: `Dance of Doom is a prayer that has an answer value of 3. If answered, in the combat phase, after the chanter has fought in that phase for the first time, when it is your turn to pick a unit to fight, the chanter can be picked to fight for a second time if it is within 3" of any enemy units.`,
desc: `Answer value of 3. If answered, in the combat phase, after the chanter has fought in that phase for the first time, when it is your turn to pick a unit to fight, the chanter can be picked to fight for a second time if it is within 3" of any enemy units.`,
when: [HERO_PHASE],
rule_sources: [
rule_sources.BATTLETOME_DAUGHTERS_OF_KHAINE,
Expand Down
14 changes: 7 additions & 7 deletions src/factions/fyreslayers/prayers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const Prayers = {
effects: [
{
name: `Searing Heat`,
desc: `Searing Heat is a prayer that has an answer value of 3 and a range of 18". If answered, pick 1 enemy unit within range and visible to the chanter. Subtract 1 from hit rolls for attacks made by that unit until the start of your next hero phase.`,
desc: `Answer value of 3 and a range of 18". If answered, pick 1 enemy unit within range and visible to the chanter. Subtract 1 from hit rolls for attacks made by that unit until the start of your next hero phase.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -30,7 +30,7 @@ const Prayers = {
effects: [
{
name: `Prayer of Ash`,
desc: `Prayer of Ash is a prayer that has an answer value of 4 and a range of 18". If answered, pick 1 friendly FYRESLAYERS unit wholly within range and visible to the chanter. Add 1 to save rolls for attacks that target that unit until the start of your next hero phase.`,
desc: `Answer value of 4 and a range of 18". If answered, pick 1 friendly FYRESLAYERS unit wholly within range and visible to the chanter. Add 1 to save rolls for attacks that target that unit until the start of your next hero phase.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -46,7 +46,7 @@ const Prayers = {
effects: [
{
name: `Ember Storm`,
desc: `Ember Storm is a prayer that has an answer value of 3 and a range of 18". If answered, pick 1 friendly VULKITE BERZERKERS or HEARTHGUARD BERZERKERS unit wholly within range and visible to the chanter. That unit can run and still charge later in that turn.`,
desc: `Answer value of 3 and a range of 18". If answered, pick 1 friendly VULKITE BERZERKERS or HEARTHGUARD BERZERKERS unit wholly within range and visible to the chanter. That unit can run and still charge later in that turn.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -62,7 +62,7 @@ const Prayers = {
effects: [
{
name: `Prayer of Grimnir's Fury`,
desc: `Prayer of Grimnir's Fury is a prayer that has an answer value of 3 and a range of 12". If answered, pick 1 friendly FYRESLAYERS HERO that does not have a mount, is within range and visible to the chanter, and is within 3" of an enemy unit. That HERO can fight.`,
desc: `Answer value of 3 and a range of 12". If answered, pick 1 friendly FYRESLAYERS HERO that does not have a mount, is within range and visible to the chanter, and is within 3" of an enemy unit. That HERO can fight.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -72,7 +72,7 @@ const Prayers = {
effects: [
{
name: `Gilded Claws`,
desc: `Gilded Claws is a prayer that has an answer value of 3 and a range of 12". If answered, pick 1 friendly Magmadroth unit within range and visible to the chanter. Add 1 to wound rolls for attacks made by that unit with its Claws and Horns until the start of your next hero phase.`,
desc: `Answer value of 3 and a range of 12". If answered, pick 1 friendly Magmadroth unit within range and visible to the chanter. Add 1 to wound rolls for attacks made by that unit with its Claws and Horns until the start of your next hero phase.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -89,7 +89,7 @@ const Prayers = {
effects: [
{
name: `Volcano's Call`,
desc: `Volcano's Call is a prayer that has an answer value of 3 and a range of 18". If answered, pick 1 terrain feature wholly within range and visible to the chanter. Roll a dice for each model within 1" of that terrain feature. For each 6, that model's unit suffers 1 mortal wound.`,
desc: `Answer value of 3 and a range of 18". If answered, pick 1 terrain feature wholly within range and visible to the chanter. Roll a dice for each model within 1" of that terrain feature. For each 6, that model's unit suffers 1 mortal wound.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand All @@ -99,7 +99,7 @@ const Prayers = {
effects: [
{
name: `Runic Empowerment`,
desc: `Runic Empowerment is a prayer that has an answer value of 3 and a range of 12". If the chanter carries a Forge Key, this prayer has a range of 18" instead. If answered, pick 1 friendly FYRESLAYERS unit wholly within range and visible to the chanter. Add 1 to wound rolls for attacks made by that unit until the start of your next hero phase.`,
desc: `Answer value of 3 and a range of 12". If the chanter carries a Forge Key, this prayer has a range of 18" instead. If answered, pick 1 friendly FYRESLAYERS unit wholly within range and visible to the chanter. Add 1 to wound rolls for attacks made by that unit until the start of your next hero phase.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_FYRESLAYERS, rule_sources.ERRATA_FYRESLAYERS_JULY_2021],
},
Expand Down
4 changes: 2 additions & 2 deletions src/factions/khorne/prayers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ const Prayers = {
effects: [
{
name: `Blood Boil`,
desc: `Blood Boil is a prayer that has an answer value of 4 and a range of 16". If answered, pick 1 enemy unit within range of the chanter that is visible to them. That unit suffers D6 mortal wounds.`,
desc: `Answer value of 4 and a range of 16". If answered, pick 1 enemy unit within range of the chanter that is visible to them. That unit suffers D6 mortal wounds.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_KHORNE, rule_sources.ERRATA_KHORNE_JULY_2021],
},
Expand All @@ -96,7 +96,7 @@ const Prayers = {
effects: [
{
name: `Blood Bind`,
desc: `Blood Bind is a prayer that has an answer value of 4 and a range of 16". If answered, pick 1 enemy unit within range of the chanter that is visible to them and more than 3" from all friendly units. Your opponent must move that unit a number of inches equal to the chanting roll. The first model to be moved from that unit must finish the move as close as possible to the closest unit in your army (it can finish the move within 3" of units in your army). Any remaining models in that unit must finish their move in unit coherency and as close as possible to the closest unit from your army.`,
desc: `Answer value of 4 and a range of 16". If answered, pick 1 enemy unit within range of the chanter that is visible to them and more than 3" from all friendly units. Your opponent must move that unit a number of inches equal to the chanting roll. The first model to be moved from that unit must finish the move as close as possible to the closest unit in your army (it can finish the move within 3" of units in your army). Any remaining models in that unit must finish their move in unit coherency and as close as possible to the closest unit from your army.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_KHORNE, rule_sources.ERRATA_KHORNE_JULY_2021],
},
Expand Down
6 changes: 3 additions & 3 deletions src/factions/ogor_mawtribes/prayers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const Prayers = {
effects: [
{
name: `Pulverising Hailstorm`,
desc: `Pulversing Hailstorm is a prayer that has an answer value of 4 and a range of 18". If answered, pick a point on the battlefield within range and visible to the chanter. Roll 1 dice for each unit within 3" of that point. On a 3+, that unit suffers D3 mortal wounds.`,
desc: `Answer value of 4 and a range of 18". If answered, pick a point on the battlefield within range and visible to the chanter. Roll 1 dice for each unit within 3" of that point. On a 3+, that unit suffers D3 mortal wounds.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_OGOR_MAWTRIBES, rule_sources.ERRATA_OGOR_MAWTRIBES_JULY_2021],
},
Expand All @@ -17,7 +17,7 @@ const Prayers = {
effects: [
{
name: `Keening Gale`,
desc: `Keening Gale is a prayer that has an answer value of 4 and a range of 18". If answered, pick 1 friendly MONSTER or MOURNFANG PACK wholly within range and visible to the chanter. Add 3" to that unit's Move characteristic until the start of your next hero phase.`,
desc: `Answer value of 4 and a range of 18". If answered, pick 1 friendly MONSTER or MOURNFANG PACK wholly within range and visible to the chanter. Add 3" to that unit's Move characteristic until the start of your next hero phase.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_OGOR_MAWTRIBES, rule_sources.ERRATA_OGOR_MAWTRIBES_JULY_2021],
},
Expand All @@ -27,7 +27,7 @@ const Prayers = {
effects: [
{
name: `Call of the Blizzard`,
desc: `Call of the Blizzard is a prayer that has an answer value of 4 and a range of 18". If answered, pick 1 friendly ICEFALL YHETEES unit wholly within range and visible to the chanter. You can return 1 slain model to that unit.`,
desc: `Answer value of 4 and a range of 18". If answered, pick 1 friendly ICEFALL YHETEES unit wholly within range and visible to the chanter. You can return 1 slain model to that unit.`,
when: [HERO_PHASE],
rule_sources: [rule_sources.BATTLETOME_OGOR_MAWTRIBES, rule_sources.ERRATA_OGOR_MAWTRIBES_JULY_2021],
},
Expand Down
21 changes: 0 additions & 21 deletions src/factions/orruk_warclans/big_waaagh/command_abilities.ts

This file was deleted.

47 changes: 0 additions & 47 deletions src/factions/orruk_warclans/bonesplitterz/artifacts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,53 +89,6 @@ const BonesplitterzArtifacts = {
},
],
},

// Seem to have been removed in the 2021 battletome
// 'Greatdrake Toof': {
// effects: [
// {
// name: `Greatdrake Toof`,
// desc: `Pick a melee weapon to become the Greatdrake Toof. On an unmodified wound roll of 6 this weapon deals double damage.`,
// when: [COMBAT_PHASE],
// },
// ],
// },
// 'Weepwood Big Shiv': {
// effects: [
// {
// name: `Weepwood Big Shiv`,
// desc: `Pick a melee weapon. Add 1 to the attacks characteristic of this weapon.`,
// when: [COMBAT_PHASE],
// },
// ],
// },
// 'Savage Trophy': {
// effects: [
// {
// name: `Savage Trophy`,
// desc: `Add 1 to the Bravery characteristic of all friendly Bonesplitterz models within 10" of the bearer.`,
// when: [BATTLESHOCK_PHASE],
// },
// ],
// },
// 'Big Wurrgog Mask': {
// effects: [
// {
// name: `Big Wurrgog Mask`,
// desc: `Pick an enemy unit within 12" in the hero phase and roll up to 3 dice, each 2+ inflicts D3 MW's on the unit, on a 1 you take D3 MW's.`,
// when: [HERO_PHASE],
// },
// ],
// },
// 'Mystic Waaagh! Paint': {
// effects: [
// {
// name: `Mystic Waaagh! Paint`,
// desc: `At the start of your hero phase roll a D6 on the spell lore table, this wizard can attempt to cast it for free, if it already knows the spell rolled it gets 1 additional spell cast for the turn.`,
// when: [HERO_PHASE],
// },
// ],
// },
}

export default tagAs(BonesplitterzArtifacts, 'artifact')
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,6 @@ const BonesplitterzCommandAbilities = {
},
],
},
// 'Savage Attack': {
// effects: [
// {
// name: `Savage Attack`,
// desc: `Pick 1 friendly BONESPLITTERZ unit wholly within 12" of a friendly model with this command ability. Until the end of that phase, if the unmodified hit roll for an attack made by that unit is 6, that attack scores 2 hits on the target instead of 1. A unit cannot benefit from this command ability more than once per phase.`,
// when: [START_OF_COMBAT_PHASE],
// },
// ],
// },
}

export default tagAs(BonesplitterzCommandAbilities, 'command_ability')
38 changes: 0 additions & 38 deletions src/factions/orruk_warclans/bonesplitterz/command_traits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,44 +65,6 @@ const BonesplitterzCommandTraits = {
},
],
},

// Removed in 2021
// 'Waaagh!-monger': {
// effects: [
// {
// name: `Waaagh!-monger`,
// desc: `If your general is alive, roll a D6 at the start of the hero phase, on a 4+ you get 1 CP.`,
// when: [START_OF_HERO_PHASE],
// },
// ],
// },
// "Dead Kunnin'": {
// effects: [
// {
// name: `Dead Kunnin'`,
// desc: `At the start of the game, gain an additional D3 command points.`,
// when: [START_OF_GAME],
// },
// ],
// },
// 'Master of the Weird': {
// effects: [
// {
// name: `Master of the Weird`,
// desc: `This general has +1 to cast, unbind, and dispell attempts.`,
// when: [HERO_PHASE],
// },
// ],
// },
// 'Fuelled by the Spirits': {
// effects: [
// {
// name: `Fuelled by the Spirits`,
// desc: `Pick 1 extra spell from the Lore of the Savage Beast table. This general may also cast 1 additional spell.`,
// when: [HERO_PHASE],
// },
// ],
// },
}

export default tagAs(BonesplitterzCommandTraits, 'command_trait')
Loading

0 comments on commit cc21751

Please sign in to comment.