鮮血祭司.阿塔澤克
人形
monster dropped item rarity +% [4800]
monster slain experience +% [0]
monster slain flask charges granted +% [-50]
Zolin, Blood Priest
SpectreN
Area庫阿西克寶庫
Tags2HSharpMetal_onhit_audio, fast_movement, human, humanoid, not_str, red_blood, 瓦爾, very_fast_movement
生命
240%
Energy Shield From Life
15%
閃避
+33%
抗性
0 30 0 0
傷害
300%
命中
100%
暴擊 Chance
5%
暴擊傷害加成
+30%
Attack Distance
4 ~ 14
攻擊時間
1.5 Second
Damage Spread
±20%
經驗值
300%
Model Size
135%
Type
VaalBloodPriestBoss
Metadata
VaalBloodPriestBoss_
等級
56
生命
7,662
傷害
477
法術傷害
477
命中
1,588
攻擊時間
1.5
經驗值
37,638
召喚物生命
9,419
Minion Energy Shield
1,662
召喚物傷害
1,538
召喚物護甲
1,176
MeleeAtAnimationSpeedUnique
攻擊, 範圍攻擊, 技能可幻影射手, 投射物, 近戰單一目標, 近戰, 玩家投射物
基礎攻擊
Base Damage: 381–572
暴擊率: 5%
攻擊時間: 1.5 秒
action attack or cast time uses animation length [1]
monster penalty against minions damage +% final vs player minions [100]
projectile uses contact position [1]
skill can fire wand projectiles [1]
use scaled contact offset [1]
EASVaalBloodPriestBodySwap
冷卻時間: 10 秒
不能被擊退
無法被暈眩
action attack or cast time uses animation length [1]
skill cannot be interrupted [1]
EASVaalBloodPriestLifeDrain
冷卻時間: 7.5 秒
action attack or cast time uses animation length [1]
VaalBloodPriestMiniBossSoulrend
法術, 範圍, 持續時間, 投射物, DoT, 混沌, 法術可重複, 可觸發, 陷阱技能, 地雷技能, 圖騰技能, DegenOnlySpellDamage, 範圍法術
施放時間: 1.25 秒
每秒造成 218.6 基礎物理傷害
action attack or cast time uses animation length [1]
active skill area of effect radius +% final [-25]
base is projectile [1]
base skill effect duration [1000]
projectile uses contact position [1]
spell maximum action distance +% [-40]
EASBloodPriestBossTeleport
冷卻時間: 10 秒
action attack or cast time uses animation length [1]
EASBloodPriestBossVolley
冷卻時間: 14 秒
action attack or cast time uses animation length [1]
EASBloodPriestBossVolleyEnraged
冷卻時間: 16 秒
action attack or cast time uses animation length [1]
EAABloodPriestBossSacrifice
冷卻時間: 22 秒
action attack or cast time uses animation length [1]
MPSBloodPriestBossBloodProj
法術, 投射物, 玩家投射物, 可觸發, 傷害
暴擊率: 5%
施放時間: 1 秒
造成 419.7629.5 物理傷害
action attack or cast time uses animation length [1]
base is projectile [1]
check for targets between initiator and projectile source [1]
distribute projectiles over contact points [1]
maintain projectile direction when using contact position [1]
monster projectile variation [1416]
projectile uses bearing as firing orientation [1]
projectile uses contact direction [1]
projectile uses contact position [1]
projectiles not offset [2]
projectiles travel at fixed height [1]
use scaled contact offset [1]
MDBloodPriestBossBloodPool
法術可重複, 可觸發
冷卻時間: 15.5 秒
EGBloodPriestBossSacrifice
可觸發
MDBloodPriestBossSoulCoreBeam
法術可重複, 可觸發
GSBloodTwinsSoulCoreBeamImpact
可觸發, 法術, 傷害
暴擊率: 6%
施放時間: 1 秒
造成 655.71967 閃電傷害
action attack or cast time uses animation length [1]
is area damage [1]
GSBloodPriestTransformBreathe
可觸發, 法術, 傷害
暴擊率: 6%
施放時間: 1 秒
造成 104.9157.4 火焰傷害
action attack or cast time uses animation length [1]
base skill cannot be avoided by dodge roll or blocked [1]
is area damage [1]

Object Type

version 2
extends "Metadata/Monsters/Monster"
extends "Metadata/Monsters/BossBase"

StateMachine
{
	define_shared_state =
	"
		invisible;
		elemental = 1;
	"
}

Object Type Codes

version 2
extends "Metadata/Monsters/Monster"
extends "Metadata/Monsters/BossBase"

