To generate a standard monster, pick a monster race and a monster class.
library(sfrpg)
Note - Recharging attacks: - Some monsters have attacks with (recharge n+). These attacks are spent on use, and cannot be used again until recharged. - At the end of a monster's turn, roll 1d6 for each spent recharge attack that wasn't used this turn. If the roll is equal or higher to the recharge value, the attack is recharged. - PCs are aware when a monster they can see succeeds at recharging. They don't know details about the recharged power, but they can find out with a Skill Check (see Skills chapter). - Some recharge attacks are labeled as Exhausted: monsters start combat with these powers spent.
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Standard',subcategory=='Humanoid') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Standard',subcategory=='Undead') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Standard',subcategory=='Beast') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Standard', subcategory %in% c('Aberration', 'Plant', 'Ooze')) htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Standard', subcategory=='Mundane') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Standard', subcategory=='Humanoid') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Standard', subcategory=='Elemental') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
Unlike most characters, minions do not have a HP value - do not keep track of damage done to minions. Instead, use the following:
In addition, most minions have Partial Vulnerability (Melee or Ranged), included in their stats.
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Minion', subcategory=='Humanoid') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Minion', subcategory=='Undead') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Minion', subcategory=='Beast') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Minion', subcategory %in% c('Plant', 'Ooze')) htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Minion', subcategory=='Mundane') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
All Elite Monsters gain the following rules:
Apply to Standard monsters to convert them to Elite
Basic Elite Monster: - Double XP value - Double HP - Trait: Elite Attack: Melee and Ranged attacks can target 1 additional enemy in range. Area and Close attacks have Burst size increased by 1. Damaging attacks that target a single enemy deal +D/2 damage.
Monsters with the following classes gain the Elite monster special rules, double XP and double HP (already included in stats).
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Elite') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
Monsters with the following classes gain the Elite monster special rules, double XP and double HP.
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Elite') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
All Solo Monsters gain the following rules:
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(category=='Solo', subcategory=='Dragon') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Solo', subcategory=='Dragon') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(category=='Solo', subcategory=='Eye') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Solo', subcategory=='Eye') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
Fat: - +50% XP value - Double HP
Veteran: - +25% XP value - +6/12/24 HP, depending on tier - +2/4/8 D, depending on tier - +1H, +1Def
In this section, we show monster templates with basic stats that can be used as reference when designing custom monsters.
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Standard', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()>=11, Level %>% as.numeric()<21, category=='Standard', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()>=21, category=='Standard', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Standard', subcategory=='Example') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Minion', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_class <- read_csv_monster("monster_classes") %>% dplyr::filter(category=='Minion', subcategory=='Example') htm_monster_class <- get_htm_monster_class(df_monster_class) %>% get_monster_list_htm( ) htm_monster_class %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()<11, category=='Solo', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()>=11, Level %>% as.numeric()<21, category=='Solo', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
df_monster_race <- read_csv_monster("monster_races") %>% dplyr::filter(Level %>% as.numeric()>=21, category=='Solo', subcategory=='Example') htm_monster_race <- get_htm_monster_race(df_monster_race) %>% get_monster_list_htm() htm_monster_race %>% cat()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.