Zahmir, o Suserano Afiado
HumanóideÁrea: Reservatório Sagrado
i am boss of tier [3]
monster dropped item rarity +% [4800]
monster slain experience +% [0]
monster dropped item rarity +% [4800]
monster slain experience +% [0]
Zahmir, the Blade Sovereign
| Spectre | N |
|---|---|
| Area | Reservatório Sagrado |
| Tags | 2HSharpMetal_onhit_audio, human, humanoid, sand_blood, very_fast_movement |
Vida
345%
Resistência
Damage
399%
Precisão
100%
Acertos Críticos Chance
5%
Attack Distance
6 ~ 14
Tempo de Ataque
1.5 Second
Damage Spread
±20%
Experiência
300%
Model Size
115%
Type
FaridunOlrothMAP
Metadata
FaridunOlrothMAP
The following values do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses.
Nível
65
Vida
22,470
2,023
663
Damage
847
Dano Mágico
847
Precisão
2,228
Tempo de Ataque
1.5
Experiência
64,521
Minion Life
21,673
Minion Damage
3,307
Minion Armour
2,023
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).
MeleeAtAnimationSpeedBoss
Attack, RangedAttack, MirageArcherCanUse, Projectile, MeleeSingleTarget, Melee, ProjectilesFromUser, AttackInPlace
Ataque Básico
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
action attack or cast time uses animation length [1]
projectile uses contact position [1]
skill can fire wand projectiles [1]
use scaled contact offset [1]
EASChronoPrinceLeapSlamStart
Recarga: 20.5 seg
action attack or cast time uses animation length [1]
spell maximum action distance +% [-60]
EAAChronoPrinceManySidedStrike
Recarga: 31.25 seg
Não Pode ser Empurrado
Não Pode ser Atordoado
action attack or cast time uses animation length [1]
attack maximum action distance + [50]
skill cannot be interrupted [1]
EAAChronoPrinceLacerate
Recarga: 16 seg
action attack or cast time uses animation length [1]
attack maximum action distance + [50]
DTTChronoPrince1
Spell, Movement, AttackInPlace
Chance de Acerto Crítico: 5%
Tempo de Conjuração: 1 seg
Recarga: 7.5 seg
Causa 10% menos Dano com Ataque
action attack or cast time uses animation length [1]
leap slam minimum distance [35]
skill maximum travel distance [50]
spell maximum action distance +% [-60]
walk emerge extra distance [-15]
DTTChronoPrince2
Spell, Movement, AttackInPlace
Chance de Acerto Crítico: 5%
Tempo de Conjuração: 1 seg
Recarga: 7.5 seg
Causa 10% menos Dano com Ataque
action attack or cast time uses animation length [1]
leap slam minimum distance [35]
skill maximum travel distance [50]
spell maximum action distance +% [-60]
walk emerge extra distance [-15]
EAAChronoPrinceCloneSplitStrike
Recarga: 26.5 seg
action attack or cast time uses animation length [1]
attack maximum action distance + [80]
CTS1Generic
Causa 5% menos Dano com Ataque
action attack or cast time uses animation length [1]
EAAChronoPrinceFirstThrow
Recarga: 25 seg
action attack or cast time uses animation length [1]
attack maximum action distance + [80]
EAAChronoPrinceRepeatThrow
action attack or cast time uses animation length [1]
attack maximum action distance + [80]
DTTChronoPrinceEmpowered1
Spell, Movement, AttackInPlace
Tempo de Conjuração: 1 seg
Recarga: 7.5 seg
action attack or cast time uses animation length [1]
leap slam minimum distance [0]
skill maximum travel distance [0]
spell maximum action distance +% [0]
walk emerge extra distance [0]
MAASChronoPrinceNonLacerate
Attack, RangedAttack, MirageArcherCanUse, Projectile, MeleeSingleTarget, Melee, ProjectilesFromUser, AttackInPlace
Ataque Básico
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 90%
Tempo de Ataque: 1.5 seg
Recarga: 6.5 seg
Causa 10% menos Dano com Ataque
action attack or cast time uses animation length [1]
projectile uses contact position [1]
skill can fire wand projectiles [1]
use scaled contact offset [1]
DTTChronoPrinceEmpowered2
Spell, Movement, AttackInPlace
Tempo de Conjuração: 1 seg
Recarga: 7.5 seg
action attack or cast time uses animation length [1]
leap slam minimum distance [0]
skill maximum travel distance [0]
spell maximum action distance +% [0]
walk emerge extra distance [0]
GAChronoPrinceGroundSlam
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 165%
Tempo de Ataque: 1.5 seg
Recarga: 15.5 seg
Causa 65% mais Dano com Ataque
action attack or cast time uses animation length [1]
attack maximum action distance + [30]
base skill cannot be avoided by dodge roll or evaded or blocked [1]
is area damage [1]
GAChronoPrinceRuptureSlam
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 162%
Tempo de Ataque: 1.5 seg
Recarga: 14.125 seg
Causa 62% mais Dano com Ataque
action attack or cast time uses animation length [1]
attack maximum action distance + [100]
is area damage [1]
GAChronoPrinceEmpoweredRuptureSlam
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 275%
Tempo de Ataque: 1.5 seg
Recarga: 35.75 seg
Causa 175% mais Dano com Ataque
Velocidade de Movimento reduzida em 50%
action attack or cast time uses animation length [1]
attack maximum action distance + [160]
base skill cannot be avoided by dodge roll or evaded or blocked [1]
base skill effect duration [3500]
ground tar art variation [1002]
is area damage [1]
MPWChronoPrinceThrow
Attack, RangedAttack, MirageArcherCanUse, Projectile, ProjectilesFromUser, Damage, Triggerable, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
Perfura todos os Alvos
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]
monster projectile variation [1169]
projectile uses contact position [1]
use scaled contact offset [1]
MPWChronoPrinceThrowReturn
Attack, RangedAttack, MirageArcherCanUse, Projectile, ProjectilesFromUser, Damage, Triggerable, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
Recarga: 11.125 seg
Perfura todos os Alvos
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]
monster projectile variation [1172]
projectile uses contact position [1]
use scaled contact offset [1]
EASChronoPrinceEmpowerTime
Causa 10% menos Dano com Ataque
action attack or cast time uses animation length [1]
GAChronoPrinceLacerate1
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 60%
Tempo de Ataque: 1.5 seg
Causa 40% menos Dano com Ataque
action attack or cast time uses animation length [1]
base skill can be avoided by dodge roll [1]
is area damage [1]
GAChronoPrinceLacerate2
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 60%
Tempo de Ataque: 1.5 seg
Causa 40% menos Dano com Ataque
action attack or cast time uses animation length [1]
base skill can be avoided by dodge roll [1]
is area damage [1]
GAChronoPrinceLacerate3
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 120%
Tempo de Ataque: 1.5 seg
Causa 20% mais Dano com Ataque
action attack or cast time uses animation length [1]
base skill can be avoided by dodge roll [1]
is area damage [1]
GAChronoPrinceDash1
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
action attack or cast time uses animation length [1]
is area damage [1]
GAChronoPrinceDash2
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
action attack or cast time uses animation length [1]
is area damage [1]
GAChronoPrinceDashLong
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 90%
Tempo de Ataque: 1.5 seg
Causa 10% menos Dano com Ataque
action attack or cast time uses animation length [1]
base skill can be avoided by dodge roll [1]
is area damage [1]
GAChronoPrincePostDash2
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Tempo de Ataque: 1.5 seg
action attack or cast time uses animation length [1]
is area damage [1]
GAChronoPrinceCloneSplitStrikeDetonate
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 275%
Tempo de Ataque: 1.5 seg
Causa 175% mais Dano com Ataque
action attack or cast time uses animation length [1]
is area damage [1]
GTChronoPrinceCloneSplitStrike
Spell, Triggerable, AttackInPlace
Chance de Acerto Crítico: 5%
Tempo de Conjuração: 1 seg
action attack or cast time uses animation length [1]
GAChronoPrinceLeapSlamImpact
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 200%
Tempo de Ataque: 1.5 seg
Causa 100% mais Dano com Ataque
action attack or cast time uses animation length [1]
attack maximum action distance + [100]
base skill cannot be avoided by dodge roll or evaded or blocked [1]
is area damage [1]
EASChronoPrinceLeapSlamImpact
action attack or cast time uses animation length [1]
action do not face target [1]
GAChronoPrinceCloneSplitStrikeLacerate
Triggerable, Attack, AttackInPlace
Base Damage: 678—1017
Chance de Acerto Crítico: 5%
Dano de Ataque: 200%
Tempo de Ataque: 1.5 seg
Causa 100% mais Dano com Ataque
action attack or cast time uses animation length [1]
is area damage [1]
Object Type
version 2
extends "Metadata/Monsters/Monster"
extends "Metadata/Monsters/BossBase"
extends "Metadata/Monsters/BossBaseEndgameAddon"
extends "Metadata/Monsters/UsefulFunctions"
BaseEvents
{
on_construction_complete = "AddToPlayerWakeGroup( true );"
}
Actor
{
basic_action = "Emerge"
basic_action = "Emerge2"
leveled_starting_effects = "DoLiterallyNothing"
}
StateMachine
{
define_shared_state =
"
face_mode;
chop;
end_throwing;
empowered;
power_up_time;
phase_change;
FightStartShout;
empowered_epks;
"
on_timer_face_player =
"
FaceNearestPlayer();
StartStateTimer( face_player, 0.034 );
"
on_or_create_state_face_mode_0 = "SetMovementFaceMode( FaceDirection );"
on_or_create_state_face_mode_1 = "SetMovementFaceMode( FaceAway );"
}
Stats
{
set_monster_uses_map_boss_difficulty_scaling = 1
set_base_heavy_stun_duration_ms = 6066
set_monster_delay_item_drops_millis = 3000
}
Functions
{
track_player = "StartStateTimer( face_player, 0.034 );"
stop_tracking = "CancelStateTimer( face_player );"
reset_turn_duration = "ResetAnimatedTurnDuration( false );"
face_mode = "arg1.SetMovementFaceMode( DontFace );"
time_freeze = "SetTickWhileSimulationFrozen( );"
}
Preload
{
preload_object = "Metadata/Monsters/FaridunOlroth/Objects/OlrothSwordObject"
preload_monster_variety = "Metadata/Monsters/FaridunOlroth/FaridunOlrothClone"
preload_animated_object = "Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/domain_expansion.ao"
preload_animated_object = "Metadata/Monsters/FaridunOlroth/FaridunBlackPrinceRuptureClone.ao"
}Object Type Codes
version 2
extends "Metadata/Monsters/Monster"
extends "Metadata/Monsters/BossBase"
extends "Metadata/Monsters/BossBaseEndgameAddon"
extends "Metadata/Monsters/UsefulFunctions"
BaseEvents
{
on_construction_complete =
"
this.my_back_attach = GetAttachedAOByType( 'Metadata/Monsters/FaridunOlroth/Attachments/FaridunBlackPrinceBackAttachment/FaridunBlackPrinceBackAttachment.ao' );
this.my_sword = GetAttachedAOByType( 'Metadata/Monsters/FaridunOlroth/Attachments/FaridunBlackPrinceWeapon.ao' );
"
}
StateMachine
{
on_or_create_state_empowered_epks_0 =
"
my_sword.RemoveEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/sword_empowered.epk' );
my_back_attach.RemoveEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/back_empowered.epk' );
"
on_or_create_state_empowered_epks_1 =
"
my_sword.AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/sword_empowered.epk' );
my_back_attach.AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/back_empowered.epk' );
"
}
Actor {}
Animated {}
Render
{
use_ao_lights = true
}
Preload {}
GlobalAudioParamEvents {}
Functions
{
recall_sword =
"
wall_proj.AddEffectPack( 'Metadata/Effects/Spells/blood_scythe/fadeout_scythe.epk', 0.3 );
Delay( 0.2, { wall_proj.Delete(); } );
"
hide_me = "HideMeshSegments( Body_meshShape, PantsShape, Wrap_ClothesShape );"
im_back = "ShowMeshSegments( Body_meshShape, PantsShape, Wrap_ClothesShape );"
hide_weapon = "HideWeapons( true, true );"
show_weapon = "ShowWeapons( true, true );"
light = "SetLightState( arg1, 1.0 );"
time_freeze =
"
local timestop_effect = PlayEffect( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/timestop.ao' );
timestop_effect.SetTickWhileSimulationFrozen();
timestop_effect.Delay( 0.6, { timestop_effect.PlayAnimation( End ); } );
timestop_effect.Delay( 1.6, { Delete(); } );
"
clone_epk = "arg1.AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/temporal_clone.epk' );"
player_death_dialogue =
"
Delay( 1, { TriggerClassBracket( player_death_dialogue, arg1 ); } );
"
return_epk = "AddEffectPack( 'Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/epk/general_quickmove.epk', arg1 );"
}
Brackets
{
define_bracket = "player_death_dialogue;"
player_death_dialogue_StrFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Marauder
player_death_dialogue_StrFourb = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Warrior
player_death_dialogue_IntFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Witch
player_death_dialogue_IntFourb = "PlayTextAudio( Azmadi_KillsPlayer_Sorc_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Sorceress
player_death_dialogue_DexFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Ranger
player_death_dialogue_DexFourb = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Huntress
player_death_dialogue_StrDexFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Duelist
player_death_dialogue_StrDexFourb = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Mercenary
player_death_dialogue_DexIntFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Shadow
player_death_dialogue_DexIntFourb = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Monk
player_death_dialogue_StrIntFour = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Templar
player_death_dialogue_StrIntFourb = "PlayTextAudio( Azmadi_KillsPlayer_Random, 'Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP' );" // Druid
} -- src\Data\Spectres.lua
minions["Metadata/Monsters/FaridunOlroth/FaridunOlrothMAP"] = {
name = "Zahmir, the Blade Sovereign",
life = 3.45,
fireResist = 0,
coldResist = 0,
lightningResist = 0,
chaosResist = 0,
damage = 3.99,
damageSpread = 0.2,
attackTime = 1.5,
attackRange = 14,
accuracy = 1,
weaponType1 = "Two Hand Sword",
skillList = {
"MeleeAtAnimationSpeedBoss",
"MAASChronoPrinceNonLacerate",
"MPWChronoPrinceThrow",
"MPWChronoPrinceThrowReturn",
"CTS1Generic",
"EASChronoPrinceLeapSlamStart",
"GAChronoPrinceLacerate1",
"GAChronoPrinceLacerate2",
"GAChronoPrinceLacerate3",
"GAChronoPrinceDash1",
"GAChronoPrinceDash2",
"GAChronoPrincePostDash2",
"GAChronoPrinceCloneSplitStrikeDetonate",
"GAChronoPrinceLeapSlamImpact",
"GAChronoPrinceRuptureSlam",
"GAChronoPrinceEmpoweredRuptureSlam",
"GAChronoPrinceGroundSlam",
"GAChronoPrinceDashLong",
"GAChronoPrinceCloneSplitStrikeLacerate",
"EAAChronoPrinceLacerate",
"EAAChronoPrinceCloneSplitStrike",
"EASChronoPrinceLeapSlamImpact",
"EAAChronoPrinceManySidedStrike",
"EAAChronoPrinceRepeatThrow",
"EAAChronoPrinceFirstThrow",
"EASChronoPrinceEmpowerTime",
"GTChronoPrinceCloneSplitStrike",
"DTTChronoPrince1",
"DTTChronoPrince2",
"DTTChronoPrinceEmpowered1",
"DTTChronoPrinceEmpowered2",
},
modList = {
},
}
-- src\Data\Skills\spectre.lua
skills["MeleeAtAnimationSpeedBoss"] = {
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,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
melee = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"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] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MAASChronoPrinceNonLacerate"] = {
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,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
melee = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"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] = {baseMultiplier = 0.9, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPWChronoPrinceThrow"] = {
name = "MPWChronoPrinceThrow",
hidden = true,
color = ,
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,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"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",
"use_scaled_contact_offset",
"distribute_projectiles_over_contact_points",
"always_pierce",
},
levels = {
[1] = {1169, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPWChronoPrinceThrowReturn"] = {
name = "MPWChronoPrinceThrowReturn",
hidden = true,
color = ,
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,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"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",
"use_scaled_contact_offset",
"distribute_projectiles_over_contact_points",
"always_pierce",
},
levels = {
[1] = {1172, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["CTS1Generic"] = {
name = "CTS1Generic",
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] = {baseMultiplier = 0.95, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EASChronoPrinceLeapSlamStart"] = {
name = "EASChronoPrinceLeapSlamStart",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {-60, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceLacerate1"] = {
name = "GAChronoPrinceLacerate1",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_can_be_avoided_by_dodge_roll",
},
levels = {
[1] = {baseMultiplier = 0.6, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceLacerate2"] = {
name = "GAChronoPrinceLacerate2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_can_be_avoided_by_dodge_roll",
},
levels = {
[1] = {baseMultiplier = 0.6, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceLacerate3"] = {
name = "GAChronoPrinceLacerate3",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_can_be_avoided_by_dodge_roll",
},
levels = {
[1] = {baseMultiplier = 1.2, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceDash1"] = {
name = "GAChronoPrinceDash1",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceDash2"] = {
name = "GAChronoPrinceDash2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrincePostDash2"] = {
name = "GAChronoPrincePostDash2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceCloneSplitStrikeDetonate"] = {
name = "GAChronoPrinceCloneSplitStrikeDetonate",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {baseMultiplier = 2.75, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceLeapSlamImpact"] = {
name = "GAChronoPrinceLeapSlamImpact",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_cannot_be_avoided_by_dodge_roll_or_evaded_or_blocked",
},
levels = {
[1] = {100, baseMultiplier = 2, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceRuptureSlam"] = {
name = "GAChronoPrinceRuptureSlam",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {100, baseMultiplier = 1.62, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceEmpoweredRuptureSlam"] = {
name = "GAChronoPrinceEmpoweredRuptureSlam",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"base_skill_effect_duration",
"base_movement_velocity_+%",
"ground_tar_art_variation",
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_cannot_be_avoided_by_dodge_roll_or_evaded_or_blocked",
},
levels = {
[1] = {160, 3500, -50, 1002, baseMultiplier = 2.75, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceGroundSlam"] = {
name = "GAChronoPrinceGroundSlam",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_cannot_be_avoided_by_dodge_roll_or_evaded_or_blocked",
},
levels = {
[1] = {30, baseMultiplier = 1.65, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceDashLong"] = {
name = "GAChronoPrinceDashLong",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
"base_skill_can_be_avoided_by_dodge_roll",
},
levels = {
[1] = {baseMultiplier = 0.9, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GAChronoPrinceCloneSplitStrikeLacerate"] = {
name = "GAChronoPrinceCloneSplitStrikeLacerate",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Attack] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"is_area_damage",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {baseMultiplier = 2, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EAAChronoPrinceLacerate"] = {
name = "EAAChronoPrinceLacerate",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {50, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EAAChronoPrinceCloneSplitStrike"] = {
name = "EAAChronoPrinceCloneSplitStrike",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {80, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EASChronoPrinceLeapSlamImpact"] = {
name = "EASChronoPrinceLeapSlamImpact",
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",
"action_do_not_face_target",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EAAChronoPrinceManySidedStrike"] = {
name = "EAAChronoPrinceManySidedStrike",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"base_cannot_be_stunned",
"cannot_be_knocked_back",
"skill_cannot_be_interrupted",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {50, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EAAChronoPrinceRepeatThrow"] = {
name = "EAAChronoPrinceRepeatThrow",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {80, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EAAChronoPrinceFirstThrow"] = {
name = "EAAChronoPrinceFirstThrow",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"attack_maximum_action_distance_+",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {80, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EASChronoPrinceEmpowerTime"] = {
name = "EASChronoPrinceEmpowerTime",
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] = {baseMultiplier = 0.9, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GTChronoPrinceCloneSplitStrike"] = {
name = "GTChronoPrinceCloneSplitStrike",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DTTChronoPrince1"] = {
name = "DTTChronoPrince1",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Movement] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_extra_distance",
"leap_slam_minimum_distance",
"skill_maximum_travel_distance",
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {-15, 35, 50, -60, baseMultiplier = 0.9, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DTTChronoPrince2"] = {
name = "DTTChronoPrince2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Movement] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_extra_distance",
"leap_slam_minimum_distance",
"skill_maximum_travel_distance",
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {-15, 35, 50, -60, baseMultiplier = 0.9, critChance = 5, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DTTChronoPrinceEmpowered1"] = {
name = "DTTChronoPrinceEmpowered1",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Movement] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_extra_distance",
"leap_slam_minimum_distance",
"skill_maximum_travel_distance",
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {0, 0, 0, 0, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DTTChronoPrinceEmpowered2"] = {
name = "DTTChronoPrinceEmpowered2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Movement] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"walk_emerge_extra_distance",
"leap_slam_minimum_distance",
"skill_maximum_travel_distance",
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {0, 0, 0, 0, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
i am boss of tier [3]
monster dropped item rarity +% [4800]
monster slain experience +% [0]
| Family | MonsterActBoss |
|---|---|
| Domains | Monster (3) |
| GenerationType | Único (3) |
| Req. level | 1 |
| Stats |
| key | val |
|---|---|
| */.Functions | |
| */./* ------------------------------------------------------------------------------------------------------------------- */ | , |
| */./* Sets the monsters orientation at the end of an action to match animation using arg1 as the angle turned. */ | |
| */./* Example usage: | |
| */.Actor | |
| */.on_effect_start_CTS1BossFightStart | CallOnBoth( uf_fix_orientation, 180 ); |
| */.} */ | |
| */.uf_fix_orientation = | |
| */." | , , , |
| */.AddOnActionEnd( | |
| */.SetOrientation( GetOrientation() + arg1, false, true ); | , |
| */.PlayAnimationType( Idle, 1.0, 0, 0 ); | , |
| */.}, true ); | , |
| */.uf_fix_orientation_animated = | |
| */.AddOnAnimationEnd( | |
| BaseEvents.on_construction_complete | AddToPlayerWakeGroup( true ); |
| Actor.basic_action | Emerge, Emerge2 |
| Actor.leveled_starting_effects | DoLiterallyNothing |
| StateMachine.define_shared_state = | |
| StateMachine." | , , , |
| StateMachine.face_mode; | |
| StateMachine.chop; | |
| StateMachine.end_throwing; | |
| StateMachine.empowered; | |
| StateMachine.power_up_time; | |
| StateMachine.phase_change; | |
| StateMachine.FightStartShout; | |
| StateMachine.empowered_epks; | |
| StateMachine.on_timer_face_player = | |
| StateMachine.FaceNearestPlayer(); | |
| StateMachine.StartStateTimer( face_player, 0.034 ); | |
| StateMachine.on_or_create_state_face_mode_0 | SetMovementFaceMode( FaceDirection ); |
| StateMachine.on_or_create_state_face_mode_1 | SetMovementFaceMode( FaceAway ); |
| Stats.monster_uses_map_boss_difficulty_scaling | 1 |
| Stats.base_heavy_stun_duration_ms | 6066 |
| Stats.monster_delay_item_drops_millis | 3000 |
| Functions.track_player | StartStateTimer( face_player, 0.034 ); |
| Functions.stop_tracking | CancelStateTimer( face_player ); |
| Functions.reset_turn_duration | ResetAnimatedTurnDuration( false ); |
| Functions.face_mode | arg1.SetMovementFaceMode( DontFace ); |
| Functions.time_freeze | SetTickWhileSimulationFrozen( ); |
| Preload.preload_object | Metadata/Monsters/FaridunOlroth/Objects/OlrothSwordObject |
| Preload.preload_monster_variety | Metadata/Monsters/FaridunOlroth/FaridunOlrothClone |
| Preload.preload_animated_object | Metadata/Effects/Spells/monsters_effects/Act_Interlude/FaridunOlroth/domain_expansion.ao, Metadata/Monsters/FaridunOlroth/FaridunBlackPrinceRuptureClone.ao |
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.