UI for sword skill tree.

This commit is contained in:
Sam 2022-09-06 12:59:30 -04:00
parent b09b0222c4
commit 356c26cc66
29 changed files with 379 additions and 85 deletions

BIN
assets/voxygen/element/skills/sword/balanced_finisher.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/balanced_thrust.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/cleaving_dive.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/cleaving_finisher.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/cleaving_spin.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/crippling_finisher.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/crippling_gouge.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/crippling_strike.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/defensive_bulwark.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/defensive_retreat.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/heavy_finisher.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/heavy_fortitude.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/heavy_pommelstrike.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/mobility_agility.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/mobility_feint.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/offensive_advance.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/offensive_finisher.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/parrying_counter.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/parrying_parry.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/parrying_riposte.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/reaching_charge.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/reaching_flurry.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/skills/sword/reaching_skewer.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/ui/diary/sword_bg.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -10,6 +10,8 @@ common-abilities-staff-fireshockwave = Ring of Fire
.desc = Ignites the ground with fiery shockwave.
common-abilities-sceptre-wardingaura = Warding Aura
.desc = Wards your allies against enemy attacks.
# Sword abilities
common-abilities-sword-balanced_combo = Balanced Stance
.desc = This stance has few downsides, but is not particularly special.
common-abilities-sword-balanced_thrust = Sword Thrust

View File

