Addressed playtest feedback (no assets).

This commit is contained in:
Sam 2022-05-07 23:28:20 -04:00
parent 9b078c3383
commit 95c3fdffa1
12 changed files with 390 additions and 207 deletions

View File

@ -299,6 +299,17 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
material.into(),
get_hands(*hands),
])?,
LootSpec::ModularWeaponPrimaryComponent {
tool,
material,
hands,
} => wtr.write_record(&[
&chance,
"Modular Weapon Primary Component",
&get_tool_kind(tool),
material.into(),
get_hands(*hands),
])?,
}
}
@ -407,6 +418,10 @@ fn entity_drops(entity_config: &str) -> Result<(), Box<dyn Error>> {
// TODO: Figure out how modular weapons should work here
(None, String::from("1"))
},
LootSpec::ModularWeaponPrimaryComponent { .. } => {
// TODO: Figure out how modular weapon components should work here
(None, String::from("1"))
},
LootSpec::LootTable(_) => panic!("Shouldn't exist"),
LootSpec::Nothing => (None, "-".to_string()),
};

View File

@ -539,6 +539,22 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
.to_string(),
),
},
"Modular Weapon Primary Component" => LootSpec::ModularWeaponPrimaryComponent {
tool: get_tool_kind(record.get(headers["Item"]).expect("No tool").to_string())
.expect("Invalid tool kind"),
material: Material::from_str(
record
.get(headers["Lower Amount or Material"])
.expect("No material"),
)
.expect("Invalid material type"),
hands: get_tool_hands(
record
.get(headers["Upper Amount or Hands"])
.expect("No hands")
.to_string(),
),
},
a => panic!(
"Loot specifier kind must be either \"Item\", \"LootTable\", or \"Nothing\"\n{}",
a

View File

@ -967,14 +967,14 @@ pub fn get_weapon_kinds(inv: &Inventory) -> (Option<ToolKind>, Option<ToolKind>)
#[cfg(not(target_arch = "wasm32"))]
// TODO: Either remove msm or use it as argument in fn kind
pub fn weapon_rating<T: ItemDesc>(item: &T, _msm: &MaterialStatManifest) -> f32 {
const DAMAGE_WEIGHT: f32 = 2.0;
const POWER_WEIGHT: f32 = 2.0;
const SPEED_WEIGHT: f32 = 3.0;
const CRIT_CHANCE_WEIGHT: f32 = 1.25;
const RANGE_WEIGHT: f32 = 0.0;
const EFFECT_WEIGHT: f32 = 1.0;
const EQUIP_TIME_WEIGHT: f32 = 0.25;
const ENERGY_EFFICIENCY_WEIGHT: f32 = 0.0;
const BUFF_STRENGTH_WEIGHT: f32 = 0.0;
const CRIT_CHANCE_WEIGHT: f32 = 1.5;
const RANGE_WEIGHT: f32 = 0.8;
const EFFECT_WEIGHT: f32 = 1.5;
const EQUIP_TIME_WEIGHT: f32 = 0.0;
const ENERGY_EFFICIENCY_WEIGHT: f32 = 1.5;
const BUFF_STRENGTH_WEIGHT: f32 = 1.5;
if let ItemKind::Tool(tool) = &*item.kind() {
let stats = tool.stats;
@ -983,32 +983,23 @@ pub fn weapon_rating<T: ItemDesc>(item: &T, _msm: &MaterialStatManifest) -> f32
// Since it is only for weapon though, it probably makes sense to leave
// independent for now
let damage_rating = stats.power - 1.0;
let power_rating = stats.power;
let speed_rating = stats.speed - 1.0;
let crit_chance_rating = stats.crit_chance - 0.1;
let range_rating = stats.range;
let crit_chance_rating = (stats.crit_chance - 0.1) * 10.0;
let range_rating = stats.range - 1.0;
let effect_rating = stats.effect_power - 1.0;
let equip_time_rating = 0.5 - stats.equip_time_secs;
let energy_efficiency_rating = stats.energy_efficiency;
let buff_strength_rating = stats.buff_strength;
let energy_efficiency_rating = stats.energy_efficiency - 1.0;
let buff_strength_rating = stats.buff_strength - 1.0;
0.5 + (1.0
+ (damage_rating * DAMAGE_WEIGHT)
+ (speed_rating * SPEED_WEIGHT)
+ (crit_chance_rating * CRIT_CHANCE_WEIGHT)
+ (range_rating * RANGE_WEIGHT)
+ (effect_rating * EFFECT_WEIGHT)
+ (equip_time_rating * EQUIP_TIME_WEIGHT)
+ (energy_efficiency_rating * ENERGY_EFFICIENCY_WEIGHT)
+ (buff_strength_rating * BUFF_STRENGTH_WEIGHT))
/ (DAMAGE_WEIGHT
+ SPEED_WEIGHT
+ CRIT_CHANCE_WEIGHT
+ RANGE_WEIGHT
+ EFFECT_WEIGHT
+ EQUIP_TIME_WEIGHT
+ ENERGY_EFFICIENCY_WEIGHT
+ BUFF_STRENGTH_WEIGHT)
power_rating * POWER_WEIGHT
+ speed_rating * SPEED_WEIGHT
+ crit_chance_rating * CRIT_CHANCE_WEIGHT
+ range_rating * RANGE_WEIGHT
+ effect_rating * EFFECT_WEIGHT
+ equip_time_rating * EQUIP_TIME_WEIGHT
+ energy_efficiency_rating * ENERGY_EFFICIENCY_WEIGHT
+ buff_strength_rating * BUFF_STRENGTH_WEIGHT
} else {
0.0
}

View File

@ -993,7 +993,11 @@ impl Item {
pub fn quality(&self) -> Quality {
match &self.item_base {
ItemBase::Simple(item_def) => item_def.quality,
ItemBase::Simple(item_def) => item_def.quality.max(
self.components
.iter()
.fold(Quality::MIN, |a, b| a.max(b.quality())),
),
ItemBase::Modular(mod_base) => mod_base.compute_quality(self.components()),
}
}

View File

@ -336,14 +336,19 @@ pub enum ModularWeaponCreationError {
SecondaryComponentNotFound,
}
/// Creates a random modular weapon when provided with a toolkind, material, and
/// optionally the handedness
pub fn random_weapon(
/// Creates a random modular weapon primary component when provided with a
/// toolkind, material, and optionally the handedness Note: The component
/// produced is not necessarily restricted to that handedness, but rather is
/// able to produce a weapon of that handedness depending on what secondary
/// component is used Returns the comptabile handednesses that can be used with
/// provided restriction and generated component (useful for cases where no
/// restriction was passed in, but generated component has a restriction)
pub fn random_weapon_primary_component(
tool: ToolKind,
material: Material,
hand_restriction: Option<Hands>,
mut rng: &mut impl Rng,
) -> Result<Item, ModularWeaponCreationError> {
) -> Result<(Item, Option<Hands>), ModularWeaponCreationError> {
let result = (|| {
if let Some(material_id) = material.asset_identifier() {
// Loads default ability map and material stat manifest for later use
@ -360,48 +365,72 @@ pub fn random_weapon(
})
.collect::<Vec<_>>();
let (primary_component, hand_restriction) = {
let (comp, hand) = primary_components
.choose(&mut rng)
.ok_or(ModularWeaponCreationError::PrimaryComponentNotFound)?;
let comp = comp.duplicate(ability_map, msm);
(comp, hand_restriction.or(*hand))
};
let secondary_components = SECONDARY_COMPONENT_POOL
.get(&tool)
.into_iter()
.flatten()
.filter(|(_def, hand)| match (hand_restriction, hand) {
(Some(restriction), Some(hand)) => restriction == *hand,
(None, _) | (_, None) => true,
})
.collect::<Vec<_>>();
let secondary_component = {
let def = &secondary_components
.choose(&mut rng)
.ok_or(ModularWeaponCreationError::SecondaryComponentNotFound)?
.0;
Item::new_from_item_base(
ItemBase::Simple(Arc::clone(def)),
Vec::new(),
ability_map,
msm,
)
};
// Create modular weapon
Ok(Item::new_from_item_base(
ItemBase::Modular(ModularBase::Tool),
vec![primary_component, secondary_component],
ability_map,
msm,
))
let (comp, hand) = primary_components
.choose(&mut rng)
.ok_or(ModularWeaponCreationError::PrimaryComponentNotFound)?;
let comp = comp.duplicate(ability_map, msm);
Ok((comp, hand_restriction.or(*hand)))
} else {
Err(ModularWeaponCreationError::MaterialNotFound)
}
})();
if let Err(err) = &result {
let error_str = format!(
"Failed to synthesize a primary component for a modular {tool:?} made of {material:?} \
that had a hand restriction of {hand_restriction:?}. Error: {err:?}"
);
dev_panic!(error_str)
}
result
}
/// Creates a random modular weapon when provided with a toolkind, material, and
/// optionally the handedness
pub fn random_weapon(
tool: ToolKind,
material: Material,
hand_restriction: Option<Hands>,
mut rng: &mut impl Rng,
) -> Result<Item, ModularWeaponCreationError> {
let result = (|| {
// Loads default ability map and material stat manifest for later use
let ability_map = &AbilityMap::load().read();
let msm = &MaterialStatManifest::load().read();
let (primary_component, hand_restriction) =
random_weapon_primary_component(tool, material, hand_restriction, rng)?;
let secondary_components = SECONDARY_COMPONENT_POOL
.get(&tool)
.into_iter()
.flatten()
.filter(|(_def, hand)| match (hand_restriction, hand) {
(Some(restriction), Some(hand)) => restriction == *hand,
(None, _) | (_, None) => true,
})
.collect::<Vec<_>>();
let secondary_component = {
let def = &secondary_components
.choose(&mut rng)
.ok_or(ModularWeaponCreationError::SecondaryComponentNotFound)?
.0;
Item::new_from_item_base(
ItemBase::Simple(Arc::clone(def)),
Vec::new(),
ability_map,
msm,
)
};
// Create modular weapon
Ok(Item::new_from_item_base(
ItemBase::Modular(ModularBase::Tool),
vec![primary_component, secondary_component],
ability_map,
msm,
))
})();
if let Err(err) = &result {
let error_str = format!(
"Failed to synthesize a modular {tool:?} made of {material:?} that had a hand \

View File

@ -261,7 +261,7 @@ impl From<Vec<(f32, LootSpec<String>)>> for ProbabilityFile {
},
LootSpec::Nothing
// TODO: Let someone else wrangle modular weapons into the economy
| LootSpec::ModularWeapon { .. } => Vec::new().into_iter(),
| LootSpec::ModularWeapon { .. } | LootSpec::ModularWeaponPrimaryComponent { .. } => Vec::new().into_iter(),
})
.collect(),
}

View File

@ -92,6 +92,11 @@ pub enum LootSpec<T: AsRef<str>> {
material: item::Material,
hands: Option<item::tool::Hands>,
},
ModularWeaponPrimaryComponent {
tool: item::tool::ToolKind,
material: item::Material,
hands: Option<item::tool::Hands>,
},
}
impl<T: AsRef<str>> LootSpec<T> {
@ -145,6 +150,25 @@ impl<T: AsRef<str>> LootSpec<T> {
},
Option::Some,
),
Self::ModularWeaponPrimaryComponent {
tool,
material,
hands,
} => item::modular::random_weapon_primary_component(*tool, *material, *hands, &mut rng)
.map_or_else(
|e| {
warn!(
?e,
"error while creating modular weapon primary component. Toolkind: \
{:?}, Material: {:?}, Hands: {:?}",
tool,
material,
hands,
);
None
},
|(comp, _)| Some(comp),
),
}
}
}
@ -199,6 +223,19 @@ pub mod tests {
},
);
},
LootSpec::ModularWeaponPrimaryComponent {
tool,
material,
hands,
} => {
item::modular::random_weapon_primary_component(*tool, *material, *hands, &mut rng).unwrap_or_else(
|_| {
panic!(
"Failed to synthesize a modular weapon primary component: {tool:?} made of {material:?} that had a hand restriction of {hands:?}."
)
},
);
},
}
}

