SpectreY
AreaCidade Vaal, Laboratório Eterno, Ravina Remota, Câmara Proibida, Fornalha Desativada, Galeria Restrita, Quartel Reivindicado, Porão Selado, Complexo Inundado, Ravina Remota, Câmara Proibida, Fornalha Desativada, Galeria Restrita, Quartel Reivindicado, Porão Selado, Complexo Inundado
Tagsbone_armour, bones, Conjurador, construct, fire_affinity, is_unarmed, medium_height, not_dex, ranged, slashing_weapon, undead, very_slow_movement
Packs
  • Cidade Vaal: Incendiário Vaal
  • Laboratório Eterno: Incendiário Vaal
  • Incendiário Vaal, Caído Vaal
  • Vida
    102%
    Energy Shield From Life
    100%
    Armadura
    +75%
    Ailment Threshold
    102%
    Resistência
    75 0 0 0
    Damage
    60%
    Precisão
    100%
    Chance de Crítico
    +5%
    Multiplicador de Acerto Crítico
    +130%
    Attack Distance
    6 ~ 46
    Attack Time
    1.605 Second
    Damage Spread
    ±20%
    Experiência
    120%
    Model Size
    100%
    Type
    ConstructCasterFire
    Metadata
    SkeletonCasterKnightFire
    Nível
    68
    Vida
    6,562
    Armadura
    50,383
    Evasão
    4,739
    Escudo de Energia
    6,127
    Damage
    224
    Dano Mágico
    224
    Precisão
    290
    Attack Time
    1.605
    Experiência
    12,306
    Ailment Threshold
    6,562
    Chill
    21
    Shock
    21
    Brittle
    117
    Scorch
    21
    Sap
    57
    SkeletonProjectileFire
    Spell, Damage, Multicastable, Projectile, ProjectilesFromUser, Triggerable
    Chance de Crítico: 5%
    Tempo de Conjuração: 1.95 seg
    Causa 1709 a 2665 de Dano de Fogo
    50% de chance de Incendiar inimigos
    base is projectile [1]
    ignite damage +% [33]
    projectile uses contact position [1]
    spell maximum action distance +% [-40]
    use scaled contact offset [1]

    Object Type

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"
    
    Actor
    {
    	on_start_Revive =
    	"
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, R_Weapon );
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, L_Weapon );
    	"
    }
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Skeletons/SkeletonCasterKnightFire"] = {
        name = "Vaal Arsonist",
        life = 1.02,
        energyShield = 1,
        fireResist = 75,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 0.6,
        damageSpread = 0.2,
        attackTime = 1.605,
        attackRange = 46,
        accuracy = 1,
        skillList = {
            "SkeletonProjectileFire",
        },
        modList = {
        },
    }
    -- src\Data\Skills\spectre.lua
    skills["SkeletonProjectileFire"] = {
        name = "SkeletonProjectileFire",
        hidden = true,
        color = 4,
        baseEffectiveness = 0,
        incrementalEffectiveness = 0,
        skillTypes = {
            [SkillType.Spell] = true,
            [SkillType.Damage] = true,
            [SkillType.Multicastable] = true,
            [SkillType.Projectile] = true,
            [SkillType.ProjectilesFromUser] = true,
            [SkillType.Triggerable] = true,
        },
        statDescriptionScope = "skill_stat_descriptions",
        castTime = 1.95,
        baseFlags = {
            spell = true,
            projectile = true,
        },
        baseMods = {
        },
        qualityStats = {
        },
        stats = {
            "spell_minimum_base_fire_damage",
            "spell_maximum_base_fire_damage",
            "spell_maximum_action_distance_+%",
            "base_chance_to_ignite_%",
            "ignite_damage_+%",
            "base_is_projectile",
            "projectile_uses_contact_position",
            "use_scaled_contact_offset",
        },
        levels = {
            [1] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 4, statInterpolation = {3, 3},  cost = { }, },
            [2] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 19, statInterpolation = {3, 3},  cost = { }, },
            [3] = {2.7000000476837, 4.210000038147, -40, 50, 33, critChance = 5, levelRequirement = 68, statInterpolation = {3, 3},  cost = { }, },
        },
    }
    
    Incendiário Vaal
    Construto
    Vaal Arsonist
    SpectreY
    Tagsbone_armour, bones, Conjurador, construct, fire_affinity, is_unarmed, not_dex, ranged, slashing_weapon, undead, very_slow_movement
    Packs
  • Incendiário Vaal, Caído Vaal, Caído Vaal
  • Incendiário Vaal, Gigante Vaal
  • Vida
    102%
    Energy Shield From Life
    100%
    Armadura
    +75%
    Ailment Threshold
    102%
    Resistência
    75 0 0 0
    Damage
    60%
    Precisão
    100%
    Chance de Crítico
    +5%
    Multiplicador de Acerto Crítico
    +130%
    Attack Distance
    6 ~ 46
    Attack Time
    1.605 Second
    Damage Spread
    ±20%
    Experiência
    120%
    Model Size
    100%
    Type
    ConstructCasterFire
    Metadata
    SkeletonCasterKnightFireHellscape
    Nível
    68
    Vida
    6,562
    Armadura
    50,383
    Evasão
    4,739
    Escudo de Energia
    6,127
    Damage
    224
    Dano Mágico
    224
    Precisão
    290
    Attack Time
    1.605
    Experiência
    12,306
    Ailment Threshold
    6,562
    Chill
    21
    Shock
    21
    Brittle
    117
    Scorch
    21
    Sap
    57
    SkeletonProjectileFire
    Spell, Damage, Multicastable, Projectile, ProjectilesFromUser, Triggerable
    Chance de Crítico: 5%
    Tempo de Conjuração: 1.95 seg
    Causa 1709 a 2665 de Dano de Fogo
    50% de chance de Incendiar inimigos
    base is projectile [1]
    ignite damage +% [33]
    projectile uses contact position [1]
    spell maximum action distance +% [-40]
    use scaled contact offset [1]

    Object Type

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"
    
    Actor
    {
    	on_start_Revive =
    	"
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, R_Weapon );
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, L_Weapon );
    	"
    }
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Skeletons/SkeletonCasterKnightFireHellscape"] = {
        name = "Vaal Arsonist",
        life = 1.02,
        energyShield = 1,
        fireResist = 75,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 0.6,
        damageSpread = 0.2,
        attackTime = 1.605,
        attackRange = 46,
        accuracy = 1,
        skillList = {
            "SkeletonProjectileFire",
        },
        modList = {
        },
    }
    -- src\Data\Skills\spectre.lua
    skills["SkeletonProjectileFire"] = {
        name = "SkeletonProjectileFire",
        hidden = true,
        color = 4,
        baseEffectiveness = 0,
        incrementalEffectiveness = 0,
        skillTypes = {
            [SkillType.Spell] = true,
            [SkillType.Damage] = true,
            [SkillType.Multicastable] = true,
            [SkillType.Projectile] = true,
            [SkillType.ProjectilesFromUser] = true,
            [SkillType.Triggerable] = true,
        },
        statDescriptionScope = "skill_stat_descriptions",
        castTime = 1.95,
        baseFlags = {
            spell = true,
            projectile = true,
        },
        baseMods = {
        },
        qualityStats = {
        },
        stats = {
            "spell_minimum_base_fire_damage",
            "spell_maximum_base_fire_damage",
            "spell_maximum_action_distance_+%",
            "base_chance_to_ignite_%",
            "ignite_damage_+%",
            "base_is_projectile",
            "projectile_uses_contact_position",
            "use_scaled_contact_offset",
        },
        levels = {
            [1] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 4, statInterpolation = {3, 3},  cost = { }, },
            [2] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 19, statInterpolation = {3, 3},  cost = { }, },
            [3] = {2.7000000476837, 4.210000038147, -40, 50, 33, critChance = 5, levelRequirement = 68, statInterpolation = {3, 3},  cost = { }, },
        },
    }
    
    Incendiário Vaal
    Construto
    Habilidades disparam 2 Projéteis adicionais
    Vaal Arsonist
    SpectreN
    Tagsbone_armour, bones, Conjurador, construct, fire_affinity, is_unarmed, medium_height, not_dex, ranged, slashing_weapon, undead, very_slow_movement
    Vida
    102%
    Energy Shield From Life
    100%
    Armadura
    +75%
    Ailment Threshold
    102%
    Resistência
    75 0 0 0
    Damage
    60%
    Precisão
    100%
    Chance de Crítico
    +5%
    Multiplicador de Acerto Crítico
    +130%
    Attack Distance
    6 ~ 100
    Attack Time
    1.605 Second
    Damage Spread
    ±20%
    Experiência
    120%
    Model Size
    100%
    Type
    ConstructCasterFire
    Metadata
    SkeletonCasterKnightFireMachinarium
    Nível
    68
    Vida
    6,562
    Armadura
    50,383
    Evasão
    4,739
    Escudo de Energia
    6,127
    Damage
    224
    Dano Mágico
    224
    Precisão
    290
    Attack Time
    1.605
    Experiência
    12,306
    Ailment Threshold
    6,562
    Chill
    21
    Shock
    21
    Brittle
    117
    Scorch
    21
    Sap
    57
    SkeletonProjectileFire
    Spell, Damage, Multicastable, Projectile, ProjectilesFromUser, Triggerable
    Chance de Crítico: 5%
    Tempo de Conjuração: 1.95 seg
    Causa 1709 a 2665 de Dano de Fogo
    50% de chance de Incendiar inimigos
    base is projectile [1]
    ignite damage +% [33]
    projectile uses contact position [1]
    spell maximum action distance +% [-40]
    use scaled contact offset [1]

    Object Type

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"
    

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"
    
    Life
    {
    	on_death = "SpawnEffect( Metadata/Effects/Spells/monsters_effects/inca_shadow/payloads/death.ao );"
    }
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Skeletons/SkeletonCasterKnightFireMachinarium"] = {
        name = "Vaal Arsonist",
        life = 1.02,
        energyShield = 1,
        fireResist = 75,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 0.6,
        damageSpread = 0.2,
        attackTime = 1.605,
        attackRange = 100,
        accuracy = 1,
        skillList = {
            "SkeletonProjectileFire",
        },
        modList = {
        },
    }
    -- src\Data\Skills\spectre.lua
    skills["SkeletonProjectileFire"] = {
        name = "SkeletonProjectileFire",
        hidden = true,
        color = 4,
        baseEffectiveness = 0,
        incrementalEffectiveness = 0,
        skillTypes = {
            [SkillType.Spell] = true,
            [SkillType.Damage] = true,
            [SkillType.Multicastable] = true,
            [SkillType.Projectile] = true,
            [SkillType.ProjectilesFromUser] = true,
            [SkillType.Triggerable] = true,
        },
        statDescriptionScope = "skill_stat_descriptions",
        castTime = 1.95,
        baseFlags = {
            spell = true,
            projectile = true,
        },
        baseMods = {
        },
        qualityStats = {
        },
        stats = {
            "spell_minimum_base_fire_damage",
            "spell_maximum_base_fire_damage",
            "spell_maximum_action_distance_+%",
            "base_chance_to_ignite_%",
            "ignite_damage_+%",
            "base_is_projectile",
            "projectile_uses_contact_position",
            "use_scaled_contact_offset",
        },
        levels = {
            [1] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 4, statInterpolation = {3, 3},  cost = { }, },
            [2] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 19, statInterpolation = {3, 3},  cost = { }, },
            [3] = {2.7000000476837, 4.210000038147, -40, 50, 33, critChance = 5, levelRequirement = 68, statInterpolation = {3, 3},  cost = { }, },
        },
    }
    
    Habilidades disparam 2 Projéteis adicionais
    IdMonsterMultipleProjectiles1
    Name{Divisor}{Divisora}{Divisor}{Divisores}{Divisoras}{Divisores}
    FamilyMonsterMultipleProjectile
    Domainsmonstro (3)
    GenerationTypeÚnico (3)
    Req. level1
    Stats
  • number of additional projectiles Min: 2 Max: 2 Global
  • Spawn Tagsranged: 1000 default: 0
    Incendiário Vaal
    Construto
    Habilidades disparam 2 Projéteis adicionais
    Vaal Arsonist
    SpectreY
    AreaMaquinário de Doryani
    Tagsbone_armour, bones, Conjurador, construct, fire_affinity, is_unarmed, medium_height, not_dex, ranged, slashing_weapon, undead, very_slow_movement
    Packs
  • Maquinário de Doryani: Incendiário Vaal, Guarda Gélido Vaal, Guarda Trovejante Vaal
  • Vida
    102%
    Energy Shield From Life
    100%
    Armadura
    +75%
    Ailment Threshold
    102%
    Resistência
    75 0 0 0
    Damage
    60%
    Precisão
    100%
    Chance de Crítico
    +5%
    Multiplicador de Acerto Crítico
    +130%
    Attack Distance
    6 ~ 100
    Attack Time
    1.605 Second
    Damage Spread
    ±20%
    Experiência
    120%
    Model Size
    100%
    Type
    ConstructCasterFire
    Metadata
    SkeletonCasterKnightFireMachinariumNormal
    Nível
    81
    Vida
    25,906
    Armadura
    138,805
    Evasão
    7,362
    Escudo de Energia
    13,582
    Damage
    482
    Dano Mágico
    482
    Precisão
    480
    Attack Time
    1.605
    Experiência
    15,436
    Ailment Threshold
    25,906
    Chill
    82
    Shock
    82
    Brittle
    463
    Scorch
    82
    Sap
    226
    SkeletonProjectileFire
    Spell, Damage, Multicastable, Projectile, ProjectilesFromUser, Triggerable
    Chance de Crítico: 5%
    Tempo de Conjuração: 1.95 seg
    Causa 2590 a 4039 de Dano de Fogo
    50% de chance de Incendiar inimigos
    base is projectile [1]
    ignite damage +% [33]
    projectile uses contact position [1]
    spell maximum action distance +% [-40]
    use scaled contact offset [1]

    Object Type

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Skeletons/SkeletonCaster"
    
    Actor
    {
    	on_start_Revive =
    	"
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, R_Weapon );
    		AddAttachedObjectToBones( Metadata/Effects/Spells/monsters_effects/skeleton_glowhands/glowhand_fire.ao, L_Weapon );
    	"
    }
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Skeletons/SkeletonCasterKnightFireMachinariumNormal"] = {
        name = "Vaal Arsonist",
        life = 1.02,
        energyShield = 1,
        fireResist = 75,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 0.6,
        damageSpread = 0.2,
        attackTime = 1.605,
        attackRange = 100,
        accuracy = 1,
        skillList = {
            "SkeletonProjectileFire",
        },
        modList = {
        },
    }
    -- src\Data\Skills\spectre.lua
    skills["SkeletonProjectileFire"] = {
        name = "SkeletonProjectileFire",
        hidden = true,
        color = 4,
        baseEffectiveness = 0,
        incrementalEffectiveness = 0,
        skillTypes = {
            [SkillType.Spell] = true,
            [SkillType.Damage] = true,
            [SkillType.Multicastable] = true,
            [SkillType.Projectile] = true,
            [SkillType.ProjectilesFromUser] = true,
            [SkillType.Triggerable] = true,
        },
        statDescriptionScope = "skill_stat_descriptions",
        castTime = 1.95,
        baseFlags = {
            spell = true,
            projectile = true,
        },
        baseMods = {
        },
        qualityStats = {
        },
        stats = {
            "spell_minimum_base_fire_damage",
            "spell_maximum_base_fire_damage",
            "spell_maximum_action_distance_+%",
            "base_chance_to_ignite_%",
            "ignite_damage_+%",
            "base_is_projectile",
            "projectile_uses_contact_position",
            "use_scaled_contact_offset",
        },
        levels = {
            [1] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 4, statInterpolation = {3, 3},  cost = { }, },
            [2] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 19, statInterpolation = {3, 3},  cost = { }, },
            [3] = {2.7000000476837, 4.210000038147, -40, 50, 33, critChance = 5, levelRequirement = 68, statInterpolation = {3, 3},  cost = { }, },
        },
    }
    
    Habilidades disparam 2 Projéteis adicionais
    IdMonsterMultipleProjectiles1
    Name{Divisor}{Divisora}{Divisor}{Divisores}{Divisoras}{Divisores}
    FamilyMonsterMultipleProjectile
    Domainsmonstro (3)
    GenerationTypeÚnico (3)
    Req. level1
    Stats
  • number of additional projectiles Min: 2 Max: 2 Global
  • Spawn Tagsranged: 1000 default: 0
    Incendiário Vaal
    Construto
    royale monster armour drop chance permyriad [80]
    royale monster currency drop chance permyriad [200]
    royale monster flask drop chance permyriad [0]
    royale monster skill gem drop chance permyriad [300]
    royale monster support gem drop chance permyriad [75]
    royale monster unique drop chance permyriad [8]
    royale monster weapon drop chance permyriad [80]
    Vaal Arsonist
    SpectreY
    Tagsbone_armour, bones, Conjurador, construct, fire_affinity, is_unarmed, medium_height, not_dex, ranged, slashing_weapon, undead, very_slow_movement
    Vida
    98%
    Energy Shield From Life
    100%
    Armadura
    +25%
    Ailment Threshold
    98%
    Resistência
    75 0 0 0
    Damage
    78%
    Precisão
    100%
    Chance de Crítico
    +5%
    Multiplicador de Acerto Crítico
    +130%
    Attack Distance
    6 ~ 46
    Attack Time
    1.605 Second
    Damage Spread
    ±20%
    Experiência
    140%
    Model Size
    100%
    Type
    ConstructCasterFireRoyale
    Metadata
    SkeletonCasterVaal1Royale
    Nível
    68
    Vida
    6,305
    Armadura
    35,988
    Evasão
    4,739
    Escudo de Energia
    6,127
    Damage
    291
    Dano Mágico
    291
    Precisão
    290
    Attack Time
    1.605
    Experiência
    14,357
    Ailment Threshold
    6,305
    Chill
    20
    Shock
    20
    Brittle
    113
    Scorch
    20
    Sap
    55
    SkeletonProjectileFire
    Spell, Damage, Multicastable, Projectile, ProjectilesFromUser, Triggerable
    Chance de Crítico: 5%
    Tempo de Conjuração: 1.95 seg
    Causa 1709 a 2665 de Dano de Fogo
    50% de chance de Incendiar inimigos
    base is projectile [1]
    ignite damage +% [33]
    projectile uses contact position [1]
    spell maximum action distance +% [-40]
    use scaled contact offset [1]

    Object Type

    version 2
    extends "Metadata/Monsters/Monster"
    
    Actor
    {
    	basic_action = "Emerge"
    	basic_action = "Revive"
    }

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Monster"
    
    Life
    {
    	on_death = "DetachAllContainingText( glowhand );"
    	on_spawned_dead = "DetachAllContainingText( glowhand );"
    }
    
    Render
    {
         //turn_duration = 0.35
    }
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Skeletons/SkeletonCasterVaal1Royale"] = {
        name = "Vaal Arsonist",
        life = 0.98,
        energyShield = 1,
        fireResist = 75,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 0.78,
        damageSpread = 0.2,
        attackTime = 1.605,
        attackRange = 46,
        accuracy = 1,
        skillList = {
            "SkeletonProjectileFire",
        },
        modList = {
        },
    }
    -- src\Data\Skills\spectre.lua
    skills["SkeletonProjectileFire"] = {
        name = "SkeletonProjectileFire",
        hidden = true,
        color = 4,
        baseEffectiveness = 0,
        incrementalEffectiveness = 0,
        skillTypes = {
            [SkillType.Spell] = true,
            [SkillType.Damage] = true,
            [SkillType.Multicastable] = true,
            [SkillType.Projectile] = true,
            [SkillType.ProjectilesFromUser] = true,
            [SkillType.Triggerable] = true,
        },
        statDescriptionScope = "skill_stat_descriptions",
        castTime = 1.95,
        baseFlags = {
            spell = true,
            projectile = true,
        },
        baseMods = {
        },
        qualityStats = {
        },
        stats = {
            "spell_minimum_base_fire_damage",
            "spell_maximum_base_fire_damage",
            "spell_maximum_action_distance_+%",
            "base_chance_to_ignite_%",
            "ignite_damage_+%",
            "base_is_projectile",
            "projectile_uses_contact_position",
            "use_scaled_contact_offset",
        },
        levels = {
            [1] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 4, statInterpolation = {3, 3},  cost = { }, },
            [2] = {0.80000001192093, 1.2000000476837, -40, 50, 33, critChance = 5, levelRequirement = 19, statInterpolation = {3, 3},  cost = { }, },
            [3] = {2.7000000476837, 4.210000038147, -40, 50, 33, critChance = 5, levelRequirement = 68, statInterpolation = {3, 3},  cost = { }, },
        },
    }
    
    royale monster armour drop chance permyriad [80]
    royale monster currency drop chance permyriad [200]
    royale monster flask drop chance permyriad [0]
    royale monster skill gem drop chance permyriad [300]
    royale monster support gem drop chance permyriad [75]
    royale monster unique drop chance permyriad [8]
    royale monster weapon drop chance permyriad [80]
    IdRoyaleAdditionalMonsterDrops
    FamilyRoyaleAdditionalMonsterDrops
    Domainsmonstro (3)
    GenerationTypeÚnico (3)
    Req. level1
    Stats
  • royale monster flask drop chance permyriad Min: 0 Max: 0 Global
  • royale monster armour drop chance permyriad Min: 80 Max: 80 Global
  • royale monster unique drop chance permyriad Min: 8 Max: 8 Global
  • royale monster weapon drop chance permyriad Min: 80 Max: 80 Global
  • royale monster currency drop chance permyriad Min: 200 Max: 200 Global
  • royale monster skill gem drop chance permyriad Min: 300 Max: 300 Global
  • royale monster support gem drop chance permyriad Min: 75 Max: 75 Global
  • Edit

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