@ -45,6 +45,7 @@ use common::{
},
consts::{ENERGY_PER_LEVEL, HP_PER_LEVEL},
};
use inline_tweak::tweak;
use std::borrow::Cow;
const ART_SIZE: [f64; 2] = [320.0, 320.0];
@ -79,7 +80,9 @@ widget_ids! {
skills_top_r[],
skills_bot_l[],
skills_bot_r[],
sword_render,
skills[],
skill_lock_imgs[],
sword_bg,
axe_render,
skill_axe_combo_0,
skill_axe_combo_1,
@ -1310,6 +1313,11 @@ enum SkillIcon<'a> {
position: PositionSpecifier,
id: widget::Id,
},
Ability {
skill: Skill,
ability_id: &'a str,
position: PositionSpecifier,
},
}
impl<'a> Diary<'a> {
@ -1485,7 +1493,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -1506,36 +1514,179 @@ impl<'a> Diary<'a> {
.color(TEXT_COLOR)
.set(state.ids.tree_title_txt, ui);
// Number of skills per rectangle per weapon, start counting at 0
// Maximum of 9 skills/8 indices
let skills_top_l = 5;
let skills_top_r = 7;
let skills_bot_l = 5;
let skills_bot_r = 1;
self.setup_state_for_skill_icons(
state,
ui,
skills_top_l,
skills_top_r,
skills_bot_l,
skills_bot_r,
);
// Sword
Image::new(animate_by_pulse(
&self
.item_imgs
.img_ids_or_not_found_img(ItemKey::Simple("example_sword".to_string())),
self.pulse,
))
.wh(ART_SIZE)
.middle_of(state.ids.content_align)
.color(Some(Color::Rgba(1.0, 1.0, 1.0, 1.0)))
.set(state.ids.sword_render, ui);
let skill_buttons = &[];
Image::new(self.imgs.sword_bg)
.wh([tweak!(1000.0), tweak!(600.0)])
.mid_top_with_margin_on(state.ids.content_align, tweak!(80.0))
.color(Some(Color::Rgba(1.0, 1.0, 1.0, 1.0)))
.set(state.ids.sword_bg, ui);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
use PositionSpecifier::TopLeftWithMarginsOn;
let skill_buttons = &[
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::BalancedFinisher),
ability_id: "common.abilities.sword.balanced_finisher",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(489.0), tweak!(462.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::OffensiveCombo),
ability_id: "common.abilities.sword.offensive_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(389.0), tweak!(313.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::OffensiveFinisher),
ability_id: "common.abilities.sword.offensive_finisher",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(489.0), tweak!(265.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::OffensiveAdvance),
ability_id: "common.abilities.sword.offensive_advance",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(489.0), tweak!(361.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CripplingCombo),
ability_id: "common.abilities.sword.crippling_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(164.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CripplingFinisher),
ability_id: "common.abilities.sword.crippling_finisher",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(193.0), tweak!(164.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CripplingStrike),
ability_id: "common.abilities.sword.crippling_strike",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(97.0), tweak!(164.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CripplingGouge),
ability_id: "common.abilities.sword.crippling_gouge",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(164.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CleavingCombo),
ability_id: "common.abilities.sword.cleaving_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(15.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CleavingFinisher),
ability_id: "common.abilities.sword.cleaving_finisher",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(193.0), tweak!(15.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CleavingSpin),
ability_id: "common.abilities.sword.cleaving_spin",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(97.0), tweak!(15.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::CleavingDive),
ability_id: "common.abilities.sword.cleaving_dive",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(15.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::DefensiveCombo),
ability_id: "common.abilities.sword.defensive_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(389.0), tweak!(611.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::DefensiveBulwark),
ability_id: "common.abilities.sword.defensive_bulwark",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(489.0), tweak!(659.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::DefensiveRetreat),
ability_id: "common.abilities.sword.defensive_retreat",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(489.0), tweak!(563.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ParryingCombo),
ability_id: "common.abilities.sword.parrying_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(760.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ParryingParry),
ability_id: "common.abilities.sword.parrying_parry",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(193.0), tweak!(760.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ParryingRiposte),
ability_id: "common.abilities.sword.parrying_riposte",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(97.0), tweak!(760.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ParryingCounter),
ability_id: "common.abilities.sword.parrying_counter",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(760.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::HeavyCombo),
ability_id: "common.abilities.sword.heavy_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(909.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::HeavyFinisher),
ability_id: "common.abilities.sword.heavy_finisher",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(193.0), tweak!(909.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::HeavyPommelStrike),
ability_id: "common.abilities.sword.heavy_pommelstrike",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(97.0), tweak!(909.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::HeavyFortitude),
ability_id: "common.abilities.sword.heavy_fortitude",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(909.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::MobilityCombo),
ability_id: "common.abilities.sword.mobility_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(462.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::MobilityFeint),
ability_id: "common.abilities.sword.mobility_feint",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(313.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::MobilityAgility),
ability_id: "common.abilities.sword.mobility_agility",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(289.0), tweak!(611.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ReachingCombo),
ability_id: "common.abilities.sword.reaching_combo",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(141.0), tweak!(462.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ReachingCharge),
ability_id: "common.abilities.sword.reaching_charge",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(367.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ReachingFlurry),
ability_id: "common.abilities.sword.reaching_flurry",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(462.0)),
},
SkillIcon::Ability {
skill: Skill::Sword(SwordSkill::ReachingSkewer),
ability_id: "common.abilities.sword.reaching_skewer",
position: TopLeftWithMarginsOn(state.ids.sword_bg, tweak!(2.0), tweak!(558.0)),
},
];
state.update(|s| {
s.ids
.skills
.resize(skill_buttons.len(), &mut ui.widget_id_generator())
});
state.update(|s| {
s.ids
.skill_lock_imgs
.resize(skill_buttons.len(), &mut ui.widget_id_generator())
});
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -1693,7 +1844,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -1851,7 +2002,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -2003,7 +2154,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -2161,7 +2312,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -2308,7 +2459,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -2392,7 +2543,7 @@ impl<'a> Diary<'a> {
},
];
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip);
self.handle_skill_buttons(skill_buttons, ui, &mut events, diary_tooltip, state);
events
}
@ -2402,8 +2553,9 @@ impl<'a> Diary<'a> {
ui: &mut UiCell,
events: &mut Vec<Event>,
diary_tooltip: &Tooltip,
state: &mut State<DiaryState>,
) {
for icon in icons {
for (i, icon) in icons.iter().enumerate() {
match icon {
SkillIcon::Descriptive {
title,
@ -2439,6 +2591,20 @@ impl<'a> Diary<'a> {
events,
diary_tooltip,
),
SkillIcon::Ability {
skill,
ability_id,
position,
} => self.create_unlock_ability_button(
*skill,
ability_id,
*position,
i,
ui,
events,
diary_tooltip,
state,
),
}
}
}
@ -2629,6 +2795,59 @@ impl<'a> Diary<'a> {
events.push(Event::UnlockSkill(skill));
};
}
fn create_unlock_ability_button(
&mut self,
skill: Skill,
ability_id: &str,
position: PositionSpecifier,
widget_index: usize,
ui: &mut UiCell,
events: &mut Vec<Event>,
diary_tooltip: &Tooltip,
state: &mut State<DiaryState>,
) {
let locked = !self.skill_set.prerequisites_met(skill);
let owned = self.skill_set.has_skill(skill);
let image_color = if owned {
TEXT_COLOR
} else {
Color::Rgba(0.41, 0.41, 0.41, 0.7)
};
let (title, description) = util::ability_description(ability_id, self.localized_strings);
let sp_cost = sp(self.localized_strings, self.skill_set, skill);
let description = format!("{description}\n{sp_cost}");
let button = Button::image(util::ability_image(self.imgs, ability_id))
.w_h(76.0, 76.0)
.position(position)
.image_color(image_color)
.with_tooltip(
self.tooltip_manager,
&title,
&description,
diary_tooltip,
TEXT_COLOR,
)
.set(state.ids.skills[widget_index], ui);
// Lock Image
if locked {
Image::new(self.imgs.lock)
.w_h(76.0, 76.0)
.middle_of(state.ids.skills[widget_index])
.graphics_for(state.ids.skills[widget_index])
.color(Some(Color::Rgba(1.0, 1.0, 1.0, 0.8)))
.set(state.ids.skill_lock_imgs[widget_index], ui);
}
if button.was_clicked() {
events.push(Event::UnlockSkill(skill));
};
}
}
/// Returns skill info as a tuple of title and description.

