From 834749353a99e292b64f48a8a87f871a48ebda54 Mon Sep 17 00:00:00 2001 From: Snowram Date: Tue, 27 Apr 2021 23:11:45 +0200 Subject: [PATCH] Adds flame wyvern npc --- assets/common/npc_names.ron | 4 + .../voxel/bird_large_central_manifest.ron | 52 ++++++++++++ .../voxel/bird_large_lateral_manifest.ron | 84 +++++++++++++++++++ .../voxel/npc/wyvern_flame/male/beak.vox | 3 + .../voxel/npc/wyvern_flame/male/chest.vox | 3 + .../voxel/npc/wyvern_flame/male/foot_r.vox | 3 + .../voxel/npc/wyvern_flame/male/head.vox | 3 + .../voxel/npc/wyvern_flame/male/leg_r.vox | 3 + .../voxel/npc/wyvern_flame/male/neck.vox | 3 + .../npc/wyvern_flame/male/tail_front.vox | 3 + .../voxel/npc/wyvern_flame/male/tail_rear.vox | 3 + .../voxel/npc/wyvern_flame/male/wing_in_r.vox | 3 + .../npc/wyvern_flame/male/wing_mid_r.vox | 3 + .../npc/wyvern_flame/male/wing_out_r.vox | 3 + common/src/comp/body.rs | 5 +- common/src/comp/body/bird_large.rs | 10 ++- common/src/comp/inventory/loadout_builder.rs | 22 +++++ voxygen/anim/src/bird_large/fly.rs | 4 +- voxygen/anim/src/bird_large/idle.rs | 20 +---- voxygen/anim/src/bird_large/mod.rs | 13 +++ 20 files changed, 226 insertions(+), 21 deletions(-) create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/beak.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/chest.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/foot_r.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/head.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/leg_r.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/neck.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/tail_front.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/tail_rear.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/wing_in_r.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/wing_mid_r.vox create mode 100644 assets/voxygen/voxel/npc/wyvern_flame/male/wing_out_r.vox diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index 0339622c22..2056193f41 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -1120,6 +1120,10 @@ keyword: "roc", generic: "Roc" ), + wyvern_flame: ( + keyword: "wyvern_flame", + generic: "Flame Wyvern" + ), ) ), quadruped_low: ( diff --git a/assets/voxygen/voxel/bird_large_central_manifest.ron b/assets/voxygen/voxel/bird_large_central_manifest.ron index a706aa79cf..6617997b69 100644 --- a/assets/voxygen/voxel/bird_large_central_manifest.ron +++ b/assets/voxygen/voxel/bird_large_central_manifest.ron @@ -155,4 +155,56 @@ central: ("npc.roc.male.tail_rear"), ) ), + (FlameWyvern, Male): ( + head: ( + offset: (-5.5, -5.0, 0.0), + central: ("npc.wyvern_flame.male.head"), + ), + beak: ( + offset: (-2.5, 0.0, -5.0), + central: ("npc.wyvern_flame.male.beak"), + ), + neck: ( + offset: (-2.5, 0.0, -3.5), + central: ("npc.wyvern_flame.male.neck"), + ), + chest: ( + offset: (-6.5, -12.0, -9.0), + central: ("npc.wyvern_flame.male.chest"), + ), + tail_front: ( + offset: (-2.5, -12.0, -7.0), + central: ("npc.wyvern_flame.male.tail_front"), + ), + tail_rear: ( + offset: (-4.5, -29.0, -8.0), + central: ("npc.wyvern_flame.male.tail_rear"), + ) + ), + (FlameWyvern, Female): ( + head: ( + offset: (-5.5, -5.0, 0.0), + central: ("npc.wyvern_flame.male.head"), + ), + beak: ( + offset: (-2.5, 0.0, -5.0), + central: ("npc.wyvern_flame.male.beak"), + ), + neck: ( + offset: (-2.5, 0.0, -3.5), + central: ("npc.wyvern_flame.male.neck"), + ), + chest: ( + offset: (-6.5, -12.0, -9.0), + central: ("npc.wyvern_flame.male.chest"), + ), + tail_front: ( + offset: (-2.5, -12.0, -7.0), + central: ("npc.wyvern_flame.male.tail_front"), + ), + tail_rear: ( + offset: (-4.5, -29.0, -8.0), + central: ("npc.wyvern_flame.male.tail_rear"), + ) + ), }) diff --git a/assets/voxygen/voxel/bird_large_lateral_manifest.ron b/assets/voxygen/voxel/bird_large_lateral_manifest.ron index fadf7ddb56..e0de44612f 100644 --- a/assets/voxygen/voxel/bird_large_lateral_manifest.ron +++ b/assets/voxygen/voxel/bird_large_lateral_manifest.ron @@ -251,4 +251,88 @@ lateral: ("npc.roc.male.foot_r"), ) ), + (FlameWyvern, Male): ( + wing_in_l: ( + offset: (-24.0, -9.0, -4.0), + lateral: ("npc.wyvern_flame.male.wing_in_r"), + ), + wing_in_r: ( + offset: (0.0, -9.0, -4.0), + lateral: ("npc.wyvern_flame.male.wing_in_r"), + ), + wing_mid_l: ( + offset: (-17.0, -27.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_mid_r"), + ), + wing_mid_r: ( + offset: (0.0, -27.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_mid_r"), + ), + wing_out_l: ( + offset: (-33.0, -31.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -31.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_out_r"), + ), + leg_l: ( + offset: (-3.0, -4.5, -5.5), + lateral: ("npc.wyvern_flame.male.leg_r"), + ), + leg_r: ( + offset: (-3.0, -4.5, -5.5), + lateral: ("npc.wyvern_flame.male.leg_r"), + ), + foot_l: ( + offset: (-3.5, -6.5, -13.0), + lateral: ("npc.wyvern_flame.male.foot_r"), + ), + foot_r: ( + offset: (-3.5, -6.5, -13.0), + lateral: ("npc.wyvern_flame.male.foot_r"), + ) + ), + (FlameWyvern, Female): ( + wing_in_l: ( + offset: (-24.0, -9.0, -4.0), + lateral: ("npc.wyvern_flame.male.wing_in_r"), + ), + wing_in_r: ( + offset: (0.0, -9.0, -4.0), + lateral: ("npc.wyvern_flame.male.wing_in_r"), + ), + wing_mid_l: ( + offset: (-17.0, -27.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_mid_r"), + ), + wing_mid_r: ( + offset: (0.0, -27.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_mid_r"), + ), + wing_out_l: ( + offset: (-33.0, -31.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -31.0, -2.0), + lateral: ("npc.wyvern_flame.male.wing_out_r"), + ), + leg_l: ( + offset: (-3.0, -4.5, -5.5), + lateral: ("npc.wyvern_flame.male.leg_r"), + ), + leg_r: ( + offset: (-3.0, -4.5, -5.5), + lateral: ("npc.wyvern_flame.male.leg_r"), + ), + foot_l: ( + offset: (-3.5, -6.5, -13.0), + lateral: ("npc.wyvern_flame.male.foot_r"), + ), + foot_r: ( + offset: (-3.5, -6.5, -13.0), + lateral: ("npc.wyvern_flame.male.foot_r"), + ) + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/beak.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/beak.vox new file mode 100644 index 0000000000..a9e07d1f0f --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/beak.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd57daae57284d5361d2b06c998c3f795c35b552e3231fd8a6846f66d8f777b5 +size 1624 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/chest.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/chest.vox new file mode 100644 index 0000000000..dcdb4ad549 --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42d64663c830e60c06b0d201914867c0afc3d1c065624a60df2360160f35ee73 +size 11124 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/foot_r.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/foot_r.vox new file mode 100644 index 0000000000..4b26f2e20d --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/foot_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:404b5d23587593f6b1dbadd51e9f4c68f7ffecaf35583a287bf5fa80934ec869 +size 1960 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/head.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/head.vox new file mode 100644 index 0000000000..f6f6116c95 --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:913ebab8a33288051ce0813db2146f2b24dac63baebf608b59f5b1a231ebdd9c +size 2704 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/leg_r.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/leg_r.vox new file mode 100644 index 0000000000..8aed222e76 --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:751e1560b00f067c20cd3f6a56e82199d8eeddb8146b75fe6936dfa294f9651f +size 2248 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/neck.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/neck.vox new file mode 100644 index 0000000000..fc727abf14 --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/neck.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39ee2a8f564263ff2291d45772e632b3076fc47f0c688ffb0fa5ef2ff7ce2e5c +size 2132 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/tail_front.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/tail_front.vox new file mode 100644 index 0000000000..a8d1bee79f --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/tail_front.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84ee697628508e55464a1f9f2a1740c772839c502423a688f8702114b102d20a +size 2276 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/tail_rear.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/tail_rear.vox new file mode 100644 index 0000000000..b8c7df970e --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/tail_rear.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b12d66a475a1b079d003bd7588320afeba1180f99900feef8cc8c80f120ce82 +size 2508 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/wing_in_r.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_in_r.vox new file mode 100644 index 0000000000..aedeb542ab --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15cfcfcf4633d8f25825c13ee81f0509075d0223b5a1e47fb082442da8bfb876 +size 3484 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/wing_mid_r.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_mid_r.vox new file mode 100644 index 0000000000..7c16da0238 --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_mid_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da971c1773c5f5b80c2fccbd52612a56d71d60842ec5ef82be484e42c5d6e5c6 +size 2116 diff --git a/assets/voxygen/voxel/npc/wyvern_flame/male/wing_out_r.vox b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_out_r.vox new file mode 100644 index 0000000000..6eb0c5d63a --- /dev/null +++ b/assets/voxygen/voxel/npc/wyvern_flame/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6935d871d6e277c17a9266e567c81312892c6eab65df2b77c16c43a01d22aa8f +size 2240 diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index fe2243bd0d..ecc6bc3ac2 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -492,6 +492,7 @@ impl Body { bird_large::Species::Cockatrice => 4000, bird_large::Species::Phoenix => 6000, bird_large::Species::Roc => 5000, + bird_large::Species::FlameWyvern => 6000, }, Body::Humanoid(_) => 750, _ => 1000, @@ -746,7 +747,9 @@ impl Body { Body::QuadrupedLow(q) => matches!(q.species, quadruped_low::Species::Lavadrake), Body::BirdLarge(b) => matches!( b.species, - bird_large::Species::Phoenix | bird_large::Species::Cockatrice + bird_large::Species::Phoenix + | bird_large::Species::Cockatrice + | bird_large::Species::FlameWyvern ), _ => false, }, diff --git a/common/src/comp/body/bird_large.rs b/common/src/comp/body/bird_large.rs index 8d282c0480..361f87263b 100644 --- a/common/src/comp/body/bird_large.rs +++ b/common/src/comp/body/bird_large.rs @@ -37,6 +37,7 @@ make_case_elim!( Phoenix = 0, Cockatrice = 1, Roc = 2, + FlameWyvern = 3, } ); @@ -48,6 +49,7 @@ pub struct AllSpecies { pub phoenix: SpeciesMeta, pub cockatrice: SpeciesMeta, pub roc: SpeciesMeta, + pub wyvern_flame: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -59,11 +61,17 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies Species::Phoenix => &self.phoenix, Species::Cockatrice => &self.cockatrice, Species::Roc => &self.roc, + Species::FlameWyvern => &self.wyvern_flame, } } } -pub const ALL_SPECIES: [Species; 3] = [Species::Phoenix, Species::Cockatrice, Species::Roc]; +pub const ALL_SPECIES: [Species; 3] = [ + Species::Phoenix, + Species::Cockatrice, + Species::Roc, + Species::FlameWyvern, + ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { type IntoIter = std::iter::Copied>; diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index 052cbb467a..773482a097 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -447,6 +447,28 @@ impl LoadoutBuilder { quadruped_low::Species::Tortoise => { Some("common.items.npc_armor.quadruped_low.shell") }, + Body::BirdLarge(bird_large) => match (bird_large.species, bird_large.body_type) { + (bird_large::Species::Cockatrice, _) => { + main_tool = Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.birdlargebreathe", + )); + }, + (bird_large::Species::Phoenix, _) => { + main_tool = Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.birdlargefire", + )); + }, + (bird_large::Species::Roc, _) => { + main_tool = Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.birdlargebasic", + )); + }, + (bird_large::Species::FlameWyvern, _) => { + main_tool = Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.birdlargebreathe", + )); + }, + }, _ => None, }, Body::Theropod(body) => match body.species { diff --git a/voxygen/anim/src/bird_large/fly.rs b/voxygen/anim/src/bird_large/fly.rs index acb32f23f0..a3dc9384f6 100644 --- a/voxygen/anim/src/bird_large/fly.rs +++ b/voxygen/anim/src/bird_large/fly.rs @@ -98,8 +98,8 @@ impl Animation for FlyAnimation { next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); - next.wing_out_l.orientation = Quaternion::rotation_y(-flap3 * 1.2 - 0.3); - next.wing_out_r.orientation = Quaternion::rotation_y(flap3 * 1.2 + 0.3); + next.wing_out_l.orientation = Quaternion::rotation_y(-flap3 * 0.6 - 0.3) * Quaternion::rotation_x(-flap2 * 1.4); + next.wing_out_r.orientation = Quaternion::rotation_y(flap3 * 0.6 + 0.3) * Quaternion::rotation_x(-flap2 * 1.4); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); next.tail_front.orientation = diff --git a/voxygen/anim/src/bird_large/idle.rs b/voxygen/anim/src/bird_large/idle.rs index c48f0fcf8f..7030506ad5 100644 --- a/voxygen/anim/src/bird_large/idle.rs +++ b/voxygen/anim/src/bird_large/idle.rs @@ -48,37 +48,23 @@ impl Animation for IdleAnimation { next.chest.orientation = Quaternion::rotation_x(0.0); next.neck.position = Vec3::new(0.0, s_a.neck.0, s_a.neck.1); - next.neck.orientation = Quaternion::rotation_x(0.0); next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); - next.head.orientation = Quaternion::rotation_z(duck_head_look.x) - * Quaternion::rotation_x(-duck_head_look.y.abs() + wave_slow_cos * 0.01); next.beak.position = Vec3::new(0.0, s_a.beak.0, s_a.beak.1); - next.beak.orientation = Quaternion::rotation_x(wave_slow_cos * -0.02 - 0.02); next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1); - next.tail_front.orientation = Quaternion::rotation_x(0.6); + next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1); - next.tail_rear.orientation = Quaternion::rotation_x(-0.2); next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2); - next.wing_in_l.orientation = - Quaternion::rotation_y(-0.8 + wave_slow_cos * 0.06) * Quaternion::rotation_z(0.2); - next.wing_in_r.orientation = - Quaternion::rotation_y(0.8 - wave_slow_cos * 0.06) * Quaternion::rotation_z(-0.2); - next.wing_mid_l.position = Vec3::new(-s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); next.wing_mid_r.position = Vec3::new(s_a.wing_mid.0, s_a.wing_mid.1, s_a.wing_mid.2); - next.wing_mid_l.orientation = Quaternion::rotation_y(-0.1) * Quaternion::rotation_z(0.7); - next.wing_mid_r.orientation = Quaternion::rotation_y(0.1) * Quaternion::rotation_z(-0.7); next.wing_out_l.position = Vec3::new(-s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); next.wing_out_r.position = Vec3::new(s_a.wing_out.0, s_a.wing_out.1, s_a.wing_out.2); - next.wing_out_l.orientation = Quaternion::rotation_y(-0.4) * Quaternion::rotation_z(0.2); - next.wing_out_r.orientation = Quaternion::rotation_y(0.4) * Quaternion::rotation_z(-0.2); next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2); next.leg_l.orientation = Quaternion::rotation_x(0.0); @@ -86,9 +72,9 @@ impl Animation for IdleAnimation { next.leg_r.orientation = Quaternion::rotation_x(0.0); next.foot_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_l.orientation = Quaternion::rotation_x(0.0); + next.foot_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.foot_r.orientation = Quaternion::rotation_x(0.0); + next } diff --git a/voxygen/anim/src/bird_large/mod.rs b/voxygen/anim/src/bird_large/mod.rs index 432cd57338..46903e43c3 100644 --- a/voxygen/anim/src/bird_large/mod.rs +++ b/voxygen/anim/src/bird_large/mod.rs @@ -165,66 +165,79 @@ impl<'a> From<&'a Body> for SkeletonAttr { (Phoenix, _) => (2.5, 16.0), (Cockatrice, _) => (2.5, 16.0), (Roc, _) => (2.5, 27.5), + (FlameWyvern, _) => (2.5, 23.0), }, neck: match (body.species, body.body_type) { (Phoenix, _) => (2.5, -5.5), (Cockatrice, _) => (5.0, -1.5), (Roc, _) => (9.5, -1.5), + (FlameWyvern, _) => (11.0, -0.5), }, head: match (body.species, body.body_type) { (Phoenix, _) => (6.0, 12.0), (Cockatrice, _) => (8.0, 4.5), (Roc, _) => (17.0, -3.5), + (FlameWyvern, _) => (10.0, -1.5), }, beak: match (body.species, body.body_type) { (Phoenix, _) => (5.0, 3.0), (Cockatrice, _) => (2.0, -3.0), (Roc, _) => (0.0, -3.0), + (FlameWyvern, _) => (-1.0, 2.0), }, tail_front: match (body.species, body.body_type) { (Phoenix, _) => (-9.5, -1.0), (Cockatrice, _) => (-5.0, -2.5), (Roc, _) => (-7.5, -3.5), + (FlameWyvern, _) => (-10.0, -5.0), }, tail_rear: match (body.species, body.body_type) { (Phoenix, _) => (-11.0, 0.0), (Cockatrice, _) => (-8.0, -3.0), (Roc, _) => (-8.0, -3.0), + (FlameWyvern, _) => (-11.0, -1.0), }, wing_in: match (body.species, body.body_type) { (Phoenix, _) => (3.0, 2.5, 2.0), (Cockatrice, _) => (3.5, 7.0, 3.5), (Roc, _) => (5.5, 7.5, -1.0), + (FlameWyvern, _) => (5.5, 5.0, -2.0), }, wing_mid: match (body.species, body.body_type) { (Phoenix, _) => (10.0, 1.0, 0.0), (Cockatrice, _) => (6.0, 0.0, 0.0), (Roc, _) => (12.0, 1.0, -0.5), + (FlameWyvern, _) => (19.0, 15.0, -1.0), }, wing_out: match (body.species, body.body_type) { (Phoenix, _) => (7.0, 2.0, 1.5), (Cockatrice, _) => (4.0, -1.0, 1.0), (Roc, _) => (10.0, -2.0, 0.0), + (FlameWyvern, _) => (1.0, 1.0, 0.0), }, leg: match (body.species, body.body_type) { (Phoenix, _) => (4.0, 1.5, 12.0), (Cockatrice, _) => (3.5, 2.5, 13.0), (Roc, _) => (5.5, -1.5, 17.5), + (FlameWyvern, _) => (5.5, -2.0, 15.5), }, foot: match (body.species, body.body_type) { (Phoenix, _) => (0.5, -0.5, -2.5), (Cockatrice, _) => (0.5, -3.0, -3.0), (Roc, _) => (2.5, -2.5, -5.5), + (FlameWyvern, _) => (0.5, 0.0, -3.5), }, scaler: match (body.species, body.body_type) { (Phoenix, _) => (1.0), (Cockatrice, _) => (1.0), (Roc, _) => (1.0), + (FlameWyvern, _) => (1.0), }, feed: match (body.species, body.body_type) { (Phoenix, _) => (-0.65), (Cockatrice, _) => (-0.5), (Roc, _) => (-0.4), + (FlameWyvern, _) => (-0.65), }, } }