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

Add The Evergreen Hunt subfaction #1669

Merged
merged 1 commit into from
Nov 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion src/factions/sylvaneth/artifacts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { tagAs } from 'factions/metatagger'
import { HERO_PHASE, START_OF_COMBAT_PHASE, START_OF_HERO_PHASE, WOUND_ALLOCATION_PHASE } from 'types/phases'
import {
HERO_PHASE,
START_OF_COMBAT_PHASE,
START_OF_HERO_PHASE,
START_OF_ROUND,
WOUND_ALLOCATION_PHASE,
} from 'types/phases'

const Artifacts = {
'Greenwood Gladius': {
Expand Down Expand Up @@ -56,6 +62,16 @@ const Artifacts = {
},
],
},
// Evergreen Hunt
'Heartwood Hunting Horn': {
effects: [
{
name: `Heartwood Hunting Horn`,
desc: `Once per battle, at the start of any battle round, the bearer can say that they will blow their Heartwood Hunting Horn. If they do so, you receive 1 additional Hunting Harmony chord for that battle round.`,
when: [START_OF_ROUND],
},
],
},
}

export default tagAs(Artifacts, 'artifact')
77 changes: 77 additions & 0 deletions src/factions/sylvaneth/battle_traits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import {
COMBAT_PHASE,
DURING_GAME,
DURING_SETUP,
END_OF_CHARGE_PHASE,
END_OF_MOVEMENT_PHASE,
END_OF_SETUP,
HERO_PHASE,
START_OF_HERO_PHASE,
START_OF_ROUND,
WARDS_PHASE,
} from 'types/phases'
import rule_sources from './rule_sources'
Expand Down Expand Up @@ -84,6 +87,80 @@ const BattleTraits = {
],
},

'The Evergreen Hunt': {
effects: [
{
name: `To Honour Kurnouth`,
desc: `Friendly EVERGREEN HUNT units that do not have the HERO keyword have the Battleline battlefield role.`,
when: [DURING_GAME],
},
{
name: `Rhythm of the Chase`,
desc: `After deployment, before the players have determined who will take the first turn, you can pick 1 enemy unit on the battlefield to be the quarry. If the quarry is destroyed, at the start of your next hero phase, you can pick 1 enemy unit on the battlefield to be the new quarry.`,
when: [END_OF_SETUP],
},
{
name: `Harmonies of the Hunt`,
desc: `At the start of each battle round, after the priority roll has been made, each player commanding an Evergreen Hunt army must determine their Hunting Harmony for that battle round, starting with the player taking the first turn. A Hunting Harmony is made up of a number of chords. You start with 0 chords and receive 1 chord for the following:

- If a friendly BELTHANOS is on the battlefield.
- For each friendly EVERGREEN HUNT unit wholly ewithin the same large quarter of the battlefield as the quarry.
- For each quarry destroyed during the battle.

Add up the number of chords you received and consult the Hunting Harmony Table to see which effects will apply to your army for that battle round. These effects are cumulative: if you have 6 chords, all of the effects in the table will apply. Hunting Harmony chords are lost at the end of each battle round.

0: Discordant: No effect.
1: Simple: Add 1 to run rolls and charge rolls for friendly units wholly within the same large quarter of the battlefield as the quarry.
2: Tuneful: Add 1 to hit rolls and wound rolls for attacks made with melee weapons that target an enemy unit wholly within the same large quarter of the battlefield as the quarry.
3-5: Melodic: Add 1 to the Attacks characteristic of melee weapons used by friendly units while they are within 3" of the quarry.
6+: Mellifluous: While a friendly unit is wholly within the same large quarter of the battlefield as the quarry, it is eligible to fight in the combat phase if it is within 6" of the quarry instead of 3", and it can move an extra 3" when it piles in. `,
when: [START_OF_ROUND],
},
{
name: `Adundant Growth`,
desc: `After territories are determined, before faction terrain features are set up, you can pick up to 3 terrain features on the battlefield that are wholly outside enemy territory. These terrain features are considered by you to be overgrown terrain features.

At the start of your hero phase, you can heal 1 wound allocated to each friendly EVERGREEN HUNT unit that is wholly within 9" of an overgrown terrain feature.`,
when: [END_OF_SETUP],
},
{
name: `Adundant Growth`,
desc: `At the start of your hero phase, you can heal 1 wound allocated to each friendly EVERGREEN HUNT unit that is wholly within 9" of an overgrown terrain feature.`,
when: [START_OF_HERO_PHASE],
},
{
name: `Heroic Action: A Prize Quarry is Sighted`,
desc: `Pick 1 friendly EVERGREEN HUNT HERO and 1 enemy unit within 9" of that HERO. That enemy unit becomes the quarry instead of the enemy unit that was picked to be the quarry.`,
when: [START_OF_HERO_PHASE],
},
{
name: `Monstrous Rampage: Merciful Strike`,
desc: `If the quarry has any wounds allocated to it and is within 3" of this unit, roll a dice and add the number of wounds allocated to the quarry to the roll. If the result is greater than the quarry's Wounds characteristic, 1 model in that unit is slain.`,
when: [END_OF_CHARGE_PHASE],
},
],
},

