missing fix
This commit is contained in:
Justin Shipsey 2020-06-14 09:22:21 +00:00 committed by Songtronix
parent 69710cde5c
commit 688f917308
13 changed files with 115 additions and 53 deletions

View File

@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Show where screenshots are saved to in the chat - Show where screenshots are saved to in the chat
- Added basic auto walk - Added basic auto walk
- Added weapon/attack sound effects - Added weapon/attack sound effects
- M2 attack for bow
### Changed ### Changed
@ -30,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- slim the game size through lossless asset optimization - slim the game size through lossless asset optimization
- Lanterns now stop glowing if you throw a lit one out of your inventory - Lanterns now stop glowing if you throw a lit one out of your inventory
- Fixed a crash caused by certain audio devices on OSX - Fixed a crash caused by certain audio devices on OSX
- Bow animations now show held arrows
### Removed ### Removed

BIN
assets/voxygen/element/icons/bow_m2.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -221,30 +221,56 @@ impl Tool {
range: 3.0, range: 3.0,
max_angle: 60.0, max_angle: 60.0,
}], }],
Bow(_) => vec![BasicRanged { Bow(_) => vec![
energy_cost: 0, BasicRanged {
holdable: true, energy_cost: 0,
prepare_duration: Duration::from_millis(100), holdable: true,
recover_duration: Duration::from_millis(500), prepare_duration: Duration::from_millis(100),
projectile: Projectile { recover_duration: Duration::from_millis(500),
hit_solid: vec![projectile::Effect::Stick], projectile: Projectile {
hit_entity: vec![ hit_solid: vec![projectile::Effect::Stick],
projectile::Effect::Damage(HealthChange { hit_entity: vec![
// TODO: This should not be fixed (?) projectile::Effect::Damage(HealthChange {
amount: -5, // TODO: This should not be fixed (?)
cause: HealthSource::Projectile { owner: None }, amount: -3,
}), cause: HealthSource::Projectile { owner: None },
projectile::Effect::Knockback(10.0), }),
projectile::Effect::RewardEnergy(100), projectile::Effect::Knockback(10.0),
projectile::Effect::Vanish, projectile::Effect::RewardEnergy(100),
], projectile::Effect::Vanish,
time_left: Duration::from_secs(15), ],
owner: None, time_left: Duration::from_secs(15),
owner: None,
},
projectile_body: Body::Object(object::Body::Arrow),
projectile_light: None,
projectile_gravity: Some(Gravity(0.2)),
}, },
projectile_body: Body::Object(object::Body::Arrow), BasicRanged {
projectile_light: None, energy_cost: 350,
projectile_gravity: Some(Gravity(0.1)), holdable: true,
}], prepare_duration: Duration::from_millis(250),
recover_duration: Duration::from_millis(700),
projectile: Projectile {
hit_solid: vec![projectile::Effect::Stick],
hit_entity: vec![
projectile::Effect::Damage(HealthChange {
// TODO: This should not be fixed (?)
amount: -9,
cause: HealthSource::Projectile { owner: None },
}),
projectile::Effect::Knockback(15.0),
projectile::Effect::RewardEnergy(50),
projectile::Effect::Vanish,
],
time_left: Duration::from_secs(15),
owner: None,
},
projectile_body: Body::Object(object::Body::Arrow),
projectile_light: None,
projectile_gravity: Some(Gravity(0.05)),
},
],
Dagger(_) => vec![BasicMelee { Dagger(_) => vec![BasicMelee {
energy_cost: 0, energy_cost: 0,
buildup_duration: Duration::from_millis(100), buildup_duration: Duration::from_millis(100),
@ -264,7 +290,7 @@ impl Tool {
}, },
BasicRanged { BasicRanged {
energy_cost: 0, energy_cost: 0,
holdable: false, holdable: true,
prepare_duration: Duration::from_millis(250), prepare_duration: Duration::from_millis(250),
recover_duration: Duration::from_millis(200), recover_duration: Duration::from_millis(200),
projectile: Projectile { projectile: Projectile {
@ -291,7 +317,7 @@ impl Tool {
}, },
BasicRanged { BasicRanged {
energy_cost: 400, energy_cost: 400,
holdable: false, holdable: true,
prepare_duration: Duration::from_millis(800), prepare_duration: Duration::from_millis(800),
recover_duration: Duration::from_millis(50), recover_duration: Duration::from_millis(50),
projectile: Projectile { projectile: Projectile {

View File

@ -64,8 +64,8 @@ impl Animation for ChargeAnimation {
} * 1.3; } * 1.3;
next.head.offset = Vec3::new( next.head.offset = Vec3::new(
0.0 + stop * -2.0, stop * -2.0,
-2.0 + stop * 2.5 + skeleton_attr.head.0, -3.5 + stop * 2.5 + skeleton_attr.head.0,
skeleton_attr.head.1, skeleton_attr.head.1,
); );
next.head.ori = next.head.ori =
@ -107,25 +107,31 @@ impl Animation for ChargeAnimation {
next.control.scale = Vec3::one(); next.control.scale = Vec3::one();
}, },
Some(ToolKind::Bow(_)) => { Some(ToolKind::Bow(_)) => {
next.l_hand.offset = Vec3::new(1.0, -4.0 + stop * -1.0, 0.0); next.l_hand.offset = Vec3::new(1.0, -2.0 + stop * -1.0, 0.0);
next.l_hand.ori = Quaternion::rotation_x(1.20) next.l_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
next.l_hand.scale = Vec3::one() * 1.05; next.l_hand.scale = Vec3::one() * 1.05;
next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); next.r_hand.offset = Vec3::new(4.9, 1.0, -5.0);
next.r_hand.ori = Quaternion::rotation_x(1.20) next.r_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
next.r_hand.scale = Vec3::one() * 1.05; next.r_hand.scale = Vec3::one() * 1.05;
next.main.offset = Vec3::new(3.0, 2.0, -13.0); next.main.offset = Vec3::new(3.0, -1.0, -14.0);
next.main.ori = Quaternion::rotation_x(-0.3) next.main.ori = Quaternion::rotation_x(-0.3)
* Quaternion::rotation_y(0.3) * Quaternion::rotation_y(0.3)
* Quaternion::rotation_z(-0.6); * Quaternion::rotation_z(-0.6);
next.control.offset = Vec3::new(-9.0 + stop * 13.0, 6.0 + stop * 4.0, 8.0); next.hold.offset = Vec3::new(0.4, -0.3, -5.8);
next.hold.ori = Quaternion::rotation_x(-1.6)
* Quaternion::rotation_y(-0.1)
* Quaternion::rotation_z(0.0);
next.hold.scale = Vec3::one() * 1.0;
next.control.offset = Vec3::new(-10.0 + stop * 13.0, 6.0 + stop * 4.0, 8.0);
next.control.ori = Quaternion::rotation_x(0.0) next.control.ori = Quaternion::rotation_x(0.0)
* Quaternion::rotation_y(stop * -0.5) * Quaternion::rotation_y(stop * -0.4)
* Quaternion::rotation_z(stop * -0.9); * Quaternion::rotation_z(stop * -0.6);
next.control.scale = Vec3::one(); next.control.scale = Vec3::one();
}, },
_ => {}, _ => {},

View File

@ -20,7 +20,6 @@ impl Animation for EquipAnimation {
) -> Self::Skeleton { ) -> Self::Skeleton {
*rate = 1.0; *rate = 1.0;
let mut next = (*skeleton).clone(); let mut next = (*skeleton).clone();
let lab = 1.0; let lab = 1.0;
let short = (((5.0) let short = (((5.0)
@ -125,12 +124,12 @@ impl Animation for EquipAnimation {
next.main.scale = Vec3::one(); next.main.scale = Vec3::one();
}, },
Some(ToolKind::Bow(_)) => { Some(ToolKind::Bow(_)) => {
next.l_hand.offset = Vec3::new(1.0, -4.0, -1.0); next.l_hand.offset = Vec3::new(2.0, 1.5, 0.0);
next.l_hand.ori = Quaternion::rotation_x(1.20) next.l_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
next.l_hand.scale = Vec3::one() * 1.05; next.l_hand.scale = Vec3::one() * 1.05;
next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); next.r_hand.offset = Vec3::new(5.9, 4.5, -5.0);
next.r_hand.ori = Quaternion::rotation_x(1.20) next.r_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
@ -196,7 +195,7 @@ impl Animation for EquipAnimation {
next.head.offset = Vec3::new( next.head.offset = Vec3::new(
0.0, 0.0,
-3.0 + skeleton_attr.head.0, -3.0 + skeleton_attr.head.0,
-1.0 + skeleton_attr.head.1 + short * 0.2, skeleton_attr.head.1 + short * 0.2,
); );
next.head.ori = next.head.ori =
Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y); Quaternion::rotation_z(head_look.x) * Quaternion::rotation_x(head_look.y);
@ -221,7 +220,7 @@ impl Animation for EquipAnimation {
next.shorts.offset = Vec3::new(0.0, skeleton_attr.shorts.0, skeleton_attr.shorts.1); next.shorts.offset = Vec3::new(0.0, skeleton_attr.shorts.0, skeleton_attr.shorts.1);
next.torso.offset = Vec3::new(0.0, 0.0, 0.1) * skeleton_attr.scaler; next.torso.offset = Vec3::new(0.0, 0.0, 0.0) * skeleton_attr.scaler;
} }
next next
} }

View File

@ -65,7 +65,7 @@ impl CharacterSkeleton {
impl Skeleton for CharacterSkeleton { impl Skeleton for CharacterSkeleton {
type Attr = SkeletonAttr; type Attr = SkeletonAttr;
fn bone_count(&self) -> usize { 15 } fn bone_count(&self) -> usize { 16 }
fn compute_matrices(&self) -> ([FigureBoneData; 16], Vec3<f32>) { fn compute_matrices(&self) -> ([FigureBoneData; 16], Vec3<f32>) {
let chest_mat = self.chest.compute_base_matrix(); let chest_mat = self.chest.compute_base_matrix();
@ -107,7 +107,11 @@ impl Skeleton for CharacterSkeleton {
), ),
FigureBoneData::new(lantern_final_mat), FigureBoneData::new(lantern_final_mat),
FigureBoneData::new( FigureBoneData::new(
torso_mat * chest_mat * l_hand_mat * self.hold.compute_base_matrix(), torso_mat
* chest_mat
* control_mat
* l_hand_mat
* self.hold.compute_base_matrix(),
), ),
], ],
(lantern_final_mat * Vec4::new(0.0, 0.0, 0.0, 1.0)).xyz(), (lantern_final_mat * Vec4::new(0.0, 0.0, 0.0, 1.0)).xyz(),
@ -236,7 +240,7 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr {
(Danari, Female) => (0.5, 13.5), (Danari, Female) => (0.5, 13.5),
}, },
chest: match (body.species, body.body_type) { chest: match (body.species, body.body_type) {
(_, _) => (0.0, 7.0), (_, _) => (0.0, 8.0),
}, },
belt: match (body.species, body.body_type) { belt: match (body.species, body.body_type) {
(_, _) => (0.0, -2.0), (_, _) => (0.0, -2.0),
@ -251,7 +255,7 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr {
(_, _) => (7.0, -0.25, 0.5), (_, _) => (7.0, -0.25, 0.5),
}, },
foot: match (body.species, body.body_type) { foot: match (body.species, body.body_type) {
(_, _) => (3.4, 0.5, 1.0), (_, _) => (3.4, 0.5, 2.0),
}, },
shoulder: match (body.species, body.body_type) { shoulder: match (body.species, body.body_type) {
(_, _) => (5.0, 0.0, 5.0), (_, _) => (5.0, 0.0, 5.0),

View File

@ -21,7 +21,6 @@ impl Animation for ShootAnimation {
let mut next = (*skeleton).clone(); let mut next = (*skeleton).clone();
let lab = 1.0; let lab = 1.0;
let foot = (((5.0) let foot = (((5.0)
/ (0.2 + 4.8 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32))) / (0.2 + 4.8 * ((anim_time as f32 * lab as f32 * 8.0).sin()).powf(2.0 as f32)))
.sqrt()) .sqrt())
@ -81,12 +80,12 @@ impl Animation for ShootAnimation {
next.control.scale = Vec3::one(); next.control.scale = Vec3::one();
}, },
Some(ToolKind::Bow(_)) => { Some(ToolKind::Bow(_)) => {
next.l_hand.offset = Vec3::new(1.0 - exp * 2.0, -4.0 - exp * 7.0, -1.0 + exp * 6.0); next.l_hand.offset = Vec3::new(1.0 - exp * 2.0, -4.0 - exp * 4.0, -1.0 + exp * 6.0);
next.l_hand.ori = Quaternion::rotation_x(1.20) next.l_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6 + exp * 0.8) * Quaternion::rotation_y(-0.6 + exp * 0.8)
* Quaternion::rotation_z(-0.3 + exp * 0.9); * Quaternion::rotation_z(-0.3 + exp * 0.9);
next.l_hand.scale = Vec3::one() * 1.05; next.l_hand.scale = Vec3::one() * 1.05;
next.r_hand.offset = Vec3::new(3.0, -1.0, -5.0); next.r_hand.offset = Vec3::new(4.9, 3.0, -4.0);
next.r_hand.ori = Quaternion::rotation_x(1.20) next.r_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
@ -168,6 +167,12 @@ impl Animation for ShootAnimation {
Quaternion::rotation_x(exp * -0.7 + 0.4) * Quaternion::rotation_y(exp * 0.4); Quaternion::rotation_x(exp * -0.7 + 0.4) * Quaternion::rotation_y(exp * 0.4);
next.lantern.scale = Vec3::one() * 0.65; next.lantern.scale = Vec3::one() * 0.65;
next.hold.offset = Vec3::new(17.4, -24.8, -10.5);
next.hold.ori = Quaternion::rotation_x(-1.6)
* Quaternion::rotation_y(-0.1)
* Quaternion::rotation_z(0.0);
next.hold.scale = Vec3::one() * 0.0;
next.l_control.offset = Vec3::new(0.0, 0.0, 0.0); next.l_control.offset = Vec3::new(0.0, 0.0, 0.0);
next.l_control.ori = Quaternion::rotation_x(0.0); next.l_control.ori = Quaternion::rotation_x(0.0);
next.l_control.scale = Vec3::one(); next.l_control.scale = Vec3::one();

View File

@ -124,7 +124,7 @@ impl Animation for StandAnimation {
next.lantern.ori = Quaternion::rotation_x(0.1) * Quaternion::rotation_y(0.1); next.lantern.ori = Quaternion::rotation_x(0.1) * Quaternion::rotation_y(0.1);
next.lantern.scale = Vec3::one() * 0.65; next.lantern.scale = Vec3::one() * 0.65;
next.torso.offset = Vec3::new(0.0, -0.1, 0.1) * skeleton_attr.scaler; next.torso.offset = Vec3::new(0.0, 0.0, 0.) * skeleton_attr.scaler;
next.torso.ori = Quaternion::rotation_x(0.0); next.torso.ori = Quaternion::rotation_x(0.0);
next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler; next.torso.scale = Vec3::one() / 11.0 * skeleton_attr.scaler;

View File

@ -76,14 +76,14 @@ impl Animation for WieldAnimation {
next.l_foot.offset = Vec3::new( next.l_foot.offset = Vec3::new(
-skeleton_attr.foot.0, -skeleton_attr.foot.0,
skeleton_attr.foot.1, -2.0 + skeleton_attr.foot.1,
skeleton_attr.foot.2, skeleton_attr.foot.2,
); );
next.l_foot.ori = Quaternion::rotation_x(u_slowalt * 0.035 - 0.2); next.l_foot.ori = Quaternion::rotation_x(u_slowalt * 0.035 - 0.2);
next.r_foot.offset = Vec3::new( next.r_foot.offset = Vec3::new(
skeleton_attr.foot.0, skeleton_attr.foot.0,
skeleton_attr.foot.1, 2.0 + skeleton_attr.foot.1,
skeleton_attr.foot.2, skeleton_attr.foot.2,
); );
next.r_foot.ori = Quaternion::rotation_x(u_slow * 0.035); next.r_foot.ori = Quaternion::rotation_x(u_slow * 0.035);
@ -200,7 +200,7 @@ impl Animation for WieldAnimation {
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
next.l_hand.scale = Vec3::one() * 1.05; next.l_hand.scale = Vec3::one() * 1.05;
next.r_hand.offset = Vec3::new(4.0, 4.5, -5.0); next.r_hand.offset = Vec3::new(5.9, 4.5, -5.0);
next.r_hand.ori = Quaternion::rotation_x(1.20) next.r_hand.ori = Quaternion::rotation_x(1.20)
* Quaternion::rotation_y(-0.6) * Quaternion::rotation_y(-0.6)
* Quaternion::rotation_z(-0.3); * Quaternion::rotation_z(-0.3);
@ -210,6 +210,12 @@ impl Animation for WieldAnimation {
* Quaternion::rotation_y(0.3) * Quaternion::rotation_y(0.3)
* Quaternion::rotation_z(-0.6); * Quaternion::rotation_z(-0.6);
next.hold.offset = Vec3::new(1.2, -1.0, -5.2);
next.hold.ori = Quaternion::rotation_x(-1.7)
* Quaternion::rotation_y(0.0)
* Quaternion::rotation_z(-0.1);
next.hold.scale = Vec3::one() * 1.0;
next.control.offset = Vec3::new(-7.0, 6.0, 6.0); next.control.offset = Vec3::new(-7.0, 6.0, 6.0);
next.control.ori = next.control.ori =
Quaternion::rotation_x(u_slow * 0.2) * Quaternion::rotation_z(u_slowalt * 0.1); Quaternion::rotation_x(u_slow * 0.2) * Quaternion::rotation_z(u_slowalt * 0.1);

View File

@ -59,7 +59,6 @@ image_ids! {
<VoxelPixArtGraphic> <VoxelPixArtGraphic>
// Skill Icons // Skill Icons
bow_m2: "voxygen.element.icons.bow_m2",
// Icons // Icons
flower: "voxygen.element.icons.item_flower", flower: "voxygen.element.icons.item_flower",
@ -142,7 +141,7 @@ image_ids! {
twohaxe_m1: "voxygen.element.icons.2haxe_m1", twohaxe_m1: "voxygen.element.icons.2haxe_m1",
twohaxe_m2: "voxygen.element.icons.2haxe_m2", twohaxe_m2: "voxygen.element.icons.2haxe_m2",
bow_m1: "voxygen.element.icons.bow_m1", bow_m1: "voxygen.element.icons.bow_m1",
//bow_m2: "voxygen.element.icons.bow_m2", bow_m2: "voxygen.element.icons.bow_m2",
staff_m1: "voxygen.element.icons.staff_m1", staff_m1: "voxygen.element.icons.staff_m1",
staff_m2: "voxygen.element.icons.staff_m2", staff_m2: "voxygen.element.icons.staff_m2",
flyingrod_m1: "voxygen.element.icons.debug_wand_m1", flyingrod_m1: "voxygen.element.icons.debug_wand_m1",

View File

@ -693,7 +693,7 @@ impl<'a> Widget for Skillbar<'a> {
ToolKind::Sword(_) => self.imgs.charge, ToolKind::Sword(_) => self.imgs.charge,
ToolKind::Hammer(_) => self.imgs.nothing, ToolKind::Hammer(_) => self.imgs.nothing,
ToolKind::Axe(_) => self.imgs.nothing, ToolKind::Axe(_) => self.imgs.nothing,
ToolKind::Bow(_) => self.imgs.nothing, ToolKind::Bow(_) => self.imgs.bow_m2,
ToolKind::Staff(StaffKind::Sceptre) => self.imgs.heal_0, ToolKind::Staff(StaffKind::Sceptre) => self.imgs.heal_0,
ToolKind::Staff(_) => self.imgs.staff_m2, ToolKind::Staff(_) => self.imgs.staff_m2,
ToolKind::Debug(DebugKind::Boost) => self.imgs.flyingrod_m2, ToolKind::Debug(DebugKind::Boost) => self.imgs.flyingrod_m2,
@ -706,6 +706,7 @@ impl<'a> Widget for Skillbar<'a> {
match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { match self.loadout.active_item.as_ref().map(|i| &i.item.kind) {
Some(ItemKind::Tool(Tool { kind, .. })) => match kind { Some(ItemKind::Tool(Tool { kind, .. })) => match kind {
ToolKind::Staff(_) => 30.0 * scale, ToolKind::Staff(_) => 30.0 * scale,
ToolKind::Bow(_) => 30.0 * scale,
_ => 38.0 * scale, _ => 38.0 * scale,
}, },
_ => 38.0 * scale, _ => 38.0 * scale,
@ -715,6 +716,7 @@ impl<'a> Widget for Skillbar<'a> {
match self.loadout.active_item.as_ref().map(|i| &i.item.kind) { match self.loadout.active_item.as_ref().map(|i| &i.item.kind) {
Some(ItemKind::Tool(Tool { kind, .. })) => match kind { Some(ItemKind::Tool(Tool { kind, .. })) => match kind {
ToolKind::Staff(_) => 30.0 * scale, ToolKind::Staff(_) => 30.0 * scale,
ToolKind::Bow(_) => 30.0 * scale,
_ => 38.0 * scale, _ => 38.0 * scale,
}, },
_ => 38.0 * scale, _ => 38.0 * scale,

View File

@ -184,7 +184,7 @@ impl<Skel: Skeleton> FigureModelCache<Skel> {
}, },
None, None,
Some(humanoid_armor_lantern_spec.mesh_lantern(&body, loadout, generate_mesh)), Some(humanoid_armor_lantern_spec.mesh_lantern(&body, loadout, generate_mesh)),
None, Some(mesh_hold(generate_mesh)),
] ]
}, },
Body::QuadrupedSmall(body) => { Body::QuadrupedSmall(body) => {

View File

@ -964,6 +964,16 @@ pub fn mesh_glider(
) )
} }
pub fn mesh_hold(
generate_mesh: impl FnOnce(&Segment, Vec3<f32>) -> Mesh<FigurePipeline>,
) -> Mesh<FigurePipeline> {
load_mesh(
"weapon.projectile.simple-arrow",
Vec3::new(-0.5, -6.0, -1.5),
generate_mesh,
)
}
///////// /////////
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct QuadrupedSmallCentralSpec(HashMap<(QSSpecies, QSBodyType), SidedQSCentralVoxSpec>); pub struct QuadrupedSmallCentralSpec(HashMap<(QSSpecies, QSBodyType), SidedQSCentralVoxSpec>);