View File

@ -150,7 +150,13 @@ impl From<SpriteKind> for Option<SpriteInteractKind> {
| SpriteKind::WildFlax
| SpriteKind::RoundCactus
| SpriteKind::ShortFlatCactus
| SpriteKind::MedFlatCactus => Some(SpriteInteractKind::Harvestable),
| SpriteKind::MedFlatCactus
| SpriteKind::Wood
| SpriteKind::Bamboo
| SpriteKind::Hardwood
| SpriteKind::Ironwood
| SpriteKind::Frostwood
| SpriteKind::Eldwood => Some(SpriteInteractKind::Harvestable),
SpriteKind::Stones
| SpriteKind::Twigs
| SpriteKind::VialEmpty

View File

@ -113,235 +113,235 @@ INSERT INTO _temp_modular_items VALUES('common.items.weapons.axe.steel_axe-6', '
INSERT INTO _temp_modular_items VALUES('common.items.weapons.axe.steel_axe-6', 'common.items.mineral.ingot.steel', 104, 102, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-0', 'veloren.core.pseudo_items.modular.tool', 105, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-0', 'common.items.crafting_ing.modular.primary.sword.ornate', 106, 105, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 107, 105, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-0', 'common.items.crafting_ing.modular.secondary.sword.short', 107, 105, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-0', 'common.items.mineral.ingot.bloodsteel', 108, 106, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-1', 'veloren.core.pseudo_items.modular.tool', 109, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-1', 'common.items.crafting_ing.modular.primary.sword.longsword', 110, 109, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 111, 109, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-1', 'common.items.crafting_ing.modular.secondary.sword.short', 111, 109, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-1', 'common.items.mineral.ingot.bloodsteel', 112, 110, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-2', 'veloren.core.pseudo_items.modular.tool', 113, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-2', 'common.items.crafting_ing.modular.primary.sword.sawblade', 114, 113, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-2', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 115, 113, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-2', 'common.items.crafting_ing.modular.secondary.sword.short', 115, 113, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bloodsteel-2', 'common.items.mineral.ingot.bloodsteel', 116, 114, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-0', 'veloren.core.pseudo_items.modular.tool', 117, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-0', 'common.items.crafting_ing.modular.primary.sword.katana', 118, 117, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 119, 117, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-0', 'common.items.crafting_ing.modular.secondary.sword.short', 119, 117, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-0', 'common.items.mineral.ingot.bronze', 120, 118, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-1', 'veloren.core.pseudo_items.modular.tool', 121, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-1', 'common.items.crafting_ing.modular.primary.sword.longsword', 122, 121, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 123, 121, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-1', 'common.items.crafting_ing.modular.secondary.sword.short', 123, 121, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-1', 'common.items.mineral.ingot.bronze', 124, 122, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-2', 'veloren.core.pseudo_items.modular.tool', 125, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-2', 'common.items.crafting_ing.modular.primary.sword.sawblade', 126, 125, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-2', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 127, 125, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-2', 'common.items.crafting_ing.modular.secondary.sword.short', 127, 125, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.bronze-2', 'common.items.mineral.ingot.bronze', 128, 126, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-0', 'veloren.core.pseudo_items.modular.tool', 129, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-0', 'common.items.crafting_ing.modular.primary.sword.longsword', 130, 129, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 131, 129, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-0', 'common.items.crafting_ing.modular.secondary.sword.short', 131, 129, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-0', 'common.items.mineral.ingot.cobalt', 132, 130, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-1', 'veloren.core.pseudo_items.modular.tool', 133, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-1', 'common.items.crafting_ing.modular.primary.sword.ornate', 134, 133, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 135, 133, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-1', 'common.items.crafting_ing.modular.secondary.sword.short', 135, 133, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-1', 'common.items.mineral.ingot.cobalt', 136, 134, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-2', 'veloren.core.pseudo_items.modular.tool', 137, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-2', 'common.items.crafting_ing.modular.primary.sword.sabre', 138, 137, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-2', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 139, 137, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-2', 'common.items.crafting_ing.modular.secondary.sword.short', 139, 137, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-2', 'common.items.mineral.ingot.cobalt', 140, 138, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-3', 'veloren.core.pseudo_items.modular.tool', 141, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-3', 'common.items.crafting_ing.modular.primary.sword.sawblade', 142, 141, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-3', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 143, 141, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-3', 'common.items.crafting_ing.modular.secondary.sword.short', 143, 141, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.cobalt-3', 'common.items.mineral.ingot.cobalt', 144, 142, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-0', 'veloren.core.pseudo_items.modular.tool', 145, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-0', 'common.items.crafting_ing.modular.primary.sword.sawblade', 146, 145, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 147, 145, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-0', 'common.items.crafting_ing.modular.secondary.sword.short', 147, 145, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-0', 'common.items.mineral.ingot.iron', 148, 146, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-1', 'veloren.core.pseudo_items.modular.tool', 149, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-1', 'common.items.crafting_ing.modular.primary.sword.katana', 150, 149, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 151, 149, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-1', 'common.items.crafting_ing.modular.secondary.sword.short', 151, 149, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-1', 'common.items.mineral.ingot.iron', 152, 150, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-2', 'veloren.core.pseudo_items.modular.tool', 153, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-2', 'common.items.crafting_ing.modular.primary.sword.sabre', 154, 153, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-2', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 155, 153, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-2', 'common.items.crafting_ing.modular.secondary.sword.short', 155, 153, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-2', 'common.items.mineral.ingot.iron', 156, 154, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-3', 'veloren.core.pseudo_items.modular.tool', 157, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-3', 'common.items.crafting_ing.modular.primary.sword.ornate', 158, 157, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-3', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 159, 157, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-3', 'common.items.crafting_ing.modular.secondary.sword.short', 159, 157, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-3', 'common.items.mineral.ingot.iron', 160, 158, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-4', 'veloren.core.pseudo_items.modular.tool', 161, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-4', 'common.items.crafting_ing.modular.primary.sword.longsword', 162, 161, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-4', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 163, 161, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-4', 'common.items.crafting_ing.modular.secondary.sword.short', 163, 161, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.iron-4', 'common.items.mineral.ingot.iron', 164, 162, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.obsidian-0', 'veloren.core.pseudo_items.modular.tool', 165, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.obsidian-0', 'common.items.crafting_ing.modular.primary.sword.longsword', 166, 165, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.obsidian-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 167, 165, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.obsidian-0', 'common.items.crafting_ing.modular.secondary.sword.short', 167, 165, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.obsidian-0', 'common.items.mineral.ingot.bloodsteel', 168, 166, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-0', 'veloren.core.pseudo_items.modular.tool', 169, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-0', 'common.items.crafting_ing.modular.primary.sword.sabre', 170, 169, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 171, 169, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-0', 'common.items.crafting_ing.modular.secondary.sword.short', 171, 169, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-0', 'common.items.mineral.ingot.orichalcum', 172, 170, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-1', 'veloren.core.pseudo_items.modular.tool', 173, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-1', 'common.items.crafting_ing.modular.primary.sword.longsword', 174, 173, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 175, 173, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-1', 'common.items.crafting_ing.modular.secondary.sword.short', 175, 173, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.orichalcum-1', 'common.items.mineral.ingot.orichalcum', 176, 174, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-0', 'veloren.core.pseudo_items.modular.tool', 177, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-0', 'common.items.crafting_ing.modular.primary.sword.sabre', 178, 177, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-0', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 179, 177, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-0', 'common.items.crafting_ing.modular.secondary.sword.short', 179, 177, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-0', 'common.items.mineral.ingot.steel', 180, 178, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-1', 'veloren.core.pseudo_items.modular.tool', 181, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-1', 'common.items.crafting_ing.modular.primary.sword.sabre', 182, 181, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-1', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 183, 181, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-1', 'common.items.crafting_ing.modular.secondary.sword.short', 183, 181, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-1', 'common.items.mineral.ingot.steel', 184, 182, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-2', 'veloren.core.pseudo_items.modular.tool', 185, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-2', 'common.items.crafting_ing.modular.primary.sword.ornate', 186, 185, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-2', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 187, 185, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-2', 'common.items.crafting_ing.modular.secondary.sword.short', 187, 185, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-2', 'common.items.mineral.ingot.steel', 188, 186, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-3', 'veloren.core.pseudo_items.modular.tool', 189, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-3', 'common.items.crafting_ing.modular.primary.sword.katana', 190, 189, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-3', 'common.items.crafting_ing.modular.secondary.sword.one-handed', 191, 189, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-3', 'common.items.crafting_ing.modular.secondary.sword.short', 191, 189, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword_1h.steel-3', 'common.items.mineral.ingot.steel', 192, 190, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-0', 'veloren.core.pseudo_items.modular.tool', 193, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-0', 'common.items.crafting_ing.modular.primary.sword.zweihander', 194, 193, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 195, 193, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-0', 'common.items.crafting_ing.modular.secondary.sword.long', 195, 193, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-0', 'common.items.mineral.ingot.bloodsteel', 196, 194, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-1', 'veloren.core.pseudo_items.modular.tool', 197, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-1', 'common.items.crafting_ing.modular.primary.sword.katana', 198, 197, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 199, 197, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-1', 'common.items.crafting_ing.modular.secondary.sword.long', 199, 197, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-1', 'common.items.mineral.ingot.bloodsteel', 200, 198, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-2', 'veloren.core.pseudo_items.modular.tool', 201, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-2', 'common.items.crafting_ing.modular.primary.sword.sawblade', 202, 201, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 203, 201, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-2', 'common.items.crafting_ing.modular.secondary.sword.long', 203, 201, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bloodsteel-2', 'common.items.mineral.ingot.bloodsteel', 204, 202, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-0', 'veloren.core.pseudo_items.modular.tool', 205, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-0', 'common.items.crafting_ing.modular.primary.sword.greatsword', 206, 205, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 207, 205, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-0', 'common.items.crafting_ing.modular.secondary.sword.long', 207, 205, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-0', 'common.items.mineral.ingot.bronze', 208, 206, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-1', 'veloren.core.pseudo_items.modular.tool', 209, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-1', 'common.items.crafting_ing.modular.primary.sword.longsword', 210, 209, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 211, 209, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-1', 'common.items.crafting_ing.modular.secondary.sword.long', 211, 209, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-1', 'common.items.mineral.ingot.bronze', 212, 210, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-2', 'veloren.core.pseudo_items.modular.tool', 213, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-2', 'common.items.crafting_ing.modular.primary.sword.sawblade', 214, 213, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 215, 213, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-2', 'common.items.crafting_ing.modular.secondary.sword.long', 215, 213, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.bronze-2', 'common.items.mineral.ingot.bronze', 216, 214, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-0', 'veloren.core.pseudo_items.modular.tool', 217, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-0', 'common.items.crafting_ing.modular.primary.sword.zweihander', 218, 217, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 219, 217, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-0', 'common.items.crafting_ing.modular.secondary.sword.long', 219, 217, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-0', 'common.items.mineral.ingot.cobalt', 220, 218, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-1', 'veloren.core.pseudo_items.modular.tool', 221, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-1', 'common.items.crafting_ing.modular.primary.sword.greatsword', 222, 221, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 223, 221, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-1', 'common.items.crafting_ing.modular.secondary.sword.long', 223, 221, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-1', 'common.items.mineral.ingot.cobalt', 224, 222, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-2', 'veloren.core.pseudo_items.modular.tool', 225, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-2', 'common.items.crafting_ing.modular.primary.sword.longsword', 226, 225, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 227, 225, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-2', 'common.items.crafting_ing.modular.secondary.sword.long', 227, 225, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-2', 'common.items.mineral.ingot.cobalt', 228, 226, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-3', 'veloren.core.pseudo_items.modular.tool', 229, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-3', 'common.items.crafting_ing.modular.primary.sword.sawblade', 230, 229, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-3', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 231, 229, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-3', 'common.items.crafting_ing.modular.secondary.sword.long', 231, 229, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.cobalt-3', 'common.items.mineral.ingot.cobalt', 232, 230, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-0', 'veloren.core.pseudo_items.modular.tool', 233, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-0', 'common.items.crafting_ing.modular.primary.sword.sabre', 234, 233, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 235, 233, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-0', 'common.items.crafting_ing.modular.secondary.sword.long', 235, 233, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-0', 'common.items.mineral.ingot.iron', 236, 234, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-1', 'veloren.core.pseudo_items.modular.tool', 237, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-1', 'common.items.crafting_ing.modular.primary.sword.greatsword', 238, 237, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 239, 237, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-1', 'common.items.crafting_ing.modular.secondary.sword.long', 239, 237, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-1', 'common.items.mineral.ingot.iron', 240, 238, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-10', 'veloren.core.pseudo_items.modular.tool', 241, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-10', 'common.items.crafting_ing.modular.primary.sword.greatsword', 242, 241, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-10', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 243, 241, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-10', 'common.items.crafting_ing.modular.secondary.sword.long', 243, 241, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-10', 'common.items.mineral.ingot.iron', 244, 242, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-2', 'veloren.core.pseudo_items.modular.tool', 245, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-2', 'common.items.crafting_ing.modular.primary.sword.zweihander', 246, 245, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 247, 245, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-2', 'common.items.crafting_ing.modular.secondary.sword.long', 247, 245, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-2', 'common.items.mineral.ingot.iron', 248, 246, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-3', 'veloren.core.pseudo_items.modular.tool', 249, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-3', 'common.items.crafting_ing.modular.primary.sword.zweihander', 250, 249, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-3', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 251, 249, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-3', 'common.items.crafting_ing.modular.secondary.sword.long', 251, 249, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-3', 'common.items.mineral.ingot.iron', 252, 250, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-4', 'veloren.core.pseudo_items.modular.tool', 253, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-4', 'common.items.crafting_ing.modular.primary.sword.greatsword', 254, 253, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-4', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 255, 253, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-4', 'common.items.crafting_ing.modular.secondary.sword.long', 255, 253, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-4', 'common.items.mineral.ingot.iron', 256, 254, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-5', 'veloren.core.pseudo_items.modular.tool', 257, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-5', 'common.items.crafting_ing.modular.primary.sword.longsword', 258, 257, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-5', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 259, 257, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-5', 'common.items.crafting_ing.modular.secondary.sword.long', 259, 257, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-5', 'common.items.mineral.ingot.iron', 260, 258, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-6', 'veloren.core.pseudo_items.modular.tool', 261, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-6', 'common.items.crafting_ing.modular.primary.sword.zweihander', 262, 261, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-6', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 263, 261, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-6', 'common.items.crafting_ing.modular.secondary.sword.long', 263, 261, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-6', 'common.items.mineral.ingot.iron', 264, 262, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-7', 'veloren.core.pseudo_items.modular.tool', 265, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-7', 'common.items.crafting_ing.modular.primary.sword.greatsword', 266, 265, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-7', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 267, 265, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-7', 'common.items.crafting_ing.modular.secondary.sword.long', 267, 265, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-7', 'common.items.mineral.ingot.iron', 268, 266, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-8', 'veloren.core.pseudo_items.modular.tool', 269, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-8', 'common.items.crafting_ing.modular.primary.sword.ornate', 270, 269, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-8', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 271, 269, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-8', 'common.items.crafting_ing.modular.secondary.sword.long', 271, 269, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-8', 'common.items.mineral.ingot.iron', 272, 270, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-9', 'veloren.core.pseudo_items.modular.tool', 273, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-9', 'common.items.crafting_ing.modular.primary.sword.katana', 274, 273, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-9', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 275, 273, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-9', 'common.items.crafting_ing.modular.secondary.sword.long', 275, 273, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.iron-9', 'common.items.mineral.ingot.iron', 276, 274, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-0', 'veloren.core.pseudo_items.modular.tool', 277, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-0', 'common.items.crafting_ing.modular.primary.sword.ornate', 278, 277, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 279, 277, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-0', 'common.items.crafting_ing.modular.secondary.sword.long', 279, 277, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-0', 'common.items.mineral.ingot.steel', 280, 278, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-1', 'veloren.core.pseudo_items.modular.tool', 281, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-1', 'common.items.crafting_ing.modular.primary.sword.sabre', 282, 281, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 283, 281, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-1', 'common.items.crafting_ing.modular.secondary.sword.long', 283, 281, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-1', 'common.items.mineral.ingot.steel', 284, 282, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-2', 'veloren.core.pseudo_items.modular.tool', 285, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-2', 'common.items.crafting_ing.modular.primary.sword.ornate', 286, 285, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 287, 285, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-2', 'common.items.crafting_ing.modular.secondary.sword.long', 287, 285, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-2', 'common.items.mineral.ingot.steel', 288, 286, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-3', 'veloren.core.pseudo_items.modular.tool', 289, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-3', 'common.items.crafting_ing.modular.primary.sword.sawblade', 290, 289, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-3', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 291, 289, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-3', 'common.items.crafting_ing.modular.secondary.sword.long', 291, 289, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-3', 'common.items.mineral.ingot.steel', 292, 290, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-4', 'veloren.core.pseudo_items.modular.tool', 293, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-4', 'common.items.crafting_ing.modular.primary.sword.greatsword', 294, 293, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-4', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 295, 293, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-4', 'common.items.crafting_ing.modular.secondary.sword.long', 295, 293, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-4', 'common.items.mineral.ingot.steel', 296, 294, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-5', 'veloren.core.pseudo_items.modular.tool', 297, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-5', 'common.items.crafting_ing.modular.primary.sword.katana', 298, 297, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-5', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 299, 297, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-5', 'common.items.crafting_ing.modular.secondary.sword.long', 299, 297, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-5', 'common.items.mineral.ingot.steel', 300, 298, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-6', 'veloren.core.pseudo_items.modular.tool', 301, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-6', 'common.items.crafting_ing.modular.primary.sword.longsword', 302, 301, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-6', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 303, 301, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-6', 'common.items.crafting_ing.modular.secondary.sword.long', 303, 301, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-6', 'common.items.mineral.ingot.steel', 304, 302, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-7', 'veloren.core.pseudo_items.modular.tool', 305, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-7', 'common.items.crafting_ing.modular.primary.sword.sawblade', 306, 305, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-7', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 307, 305, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-7', 'common.items.crafting_ing.modular.secondary.sword.long', 307, 305, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-7', 'common.items.mineral.ingot.steel', 308, 306, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-8', 'veloren.core.pseudo_items.modular.tool', 309, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-8', 'common.items.crafting_ing.modular.primary.sword.zweihander', 310, 309, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-8', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 311, 309, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-8', 'common.items.crafting_ing.modular.secondary.sword.long', 311, 309, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.steel-8', 'common.items.mineral.ingot.steel', 312, 310, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-0', 'veloren.core.pseudo_items.modular.tool', 313, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-0', 'common.items.crafting_ing.modular.primary.sword.greatsword', 314, 313, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 315, 313, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-0', 'common.items.crafting_ing.modular.secondary.sword.long', 315, 313, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-0', 'common.items.mineral.ingot.bronze', 316, 314, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-1', 'veloren.core.pseudo_items.modular.tool', 317, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-1', 'common.items.crafting_ing.modular.primary.sword.longsword', 318, 317, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 319, 317, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-1', 'common.items.crafting_ing.modular.secondary.sword.long', 319, 317, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-1', 'common.items.mineral.ingot.bronze', 320, 318, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-2', 'veloren.core.pseudo_items.modular.tool', 321, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-2', 'common.items.crafting_ing.modular.primary.sword.greatsword', 322, 321, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 323, 321, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-2', 'common.items.crafting_ing.modular.secondary.sword.long', 323, 321, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.stone-2', 'common.items.mineral.ingot.bronze', 324, 322, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-0', 'veloren.core.pseudo_items.modular.tool', 325, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-0', 'common.items.crafting_ing.modular.primary.sword.longsword', 326, 325, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-0', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 327, 325, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-0', 'common.items.crafting_ing.modular.secondary.sword.long', 327, 325, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-0', 'common.items.mineral.ingot.bronze', 328, 326, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-1', 'veloren.core.pseudo_items.modular.tool', 329, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-1', 'common.items.crafting_ing.modular.primary.sword.greatsword', 330, 329, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-1', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 331, 329, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-1', 'common.items.crafting_ing.modular.secondary.sword.long', 331, 329, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-1', 'common.items.mineral.ingot.bronze', 332, 330, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-2', 'veloren.core.pseudo_items.modular.tool', 333, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-2', 'common.items.crafting_ing.modular.primary.sword.longsword', 334, 333, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-2', 'common.items.crafting_ing.modular.secondary.sword.two-handed', 335, 333, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-2', 'common.items.crafting_ing.modular.secondary.sword.long', 335, 333, 1);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.sword.wood-2', 'common.items.mineral.ingot.bronze', 336, 334, 0);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.staff.aurora', 'veloren.core.pseudo_items.modular.tool', 337, NULL, NULL);
INSERT INTO _temp_modular_items VALUES('common.items.weapons.staff.aurora', 'common.items.crafting_ing.modular.secondary.staff.medium', 338, 337, 0);

View File

@ -933,7 +933,40 @@ impl<'a> Widget for Crafting<'a> {
)
.set(state.ids.modular_inputs[0], ui);
} else {
primary_slot_widget.set(state.ids.modular_inputs[0], ui);
let (tooltip_title, tooltip_desc) = match recipe_kind {
RecipeKind::ModularWeapon => (
self.localized_strings
.get("hud.crafting.mod_weap_prim_slot_title"),
self.localized_strings
.get("hud.crafting.mod_weap_prim_slot_desc"),
),
RecipeKind::Component(
ToolKind::Sword | ToolKind::Axe | ToolKind::Hammer,
) => (
self.localized_strings
.get("hud.crafting.mod_comp_metal_prim_slot_title"),
self.localized_strings
.get("hud.crafting.mod_comp_metal_prim_slot_desc"),
),
RecipeKind::Component(
ToolKind::Bow | ToolKind::Staff | ToolKind::Sceptre,
) => (
self.localized_strings
.get("hud.crafting.mod_comp_wood_prim_slot_title"),
self.localized_strings
.get("hud.crafting.mod_comp_wood_prim_slot_desc"),
),
RecipeKind::Component(_) | RecipeKind::Simple => ("", ""),
};
primary_slot_widget
.with_tooltip(
self.tooltip_manager,
tooltip_title,
tooltip_desc,
&tabs_tooltip,
TEXT_COLOR,
)
.set(state.ids.modular_inputs[0], ui);
}
let secondary_slot = CraftSlot {
@ -991,7 +1024,30 @@ impl<'a> Widget for Crafting<'a> {
)
.set(state.ids.modular_inputs[1], ui);
} else {
secondary_slot_widget.set(state.ids.modular_inputs[1], ui);
let (tooltip_title, tooltip_desc) = match recipe_kind {
RecipeKind::ModularWeapon => (
self.localized_strings
.get("hud.crafting.mod_weap_sec_slot_title"),
self.localized_strings
.get("hud.crafting.mod_weap_sec_slot_desc"),
),
RecipeKind::Component(_) => (
self.localized_strings
.get("hud.crafting.mod_comp_sec_slot_title"),
self.localized_strings
.get("hud.crafting.mod_comp_sec_slot_desc"),
),
RecipeKind::Simple => ("", ""),
};
secondary_slot_widget
.with_tooltip(
self.tooltip_manager,
tooltip_title,
tooltip_desc,
&tabs_tooltip,
TEXT_COLOR,
)
.set(state.ids.modular_inputs[1], ui);
}
let prim_item_placed = primary_slot.invslot.is_some();

