Agent tireur
Humanoïdemonster no map drops [1]
stance movement speed +% final [-64]
stance movement speed +% final [-18]
stance movement speed +% final [-18]
Security Ranger
| Spectre | Y |
|---|---|
| Spectre Override | Metadata/Monsters/LeagueHeist/Military/MilitaryRanged1_Spectre |
| Tags | has_bow, human, humanoid, light_armour, lightning_affinity, medium_movement, military, no_pantheon_mod, not_int, physical_affinity, puncturing_weapon, ranged, red_blood |
| Packs |
Vie
220%
Armure
+100%
Évasion
+50%
Ailment Threshold
220%
Résistance
Damage
140%
Précision
100%
Chances de coup critique
+5%
Multiplicateur de coups critiques
+130%
Attack Distance
6 ~ 60
Attack Time
1.5 Second
Damage Spread
±20%
Expérience
100%
Model Size
100%
Type
HeistMilitaryRanged1
Metadata
MilitaryRanged1_
The following values do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses.
Niveau
68
Vie
14,153
Armure
57,580
Score d'Évasion
7,109
Damage
523
Dégâts des sorts
523
Précision
580
Attack Time
1.5
Expérience
10,255
Minion Life
3,070
Minion Damage
418
Ailment Threshold
14,153
Chill
45
Shock
45
Brittle
253
Scorch
45
Sap
124
The following values are skill base values and do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses, monster base damage(ex: The Maven 150% multiplier), monster rarity bonuses (ex: unique 70% more, unique attack 33% less).
MeleeHeistTemplarArrow
Attack, RangedAttack, MirageArcherCanUse, Projectile, MeleeSingleTarget, Multistrikeable, Melee, ProjectilesFromUser
Attaque par défaut
Base Damage: 418–628
Chances de coup critique: 5%
Attack Time: 1.5 sec.
Frappez vos ennemis d'un coup puissant.
arrow projectile variation [28]
projectile uses contact position [1]
skill can fire arrows [1]
use scaled contact offset [1]
DoLiterallyNothing
EGHeistPullLever
Triggerable, Spell
Temps d'incantation: 2.17 sec.
skill cannot be knocked back [1]
skill cannot be stunned [1]
spell maximum action distance +% [-95]
WalkEmergeHeistGuard
walk emerge distance [200]
EASHeistMindControlSuicide
Spell
Temps d'incantation: 1 sec.
skill cannot be knocked back [1]
skill cannot be stunned [1]
MPWHeistTemplarRangedSnipe
Attack, RangedAttack, MirageArcherCanUse, Projectile, ProjectilesFromUser, Damage, Triggerable
Base Damage: 418–628
Chances de coup critique: 5%
Attack Time: 1.5 sec.
Temps de recharge: 14 sec.
GPHeistTemplarRangedSnipe
Attack, Triggerable, Channel
Base Damage: 418–628
Chances de coup critique: 5%
Dégâts d'Attaque: 175%
Attack Time: 1.5 sec.
75% Davantage de Dégâts d'Attaque
base is projectile [1]
cast time overrides attack duration [1]
projectile uses contact position [1]
use scaled contact offset [1]
GAHeistMilitaryCrossbowSnipeImpact
Triggerable, Attack
Base Damage: 418–628
Chances de coup critique: 5%
Dégâts d'Attaque: 109.38%
Attack Time: 1.5 sec.
50% des Dégâts physiques sont Convertis en Dégâts de foudre
9.38% Davantage de Dégâts d'Attaque
is area damage [1]
ChangeToStance1Heist
skill cannot be interrupted [1]
skill cannot be stunned [1]
Object Type
version 2
extends "Metadata/Monsters/LeagueHeist/HeistMonsterBase"
StateMachine
{
define_shared_state = "use_arrow_military = 1;"
}Object Type Codes
version 2 extends "Metadata/Monsters/LeagueHeist/HeistMonsterBase"
-- src\Data\Spectres.lua
minions["Metadata/Monsters/LeagueHeist/Military/MilitaryRanged1_"] = {
name = "Security Ranger",
life = 2.2,
fireResist = 0,
coldResist = 0,
lightningResist = 40,
chaosResist = 0,
damage = 1.4,
damageSpread = 0.2,
attackTime = 1.5,
attackRange = 60,
accuracy = 1,
weaponType1 = "Bow",
skillList = {
"MeleeHeistTemplarArrow",
"GPHeistTemplarRangedSnipe",
"MPWHeistTemplarRangedSnipe",
"GAHeistMilitaryCrossbowSnipeImpact",
"WalkEmergeHeistGuard",
"DoLiterallyNothing",
"EGHeistPullLever",
"EASHeistMindControlSuicide",
"ChangeToStance1Heist",
},
modList = {
},
}
-- src\Data\Skills\spectre.lua
skills["MeleeHeistTemplarArrow"] = {
name = "Default Attack",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
description = "Strike your foes down with a powerful blow.",
skillTypes = {
[SkillType.Attack] = true,
[SkillType.RangedAttack] = true,
[SkillType.MirageArcherCanUse] = true,
[SkillType.Projectile] = true,
[SkillType.MeleeSingleTarget] = true,
[SkillType.Multistrikeable] = true,
[SkillType.Melee] = true,
[SkillType.ProjectilesFromUser] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
melee = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"arrow_projectile_variation",
"skill_can_fire_arrows",
"projectile_uses_contact_position",
"use_scaled_contact_offset",
},
levels = {
[1] = {28, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GPHeistTemplarRangedSnipe"] = {
name = "GPHeistTemplarRangedSnipe",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Attack] = true,
[SkillType.Triggerable] = true,
[SkillType.Channel] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.5,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"base_is_projectile",
"cast_time_overrides_attack_duration",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
},
levels = {
[1] = {baseMultiplier = 1.75, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPWHeistTemplarRangedSnipe"] = {
name = "MPWHeistTemplarRangedSnipe",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Attack] = true,
[SkillType.RangedAttack] = true,
[SkillType.MirageArcherCanUse] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Damage] = true,
[SkillType.Triggerable] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 3.5,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"monster_projectile_variation",
"skill_physical_damage_%_to_convert_to_lightning",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
"cast_time_overrides_attack_duration",
"always_pierce",
},
levels = {
[1] = {115, 50, -40, baseMultiplier = 1.75, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAHeistMilitaryCrossbowSnipeImpact"] = {
name = "GAHeistMilitaryCrossbowSnipeImpact",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_physical_damage_%_to_convert_to_lightning",
"is_area_damage",
},
levels = {
[1] = {50, baseMultiplier = 1.0938, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["WalkEmergeHeistGuard"] = {
name = "WalkEmergeHeistGuard",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.5,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_distance",
},
levels = {
[1] = {200, levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DoLiterallyNothing"] = {
name = "DoLiterallyNothing",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
},
levels = {
[1] = {levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EGHeistPullLever"] = {
name = "EGHeistPullLever",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Spell] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 2.17,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
"skill_cannot_be_stunned",
"skill_cannot_be_knocked_back",
},
levels = {
[1] = {-95, levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EASHeistMindControlSuicide"] = {
name = "EASHeistMindControlSuicide",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_cannot_be_stunned",
"skill_cannot_be_knocked_back",
},
levels = {
[1] = {levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["ChangeToStance1Heist"] = {
name = "ChangeToStance1Heist",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_cannot_be_interrupted",
"skill_cannot_be_stunned",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
monster no map drops [1]
| Family | MonsterNoMapDrops |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
| Stats |
| Family | Nothing |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
stance movement speed +% final [-64]
| Family | Stance |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
| Stats | |
| Craft Tags | Vitesse |
stance movement speed +% final [-18]
| Family | Stance |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
| Stats | |
| Craft Tags | Vitesse |
Agent tireur
Humanoïdestance movement speed +% final [-64]
stance movement speed +% final [-18]
stance movement speed +% final [-18]
Security Ranger
| Spectre | Y |
|---|---|
| Tags | has_bow, human, humanoid, light_armour, lightning_affinity, medium_movement, military, no_pantheon_mod, not_int, physical_affinity, puncturing_weapon, ranged, red_blood |
| Packs |
Vie
220%
Armure
+100%
Évasion
+50%
Ailment Threshold
220%
Résistance
Damage
140%
Précision
100%
Chances de coup critique
+5%
Multiplicateur de coups critiques
+130%
Attack Distance
6 ~ 60
Attack Time
1.5 Second
Damage Spread
±20%
Expérience
100%
Model Size
100%
Type
HeistMilitaryRanged1
Metadata
MilitaryRanged1_Spectre
The following values do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses.
Niveau
68
Vie
14,153
Armure
57,580
Score d'Évasion
7,109
Damage
523
Dégâts des sorts
523
Précision
580
Attack Time
1.5
Expérience
10,255
Minion Life
3,070
Minion Damage
418
Ailment Threshold
14,153
Chill
45
Shock
45
Brittle
253
Scorch
45
Sap
124
The following values are skill base values and do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses, monster base damage(ex: The Maven 150% multiplier), monster rarity bonuses (ex: unique 70% more, unique attack 33% less).
MeleeHeistTemplarArrow
Attack, RangedAttack, MirageArcherCanUse, Projectile, MeleeSingleTarget, Multistrikeable, Melee, ProjectilesFromUser
Attaque par défaut
Base Damage: 418–628
Chances de coup critique: 5%
Attack Time: 1.5 sec.
Frappez vos ennemis d'un coup puissant.
arrow projectile variation [28]
projectile uses contact position [1]
skill can fire arrows [1]
use scaled contact offset [1]
DoLiterallyNothing
EGHeistPullLever
Triggerable, Spell
Temps d'incantation: 2.17 sec.
skill cannot be knocked back [1]
skill cannot be stunned [1]
spell maximum action distance +% [-95]
WalkEmergeHeistGuard
walk emerge distance [200]
EASHeistMindControlSuicide
Spell
Temps d'incantation: 1 sec.
skill cannot be knocked back [1]
skill cannot be stunned [1]
MPWHeistTemplarRangedSnipe
Attack, RangedAttack, MirageArcherCanUse, Projectile, ProjectilesFromUser, Damage, Triggerable
Base Damage: 418–628
Chances de coup critique: 5%
Attack Time: 1.5 sec.
Temps de recharge: 14 sec.
GPHeistTemplarRangedSnipe
Attack, Triggerable, Channel
Base Damage: 418–628
Chances de coup critique: 5%
Dégâts d'Attaque: 175%
Attack Time: 1.5 sec.
75% Davantage de Dégâts d'Attaque
base is projectile [1]
cast time overrides attack duration [1]
projectile uses contact position [1]
use scaled contact offset [1]
GAHeistMilitaryCrossbowSnipeImpact
Triggerable, Attack
Base Damage: 418–628
Chances de coup critique: 5%
Dégâts d'Attaque: 109.38%
Attack Time: 1.5 sec.
50% des Dégâts physiques sont Convertis en Dégâts de foudre
9.38% Davantage de Dégâts d'Attaque
is area damage [1]
ChangeToStance1Heist
skill cannot be interrupted [1]
skill cannot be stunned [1]
Object Type
version 2
extends "Metadata/Monsters/LeagueHeist/HeistMonsterSpectreBase"
StateMachine
{
define_shared_state = "use_arrow_military = 1;"
}Object Type Codes
version 2 extends "Metadata/Monsters/LeagueHeist/HeistMonsterSpectreBase"
-- src\Data\Spectres.lua
minions["Metadata/Monsters/LeagueHeist/Military/MilitaryRanged1_Spectre"] = {
name = "Security Ranger",
life = 2.2,
fireResist = 0,
coldResist = 0,
lightningResist = 40,
chaosResist = 0,
damage = 1.4,
damageSpread = 0.2,
attackTime = 1.5,
attackRange = 60,
accuracy = 1,
weaponType1 = "Bow",
skillList = {
"MeleeHeistTemplarArrow",
"GPHeistTemplarRangedSnipe",
"MPWHeistTemplarRangedSnipe",
"GAHeistMilitaryCrossbowSnipeImpact",
"WalkEmergeHeistGuard",
"DoLiterallyNothing",
"EGHeistPullLever",
"EASHeistMindControlSuicide",
"ChangeToStance1Heist",
},
modList = {
},
}
-- src\Data\Skills\spectre.lua
skills["MeleeHeistTemplarArrow"] = {
name = "Default Attack",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
description = "Strike your foes down with a powerful blow.",
skillTypes = {
[SkillType.Attack] = true,
[SkillType.RangedAttack] = true,
[SkillType.MirageArcherCanUse] = true,
[SkillType.Projectile] = true,
[SkillType.MeleeSingleTarget] = true,
[SkillType.Multistrikeable] = true,
[SkillType.Melee] = true,
[SkillType.ProjectilesFromUser] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
melee = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"arrow_projectile_variation",
"skill_can_fire_arrows",
"projectile_uses_contact_position",
"use_scaled_contact_offset",
},
levels = {
[1] = {28, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GPHeistTemplarRangedSnipe"] = {
name = "GPHeistTemplarRangedSnipe",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Attack] = true,
[SkillType.Triggerable] = true,
[SkillType.Channel] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.5,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"base_is_projectile",
"cast_time_overrides_attack_duration",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
},
levels = {
[1] = {baseMultiplier = 1.75, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPWHeistTemplarRangedSnipe"] = {
name = "MPWHeistTemplarRangedSnipe",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Attack] = true,
[SkillType.RangedAttack] = true,
[SkillType.MirageArcherCanUse] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Damage] = true,
[SkillType.Triggerable] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 3.5,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"monster_projectile_variation",
"skill_physical_damage_%_to_convert_to_lightning",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
"cast_time_overrides_attack_duration",
"always_pierce",
},
levels = {
[1] = {115, 50, -40, baseMultiplier = 1.75, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAHeistMilitaryCrossbowSnipeImpact"] = {
name = "GAHeistMilitaryCrossbowSnipeImpact",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_physical_damage_%_to_convert_to_lightning",
"is_area_damage",
},
levels = {
[1] = {50, baseMultiplier = 1.0938, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["WalkEmergeHeistGuard"] = {
name = "WalkEmergeHeistGuard",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 0.5,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_distance",
},
levels = {
[1] = {200, levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DoLiterallyNothing"] = {
name = "DoLiterallyNothing",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
},
levels = {
[1] = {levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EGHeistPullLever"] = {
name = "EGHeistPullLever",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Spell] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 2.17,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
"skill_cannot_be_stunned",
"skill_cannot_be_knocked_back",
},
levels = {
[1] = {-95, levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EASHeistMindControlSuicide"] = {
name = "EASHeistMindControlSuicide",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_cannot_be_stunned",
"skill_cannot_be_knocked_back",
},
levels = {
[1] = {levelRequirement = 0, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["ChangeToStance1Heist"] = {
name = "ChangeToStance1Heist",
hidden = true,
color = "4",
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_cannot_be_interrupted",
"skill_cannot_be_stunned",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
| Family | Nothing |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
stance movement speed +% final [-64]
| Family | Stance |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
| Stats | |
| Craft Tags | Vitesse |
stance movement speed +% final [-18]
| Family | Stance |
|---|---|
| Domains | monstre (3) |
| GenerationType | Unique (3) |
| Req. level | 1 |
| Stats | |
| Craft Tags | Vitesse |
Edit
Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.
Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.