StateMachine
{
	on_state_invisible_1 = "AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act3_FOUR/BloodPriestess/epks/teleport/quick_step_out.epk' );"
	on_state_invisible_0 = "RemoveEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act3_FOUR/BloodPriestess/epks/teleport/quick_step_out.epk' );AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act3_FOUR/BloodPriestess/epks/teleport/quick_step_in.epk' );"
}
-- src\Data\Spectres.lua
minions["Metadata/Monsters/VaalMonsters/Living/BloodPriests/VaalBloodPriestBoss_"] = {
    name = "Zolin, Blood Priest",
    life = 2.4,
    energyShield = 0.15,
    fireResist = 0,
    coldResist = 0,
    lightningResist = 0,
    chaosResist = 0,
    damage = 3,
    damageSpread = 0.2,
    attackTime = 1.5,
    attackRange = 14,
    accuracy = 1,
    weaponType1 = "Dagger",
    skillList = {
        "MeleeAtAnimationSpeedUnique",
        "MPSBloodPriestBossBloodProj",
        "GSBloodTwinsSoulCoreBeamImpact",
        "GSBloodPriestTransformBreathe",
        "EASVaalBloodPriestBodySwap",
        "EASVaalBloodPriestLifeDrain",
        "EASBloodPriestBossVolley",
        "EASBloodPriestBossVolleyEnraged",
        "EAABloodPriestBossSacrifice",
        "EASBloodPriestBossTeleport",
        "MDBloodPriestBossBloodPool",
        "MDBloodPriestBossSoulCoreBeam",
        "EGBloodPriestBossSacrifice",
        "VaalBloodPriestMiniBossSoulrend",
    },
    modList = {
    },
}
-- src\Data\Skills\spectre.lua
skills["MeleeAtAnimationSpeedUnique"] = {
    name = "Basic Attack",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Attack] = true,
        [SkillType.RangedAttack] = true,
        [SkillType.MirageArcherCanUse] = true,
        [SkillType.Projectile] = true,
        [SkillType.MeleeSingleTarget] = true,
        [SkillType.Melee] = true,
        [SkillType.ProjectilesFromUser] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
        attack = true,
        melee = true,
        projectile = true,
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "monster_penalty_against_minions_damage_+%_final_vs_player_minions",
        "skill_can_fire_arrows",
        "skill_can_fire_wand_projectiles",
        "action_attack_or_cast_time_uses_animation_length",
        "projectile_uses_contact_position",
        "use_scaled_contact_offset",
    },
    levels = {
        [1] = {100, levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["MPSBloodPriestBossBloodProj"] = {
    name = "MPSBloodPriestBossBloodProj",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Spell] = true,
        [SkillType.Projectile] = true,
        [SkillType.ProjectilesFromUser] = true,
        [SkillType.Triggerable] = true,
        [SkillType.Damage] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
        spell = true,
        projectile = true,
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "spell_minimum_base_physical_damage",
        "spell_maximum_base_physical_damage",
        "monster_projectile_variation",
        "base_is_projectile",
        "action_attack_or_cast_time_uses_animation_length",
        "check_for_targets_between_initiator_and_projectile_source",
        "projectile_uses_contact_position",
        "maintain_projectile_direction_when_using_contact_position",
        "use_scaled_contact_offset",
        "projectile_uses_contact_direction",
        "projectiles_not_offset",
        "distribute_projectiles_over_contact_points",
        "projectile_uses_bearing_as_firing_orientation",
        "projectiles_travel_at_fixed_height",
        "projectiles_not_offset",
    },
    levels = {
        [1] = {0.80000001192093, 1.2000000476837, 1416, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["GSBloodTwinsSoulCoreBeamImpact"] = {
    name = "GSBloodTwinsSoulCoreBeamImpact",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Triggerable] = true,
        [SkillType.Spell] = true,
        [SkillType.Damage] = true,
    },
    statDescriptionScope = "geometry_spell",
    castTime = 1,
    baseFlags = {
        spell = true,
        area = true,
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "spell_minimum_base_lightning_damage",
        "spell_maximum_base_lightning_damage",
        "is_area_damage",
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {0.5, 1.5, critChance = 6, levelRequirement = 1, statInterpolation = {3, 3},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["GSBloodPriestTransformBreathe"] = {
    name = "GSBloodPriestTransformBreathe",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Triggerable] = true,
        [SkillType.Spell] = true,
        [SkillType.Damage] = true,
    },
    statDescriptionScope = "geometry_spell",
    castTime = 1,
    baseFlags = {
        spell = true,
        area = true,
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "spell_minimum_base_fire_damage",
        "spell_maximum_base_fire_damage",
        "is_area_damage",
        "action_attack_or_cast_time_uses_animation_length",
        "base_skill_cannot_be_avoided_by_dodge_roll_or_blocked",
    },
    levels = {
        [1] = {0.80000001192093, 1.2000000476837, critChance = 6, levelRequirement = 1, statInterpolation = {3, 3},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EASVaalBloodPriestBodySwap"] = {
    name = "EASVaalBloodPriestBodySwap",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "base_cannot_be_stunned",
        "cannot_be_knocked_back",
        "skill_cannot_be_interrupted",
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EASVaalBloodPriestLifeDrain"] = {
    name = "EASVaalBloodPriestLifeDrain",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 2,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EASBloodPriestBossVolley"] = {
    name = "EASBloodPriestBossVolley",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EASBloodPriestBossVolleyEnraged"] = {
    name = "EASBloodPriestBossVolleyEnraged",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EAABloodPriestBossSacrifice"] = {
    name = "EAABloodPriestBossSacrifice",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EASBloodPriestBossTeleport"] = {
    name = "EASBloodPriestBossTeleport",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["MDBloodPriestBossBloodPool"] = {
    name = "MDBloodPriestBossBloodPool",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Multicastable] = true,
        [SkillType.Triggerable] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["MDBloodPriestBossSoulCoreBeam"] = {
    name = "MDBloodPriestBossSoulCoreBeam",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Multicastable] = true,
        [SkillType.Triggerable] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["EGBloodPriestBossSacrifice"] = {
    name = "EGBloodPriestBossSacrifice",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Triggerable] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1,
    baseFlags = {
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
    },
    levels = {
        [1] = {levelRequirement = 1, statInterpolation = {},  cost = { }, },
    },
}
-- src\Data\Skills\spectre.lua
skills["VaalBloodPriestMiniBossSoulrend"] = {
    name = "VaalBloodPriestMiniBossSoulrend",
    hidden = true,
    color = ,
    baseEffectiveness = 0,
    incrementalEffectiveness = 0,
    skillTypes = {
        [SkillType.Spell] = true,
        [SkillType.Area] = true,
        [SkillType.Duration] = true,
        [SkillType.Projectile] = true,
        [SkillType.DamageOverTime] = true,
        [SkillType.Chaos] = true,
        [SkillType.Multicastable] = true,
        [SkillType.Triggerable] = true,
        [SkillType.Trappable] = true,
        [SkillType.Mineable] = true,
        [SkillType.Totemable] = true,
        [SkillType.DegenOnlySpellDamage] = true,
        [SkillType.AreaSpell] = true,
    },
    statDescriptionScope = "skill_stat_descriptions",
    castTime = 1.25,
    baseFlags = {
        area = true,
        spell = true,
        projectile = true,
        duration = true,
    },
    baseMods = {
    },
    qualityStats = {
    },
    stats = {
        "base_physical_damage_to_deal_per_minute",
        "base_skill_effect_duration",
        "active_skill_area_of_effect_radius_+%_final",
        "spell_maximum_action_distance_+%",
        "base_is_projectile",
        "projectile_uses_contact_position",
        "action_attack_or_cast_time_uses_animation_length",
    },
    levels = {
        [1] = {1, 1000, -25, -40, levelRequirement = 1, statInterpolation = {3},  cost = { }, },
    },
}
monster dropped item rarity +% [4800]
monster slain experience +% [0]
FamilyMonsterActBoss
Domains怪物 (3)
GenerationType傳奇 (3)
Req. level1
Stats
  • monster slain experience +% Min: 0 Max: 0 Global
  • monster dropped item rarity +% Min: 4800 Max: 4800 Global
  • monster slain flask charges granted +% [-50]
    FamilyMonsterSlainFlaskCharges
    Domains怪物 (3)
    GenerationType傳奇 (3)
    Req. level1
    Stats
  • monster slain flask charges granted +% Min: -50 Max: -50 Global
  • Craft Tagsflask
    鮮血祭司.佐林 Text Audio /79
    名稱
    沐浴在你的毀滅之池中吧!
    BloodPriest_BloodPoolRandom
    沐浴在你的毀滅之池中吧!
    BloodPriest_BloodPool2
    沐浴在你的毀滅之池中吧!
    BloodPriest_BloodPool3
    淹死在你自選的恐懼之中吧!
    BloodPriest_BloodPool4
    淹死在你自選的恐懼之中吧!
    BloodPriest_BloodPool5
    對遠古遺忘歲月的崇敬!
    BloodPriest_BloodPool6
    對遠古遺忘歲月的崇敬!
    BloodPriest_BloodPool7
    對遠古遺忘歲月的崇敬!
    BloodPriest_BloodPool8
    盤繞的苦難!
    BloodPriest_BloodVolleyRandom
    盤繞的苦難!
    BloodPriest_BloodVolley2
    盤繞的苦難!
    BloodPriest_BloodVolley3
    血肉的折磨!
    BloodPriest_BloodVolley4
    血肉的折磨!
    BloodPriest_BloodVolley5
    瓦爾的血脈!
    BloodPriest_BloodVolleyEnrageRandom
    瓦爾的血脈!
    BloodPriest_BloodVolleyEnrage2
    瓦爾的血脈!
    BloodPriest_BloodVolleyEnrage3
    釋放混沌!
    BloodPriest_BloodVolleyEnrage4
    釋放混沌!
    BloodPriest_BloodVolleyEnrage5
    釋放混沌!
    BloodPriest_BloodVolleyEnrage6
    夠了,我們屈服!
    BloodPriest_Defeat
    你胡說些什麼?
    BloodPriest_EmergeA
    你竟敢打開我們的寶庫?
    BloodPriest_EmergeB
    來吧,姐妹,讓我們沐浴在他們的鮮血中。
    BloodPriest_EmergeC
    呃……你這卑劣的狗!
    BloodPriest_KnockdownRandom
    呃……你這卑劣的狗!
    BloodPriest_Knockdown2
    啊……你敢!
    BloodPriest_Knockdown3
    啊……你敢!
    BloodPriest_Knockdown4
    啊……你敢!
    BloodPriest_Knockdown5
    你……只是走運。
    BloodPriest_Knockdown6
    你……只是走運。
    BloodPriest_Knockdown7
    我們為彼此而活!
    BloodPriest_LifeDrainRandom
    我們為彼此而活!
    BloodPriest_LifeDrain2
    我們為彼此而活!
    BloodPriest_LifeDrain3
    鮮血……契約!
    BloodPriest_LifeDrain4
    鮮血……契約!
    BloodPriest_LifeDrain5
    鮮血……契約!
    BloodPriest_LifeDrain6
    忠誠的輸血!
    BloodPriest_LifeDrain7
    忠誠的輸血!
    BloodPriest_LifeDrain8
    忠誠的輸血!
    BloodPriest_LifeDrain9
    再大的犧牲也不為過!
    BloodPriest_SoulRendRandom
    再大的犧牲也不為過!
    BloodPriest_SoulRend2
    你太慢了!
    BloodPriest_TeleportRandom
    庫阿西克戰術!
    BloodPriest_Teleport2
    庫阿西克戰術!
    BloodPriest_Teleport3
    庫阿西克戰術!
    BloodPriest_Teleport4
    我們的犧牲將被永遠銘記!
    BloodPriest_TeleportSacrificeRandom
    犧牲之力!
    BloodPriest_TeleportSacrifice2
    我們經得起時間的測試!
    BloodPriest_TeleportSacrifice3
    我們經得起時間的測試!
    BloodPriest_TeleportSacrifice4
    我們經得起時間的測試!
    BloodPriest_TeleportSacrifice5
    I will avenge you sister!
    BloodPriestMAP_ZelinaDefeatRandom
    I will avenge you sister!
    BloodPriestMAP_ZelinaDefeat2
    I will avenge you sister!
    BloodPriestMAP_ZelinaDefeat3
    撐住,澤莉娜!
    BloodPriest_ZelinaDefeat4
    撐住,澤莉娜!
    BloodPriest_ZelinaDefeat5
    特拉許耶・勒・瓦爾
    BloodPriest_ChantARandom
    特拉許耶・勒・瓦爾
    BloodPriest_ChantA2
    特拉許耶・勒・瓦爾
    BloodPriest_ChantA3
    阿茲里・勒・伊茲爾
    BloodPriest_ChantBRandom
    阿茲里・勒・伊茲爾
    BloodPriest_ChantB2
    阿茲里・勒・伊茲爾
    BloodPriest_ChantB3
    吉安烏克斯・柯詹提
    BloodPriest_ChantCRandom
    吉安烏克斯・柯詹提
    BloodPriest_ChantC2
    吉安烏克斯・柯詹提
    BloodPriest_ChantC3
    阿特・伊克爾
    BloodPriest_ChantDRandom
    阿特・伊克爾
    BloodPriest_ChantD2
    阿特・伊克爾
    BloodPriest_ChantD3
    佐坎特・伊克爾
    BloodPriest_ChantERandom
    佐坎特・伊克爾
    BloodPriest_ChantE2
    佐坎特・伊克爾
    BloodPriest_ChantE3
    雅特雷・尤札爾
    BloodPriest_ChantFRandom
    雅特雷・尤札爾
    BloodPriest_ChantF2
    雅特雷・尤札爾
    BloodPriest_ChantF3
    特拉耶布・基芙巴
    BloodPriest_ChantGRandom
    特拉耶布・基芙巴
    BloodPriest_ChantG2
    特拉耶布・基芙巴
    BloodPriest_ChantG3
    阿特・尤奎亞
    BloodPriest_ChantHRandom
    阿特・尤奎亞
    BloodPriest_ChantH2
    阿特・尤奎亞
    BloodPriest_ChantH3
    Edit

    Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.