View File

@ -81,6 +81,7 @@ image_ids! {
book_bg: "voxygen.element.ui.diary.spellbook_bg",
skills_bg: "voxygen.element.ui.diary.diary_skills_bg",
slot_skills: "voxygen.element.ui.diary.buttons.slot_skilltree",
sword_bg: "voxygen.element.ui.diary.sword_bg",
swords_crossed: "voxygen.element.weapons.swords_crossed",
sceptre: "voxygen.element.weapons.sceptre",
sword: "voxygen.element.weapons.sword",
@ -202,37 +203,37 @@ image_ids! {
flamethrower: "voxygen.element.skills.skill_flamethrower",
// Sword
sword_balanced_combo: "voxygen.element.skills.sword.balanced_combo",
// sword_balanced_thrust: "voxygen.element.skills.sword.balanced_thrust",
// sword_balanced_finisher: "voxygen.element.skills.sword.balanced_finisher",
sword_balanced_thrust: "voxygen.element.skills.sword.balanced_thrust",
sword_balanced_finisher: "voxygen.element.skills.sword.balanced_finisher",
sword_offensive_combo: "voxygen.element.skills.sword.offensive_combo",
// sword_offensive_finisher: "voxygen.element.skills.sword.offensive_finisher",
// sword_offensive_advance: "voxygen.element.skills.sword.offensive_advance",
sword_offensive_finisher: "voxygen.element.skills.sword.offensive_finisher",
sword_offensive_advance: "voxygen.element.skills.sword.offensive_advance",
sword_crippling_combo: "voxygen.element.skills.sword.crippling_combo",
// sword_crippling_finisher: "voxygen.element.skills.sword.crippling_finisher",
// sword_crippling_strike: "voxygen.element.skills.sword.crippling_strike",
// sword_crippling_gouge: "voxygen.element.skills.sword.crippling_gouge",
sword_crippling_finisher: "voxygen.element.skills.sword.crippling_finisher",
sword_crippling_strike: "voxygen.element.skills.sword.crippling_strike",
sword_crippling_gouge: "voxygen.element.skills.sword.crippling_gouge",
sword_cleaving_combo: "voxygen.element.skills.sword.cleaving_combo",
// sword_cleaving_finisher: "voxygen.element.skills.sword.cleaving_finisher",
// sword_cleaving_spin: "voxygen.element.skills.sword.cleaving_spin",
// sword_cleaving_dive: "voxygen.element.skills.sword.cleaving_dive",
sword_cleaving_finisher: "voxygen.element.skills.sword.cleaving_finisher",
sword_cleaving_spin: "voxygen.element.skills.sword.cleaving_spin",
sword_cleaving_dive: "voxygen.element.skills.sword.cleaving_dive",
sword_defensive_combo: "voxygen.element.skills.sword.defensive_combo",
// sword_defensive_bulwark: "voxygen.element.skills.sword.defensive_bulwark",
// sword_defensive_retreat: "voxygen.element.skills.sword.defensive_retreat",
sword_defensive_bulwark: "voxygen.element.skills.sword.defensive_bulwark",
sword_defensive_retreat: "voxygen.element.skills.sword.defensive_retreat",
sword_parrying_combo: "voxygen.element.skills.sword.parrying_combo",
// sword_parrying_parry: "voxygen.element.skills.sword.parrying_parry",
// sword_parrying_riposte: "voxygen.element.skills.sword.parrying_riposte",
// sword_parrying_counter: "voxygen.element.skills.sword.parrying_counter",
sword_parrying_parry: "voxygen.element.skills.sword.parrying_parry",
sword_parrying_riposte: "voxygen.element.skills.sword.parrying_riposte",
sword_parrying_counter: "voxygen.element.skills.sword.parrying_counter",
sword_heavy_combo: "voxygen.element.skills.sword.heavy_combo",
// sword_heavy_finisher: "voxygen.element.skills.sword.heavy_finisher",
// sword_heavy_pommelstrike: "voxygen.element.skills.sword.heavy_pommelstrike",
// sword_heavy_fortitude: "voxygen.element.skills.sword.heavy_fortitude",
sword_heavy_finisher: "voxygen.element.skills.sword.heavy_finisher",
sword_heavy_pommelstrike: "voxygen.element.skills.sword.heavy_pommelstrike",
sword_heavy_fortitude: "voxygen.element.skills.sword.heavy_fortitude",
sword_mobility_combo: "voxygen.element.skills.sword.mobility_combo",
// sword_mobility_feint: "voxygen.element.skills.sword.mobility_feint",
// sword_mobility_agility: "voxygen.element.skills.sword.mobility_agility",
sword_mobility_feint: "voxygen.element.skills.sword.mobility_feint",
sword_mobility_agility: "voxygen.element.skills.sword.mobility_agility",
sword_reaching_combo: "voxygen.element.skills.sword.reaching_combo",
// sword_reaching_charge: "voxygen.element.skills.sword.reaching_charge",
// sword_reaching_flurry: "voxygen.element.skills.sword.reaching_flurry",
// sword_reaching_skewer: "voxygen.element.skills.sword.reaching_skewer",
sword_reaching_charge: "voxygen.element.skills.sword.reaching_charge",
sword_reaching_flurry: "voxygen.element.skills.sword.reaching_flurry",
sword_reaching_skewer: "voxygen.element.skills.sword.reaching_skewer",
// Skilltree Icons
health_plus_skill: "voxygen.element.skills.skilltree.health_plus",

View File

@ -419,8 +419,8 @@ impl<W: Positionable> Position for W {
fn position(self, request: PositionSpecifier) -> Self {
match request {
// Place the widget near other widget with the given margins
PositionSpecifier::TopLeftWithMarginsOn(other, top, right) => {
self.top_left_with_margins_on(other, top, right)
PositionSpecifier::TopLeftWithMarginsOn(other, top, left) => {
self.top_left_with_margins_on(other, top, left)
},
PositionSpecifier::TopRightWithMarginsOn(other, top, right) => {
self.top_right_with_margins_on(other, top, right)

View File

@ -335,37 +335,37 @@ pub fn ability_image(imgs: &img_ids::Imgs, ability_id: &str) -> image::Id {
"common.abilities.debug.possess" => imgs.snake_arrow_0,
// Sword
"common.abilities.sword.balanced_combo" => imgs.sword_balanced_combo,
// "common.abilities.sword.balanced_thrust" => imgs.sword_balanced_thrust,
// "common.abilities.sword.balanced_finisher" => imgs.sword_balanced_finisher,
"common.abilities.sword.balanced_thrust" => imgs.sword_balanced_thrust,
"common.abilities.sword.balanced_finisher" => imgs.sword_balanced_finisher,
"common.abilities.sword.offensive_combo" => imgs.sword_offensive_combo,
// "common.abilities.sword.offensive_finisher" => imgs.sword_offensive_finisher,
// "common.abilities.sword.offensive_advance" => imgs.sword_offensive_advance,
"common.abilities.sword.offensive_finisher" => imgs.sword_offensive_finisher,
"common.abilities.sword.offensive_advance" => imgs.sword_offensive_advance,
"common.abilities.sword.crippling_combo" => imgs.sword_crippling_combo,
// "common.abilities.sword.crippling_finisher" => imgs.sword_crippling_finisher,
// "common.abilities.sword.crippling_strike" => imgs.sword_crippling_strike,
// "common.abilities.sword.crippling_gouge" => imgs.sword_crippling_gouge,
"common.abilities.sword.crippling_finisher" => imgs.sword_crippling_finisher,
"common.abilities.sword.crippling_strike" => imgs.sword_crippling_strike,
"common.abilities.sword.crippling_gouge" => imgs.sword_crippling_gouge,
"common.abilities.sword.cleaving_combo" => imgs.sword_cleaving_combo,
// "common.abilities.sword.cleaving_finisher" => imgs.sword_cleaving_finisher,
// "common.abilities.sword.cleaving_spin" => imgs.sword_cleaving_spin,
// "common.abilities.sword.cleaving_dive" => imgs.sword_cleaving_dive,
"common.abilities.sword.cleaving_finisher" => imgs.sword_cleaving_finisher,
"common.abilities.sword.cleaving_spin" => imgs.sword_cleaving_spin,
"common.abilities.sword.cleaving_dive" => imgs.sword_cleaving_dive,
"common.abilities.sword.defensive_combo" => imgs.sword_defensive_combo,
// "common.abilities.sword.defensive_bulwark" => imgs.sword_defensive_bulwark,
// "common.abilities.sword.defensive_retreat" => imgs.sword_defensive_retreat,
"common.abilities.sword.defensive_bulwark" => imgs.sword_defensive_bulwark,
"common.abilities.sword.defensive_retreat" => imgs.sword_defensive_retreat,
"common.abilities.sword.parrying_combo" => imgs.sword_parrying_combo,
// "common.abilities.sword.parrying_parry" => imgs.sword_parrying_parry,
// "common.abilities.sword.parrying_riposte" => imgs.sword_parrying_riposte,
// "common.abilities.sword.parrying_counter" => imgs.sword_parrying_counter,
"common.abilities.sword.parrying_parry" => imgs.sword_parrying_parry,
"common.abilities.sword.parrying_riposte" => imgs.sword_parrying_riposte,
"common.abilities.sword.parrying_counter" => imgs.sword_parrying_counter,
"common.abilities.sword.heavy_combo" => imgs.sword_heavy_combo,
// "common.abilities.sword.heavy_finisher" => imgs.sword_heavy_finisher,
// "common.abilities.sword.heavy_pommelstrike" => imgs.sword_heavy_pommelstrike,
// "common.abilities.sword.heavy_fortitude" => imgs.sword_heavy_fortitude,
"common.abilities.sword.heavy_finisher" => imgs.sword_heavy_finisher,
"common.abilities.sword.heavy_pommelstrike" => imgs.sword_heavy_pommelstrike,
"common.abilities.sword.heavy_fortitude" => imgs.sword_heavy_fortitude,
"common.abilities.sword.mobility_combo" => imgs.sword_mobility_combo,
// "common.abilities.sword.mobility_feint" => imgs.sword_mobility_feint,
// "common.abilities.sword.mobility_agility" => imgs.sword_mobility_agility,
"common.abilities.sword.mobility_feint" => imgs.sword_mobility_feint,
"common.abilities.sword.mobility_agility" => imgs.sword_mobility_agility,
"common.abilities.sword.reaching_combo" => imgs.sword_reaching_combo,
// "common.abilities.sword.reaching_charge" => imgs.sword_reaching_charge,
// "common.abilities.sword.reaching_flurry" => imgs.sword_reaching_flurry,
// "common.abilities.sword.reaching_skewer" => imgs.sword_reaching_skewer,
"common.abilities.sword.reaching_charge" => imgs.sword_reaching_charge,
"common.abilities.sword.reaching_flurry" => imgs.sword_reaching_flurry,
"common.abilities.sword.reaching_skewer" => imgs.sword_reaching_skewer,
// Axe
"common.abilities.axe.doublestrike" => imgs.twohaxe_m1,
"common.abilities.axe.spin" => imgs.axespin,