'The Evergreen Hunt Battle Tactics': {
effects: [
{
name: 'Trophy Kill',
desc: `You complete this tactic if the quarry was destroyed by an attack made with a melee weapon in this turn.`,
when: [START_OF_HERO_PHASE],
},
{
name: 'Encircled',
desc: `You complete this tactic if, at the end of this turn, all friendly units are in the same large quarter of the battlefield as the quarry.`,
when: [START_OF_HERO_PHASE],
},
{
name: 'Spring the Trap',
desc: `You complete this tactic if 4 or more friendly units made a charge move in this turn and 1 or more of those units made an attack with a melee weapon that targeted the quarry in this turn.`,
when: [START_OF_HERO_PHASE],
},
],
},

'Battle Tactics': {
effects: [
{
Expand Down
12 changes: 11 additions & 1 deletion src/factions/sylvaneth/command_traits.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { tagAs } from 'factions/metatagger'
import { COMBAT_PHASE, HERO_PHASE, MOVEMENT_PHASE, SAVES_PHASE } from 'types/phases'
import { COMBAT_PHASE, HERO_PHASE, MOVEMENT_PHASE, SAVES_PHASE, START_OF_HERO_PHASE } from 'types/phases'
import rule_sources from './rule_sources'

const CommandTraits = {
Expand Down Expand Up @@ -58,6 +58,16 @@ const CommandTraits = {
},
],
},
// Evergreen Hunt
'Sapwood Leader': {
effects: [
{
name: `Sapwood Leader`,
desc: `When you use the Abundant Growth battle trait to heal this general, you can heal up to D3 wounds allocated to this general instead of 1.`,
when: [START_OF_HERO_PHASE],
},
],
},
}

export default tagAs(CommandTraits, 'command_trait')
10 changes: 10 additions & 0 deletions src/factions/sylvaneth/grand_strategies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ const GrandStrategies = {
},
],
},
// Evergreen Hunt
'The Grand Hunt': {
effects: [
{
name: `The Grand Hunt`,
desc: `When the battle ends, you complete this grand strategy if you have destroyed 4 or more quarries.`,
when: [END_OF_GAME],
},
],
},
}

export default tagAs(GrandStrategies, 'grand_strategy')
5 changes: 1 addition & 4 deletions src/factions/sylvaneth/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import { Faction } from 'factions/factionClass'
import { pickEffects } from 'factions/metatagger'
import { ORDER } from 'meta/alliances'
import { SYLVANETH } from 'meta/factions'
import BattleTraits from './battle_traits'
import rule_sources from './rule_sources'
import SubFactions from './subfactions'

Expand All @@ -11,6 +9,5 @@ export const SylvanethFaction = new Faction(
ORDER,
SubFactions,
'Glades',
rule_sources.BATTLETOME_SYLVANETH,
pickEffects(BattleTraits, [SYLVANETH, 'Battle Tactics'])
rule_sources.BATTLETOME_SYLVANETH
)
28 changes: 20 additions & 8 deletions src/factions/sylvaneth/subfactions.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IItemDescription } from 'factions/factionTypes'
import { keyPicker, pickEffects } from 'factions/metatagger'
import { keyOmitter, keyPicker, pickEffects } from 'factions/metatagger'
import Artifacts from './artifacts'
import Battalions from './battalions'
import BattleTraits from './battle_traits'
Expand All @@ -11,19 +11,20 @@ import GrandStrategies from './grand_strategies'
import Scenery from './scenery'
import Spells from './spells'
import Units from './units'
import { SYLVANETH } from 'meta/factions'

const baseSubFaction: IItemDescription = {
mandatory: {
spells: [keyPicker(Spells, ['Verdant Blessing'])],
},
available: {
artifacts: [Artifacts],
artifacts: [keyOmitter(Artifacts, ['Heartwood Hunting Horn'])],
battalions: [Battalions],
command_abilities: [CommandAbilities],
command_traits: [CommandTraits],
command_traits: [keyOmitter(CommandTraits, ['Sapwood Leader'])],
endless_spells: [EndlessSpells],
flavors: [Flavors],
grand_strategies: [GrandStrategies],
grand_strategies: [keyOmitter(GrandStrategies, ['The Grand Hunt'])],
scenery: [Scenery],
spells: [Spells],
units: [Units],
Expand All @@ -34,19 +35,30 @@ const baseSubFaction: IItemDescription = {
const subFactions = {
'The Burgeoning': {
...baseSubFaction,
effects: pickEffects(BattleTraits, ['The Burgeoning']),
effects: pickEffects(BattleTraits, ['The Burgeoning', SYLVANETH, 'Battle Tactics']),
},
'The Reaping': {
...baseSubFaction,
effects: pickEffects(BattleTraits, ['The Reaping']),
effects: pickEffects(BattleTraits, ['The Reaping', SYLVANETH, 'Battle Tactics']),
},
'The Dwindling': {
...baseSubFaction,
effects: pickEffects(BattleTraits, ['The Dwindling']),
effects: pickEffects(BattleTraits, ['The Dwindling', SYLVANETH, 'Battle Tactics']),
},
Everdusk: {
...baseSubFaction,
effects: pickEffects(BattleTraits, ['Everdusk']),
effects: pickEffects(BattleTraits, ['Everdusk', SYLVANETH, 'Battle Tactics']),
},
'The Evergreen Hunt': {
...baseSubFaction,
available: {
...baseSubFaction.available,
flavors: [],
artifacts: [Artifacts],
command_traits: [CommandTraits],
grand_strategies: [GrandStrategies],
},
effects: pickEffects(BattleTraits, ['The Evergreen Hunt', 'The Evergreen Hunt Battle Tactics']),
},
}

Expand Down
Loading