View File

@ -583,13 +583,7 @@ impl<'a> Widget for ItemTooltip<'a> {
// Stats
match &*item.kind() {
ItemKind::Tool(tool) => {
let power = tool.base_power() * 10.0;
let speed = tool.base_speed();
let effect_power = tool.base_effect_power() * 10.0;
let crit_chance = tool.base_crit_chance() * 100.0;
let range = tool.base_range();
let energy_efficiency = tool.base_energy_efficiency();
let buff_strength = tool.base_buff_strength();
let stats = tool.stats;
let combat_rating = combat::weapon_rating(&item, self.msm) * 10.0;
// Combat Rating
@ -616,7 +610,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:.1}",
i18n.get("common.stats.power"),
power
stats.power * 10.0
))
.x_align_to(state.ids.item_frame, conrod_core::position::Align::Start)
.graphics_for(id)
@ -630,7 +624,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.speed"),
(speed - 1.0) * 100.0
(stats.speed - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
@ -643,9 +637,9 @@ impl<'a> Widget for ItemTooltip<'a> {
// TODO: Allow effect power to have different terminology based on what it is
// affecting.
widget::Text::new(&format!(
"{} : {:.1}",
"{} : {:+.0}%",
i18n.get("common.stats.poise"),
effect_power
(stats.effect_power - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
@ -658,7 +652,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:.1}%",
i18n.get("common.stats.crit_chance"),
crit_chance
stats.crit_chance * 100.0
))
.graphics_for(id)
.parent(id)
@ -671,7 +665,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.range"),
(range - 1.0) * 100.0
(stats.range - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
@ -684,7 +678,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.energy_efficiency"),
(energy_efficiency - 1.0) * 100.0
(stats.energy_efficiency - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
@ -697,7 +691,7 @@ impl<'a> Widget for ItemTooltip<'a> {
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.buff_strength"),
(buff_strength - 1.0) * 100.0
(stats.buff_strength - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
@ -769,9 +763,9 @@ impl<'a> Widget for ItemTooltip<'a> {
}
if diff.effect_power.abs() > f32::EPSILON {
let text = format!(
"{} {:.1}",
"{} {:+.0}",
&effect_power_diff.0,
&diff.effect_power * 10.0
&diff.effect_power * 100.0
);
diff_text(text, effect_power_diff.1, 2)
}
@ -1176,13 +1170,13 @@ impl<'a> Widget for ItemTooltip<'a> {
// Power
let power_text = if is_primary {
format!("{} : {:.1}", i18n.get("common.stats.power"), stats.power)
} else {
format!(
"{} : {:+.0}%",
"{} : {:.1}",
i18n.get("common.stats.power"),
(stats.power - 1.0) * 100.0
stats.power * 10.0
)
} else {
format!("{} : x{:.2}", i18n.get("common.stats.power"), stats.power)
};
widget::Text::new(&power_text)
.x_align_to(state.ids.item_frame, conrod_core::position::Align::Start)
@ -1194,33 +1188,38 @@ impl<'a> Widget for ItemTooltip<'a> {
.set(state.ids.stats[0], ui);
// Speed
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.speed"),
(stats.speed - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[0], V_PAD_STATS)
.set(state.ids.stats[1], ui);
let speed_text = if is_primary {
format!(
"{} : {:+.0}%",
i18n.get("common.stats.speed"),
(stats.speed - 1.0) * 100.0
)
} else {
format!("{} : x{:.2}", i18n.get("common.stats.speed"), stats.speed)
};
widget::Text::new(&speed_text)
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[0], V_PAD_STATS)
.set(state.ids.stats[1], ui);
// Effect Power
// TODO: Allow effect power to have different terminology based on what it is
// affecting.
let effect_power_text = if is_primary {
format!(
"{} : {:.1}",
i18n.get("common.stats.poise"),
stats.effect_power
)
} else {
format!(
"{} : {:+.0}%",
i18n.get("common.stats.poise"),
(stats.effect_power - 1.0) * 100.0
)
} else {
format!(
"{} : x{:.2}",
i18n.get("common.stats.poise"),
stats.effect_power
)
};
widget::Text::new(&effect_power_text)
.graphics_for(id)
@ -1239,9 +1238,9 @@ impl<'a> Widget for ItemTooltip<'a> {
)
} else {
format!(
"{} : {:+.0}%",
"{} : x{:.2}",
i18n.get("common.stats.crit_chance"),
(stats.crit_chance - 1.0) * 100.0
stats.crit_chance
)
};
widget::Text::new(&crit_chance_text)
@ -1253,43 +1252,66 @@ impl<'a> Widget for ItemTooltip<'a> {
.set(state.ids.stats[3], ui);
// Range
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.range"),
(stats.range - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[3], V_PAD_STATS)
.set(state.ids.stats[4], ui);
let range_text = if is_primary {
format!(
"{} : {:.0}%",
i18n.get("common.stats.range"),
(stats.range - 1.0) * 100.0
)
} else {
format!("{} : x{:.2}", i18n.get("common.stats.range"), stats.range)
};
widget::Text::new(&range_text)
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[3], V_PAD_STATS)
.set(state.ids.stats[4], ui);
// Energy Efficiency
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.energy_efficiency"),
(stats.energy_efficiency - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[4], V_PAD_STATS)
.set(state.ids.stats[5], ui);
let energy_eff_text = if is_primary {
format!(
"{} : {:.0}%",
i18n.get("common.stats.energy_efficiency"),
(stats.energy_efficiency - 1.0) * 100.0
)
} else {
format!(
"{} : x{:.2}",
i18n.get("common.stats.energy_efficiency"),
stats.energy_efficiency
)
};
widget::Text::new(&energy_eff_text)
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[4], V_PAD_STATS)
.set(state.ids.stats[5], ui);
// Buff Strength
widget::Text::new(&format!(
"{} : {:+.0}%",
i18n.get("common.stats.buff_strength"),
(stats.buff_strength - 1.0) * 100.0
))
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[5], V_PAD_STATS)
.set(state.ids.stats[6], ui);
let buff_str_text = if is_primary {
format!(
"{} : {:.0}%",
i18n.get("common.stats.buff_strength"),
(stats.buff_strength - 1.0) * 100.0
)
} else {
format!(
"{} : x{:.2}",
i18n.get("common.stats.buff_strength"),
stats.buff_strength
)
};
widget::Text::new(&buff_str_text)
.graphics_for(id)
.parent(id)
.with_style(self.style.desc)
.color(text_color)
.down_from(state.ids.stats[5], V_PAD_STATS)
.set(state.ids.stats[6], ui);
}
},
_ => (),

View File

@ -194,6 +194,13 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
None,
)
}),
// Only spawn logs in temperate forests (arbitrarily set to ~20% twig density)
(Wood, Ground, |_, col| {
(
(col.tree_density * 1.25 - 0.25).powf(0.5).max(0.0) * 0.15e-3,
None,
)
}),
(Stones, Ground, |chunk, _| {
((chunk.rockiness - 0.5).max(0.025) * 1.0e-3, None)
}),