diff --git a/assets/common/abilities/ability_set_manifest.ron b/assets/common/abilities/ability_set_manifest.ron index ad91098776..47e6860575 100644 --- a/assets/common/abilities/ability_set_manifest.ron +++ b/assets/common/abilities/ability_set_manifest.ron @@ -511,6 +511,11 @@ Simple(None, "common.abilities.custom.birdlargebasic.dash"), ], ), + Custom("Bird Medium Basic"): ( + primary: "common.abilities.custom.birdmediumbasic.singlestrike", + secondary: "common.abilities.custom.birdmediumbasic.singlestrike", + abilities: [], + ), Custom("Tornado"): ( primary: "common.abilities.custom.tornado.spin", secondary: "common.abilities.empty.basic", diff --git a/assets/common/abilities/custom/birdmediumbasic/singlestrike.ron b/assets/common/abilities/custom/birdmediumbasic/singlestrike.ron new file mode 100644 index 0000000000..774dda8307 --- /dev/null +++ b/assets/common/abilities/custom/birdmediumbasic/singlestrike.ron @@ -0,0 +1,27 @@ +ComboMelee( + stage_data: [ + ( + stage: 1, + base_damage: 1.0, + damage_increase: 0, + base_poise_damage: 0, + poise_damage_increase: 0, + knockback: 0.0, + range: 2.5, + angle: 150.0, + base_buildup_duration: 0.1, + base_swing_duration: 0.07, + hit_timing: 0.5, + base_recover_duration: 0.2, + forward_movement: 0.0, + damage_kind: Piercing, + ), + ], + initial_energy_gain: 0, + max_energy_gain: 0, + energy_increase: 0, + speed_increase: 0.0, + max_speed_increase: 0.0, + scales_from_combo: 0, + ori_modifier: 0.6, +) diff --git a/assets/common/entity/wild/peaceful/cockatiel.ron b/assets/common/entity/wild/peaceful/cockatiel.ron new file mode 100644 index 0000000000..b03dfc84fd --- /dev/null +++ b/assets/common/entity/wild/peaceful/cockatiel.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("cockatiel"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/owl.ron b/assets/common/entity/wild/peaceful/crow.ron similarity index 86% rename from assets/common/entity/wild/peaceful/owl.ron rename to assets/common/entity/wild/peaceful/crow.ron index 2152222f16..348a9c1680 100644 --- a/assets/common/entity/wild/peaceful/owl.ron +++ b/assets/common/entity/wild/peaceful/crow.ron @@ -1,11 +1,11 @@ #![enable(implicit_some)] ( name: Automatic, - body: RandomWith("owl"), + body: RandomWith("crow"), alignment: Alignment(Wild), loot: LootTable("common.loot_tables.creature.bird_medium"), inventory: ( loadout: FromBody, ), meta: [], -) \ No newline at end of file +) diff --git a/assets/common/entity/wild/peaceful/dodo.ron b/assets/common/entity/wild/peaceful/dodo.ron new file mode 100644 index 0000000000..438aa69d9b --- /dev/null +++ b/assets/common/entity/wild/peaceful/dodo.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("dodo"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/horned_owl.ron b/assets/common/entity/wild/peaceful/horned_owl.ron new file mode 100644 index 0000000000..2f2ccd1127 --- /dev/null +++ b/assets/common/entity/wild/peaceful/horned_owl.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("horned_owl"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/parakeet.ron b/assets/common/entity/wild/peaceful/parakeet.ron new file mode 100644 index 0000000000..a7374a8574 --- /dev/null +++ b/assets/common/entity/wild/peaceful/parakeet.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("parakeet"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/puffin.ron b/assets/common/entity/wild/peaceful/puffin.ron new file mode 100644 index 0000000000..9d28a08d75 --- /dev/null +++ b/assets/common/entity/wild/peaceful/puffin.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("puffin"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/snowy_owl.ron b/assets/common/entity/wild/peaceful/snowy_owl.ron new file mode 100644 index 0000000000..23c9a71d9d --- /dev/null +++ b/assets/common/entity/wild/peaceful/snowy_owl.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("snowy_owl"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/entity/wild/peaceful/toucan.ron b/assets/common/entity/wild/peaceful/toucan.ron new file mode 100644 index 0000000000..7f14d366be --- /dev/null +++ b/assets/common/entity/wild/peaceful/toucan.ron @@ -0,0 +1,11 @@ +#![enable(implicit_some)] +( + name: Automatic, + body: RandomWith("toucan"), + alignment: Alignment(Wild), + loot: LootTable("common.loot_tables.creature.bird_medium"), + inventory: ( + loadout: FromBody, + ), + meta: [], +) diff --git a/assets/common/items/npc_weapons/unique/birdmediumbasic.ron b/assets/common/items/npc_weapons/unique/birdmediumbasic.ron new file mode 100644 index 0000000000..52746772e2 --- /dev/null +++ b/assets/common/items/npc_weapons/unique/birdmediumbasic.ron @@ -0,0 +1,21 @@ +ItemDef( + name: "Bird Medium Basic", + description: "BiteBiteBite!!! FightFightFight!!!", + kind: Tool(( + kind: Natural, + hands: Two, + stats: ( + equip_time_secs: 0.01, + power: 1.0, + effect_power: 1.0, + speed: 1.0, + crit_chance: 0.0625, + range: 1.0, + energy_efficiency: 1.0, + buff_strength: 1.0, + ), + )), + quality: Low, + tags: [], + ability_spec: Some(Custom("Bird Medium Basic")), +) diff --git a/assets/common/npc_names.ron b/assets/common/npc_names.ron index d4e4276c47..138805ae7f 100644 --- a/assets/common/npc_names.ron +++ b/assets/common/npc_names.ron @@ -804,10 +804,30 @@ keyword: "duck", generic: "Duck" ), + snowy_owl: ( + keyword: "snowy_owl", + generic: "SnowyOwl" + ), + horned_owl: ( + keyword: "horned_owl", + generic: "HornedOwl" + ), + cockatiel: ( + keyword: "cockatiel", + generic: "Cockatiel" + ), chicken: ( keyword: "chicken", generic: "Chicken" ), + bat: ( + keyword: "bat", + generic: "Bat" + ), + penguin: ( + keyword: "penguin", + generic: "Penguin" + ), goose: ( keyword: "goose", generic: "Goose" @@ -820,21 +840,29 @@ keyword: "eagle", generic: "Eagle" ), - owl: ( - keyword: "owl", - generic: "Owl" - ), parrot: ( keyword: "parrot", generic: "Parrot" ), - penguin: ( - keyword: "penguin", - generic: "Penguin" + crow: ( + keyword: "crow", + generic: "Crow" ), - bat: ( - keyword: "bat", - generic: "Bat" + dodo: ( + keyword: "dodo", + generic: "Dodo" + ), + parakeet: ( + keyword: "parakeet", + generic: "Parakeet" + ), + puffin: ( + keyword: "puffin", + generic: "Puffin" + ), + toucan: ( + keyword: "toucan", + generic: "Toucan" ), ) ), diff --git a/assets/voxygen/voxel/bird_medium_central_manifest.ron b/assets/voxygen/voxel/bird_medium_central_manifest.ron index 418fbaef0e..b6083b6f49 100644 --- a/assets/voxygen/voxel/bird_medium_central_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_central_manifest.ron @@ -1,12 +1,68 @@ ({ + (SnowyOwl, Male): ( + head: ( + offset: (-3.5, -4.0, -3.5), + central: ("npc.snowy_owl.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -4.0), + central: ("npc.snowy_owl.male.chest"), + ), + tail: ( + offset: (-2.5, -3.0, -1.5), + central: ("npc.snowy_owl.male.tail"), + ), + ), + (SnowyOwl, Female): ( + head: ( + offset: (-3.5, -4.0, -3.5), + central: ("npc.snowy_owl.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -4.0), + central: ("npc.snowy_owl.male.chest"), + ), + tail: ( + offset: (-2.5, -3.0, -1.5), + central: ("npc.snowy_owl.male.tail"), + ), + ), + (HornedOwl, Male): ( + head: ( + offset: (-4.5, -4.0, -4.5), + central: ("npc.horned_owl.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -4.0), + central: ("npc.horned_owl.male.chest"), + ), + tail: ( + offset: (-2.5, -3.0, -2.5), + central: ("npc.horned_owl.male.tail"), + ), + ), + (HornedOwl, Female): ( + head: ( + offset: (-4.5, -4.0, -4.5), + central: ("npc.horned_owl.male.head"), + ), + chest: ( + offset: (-3.5, -5.5, -4.0), + central: ("npc.horned_owl.male.chest"), + ), + tail: ( + offset: (-2.5, -3.0, -2.5), + central: ("npc.horned_owl.male.tail"), + ), + ), (Duck, Male): ( head: ( offset: (-2.0, -1.5, -2.5), central: ("npc.duck.male.head"), ), - torso: ( + chest: ( offset: (-3.0, -4.5, -3.0), - central: ("npc.duck.male.torso"), + central: ("npc.duck.male.chest"), ), tail: ( offset: (-2.0, -1.5, -3.0), @@ -16,28 +72,56 @@ (Duck, Female): ( head: ( offset: (-2.0, -1.5, -2.5), - central: ("npc.duck.male.head"), + central: ("npc.duck.female.head"), ), - torso: ( + chest: ( offset: (-3.0, -4.5, -3.0), - central: ("npc.duck.male.torso"), + central: ("npc.duck.female.chest"), ), tail: ( offset: (-2.0, -1.5, -3.0), - central: ("npc.duck.male.tail"), + central: ("npc.duck.female.tail"), ) ), + (Cockatiel, Male): ( + head: ( + offset: (-1.5, -3.0, -3.5), + central: ("npc.cockatiel.male.head"), + ), + chest: ( + offset: (-1.5, -3.0, -2.5), + central: ("npc.cockatiel.male.chest"), + ), + tail: ( + offset: (-1.5, -8.0, -1.0), + central: ("npc.cockatiel.male.tail"), + ), + ), + (Cockatiel, Female): ( + head: ( + offset: (-1.5, -3.0, -3.5), + central: ("npc.cockatiel.male.head"), + ), + chest: ( + offset: (-1.5, -3.0, -2.5), + central: ("npc.cockatiel.male.chest"), + ), + tail: ( + offset: (-1.5, -8.0, -1.0), + central: ("npc.cockatiel.male.tail"), + ), + ), (Chicken, Male): ( head: ( offset: (-1.5, -3.0, -3.0), central: ("npc.chicken.male.head"), ), - torso: ( + chest: ( offset: (-2.5, -4.5, -3.5), - central: ("npc.chicken.male.torso"), + central: ("npc.chicken.male.chest"), ), tail: ( - offset: (-1.5, -2.0, -3.0), + offset: (-1.5, -3.0, -4.0), central: ("npc.chicken.male.tail"), ) ), @@ -46,191 +130,23 @@ offset: (-1.5, -3.0, -4.0), central: ("npc.chicken.female.head"), ), - torso: ( + chest: ( offset: (-2.5, -5.0, -3.5), - central: ("npc.chicken.female.torso"), + central: ("npc.chicken.female.chest"), ), tail: ( offset: (-1.5, -3.5, -3.5), central: ("npc.chicken.female.tail"), ) ), - (Goose, Male): ( - head: ( - offset: (-2.0, -3.5, -0.0), - central: ("npc.goose.male.head"), - ), - torso: ( - offset: (-3.5, -4.5, -3.0), - central: ("npc.goose.male.torso"), - ), - tail: ( - offset: (-2.0, -1.0, -3.5), - central: ("npc.goose.male.tail"), - ) - ), - (Goose, Female): ( - head: ( - offset: (-2.0, -3.5, -0.0), - central: ("npc.goose.male.head"), - ), - torso: ( - offset: (-3.5, -4.5, -3.0), - central: ("npc.goose.male.torso"), - ), - tail: ( - offset: (-2.0, -1.0, -3.5), - central: ("npc.goose.male.tail"), - ) - ), - (Peacock, Male): ( - head: ( - offset: (-2.0, -1.5, -0.0), - central: ("npc.peacock.male.head"), - ), - torso: ( - offset: (-2.5, -5.5, -4.5), - central: ("npc.peacock.male.torso"), - ), - tail: ( - offset: (-3.0, -1.5, -5.0), - central: ("npc.peacock.male.tail"), - ) - ), - (Peacock, Female): ( - head: ( - offset: (-2.0, -1.5, -0.0), - central: ("npc.peacock.female.head"), - ), - torso: ( - offset: (-2.5, -5.5, -4.5), - central: ("npc.peacock.female.torso"), - ), - tail: ( - offset: (-3.0, -1.5, -5.0), - central: ("npc.peacock.female.tail"), - ) - ), - (Eagle, Male): ( - head: ( - offset: (-2.0, -2.0, -3.5), - central: ("npc.eagle.male.head"), - ), - torso: ( - offset: (-3.0, -4.5, -4.5), - central: ("npc.eagle.male.torso"), - ), - tail: ( - offset: (-2.0, -3.5, -3.5), - central: ("npc.eagle.male.tail"), - ) - ), - (Eagle, Female): ( - head: ( - offset: (-2.0, -2.0, -3.5), - central: ("npc.eagle.male.head"), - ), - torso: ( - offset: (-3.0, -4.5, -4.5), - central: ("npc.eagle.male.torso"), - ), - tail: ( - offset: (-2.0, -3.5, -3.5), - central: ("npc.eagle.male.tail"), - ) - ), - (Owl, Male): ( - head: ( - offset: (-3.5, -4.5, -4.0), - central: ("npc.owl.male.head"), - ), - torso: ( - offset: (-3.5, -5.0, -3.0), - central: ("npc.owl.male.torso"), - ), - tail: ( - offset: (-2.5, -3.0, -2.0), - central: ("npc.owl.male.tail"), - ) - ), - (Owl, Female): ( - head: ( - offset: (-4.5, -4.5, -4.5), - central: ("npc.owl.female.head"), - ), - torso: ( - offset: (-3.5, -5.0, -3.5), - central: ("npc.owl.female.torso"), - ), - tail: ( - offset: (-2.5, -3.0, -2.0), - central: ("npc.owl.female.tail"), - ) - ), - (Parrot, Male): ( - head: ( - offset: (-1.5, -1.5, -2.5), - central: ("npc.parrot.male.head"), - ), - torso: ( - offset: (-1.5, -3.5, -3.5), - central: ("npc.parrot.male.torso"), - ), - tail: ( - offset: (-1.5, -4.5, -1.5), - central: ("npc.parrot.male.tail"), - ) - ), - (Parrot, Female): ( - head: ( - offset: (-1.5, -1.5, -2.5), - central: ("npc.parrot.male.head"), - ), - torso: ( - offset: (-1.5, -3.5, -3.5), - central: ("npc.parrot.male.torso"), - ), - tail: ( - offset: (-2.5, -4.5, -1.5), - central: ("npc.parrot.male.tail"), - ) - ), - (Penguin, Male): ( - head: ( - offset: (-1.5, -2.0, -2.0), - central: ("npc.penguin.male.head"), - ), - torso: ( - offset: (-3.5, -4.0, -5.5), - central: ("npc.penguin.male.torso"), - ), - tail: ( - offset: (-2.5, -4.5, -1.5), - central: ("npc.penguin.male.tail"), - ) - ), - (Penguin, Female): ( - head: ( - offset: (-1.5, -2.0, -2.0), - central: ("npc.penguin.male.head"), - ), - torso: ( - offset: (-3.5, -4.0, -5.5), - central: ("npc.penguin.male.torso"), - ), - tail: ( - offset: (-2.5, -4.5, -1.5), - central: ("npc.penguin.male.tail"), - ) - ), (Bat, Male): ( head: ( offset: (-4.5, 2.0, -11.0), central: ("npc.bat.male.head"), ), - torso: ( + chest: ( offset: (-3.5, -5.0, -6.5), - central: ("npc.bat.male.torso"), + central: ("npc.bat.male.chest"), ), tail: ( offset: (-2.5, -1.5, -1.5), @@ -242,13 +158,293 @@ offset: (-4.5, 2.0, -11.0), central: ("npc.bat.male.head"), ), - torso: ( + chest: ( offset: (-3.5, -5.0, -6.5), - central: ("npc.bat.male.torso"), + central: ("npc.bat.male.chest"), ), tail: ( offset: (-2.5, -1.5, -1.5), central: ("npc.bat.male.tail"), ) ), + (Penguin, Male): ( + head: ( + offset: (-1.5, -2.0, -2.0), + central: ("npc.penguin.male.head"), + ), + chest: ( + offset: (-3.5, -4.0, -5.5), + central: ("npc.penguin.male.chest"), + ), + tail: ( + offset: (-2.5, -4.5, -1.5), + central: ("npc.penguin.male.tail"), + ), + ), + (Penguin, Female): ( + head: ( + offset: (-1.5, -2.0, -2.0), + central: ("npc.penguin.male.head"), + ), + chest: ( + offset: (-3.5, -4.0, -5.5), + central: ("npc.penguin.male.chest"), + ), + tail: ( + offset: (-2.5, -4.5, -1.5), + central: ("npc.penguin.male.tail"), + ), + ), + (Goose, Male): ( + head: ( + offset: (-2.0, -4.5, -6.0), + central: ("npc.goose.male.head"), + ), + chest: ( + offset: (-4.0, -5.5, -3.0), + central: ("npc.goose.male.chest"), + ), + tail: ( + offset: (-2.0, -3.0, -2.5), + central: ("npc.goose.male.tail"), + ), + ), + (Goose, Female): ( + head: ( + offset: (-2.0, -4.5, -6.0), + central: ("npc.goose.male.head"), + ), + chest: ( + offset: (-4.0, -5.5, -3.0), + central: ("npc.goose.male.chest"), + ), + tail: ( + offset: (-2.0, -3.0, -2.5), + central: ("npc.goose.male.tail"), + ), + ), + (Peacock, Male): ( + head: ( + offset: (-1.5, -4.5, -7.0), + central: ("npc.peacock.male.head"), + ), + chest: ( + offset: (-2.5, -5.5, -3.5), + central: ("npc.peacock.male.chest"), + ), + tail: ( + offset: (-10.5, -14.0, -2.5), + central: ("npc.peacock.male.tail"), + ), + ), + (Peacock, Female): ( + head: ( + offset: (-1.5, -4.5, -7.0), + central: ("npc.peacock.female.head"), + ), + chest: ( + offset: (-2.5, -5.5, -3.5), + central: ("npc.peacock.female.chest"), + ), + tail: ( + offset: (-2.5, -7.0, -4.5), + central: ("npc.peacock.female.tail"), + ), + ), + (Eagle, Male): ( + head: ( + offset: (-2.0, -5.0, -3.5), + central: ("npc.eagle.male.head"), + ), + chest: ( + offset: (-3.0, -6.0, -4.0), + central: ("npc.eagle.male.chest"), + ), + tail: ( + offset: (-4.0, -3.5, -1.5), + central: ("npc.eagle.male.tail"), + ), + ), + (Eagle, Female): ( + head: ( + offset: (-2.0, -4.5, -3.5), + central: ("npc.eagle.female.head"), + ), + chest: ( + offset: (-3.0, -6.0, -4.0), + central: ("npc.eagle.female.chest"), + ), + tail: ( + offset: (-4.0, -3.5, -1.5), + central: ("npc.eagle.female.tail"), + ), + ), + (Parrot, Male): ( + head: ( + offset: (-1.5, -4.0, -3.0), + central: ("npc.parrot.male.head"), + ), + chest: ( + offset: (-2.5, -4.5, -3.5), + central: ("npc.parrot.male.chest"), + ), + tail: ( + offset: (-1.5, -10.0, -3.5), + central: ("npc.parrot.male.tail"), + ), + ), + (Parrot, Female): ( + head: ( + offset: (-1.5, -5.5, -4.0), + central: ("npc.parrot.female.head"), + ), + chest: ( + offset: (-2.5, -4.5, -3.5), + central: ("npc.parrot.female.chest"), + ), + tail: ( + offset: (-1.5, -10.0, -3.5), + central: ("npc.parrot.female.tail"), + ), + ), + (Crow, Male): ( + head: ( + offset: (-1.5, -4.5, -2.5), + central: ("npc.crow.male.head"), + ), + chest: ( + offset: (-2.5, -4.0, -3.0), + central: ("npc.crow.male.chest"), + ), + tail: ( + offset: (-3.5, -3.5, -1.5), + central: ("npc.crow.male.tail"), + ), + ), + (Crow, Female): ( + head: ( + offset: (-1.5, -4.5, -2.5), + central: ("npc.crow.male.head"), + ), + chest: ( + offset: (-2.5, -4.0, -3.0), + central: ("npc.crow.male.chest"), + ), + tail: ( + offset: (-3.5, -3.5, -1.5), + central: ("npc.crow.male.tail"), + ), + ), + (Dodo, Male): ( + head: ( + offset: (-2.5, -6.0, -6.0), + central: ("npc.dodo.male.head"), + ), + chest: ( + offset: (-4.5, -5.5, -4.0), + central: ("npc.dodo.male.chest"), + ), + tail: ( + offset: (-2.5, -4.0, -3.5), + central: ("npc.dodo.male.tail"), + ), + ), + (Dodo, Female): ( + head: ( + offset: (-2.5, -6.0, -6.0), + central: ("npc.dodo.male.head"), + ), + chest: ( + offset: (-4.5, -5.5, -4.0), + central: ("npc.dodo.male.chest"), + ), + tail: ( + offset: (-2.5, -4.0, -3.5), + central: ("npc.dodo.male.tail"), + ), + ), + (Parakeet, Male): ( + head: ( + offset: (-1.5, -3.0, -2.0), + central: ("npc.parakeet.male.head"), + ), + chest: ( + offset: (-1.5, -3.0, -2.5), + central: ("npc.parakeet.male.chest"), + ), + tail: ( + offset: (-1.5, -4.0, -2.0), + central: ("npc.parakeet.male.tail"), + ), + ), + (Parakeet, Female): ( + head: ( + offset: (-1.5, -3.0, -2.0), + central: ("npc.parakeet.male.head"), + ), + chest: ( + offset: (-1.5, -3.0, -2.5), + central: ("npc.parakeet.male.chest"), + ), + tail: ( + offset: (-1.5, -4.0, -2.0), + central: ("npc.parakeet.male.tail"), + ), + ), + (Puffin, Male): ( + head: ( + offset: (-2.5, -5.0, -3.5), + central: ("npc.puffin.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -4.0), + central: ("npc.puffin.male.chest"), + ), + tail: ( + offset: (-2.5, -3.5, -2.0), + central: ("npc.puffin.male.tail"), + ), + ), + (Puffin, Female): ( + head: ( + offset: (-2.5, -5.0, -3.5), + central: ("npc.puffin.male.head"), + ), + chest: ( + offset: (-2.5, -5.0, -4.0), + central: ("npc.puffin.male.chest"), + ), + tail: ( + offset: (-2.5, -3.5, -2.0), + central: ("npc.puffin.male.tail"), + ), + ), + (Toucan, Male): ( + head: ( + offset: (-1.5, -2.0, -3.0), + central: ("npc.toucan.male.head"), + ), + chest: ( + offset: (-2.5, -4.5, -3.5), + central: ("npc.toucan.male.chest"), + ), + tail: ( + offset: (-3.5, -5.0, -4.0), + central: ("npc.toucan.male.tail"), + ), + ), + (Toucan, Female): ( + head: ( + offset: (-1.5, -2.0, -3.0), + central: ("npc.toucan.female.head"), + ), + chest: ( + offset: (-2.5, -4.5, -3.5), + central: ("npc.toucan.female.chest"), + ), + tail: ( + offset: (-3.5, -5.0, -4.0), + central: ("npc.toucan.female.tail"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron index ea15b4b275..61f526db10 100644 --- a/assets/voxygen/voxel/bird_medium_lateral_manifest.ron +++ b/assets/voxygen/voxel/bird_medium_lateral_manifest.ron @@ -1,326 +1,834 @@ ({ + (SnowyOwl, Male): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.snowy_owl.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.snowy_owl.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -7.0, -1.0), + lateral: ("npc.snowy_owl.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -7.0, -1.0), + lateral: ("npc.snowy_owl.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -6.5), + lateral: ("npc.snowy_owl.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -6.5), + lateral: ("npc.snowy_owl.male.leg_r"), + ), + ), + (SnowyOwl, Female): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.snowy_owl.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.snowy_owl.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -7.0, -1.0), + lateral: ("npc.snowy_owl.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -7.0, -1.0), + lateral: ("npc.snowy_owl.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -6.5), + lateral: ("npc.snowy_owl.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -6.5), + lateral: ("npc.snowy_owl.male.leg_r"), + ), + ), + (HornedOwl, Male): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.horned_owl.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.horned_owl.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -7.0, -1.0), + lateral: ("npc.horned_owl.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -7.0, -1.0), + lateral: ("npc.horned_owl.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, 0.0, -6.5), + lateral: ("npc.horned_owl.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, 0.0, -6.5), + lateral: ("npc.horned_owl.male.leg_r"), + ), + ), + (HornedOwl, Female): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.horned_owl.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.horned_owl.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -7.0, -1.0), + lateral: ("npc.horned_owl.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -7.0, -1.0), + lateral: ("npc.horned_owl.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, 0.0, -6.5), + lateral: ("npc.horned_owl.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, 0.0, -6.5), + lateral: ("npc.horned_owl.male.leg_r"), + ), + ), (Duck, Male): ( - wing_l: ( - offset: (-0.5, -4.0, -4.0), - lateral: ("npc.duck.male.wing"), + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.duck.male.wing_in_r"), ), - wing_r: ( - offset: (-0.5, -4.0, -4.0), - lateral: ("npc.duck.male.wing"), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.duck.male.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-4.0, -4.0, -1.0), + lateral: ("npc.duck.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.duck.male.wing_out_r"), + ), + leg_l: ( offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.male.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.male.leg_r"), ) ), (Duck, Female): ( - wing_l: ( - offset: (-0.5, -4.0, -4.0), - lateral: ("npc.duck.female.wing"), + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.duck.female.wing_in_r"), ), - wing_r: ( - offset: (-0.5, -4.0, -4.0), - lateral: ("npc.duck.female.wing"), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.duck.female.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-4.0, -4.0, -1.0), + lateral: ("npc.duck.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.duck.female.wing_out_r"), + ), + leg_l: ( offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.female.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-1.5, -1.5, -4.0), lateral: ("npc.duck.female.leg_r"), ) ), + (Cockatiel, Male): ( + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.cockatiel.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.cockatiel.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-5.0, -4.0, -1.0), + lateral: ("npc.cockatiel.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.cockatiel.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, -1.0, -4.0), + lateral: ("npc.cockatiel.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, -1.0, -4.0), + lateral: ("npc.cockatiel.male.leg_r"), + ) + ), + (Cockatiel, Female): ( + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.cockatiel.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.cockatiel.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-5.0, -4.0, -1.0), + lateral: ("npc.cockatiel.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.cockatiel.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, -1.0, -4.0), + lateral: ("npc.cockatiel.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, -1.0, -4.0), + lateral: ("npc.cockatiel.male.leg_r"), + ) + ), (Chicken, Male): ( - wing_l: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.chicken.male.wing"), + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.chicken.male.wing_in_r"), ), - wing_r: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.chicken.male.wing"), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.chicken.male.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-3.0, -4.0, -1.0), + lateral: ("npc.chicken.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.chicken.male.wing_out_r"), + ), + leg_l: ( offset: (-1.5, -2.5, -6.0), lateral: ("npc.chicken.male.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-1.5, -2.5, -6.0), lateral: ("npc.chicken.male.leg_r"), ) ), (Chicken, Female): ( - wing_l: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.chicken.female.wing"), + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.chicken.female.wing_in_r"), ), - wing_r: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.chicken.female.wing"), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.chicken.female.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-3.0, -4.0, -1.0), + lateral: ("npc.chicken.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -4.0, -1.0), + lateral: ("npc.chicken.female.wing_out_r"), + ), + leg_l: ( offset: (-1.5, -2.5, -6.0), lateral: ("npc.chicken.female.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-1.5, -2.5, -6.0), lateral: ("npc.chicken.female.leg_r"), ) ), - (Goose, Male): ( - wing_l: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.goose.male.wing"), - ), - wing_r: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.goose.male.wing"), - ), - foot_l: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.goose.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.goose.male.leg_r"), - ) - ), - (Goose, Female): ( - wing_l: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.goose.male.wing"), - ), - wing_r: ( - offset: (-0.5, -2.5, -4.0), - lateral: ("npc.goose.male.wing"), - ), - foot_l: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.goose.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.goose.male.leg_r"), - ) - ), - (Peacock, Male): ( - wing_l: ( - offset: (-1.0, -3.5, -5.0), - lateral: ("npc.peacock.male.wing_r"), - ), - wing_r: ( - offset: (-1.0, -3.5, -5.0), - lateral: ("npc.peacock.male.wing_r"), - ), - foot_l: ( - offset: (-1.0, 0.0, -8.0), - lateral: ("npc.peacock.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -8.0), - lateral: ("npc.peacock.male.leg_r"), - ) - ), - (Peacock, Female): ( - wing_l: ( - offset: (-1.0, -3.5, -5.0), - lateral: ("npc.peacock.female.wing_r"), - ), - wing_r: ( - offset: (-1.0, -3.5, -5.0), - lateral: ("npc.peacock.female.wing_r"), - ), - foot_l: ( - offset: (-1.0, 0.0, -8.0), - lateral: ("npc.peacock.female.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -8.0), - lateral: ("npc.peacock.female.leg_r"), - ) - ), - (Eagle, Male): ( - wing_l: ( - offset: (-1.0, -3.5, -12.0), - lateral: ("npc.eagle.male.wing_r"), - ), - wing_r: ( - offset: (-1.0, -3.5, -12.0), - lateral: ("npc.eagle.male.wing_r"), - ), - foot_l: ( - offset: (-1.5, 0.0, -8.0), - lateral: ("npc.eagle.male.leg_r"), - ), - foot_r: ( - offset: (-1.5, 0.0, -8.0), - lateral: ("npc.eagle.male.leg_r"), - ) - ), - (Eagle, Female): ( - wing_l: ( - offset: (-1.0, -3.5, -12.0), - lateral: ("npc.eagle.male.wing_r"), - ), - wing_r: ( - offset: (-1.0, -3.5, -12.0), - lateral: ("npc.eagle.male.wing_r"), - ), - foot_l: ( - offset: (-1.5, 0.0, -8.0), - lateral: ("npc.eagle.male.leg_r"), - ), - foot_r: ( - offset: (-1.5, 0.0, -8.0), - lateral: ("npc.eagle.male.leg_r"), - ) - ), - (Owl, Male): ( - wing_l: ( - offset: (-1.0, -2.5, -8.0), - lateral: ("npc.owl.male.wing_r"), - ), - wing_r: ( - offset: (-1.0, -2.5, -8.0), - lateral: ("npc.owl.male.wing_r"), - ), - foot_l: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.owl.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.owl.male.leg_r"), - ) - ), - (Owl, Female): ( - wing_l: ( - offset: (-1.0, -2.5, -8.0), - lateral: ("npc.owl.female.wing_r"), - ), - wing_r: ( - offset: (-1.0, -2.5, -8.0), - lateral: ("npc.owl.female.wing_r"), - ), - foot_l: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.owl.female.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -6.5), - lateral: ("npc.owl.female.leg_r"), - ) - ), - (Parrot, Male): ( - wing_l: ( - offset: (-0.5, -2.5, -8.0), - lateral: ("npc.parrot.male.wing"), - ), - wing_r: ( - offset: (-0.5, -2.5, -8.0), - lateral: ("npc.parrot.male.wing"), - ), - foot_l: ( - offset: (-1.0, 0.0, -3.0), - lateral: ("npc.parrot.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -3.0), - lateral: ("npc.parrot.male.leg_r"), - ) - ), - (Parrot, Female): ( - wing_l: ( - offset: (-0.5, -2.5, -8.0), - lateral: ("npc.parrot.male.wing"), - ), - wing_r: ( - offset: (-0.5, -2.5, -8.0), - lateral: ("npc.parrot.male.wing"), - ), - foot_l: ( - offset: (-1.0, 0.0, -3.0), - lateral: ("npc.parrot.male.leg_r"), - ), - foot_r: ( - offset: (-1.0, 0.0, -3.0), - lateral: ("npc.parrot.male.leg_r"), - ) - ), - (Penguin, Male): ( - wing_l: ( - offset: (-0.5, -1.5, -8.0), - lateral: ("npc.penguin.male.wing"), - ), - wing_r: ( - offset: (-0.5, -1.5, -8.0), - lateral: ("npc.penguin.male.wing"), - ), - foot_l: ( - offset: (-2.5, 0.0, -6.0), - lateral: ("npc.penguin.male.leg_r"), - ), - foot_r: ( - offset: (-2.5, 0.0, -6.0), - lateral: ("npc.penguin.male.leg_r"), - ) - ), - (Penguin, Female): ( - wing_l: ( - offset: (-0.5, -1.5, -8.0), - lateral: ("npc.penguin.male.wing"), - ), - wing_r: ( - offset: (-0.5, -1.5, -8.0), - lateral: ("npc.penguin.male.wing"), - ), - foot_l: ( - offset: (-2.5, 0.0, -6.0), - lateral: ("npc.penguin.male.leg_r"), - ), - foot_r: ( - offset: (-2.5, 0.0, -6.0), - lateral: ("npc.penguin.male.leg_r"), - ) - ), (Bat, Male): ( - wing_l: ( - offset: (-15.0, 2.5, -2.5), - lateral: ("npc.bat.male.wing_r"), + wing_in_l: ( + offset: (-5.0, -6.0, -1.0), + lateral: ("npc.bat.male.wing_in_r"), ), - wing_r: ( - offset: (1.0, 2.5, -2.5), - lateral: ("npc.bat.male.wing_r"), + wing_in_r: ( + offset: (-0.0, -6.0, -1.0), + lateral: ("npc.bat.male.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-9.0, -10.0, -1.0), + lateral: ("npc.bat.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -10.0, -1.0), + lateral: ("npc.bat.male.wing_out_r"), + ), + leg_l: ( offset: (-2.0, 2.0, -8.5), lateral: ("npc.bat.male.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-2.0, 2.0, -8.5), lateral: ("npc.bat.male.leg_r"), ) ), (Bat, Female): ( - wing_l: ( - offset: (-15.0, 2.5, -2.5), - lateral: ("npc.bat.male.wing_r"), + wing_in_l: ( + offset: (-5.0, -6.0, -1.0), + lateral: ("npc.bat.male.wing_in_r"), ), - wing_r: ( - offset: (1.0, 2.5, -2.5), - lateral: ("npc.bat.male.wing_r"), + wing_in_r: ( + offset: (-0.0, -6.0, -1.0), + lateral: ("npc.bat.male.wing_in_r"), ), - foot_l: ( + wing_out_l: ( + offset: (-9.0, -10.0, -1.0), + lateral: ("npc.bat.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -10.0, -1.0), + lateral: ("npc.bat.male.wing_out_r"), + ), + leg_l: ( offset: (-2.0, 2.0, -8.5), lateral: ("npc.bat.male.leg_r"), ), - foot_r: ( + leg_r: ( offset: (-2.0, 2.0, -8.5), lateral: ("npc.bat.male.leg_r"), ) ), + (Penguin, Male): ( + wing_in_l: ( + offset: (-3.0, -1.5, -0.5), + lateral: ("npc.penguin.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -1.5, -0.5), + lateral: ("npc.penguin.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-6.0, -3.0, -1.0), + lateral: ("npc.penguin.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -3.0, -1.0), + lateral: ("npc.penguin.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.penguin.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.penguin.male.leg_r"), + ), + ), + (Penguin, Female): ( + wing_in_l: ( + offset: (-3.0, -1.5, -0.5), + lateral: ("npc.penguin.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -1.5, -0.5), + lateral: ("npc.penguin.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-6.0, -3.0, -1.0), + lateral: ("npc.penguin.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -3.0, -1.0), + lateral: ("npc.penguin.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.penguin.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.penguin.male.leg_r"), + ), + ), + (Goose, Male): ( + wing_in_l: ( + offset: (-4.0, -3.0, -0.5), + lateral: ("npc.goose.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.goose.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.goose.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.goose.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.goose.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.goose.male.leg_r"), + ), + ), + (Goose, Female): ( + wing_in_l: ( + offset: (-4.0, -3.0, -0.5), + lateral: ("npc.goose.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.goose.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.goose.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.goose.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.goose.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -6.0), + lateral: ("npc.goose.male.leg_r"), + ), + ), + (Peacock, Male): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.peacock.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.peacock.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-7.0, -8.0, -1.0), + lateral: ("npc.peacock.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -8.0, -1.0), + lateral: ("npc.peacock.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -9.5), + lateral: ("npc.peacock.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -9.5), + lateral: ("npc.peacock.male.leg_r"), + ), + ), + (Peacock, Female): ( + wing_in_l: ( + offset: (-5.0, -4.0, -0.5), + lateral: ("npc.peacock.female.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.0, -0.5), + lateral: ("npc.peacock.female.wing_in_r"), + ), + wing_out_l: ( + offset: (-7.0, -8.0, -1.0), + lateral: ("npc.peacock.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -8.0, -1.0), + lateral: ("npc.peacock.female.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -9.5), + lateral: ("npc.peacock.female.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -9.5), + lateral: ("npc.peacock.female.leg_r"), + ), + ), + (Eagle, Male): ( + wing_in_l: ( + offset: (-8.0, -4.5, -0.5), + lateral: ("npc.eagle.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.5, -0.5), + lateral: ("npc.eagle.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-12.0, -8.0, -1.0), + lateral: ("npc.eagle.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -8.0, -1.0), + lateral: ("npc.eagle.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.eagle.male.leg_r"), + ), + leg_r: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.eagle.male.leg_r"), + ), + ), + (Eagle, Female): ( + wing_in_l: ( + offset: (-8.0, -4.5, -0.5), + lateral: ("npc.eagle.female.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -4.5, -0.5), + lateral: ("npc.eagle.female.wing_in_r"), + ), + wing_out_l: ( + offset: (-12.0, -8.0, -1.0), + lateral: ("npc.eagle.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -8.0, -1.0), + lateral: ("npc.eagle.female.wing_out_r"), + ), + leg_l: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.eagle.female.leg_r"), + ), + leg_r: ( + offset: (-2.0, 0.0, -6.0), + lateral: ("npc.eagle.female.leg_r"), + ), + ), + (Parrot, Male): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.parrot.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.parrot.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.parrot.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.parrot.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.parrot.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.parrot.male.leg_r"), + ), + ), + (Parrot, Female): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.parrot.female.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.parrot.female.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.parrot.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.parrot.female.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.parrot.female.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.parrot.female.leg_r"), + ), + ), + (Crow, Male): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.crow.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.crow.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-9.0, -6.0, -1.0), + lateral: ("npc.crow.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.crow.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.crow.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.crow.male.leg_r"), + ), + ), + (Crow, Female): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.crow.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.crow.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-9.0, -6.0, -1.0), + lateral: ("npc.crow.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.crow.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.crow.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.crow.male.leg_r"), + ), + ), + (Dodo, Male): ( + wing_in_l: ( + offset: (-3.0, -3.0, -0.5), + lateral: ("npc.dodo.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.dodo.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-4.0, -6.0, -1.0), + lateral: ("npc.dodo.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.dodo.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.0, 0.0, -4.0), + lateral: ("npc.dodo.male.leg_r"), + ), + leg_r: ( + offset: (-2.0, 0.0, -4.0), + lateral: ("npc.dodo.male.leg_r"), + ), + ), + (Dodo, Female): ( + wing_in_l: ( + offset: (-3.0, -3.0, -0.5), + lateral: ("npc.dodo.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.dodo.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-4.0, -6.0, -1.0), + lateral: ("npc.dodo.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.dodo.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.0, 0.0, -4.0), + lateral: ("npc.dodo.male.leg_r"), + ), + leg_r: ( + offset: (-2.0, 0.0, -4.0), + lateral: ("npc.dodo.male.leg_r"), + ), + ), + (Parakeet, Male): ( + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.parakeet.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.parakeet.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-5.0, -2.0, -1.0), + lateral: ("npc.parakeet.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -2.0, -1.0), + lateral: ("npc.parakeet.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, 0.0, -2.0), + lateral: ("npc.parakeet.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, 0.0, -2.0), + lateral: ("npc.parakeet.male.leg_r"), + ), + ), + (Parakeet, Female): ( + wing_in_l: ( + offset: (-3.0, -2.0, -0.5), + lateral: ("npc.parakeet.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -2.0, -0.5), + lateral: ("npc.parakeet.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-5.0, -2.0, -1.0), + lateral: ("npc.parakeet.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -2.0, -1.0), + lateral: ("npc.parakeet.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.0, 0.0, -2.0), + lateral: ("npc.parakeet.male.leg_r"), + ), + leg_r: ( + offset: (-1.0, 0.0, -2.0), + lateral: ("npc.parakeet.male.leg_r"), + ), + ), + (Puffin, Male): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.puffin.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.puffin.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.puffin.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.puffin.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -3.5), + lateral: ("npc.puffin.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -3.5), + lateral: ("npc.puffin.male.leg_r"), + ), + ), + (Puffin, Female): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.puffin.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.puffin.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.puffin.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.puffin.male.wing_out_r"), + ), + leg_l: ( + offset: (-2.5, 0.0, -3.5), + lateral: ("npc.puffin.male.leg_r"), + ), + leg_r: ( + offset: (-2.5, 0.0, -3.5), + lateral: ("npc.puffin.male.leg_r"), + ), + ), + (Toucan, Male): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.toucan.male.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.toucan.male.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.toucan.male.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.toucan.male.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.toucan.male.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.toucan.male.leg_r"), + ), + ), + (Toucan, Female): ( + wing_in_l: ( + offset: (-5.0, -3.0, -0.5), + lateral: ("npc.toucan.female.wing_in_r"), + ), + wing_in_r: ( + offset: (-0.0, -3.0, -0.5), + lateral: ("npc.toucan.female.wing_in_r"), + ), + wing_out_l: ( + offset: (-10.0, -6.0, -1.0), + lateral: ("npc.toucan.female.wing_out_r"), + ), + wing_out_r: ( + offset: (0.0, -6.0, -1.0), + lateral: ("npc.toucan.female.wing_out_r"), + ), + leg_l: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.toucan.female.leg_r"), + ), + leg_r: ( + offset: (-1.5, 0.0, -3.0), + lateral: ("npc.toucan.female.leg_r"), + ), + ), }) \ No newline at end of file diff --git a/assets/voxygen/voxel/npc/bat/male/torso.vox b/assets/voxygen/voxel/npc/bat/male/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/bat/male/torso.vox rename to assets/voxygen/voxel/npc/bat/male/chest.vox diff --git a/assets/voxygen/voxel/npc/bat/male/wing_in_r.vox b/assets/voxygen/voxel/npc/bat/male/wing_in_r.vox new file mode 100644 index 0000000000..8de4511286 --- /dev/null +++ b/assets/voxygen/voxel/npc/bat/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8eec276757c08879cb5448140101cbf20b86fbf02c84c99b8467d8faa5e43df4 +size 1296 diff --git a/assets/voxygen/voxel/npc/bat/male/wing_out_r.vox b/assets/voxygen/voxel/npc/bat/male/wing_out_r.vox new file mode 100644 index 0000000000..3ee9fd852d --- /dev/null +++ b/assets/voxygen/voxel/npc/bat/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47682f31478501598f5ea92eff72e8cd82496b73b9c4f7b41a434e0554896901 +size 1344 diff --git a/assets/voxygen/voxel/npc/bat/male/wing_r.vox b/assets/voxygen/voxel/npc/bat/male/wing_r.vox deleted file mode 100644 index dab3f84466..0000000000 --- a/assets/voxygen/voxel/npc/bat/male/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ded179cd04c8f42c4a8a8e247eb10d1daaf85ac1bcefd815313ed9a2d0969cf3 -size 1544 diff --git a/assets/voxygen/voxel/npc/chicken/female/torso.vox b/assets/voxygen/voxel/npc/chicken/female/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/chicken/female/torso.vox rename to assets/voxygen/voxel/npc/chicken/female/chest.vox diff --git a/assets/voxygen/voxel/npc/chicken/female/leg_r.vox b/assets/voxygen/voxel/npc/chicken/female/leg_r.vox index eb75ac3a7d..be039eae10 100644 --- a/assets/voxygen/voxel/npc/chicken/female/leg_r.vox +++ b/assets/voxygen/voxel/npc/chicken/female/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2672374c9b4b68699e1fe3c4487a2661c0fef18187db145fa64a2a0372956ae8 +oid sha256:911a27589fedaf444dc4e35225acfbd217c1a5f1a3a683d7ea90f8ef7e6bd45a size 1212 diff --git a/assets/voxygen/voxel/npc/chicken/female/wing.vox b/assets/voxygen/voxel/npc/chicken/female/wing.vox deleted file mode 100644 index 42057aba18..0000000000 --- a/assets/voxygen/voxel/npc/chicken/female/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30f8d4fd5eefad508175edec0da98cc1799319cd232f4f51db4753ef2acdee2e -size 1168 diff --git a/assets/voxygen/voxel/npc/chicken/female/wing_in_r.vox b/assets/voxygen/voxel/npc/chicken/female/wing_in_r.vox new file mode 100644 index 0000000000..a88551d31d --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e1b3ef583868de49a01d8dc587344be17048959bff480e2d268640858b87984 +size 1136 diff --git a/assets/voxygen/voxel/npc/chicken/female/wing_out_r.vox b/assets/voxygen/voxel/npc/chicken/female/wing_out_r.vox new file mode 100644 index 0000000000..bc2f25a0c3 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e318e8ffdfbe0fbb40bd581ec515d270aad2ac09b91b1390219e4540e8fc61c2 +size 1128 diff --git a/assets/voxygen/voxel/npc/chicken/male/torso.vox b/assets/voxygen/voxel/npc/chicken/male/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/chicken/male/torso.vox rename to assets/voxygen/voxel/npc/chicken/male/chest.vox diff --git a/assets/voxygen/voxel/npc/chicken/male/wing.vox b/assets/voxygen/voxel/npc/chicken/male/wing.vox deleted file mode 100644 index 2bad36220e..0000000000 --- a/assets/voxygen/voxel/npc/chicken/male/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff7525602f753558bf5aab32c0eea6b13cde3d63043feb8793f4ae2ed26a03aa -size 1168 diff --git a/assets/voxygen/voxel/npc/chicken/male/wing_in_r.vox b/assets/voxygen/voxel/npc/chicken/male/wing_in_r.vox new file mode 100644 index 0000000000..90a6306f07 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a2e57f1fd72d0969cfb462ad58948d5406fc73fda02b86807fa71254a649de +size 1136 diff --git a/assets/voxygen/voxel/npc/chicken/male/wing_out_r.vox b/assets/voxygen/voxel/npc/chicken/male/wing_out_r.vox new file mode 100644 index 0000000000..afa04dc962 --- /dev/null +++ b/assets/voxygen/voxel/npc/chicken/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a632954ca6ac48ded77cce70bd6b2ae963d64edee98a4223a9aca55f1fc5251a +size 1128 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/chest.vox b/assets/voxygen/voxel/npc/cockatiel/male/chest.vox new file mode 100644 index 0000000000..fa36094e2b --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb09e633a92cda68389dac8a2fa17342b73c9f721539b2e49e87eebecb10e056 +size 1352 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/head.vox b/assets/voxygen/voxel/npc/cockatiel/male/head.vox new file mode 100644 index 0000000000..88ddadb8d5 --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec43298b53aacd8cee62e65dcc49926f79c03816984b8a9ca220a70cffa7826b +size 1292 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/leg_r.vox b/assets/voxygen/voxel/npc/cockatiel/male/leg_r.vox new file mode 100644 index 0000000000..f180a00700 --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c8758ddfb5c71de2722a31a3bf37bd3a51bca8d6eb22cf900a0845f92f86c9b +size 1136 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/tail.vox b/assets/voxygen/voxel/npc/cockatiel/male/tail.vox new file mode 100644 index 0000000000..9a6d435832 --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4fcdeae8f6a9dd71e9c249adc5d0616293167734092e5bb46a976f5f9b17e08 +size 1200 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/wing_in_r.vox b/assets/voxygen/voxel/npc/cockatiel/male/wing_in_r.vox new file mode 100644 index 0000000000..f50eac9c70 --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:087d35750563d3e6d6804042f59e56c70009a41b0a4836ed8f86ceec00cd8af9 +size 1136 diff --git a/assets/voxygen/voxel/npc/cockatiel/male/wing_out_r.vox b/assets/voxygen/voxel/npc/cockatiel/male/wing_out_r.vox new file mode 100644 index 0000000000..9c8d0e9967 --- /dev/null +++ b/assets/voxygen/voxel/npc/cockatiel/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37f6ac9f707c7eec29153056117f8841284bee026e104e8b05c53bafccc0872d +size 1156 diff --git a/assets/voxygen/voxel/npc/crow/male/chest.vox b/assets/voxygen/voxel/npc/crow/male/chest.vox new file mode 100644 index 0000000000..86357ec920 --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a9e9b0191b5673cbb14269b6faad95a748c967f464d0dd7b78d95abbfff6ac0 +size 1656 diff --git a/assets/voxygen/voxel/npc/crow/male/head.vox b/assets/voxygen/voxel/npc/crow/male/head.vox new file mode 100644 index 0000000000..36645e3a21 --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1df5dedfb8f494a7252902dfaa09687ed10a6793eba222a6935ffd1e9973a87 +size 1372 diff --git a/assets/voxygen/voxel/npc/crow/male/leg_r.vox b/assets/voxygen/voxel/npc/crow/male/leg_r.vox new file mode 100644 index 0000000000..8324ae44b0 --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbd076a9b6cfbc4a0776fda342f5704a83a965c9852cdd72af5ed0a5e1e59ba +size 1200 diff --git a/assets/voxygen/voxel/npc/crow/male/tail.vox b/assets/voxygen/voxel/npc/crow/male/tail.vox new file mode 100644 index 0000000000..45b0823ab3 --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea2ad13d00d5d582530c4c5bc54d6f88441d2f62ca8f9d513d4cc41f4b2f2a59 +size 1296 diff --git a/assets/voxygen/voxel/npc/crow/male/wing_in_r.vox b/assets/voxygen/voxel/npc/crow/male/wing_in_r.vox new file mode 100644 index 0000000000..e166b43268 --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7962e7bcfc198f69503aa0c7f16c6c9ebe425640025fcf7c7a5ea8b267ac73f6 +size 1196 diff --git a/assets/voxygen/voxel/npc/crow/male/wing_out_r.vox b/assets/voxygen/voxel/npc/crow/male/wing_out_r.vox new file mode 100644 index 0000000000..3a01d9614d --- /dev/null +++ b/assets/voxygen/voxel/npc/crow/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d5370a5b0aa64ae194af97aa68a668a44586207f421cf053c6da974412bba20 +size 1260 diff --git a/assets/voxygen/voxel/npc/dodo/male/chest.vox b/assets/voxygen/voxel/npc/dodo/male/chest.vox new file mode 100644 index 0000000000..a025a32dee --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b15cb128049d16c77167ff7810095f4a8ded2e35986e6056486555f1bf47f472 +size 3220 diff --git a/assets/voxygen/voxel/npc/dodo/male/head.vox b/assets/voxygen/voxel/npc/dodo/male/head.vox new file mode 100644 index 0000000000..be229b8e5e --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:680d69f2a2b6f02262b7e1951ac025b4b9d673649e5bcaf4ede4dac0c1575b8f +size 2268 diff --git a/assets/voxygen/voxel/npc/dodo/male/leg_r.vox b/assets/voxygen/voxel/npc/dodo/male/leg_r.vox new file mode 100644 index 0000000000..339696c4e2 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2e8a940c33714ecfb1cc5e54fa0e65133e7c79c1634d48b5c12e38c3c4d218f +size 1388 diff --git a/assets/voxygen/voxel/npc/dodo/male/tail.vox b/assets/voxygen/voxel/npc/dodo/male/tail.vox new file mode 100644 index 0000000000..72e28a9daa --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5475f691ae7d035d06efbe50eadf3beddaddb4205c3446b13edee21b84a9b966 +size 1500 diff --git a/assets/voxygen/voxel/npc/dodo/male/wing_in_r.vox b/assets/voxygen/voxel/npc/dodo/male/wing_in_r.vox new file mode 100644 index 0000000000..512c21b398 --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03eb5c91e5d942470fd60a46279678c3f59a40639dce0a9fda5f3418809f62a7 +size 1152 diff --git a/assets/voxygen/voxel/npc/dodo/male/wing_out_r.vox b/assets/voxygen/voxel/npc/dodo/male/wing_out_r.vox new file mode 100644 index 0000000000..9ca6a185ac --- /dev/null +++ b/assets/voxygen/voxel/npc/dodo/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e802f3bc5a0b081a460eed4d22d8cc04c6923415954e952ae1d6f5cbe84647e +size 1172 diff --git a/assets/voxygen/voxel/npc/duck/female/torso.vox b/assets/voxygen/voxel/npc/duck/female/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/duck/female/torso.vox rename to assets/voxygen/voxel/npc/duck/female/chest.vox diff --git a/assets/voxygen/voxel/npc/duck/female/wing.vox b/assets/voxygen/voxel/npc/duck/female/wing.vox deleted file mode 100644 index c428e03774..0000000000 --- a/assets/voxygen/voxel/npc/duck/female/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a80090d025a00b03083643bc2b749eafea5034ec992c882a0fb41a0b06db4d3 -size 1184 diff --git a/assets/voxygen/voxel/npc/duck/female/wing_in_r.vox b/assets/voxygen/voxel/npc/duck/female/wing_in_r.vox new file mode 100644 index 0000000000..10443ecd07 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2cc19b4b1f19592db29b16191dbf4739737b21db889b0d58ed7f49910d92659 +size 1136 diff --git a/assets/voxygen/voxel/npc/duck/female/wing_out_r.vox b/assets/voxygen/voxel/npc/duck/female/wing_out_r.vox new file mode 100644 index 0000000000..4fd29dd6ef --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96e9b9702dd8fe6f66aa8a984ec98457155ac9cd264650d7f1d577c84f5d0209 +size 1144 diff --git a/assets/voxygen/voxel/npc/duck/male/torso.vox b/assets/voxygen/voxel/npc/duck/male/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/duck/male/torso.vox rename to assets/voxygen/voxel/npc/duck/male/chest.vox diff --git a/assets/voxygen/voxel/npc/duck/male/wing.vox b/assets/voxygen/voxel/npc/duck/male/wing.vox deleted file mode 100644 index 80245520d7..0000000000 --- a/assets/voxygen/voxel/npc/duck/male/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a86bc4b4ffe7981cccba366339b66e1b74eafa4c0172ea9f5230dd6bec369328 -size 1184 diff --git a/assets/voxygen/voxel/npc/duck/male/wing_in_r.vox b/assets/voxygen/voxel/npc/duck/male/wing_in_r.vox new file mode 100644 index 0000000000..b72e6194db --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:761ae06468c7aa5aae17fc4c8004fe0ff2cb038bd64cd1cc9c001ff93e7d0da2 +size 1136 diff --git a/assets/voxygen/voxel/npc/duck/male/wing_out_r.vox b/assets/voxygen/voxel/npc/duck/male/wing_out_r.vox new file mode 100644 index 0000000000..dd8f9a66f2 --- /dev/null +++ b/assets/voxygen/voxel/npc/duck/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ed2ddef4c3b88b97ea0fb23c942086cea330885f0dac470d70a46eb6702652b +size 1144 diff --git a/assets/voxygen/voxel/npc/eagle/female/chest.vox b/assets/voxygen/voxel/npc/eagle/female/chest.vox new file mode 100644 index 0000000000..465d521807 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be780ba6a3db89285cc6ec4a146670d87a56ec7eb23a084908e221536ac0d6d +size 2440 diff --git a/assets/voxygen/voxel/npc/eagle/female/head.vox b/assets/voxygen/voxel/npc/eagle/female/head.vox new file mode 100644 index 0000000000..8c3bf54b4d --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:529970f33a5deb4f9c36b88f8745ad3eafc219ea9821be5c5363ff255f9025d5 +size 1608 diff --git a/assets/voxygen/voxel/npc/eagle/female/leg_r.vox b/assets/voxygen/voxel/npc/eagle/female/leg_r.vox new file mode 100644 index 0000000000..5323f4c7d1 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc7084a200d2065f2278cdf5afaaa93ef5bca071bf751d03620787afdd3281e2 +size 1304 diff --git a/assets/voxygen/voxel/npc/eagle/female/tail.vox b/assets/voxygen/voxel/npc/eagle/female/tail.vox new file mode 100644 index 0000000000..ebf577c551 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ee535cc4f8460e89016df11bb4ca0ff41ab3b01a994a1777ee94d9c6534922d +size 1328 diff --git a/assets/voxygen/voxel/npc/eagle/female/wing_in_r.vox b/assets/voxygen/voxel/npc/eagle/female/wing_in_r.vox new file mode 100644 index 0000000000..e6408361e7 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b116b478627fc5918c4aaf2bdf0c88efe65bd65a57a2b35204633010dece61 +size 1320 diff --git a/assets/voxygen/voxel/npc/eagle/female/wing_out_r.vox b/assets/voxygen/voxel/npc/eagle/female/wing_out_r.vox new file mode 100644 index 0000000000..f1add1cea2 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a1a74e201d94776e0acee11af964e0daf93ecf7e786491a43ed1fc7ae543104 +size 1416 diff --git a/assets/voxygen/voxel/npc/eagle/male/chest.vox b/assets/voxygen/voxel/npc/eagle/male/chest.vox new file mode 100644 index 0000000000..37f847b99d --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e9e88f23aed6d4de25a8682c5c772e0845fa942b982fcbc93aea1e3bdef0177 +size 2440 diff --git a/assets/voxygen/voxel/npc/eagle/male/head.vox b/assets/voxygen/voxel/npc/eagle/male/head.vox index 00d3657bf6..f13dd346fe 100644 --- a/assets/voxygen/voxel/npc/eagle/male/head.vox +++ b/assets/voxygen/voxel/npc/eagle/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d8e1904720e459a71eb7ded89513a3ec0708c6b141ebd62229107d107288ce6 -size 1608 +oid sha256:6480bba6686da6c1406e74b7056a056ed9f94bff96c8fc685ffc063778683d13 +size 1648 diff --git a/assets/voxygen/voxel/npc/eagle/male/leg_r.vox b/assets/voxygen/voxel/npc/eagle/male/leg_r.vox index fc8ecbed40..4b764eb02d 100644 --- a/assets/voxygen/voxel/npc/eagle/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/eagle/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b28e677fcaff5da57f5d81aa5780d75b4901203792579cbf4553d970467076a -size 1184 +oid sha256:8688f6ea50279447dd417020046cef78b1557b0d9c299ea7582383d9cf803bbd +size 1304 diff --git a/assets/voxygen/voxel/npc/eagle/male/tail.vox b/assets/voxygen/voxel/npc/eagle/male/tail.vox index 09fbda28d0..810b321936 100644 --- a/assets/voxygen/voxel/npc/eagle/male/tail.vox +++ b/assets/voxygen/voxel/npc/eagle/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc27b6dbb9ff3fdb4d2a899ab35099019f199ef7f29304971ef262a483059440 -size 1208 +oid sha256:79227e087dae814a684304dc07ba8ef7e525ce4cba5889b73cfa2d8b53ff838c +size 1328 diff --git a/assets/voxygen/voxel/npc/eagle/male/torso.vox b/assets/voxygen/voxel/npc/eagle/male/torso.vox deleted file mode 100644 index 4cbbc5e952..0000000000 --- a/assets/voxygen/voxel/npc/eagle/male/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b09fc5a76eb9e3eadfc52e8679fa3398d64d49f491ebfbd8a74ab1f6fae4a55 -size 2160 diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_in_r.vox b/assets/voxygen/voxel/npc/eagle/male/wing_in_r.vox new file mode 100644 index 0000000000..1436d93464 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cd0933fff70cfd9f8b336c6ab4afbc42121cfffe4dbb0475a2a4e0d8d80c866 +size 1320 diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_out_r.vox b/assets/voxygen/voxel/npc/eagle/male/wing_out_r.vox new file mode 100644 index 0000000000..4792b39da6 --- /dev/null +++ b/assets/voxygen/voxel/npc/eagle/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c2659862f396459b129d8580ea9b7eb3c0318a29b94b373b143bc033f3e48e7 +size 1416 diff --git a/assets/voxygen/voxel/npc/eagle/male/wing_r.vox b/assets/voxygen/voxel/npc/eagle/male/wing_r.vox deleted file mode 100644 index a439d7b65d..0000000000 --- a/assets/voxygen/voxel/npc/eagle/male/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:33a9e33832a19e572592e4b1be449b5986d2e6367980837c7f6ec931009a82eb -size 1532 diff --git a/assets/voxygen/voxel/npc/goose/male/chest.vox b/assets/voxygen/voxel/npc/goose/male/chest.vox new file mode 100644 index 0000000000..fda7128cac --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa979c9b5317a02a7ae9df01609cc4485faa6556bd653d070e4b0b6832212382 +size 2688 diff --git a/assets/voxygen/voxel/npc/goose/male/head.vox b/assets/voxygen/voxel/npc/goose/male/head.vox index c860381d53..9e1fef0526 100644 --- a/assets/voxygen/voxel/npc/goose/male/head.vox +++ b/assets/voxygen/voxel/npc/goose/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:838272b8bdf5aef2f030a08bec2dcc27a463ee9cc4aeaac19400cf0be7c49674 -size 1376 +oid sha256:661bef8dae39fad6ba4bc196319f45b255a2060a2cbbc375e13edb7c3bb9d1e2 +size 1832 diff --git a/assets/voxygen/voxel/npc/goose/male/leg_r.vox b/assets/voxygen/voxel/npc/goose/male/leg_r.vox index 4a0313fad9..b493025e84 100644 --- a/assets/voxygen/voxel/npc/goose/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/goose/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72b528c2fb661def8ed68c2cb6b5b6fac4e189392ae01d958c981d644db3d6ac -size 1132 +oid sha256:634f21b4ddca3bae620e9520fe470405e1269fbad2ea15a284c89d05e002bd99 +size 1352 diff --git a/assets/voxygen/voxel/npc/goose/male/tail.vox b/assets/voxygen/voxel/npc/goose/male/tail.vox index 3c93ae58ec..f371ff334c 100644 --- a/assets/voxygen/voxel/npc/goose/male/tail.vox +++ b/assets/voxygen/voxel/npc/goose/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2d14b35c2f92b946a7ed794e04fafaf09fcb285e05060e3b700dcb9c9a05906 -size 1248 +oid sha256:71a8bdf10439d97bb7fe4919f0885d4afcca732ed81dd26f40c8b98e86783a3c +size 1320 diff --git a/assets/voxygen/voxel/npc/goose/male/torso.vox b/assets/voxygen/voxel/npc/goose/male/torso.vox deleted file mode 100644 index e4a0465587..0000000000 --- a/assets/voxygen/voxel/npc/goose/male/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:45336cbd13c3a205599d24ac6d1c5bf6bd673ed014a7452da03a492e65ecdd2f -size 2460 diff --git a/assets/voxygen/voxel/npc/goose/male/wing.vox b/assets/voxygen/voxel/npc/goose/male/wing.vox deleted file mode 100644 index b747bd6f4c..0000000000 --- a/assets/voxygen/voxel/npc/goose/male/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6c34a1ac2d80c70443166472d3f557aada9c16f05e20661bd99bb1a1301ad8d -size 1172 diff --git a/assets/voxygen/voxel/npc/goose/male/wing_in_r.vox b/assets/voxygen/voxel/npc/goose/male/wing_in_r.vox new file mode 100644 index 0000000000..f4aca770e8 --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0225aea4725a0d088936f036375342f33c3eb2bb93ff0d785fa99c5d758655c4 +size 1180 diff --git a/assets/voxygen/voxel/npc/goose/male/wing_out_r.vox b/assets/voxygen/voxel/npc/goose/male/wing_out_r.vox new file mode 100644 index 0000000000..ba250038ca --- /dev/null +++ b/assets/voxygen/voxel/npc/goose/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a3148258c6c62385fba2a95e2ecfe30a0207e63b03db3bab3a05e13bf1332c +size 1284 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/chest.vox b/assets/voxygen/voxel/npc/horned_owl/male/chest.vox new file mode 100644 index 0000000000..0187c88bbb --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69644f478357a8dc8e6e2a3e471a126f1eedebef55767e86a3f35aa5ffb05493 +size 2764 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/head.vox b/assets/voxygen/voxel/npc/horned_owl/male/head.vox new file mode 100644 index 0000000000..facc9cd118 --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a77f085023b69b7153e83b5c453f14d33ee7852fb4412148a441338b62568a30 +size 2280 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/leg_l.vox b/assets/voxygen/voxel/npc/horned_owl/male/leg_l.vox new file mode 100644 index 0000000000..bc08dc8f2e --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/leg_l.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:241cdfef9a15847844f75d416dd96a07ee6d73d6c77e00a2b43367bccefb7f5e +size 1216 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/leg_r.vox b/assets/voxygen/voxel/npc/horned_owl/male/leg_r.vox new file mode 100644 index 0000000000..77f3928f96 --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0fa8bb42d579a128e47d4ec5b2700f1bd0e56052f82a0c2664e9268e3c7feec +size 1216 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/tail.vox b/assets/voxygen/voxel/npc/horned_owl/male/tail.vox new file mode 100644 index 0000000000..8e7ad28e96 --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e27b2899166ca64ecd2f011971403531d9b3a35d8c60813cff46506a75e18a5 +size 1308 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/wing_in_r.vox b/assets/voxygen/voxel/npc/horned_owl/male/wing_in_r.vox new file mode 100644 index 0000000000..78f5bdf7ee --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1066c87a9dd5c3adde0c363351cc6130a2e7c15fa3f357983518e8c3a1909f21 +size 1224 diff --git a/assets/voxygen/voxel/npc/horned_owl/male/wing_out_r.vox b/assets/voxygen/voxel/npc/horned_owl/male/wing_out_r.vox new file mode 100644 index 0000000000..a33efeb73f --- /dev/null +++ b/assets/voxygen/voxel/npc/horned_owl/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8113589ba1c7d3e57091ea019c43fc3ba719df9121f52b7be598f67f2d91e4c1 +size 1308 diff --git a/assets/voxygen/voxel/npc/owl/female/head.vox b/assets/voxygen/voxel/npc/owl/female/head.vox deleted file mode 100644 index 4cdb7bbfb0..0000000000 --- a/assets/voxygen/voxel/npc/owl/female/head.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f2bff2796a1ffa725f745ce91d29610a316c420727d1782d408b382be9bf670 -size 2356 diff --git a/assets/voxygen/voxel/npc/owl/female/leg_r.vox b/assets/voxygen/voxel/npc/owl/female/leg_r.vox deleted file mode 100644 index 86934442fb..0000000000 --- a/assets/voxygen/voxel/npc/owl/female/leg_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37e15e29979a22df53d483514de19ee70a10c99f666b5ceca8f1b099369d4d34 -size 1196 diff --git a/assets/voxygen/voxel/npc/owl/female/tail.vox b/assets/voxygen/voxel/npc/owl/female/tail.vox deleted file mode 100644 index 405243c791..0000000000 --- a/assets/voxygen/voxel/npc/owl/female/tail.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7f190a3e6a8c635f5234f510e1fe59a2471876d4658ef9a2c1dcb7e233e811c -size 1264 diff --git a/assets/voxygen/voxel/npc/owl/female/torso.vox b/assets/voxygen/voxel/npc/owl/female/torso.vox deleted file mode 100644 index f4c0a0c277..0000000000 --- a/assets/voxygen/voxel/npc/owl/female/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21e64dbdf9e61833c9babf6f9cc78cbbc60b38a6131f88bed8f374f8f632a12b -size 2244 diff --git a/assets/voxygen/voxel/npc/owl/female/wing_r.vox b/assets/voxygen/voxel/npc/owl/female/wing_r.vox deleted file mode 100644 index ae2d4bb3d3..0000000000 --- a/assets/voxygen/voxel/npc/owl/female/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:da50d172a4a9cbb96dbc43d5da0984bcd035351ce32401a13663a98f250c81ab -size 1364 diff --git a/assets/voxygen/voxel/npc/owl/male/head.vox b/assets/voxygen/voxel/npc/owl/male/head.vox deleted file mode 100644 index d9623ee174..0000000000 --- a/assets/voxygen/voxel/npc/owl/male/head.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b121d9adf0c72f6e0680b3a7e5564e741616131da3054de56324f966c9473bf -size 2172 diff --git a/assets/voxygen/voxel/npc/owl/male/leg_r.vox b/assets/voxygen/voxel/npc/owl/male/leg_r.vox deleted file mode 100644 index 8a079c0167..0000000000 --- a/assets/voxygen/voxel/npc/owl/male/leg_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fd8c1ec36d1937e321cc4359f63bebf0b0642357d85aa4c88845137bc126603 -size 1196 diff --git a/assets/voxygen/voxel/npc/owl/male/tail.vox b/assets/voxygen/voxel/npc/owl/male/tail.vox deleted file mode 100644 index 265bac5897..0000000000 --- a/assets/voxygen/voxel/npc/owl/male/tail.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:066051c9ce3eac6b014b1eaef48f6b169073fc95438bff0b3756ce4029815d08 -size 1304 diff --git a/assets/voxygen/voxel/npc/owl/male/torso.vox b/assets/voxygen/voxel/npc/owl/male/torso.vox deleted file mode 100644 index 169192a932..0000000000 --- a/assets/voxygen/voxel/npc/owl/male/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9b1f1c3951dfbcc3b11e98a9c98ed07c556b672b1d9c51de01c6cbb0ee355f03 -size 2128 diff --git a/assets/voxygen/voxel/npc/owl/male/wing_r.vox b/assets/voxygen/voxel/npc/owl/male/wing_r.vox deleted file mode 100644 index 33fe244ac1..0000000000 --- a/assets/voxygen/voxel/npc/owl/male/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aeb88a9c4bb42139b3a624df3f4112e792b06d227f868a2db08ab76635455728 -size 1360 diff --git a/assets/voxygen/voxel/npc/parakeet/male/chest.vox b/assets/voxygen/voxel/npc/parakeet/male/chest.vox new file mode 100644 index 0000000000..517df395c8 --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea7fa6c12180579f4ec4b907eda7ea3bdd17025223fb3b6de57ab4c676fc300d +size 1352 diff --git a/assets/voxygen/voxel/npc/parakeet/male/head.vox b/assets/voxygen/voxel/npc/parakeet/male/head.vox new file mode 100644 index 0000000000..3f68060df8 --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37393ccf8432e4352fecf40f397689992fee68c641be1575f6c898113e80a2c1 +size 1272 diff --git a/assets/voxygen/voxel/npc/parakeet/male/leg_r.vox b/assets/voxygen/voxel/npc/parakeet/male/leg_r.vox new file mode 100644 index 0000000000..f6ebe723bd --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52166e16ca677e2fe8fe514383d78eb3d97aaa6bfb638e540681ffaadf314fa3 +size 1136 diff --git a/assets/voxygen/voxel/npc/parakeet/male/tail.vox b/assets/voxygen/voxel/npc/parakeet/male/tail.vox new file mode 100644 index 0000000000..5271692b60 --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d8b41776c0d23a10559f49aecdbbd7e7636aac123ca2f1cea66ada8abc1d715 +size 1200 diff --git a/assets/voxygen/voxel/npc/parakeet/male/wing_in_r.vox b/assets/voxygen/voxel/npc/parakeet/male/wing_in_r.vox new file mode 100644 index 0000000000..fb27f47d0b --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79b9e0ced2f2f2ddcdaf4ded48b4abacbb190272d47a56170f4b49da3525bbd2 +size 1136 diff --git a/assets/voxygen/voxel/npc/parakeet/male/wing_out_r.vox b/assets/voxygen/voxel/npc/parakeet/male/wing_out_r.vox new file mode 100644 index 0000000000..532d8b060c --- /dev/null +++ b/assets/voxygen/voxel/npc/parakeet/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58b4ab4edf547eef40665d7d6e28a505c2cca579e7848efb7873cfcdb0f319db +size 1156 diff --git a/assets/voxygen/voxel/npc/parrot/female/chest.vox b/assets/voxygen/voxel/npc/parrot/female/chest.vox new file mode 100644 index 0000000000..84dcd5f09a --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aefc196efe55596515217154d454a8939527ad92c059b933de07faf79ac0983 +size 1820 diff --git a/assets/voxygen/voxel/npc/parrot/female/head.vox b/assets/voxygen/voxel/npc/parrot/female/head.vox new file mode 100644 index 0000000000..b356cade4d --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c2b5ddc335fd9b26badefe13eaa110b7c2252676f4abf6ff34babf1f32beea0 +size 1492 diff --git a/assets/voxygen/voxel/npc/parrot/female/leg_r.vox b/assets/voxygen/voxel/npc/parrot/female/leg_r.vox new file mode 100644 index 0000000000..070b49ca81 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07441e80d0c2294996353f619865d9731539f5d823180463af5901d7f9855c5a +size 1212 diff --git a/assets/voxygen/voxel/npc/parrot/female/tail.vox b/assets/voxygen/voxel/npc/parrot/female/tail.vox new file mode 100644 index 0000000000..45aecfab16 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4c782a6bd5e805ca6dcc87d6ea44e69ea7500554a274169c60c75ef43d6ded2 +size 1248 diff --git a/assets/voxygen/voxel/npc/parrot/female/wing_in_r.vox b/assets/voxygen/voxel/npc/parrot/female/wing_in_r.vox new file mode 100644 index 0000000000..ed1b8d1559 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58e2bb31a38fdb8f2626ff2e32991e72cd9b7da96db0e2b13e9d60ff3f967add +size 1196 diff --git a/assets/voxygen/voxel/npc/parrot/female/wing_out_r.vox b/assets/voxygen/voxel/npc/parrot/female/wing_out_r.vox new file mode 100644 index 0000000000..e8af9edced --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ab9ee4e8a96f551938566e223043a2ddaada5de61798682aee8c319670d101e +size 1296 diff --git a/assets/voxygen/voxel/npc/parrot/male/chest.vox b/assets/voxygen/voxel/npc/parrot/male/chest.vox new file mode 100644 index 0000000000..06f20fae09 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:569ffcc453c67766964b38416228a4332f5f215ab6f93de870ac4d15352b5c21 +size 1764 diff --git a/assets/voxygen/voxel/npc/parrot/male/head.vox b/assets/voxygen/voxel/npc/parrot/male/head.vox index 48f8f03ab8..01adfd0429 100644 --- a/assets/voxygen/voxel/npc/parrot/male/head.vox +++ b/assets/voxygen/voxel/npc/parrot/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bf5ccf89342db3c78a4b647fc1baea8599a3441bf29bbe20a5997a48e7fa3e7 -size 1344 +oid sha256:19ad024cbc0c29a77d4d6a128a8189d5218a0130523489d8f4684df85b754ce8 +size 1428 diff --git a/assets/voxygen/voxel/npc/parrot/male/leg_r.vox b/assets/voxygen/voxel/npc/parrot/male/leg_r.vox index 8bdac7c3ad..4af09149e8 100644 --- a/assets/voxygen/voxel/npc/parrot/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/parrot/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b50af5feface97003171b70598ad35bf0974a81c7e2f1d6c14ff1ae045f41e18 -size 1116 +oid sha256:0b20d9c974ee3ddbec72235fad636c6276ee6e5add4af318a4009d032baa9823 +size 1208 diff --git a/assets/voxygen/voxel/npc/parrot/male/tail.vox b/assets/voxygen/voxel/npc/parrot/male/tail.vox index 08003d23bb..908e1a5470 100644 --- a/assets/voxygen/voxel/npc/parrot/male/tail.vox +++ b/assets/voxygen/voxel/npc/parrot/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea654cae2ec4ff8eb6c6a5401496bf9c14dedac64c6dc38fa492f738fa32d405 -size 1228 +oid sha256:0ba45fc0edb120731206258558a020010da69ad64ee7ccd4b268f662400b4695 +size 1276 diff --git a/assets/voxygen/voxel/npc/parrot/male/torso.vox b/assets/voxygen/voxel/npc/parrot/male/torso.vox deleted file mode 100644 index 36fa8f1ecd..0000000000 --- a/assets/voxygen/voxel/npc/parrot/male/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a3b842b3390de14b575b262a7a3edfb62dffb811d59906b2ef960e08e26d727 -size 1404 diff --git a/assets/voxygen/voxel/npc/parrot/male/wing.vox b/assets/voxygen/voxel/npc/parrot/male/wing.vox deleted file mode 100644 index cf39a415bc..0000000000 --- a/assets/voxygen/voxel/npc/parrot/male/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7999ee135201c15c40bffdc00bcf9c357b976b5bd91393b176c023db50b01199 -size 1224 diff --git a/assets/voxygen/voxel/npc/parrot/male/wing_in_r.vox b/assets/voxygen/voxel/npc/parrot/male/wing_in_r.vox new file mode 100644 index 0000000000..ed455df457 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b30c5f4aa610cbc6263a608f14d6d0d1531292f6b99e6b782543c67a3acabd2 +size 1196 diff --git a/assets/voxygen/voxel/npc/parrot/male/wing_out_r.vox b/assets/voxygen/voxel/npc/parrot/male/wing_out_r.vox new file mode 100644 index 0000000000..15ed19fe27 --- /dev/null +++ b/assets/voxygen/voxel/npc/parrot/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50ae5691028d07f69e150d0344e279c75b3bbc8966b94a03717a0f71987285b3 +size 1296 diff --git a/assets/voxygen/voxel/npc/peacock/female/chest.vox b/assets/voxygen/voxel/npc/peacock/female/chest.vox new file mode 100644 index 0000000000..1a2a02b23b --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfc827335de09ab2e084ef0d257c0dc7b134a40753b84e0caf4ae522c0a340cc +size 2212 diff --git a/assets/voxygen/voxel/npc/peacock/female/head.vox b/assets/voxygen/voxel/npc/peacock/female/head.vox index c9ccbf5668..12d1e6ed94 100644 --- a/assets/voxygen/voxel/npc/peacock/female/head.vox +++ b/assets/voxygen/voxel/npc/peacock/female/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef6be7441b1c98a78fd0ff2e9415e5a18983c7b16d8fb9d59c1deb980f25ef1 -size 1456 +oid sha256:e95982e18ad681086493dd836f39a592de7b3d3529d868d45ea7b55d4d8d18c0 +size 1668 diff --git a/assets/voxygen/voxel/npc/peacock/female/leg_r.vox b/assets/voxygen/voxel/npc/peacock/female/leg_r.vox index 850fd36ec8..30b92a4f58 100644 --- a/assets/voxygen/voxel/npc/peacock/female/leg_r.vox +++ b/assets/voxygen/voxel/npc/peacock/female/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dbc9d4d6b2057fbbab1341e868eb0802e590b6230301327da2733e075659194 -size 1140 +oid sha256:e214d0f21906c22d647d87a8910b6d97efee537a9b04082c6093d7e97f993379 +size 1220 diff --git a/assets/voxygen/voxel/npc/peacock/female/tail.vox b/assets/voxygen/voxel/npc/peacock/female/tail.vox index e381a80524..3977cd9d27 100644 --- a/assets/voxygen/voxel/npc/peacock/female/tail.vox +++ b/assets/voxygen/voxel/npc/peacock/female/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb5ee1986c72675cf64ca6ac73b1cc146d81f692f6ece7b4447a5db3fb4c1319 -size 1320 +oid sha256:b3df39d7fecbdb76ce24e11521b882b6a86df486e233f5a2b075e78a559bd1d5 +size 1364 diff --git a/assets/voxygen/voxel/npc/peacock/female/torso.vox b/assets/voxygen/voxel/npc/peacock/female/torso.vox deleted file mode 100644 index 06d52c39f5..0000000000 --- a/assets/voxygen/voxel/npc/peacock/female/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd8e7e66447951f875296ced868d357d197b38c4ae9830a5fe120c186021b231 -size 1932 diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_in_r.vox b/assets/voxygen/voxel/npc/peacock/female/wing_in_r.vox new file mode 100644 index 0000000000..d2d765f9a3 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f24de0056b1ebed52fa46beea950629084e959190edd811fd8ed9ef095f3a90f +size 1208 diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_out_r.vox b/assets/voxygen/voxel/npc/peacock/female/wing_out_r.vox new file mode 100644 index 0000000000..081c81ee46 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65d4cb8c46dfd8eeeb9affdb2abfbde9dfa187aeb95c99e1a97a5520b1ac1236 +size 1244 diff --git a/assets/voxygen/voxel/npc/peacock/female/wing_r.vox b/assets/voxygen/voxel/npc/peacock/female/wing_r.vox deleted file mode 100644 index ef87e8929c..0000000000 --- a/assets/voxygen/voxel/npc/peacock/female/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95312b164b73d4446843cde2a53cbe0f30ceb86d80de2593eb2f845be737b97b -size 1236 diff --git a/assets/voxygen/voxel/npc/peacock/male/chest.vox b/assets/voxygen/voxel/npc/peacock/male/chest.vox new file mode 100644 index 0000000000..575c8f03a5 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc3e46735715962b2b928da2390b41086514092a53ed7560cf5a915a527425e6 +size 2208 diff --git a/assets/voxygen/voxel/npc/peacock/male/head.vox b/assets/voxygen/voxel/npc/peacock/male/head.vox index 50dc38ee2d..89381e2ff3 100644 --- a/assets/voxygen/voxel/npc/peacock/male/head.vox +++ b/assets/voxygen/voxel/npc/peacock/male/head.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9318efd5aaca66db669aa8bbb17ac9a86cba2248716eddeae19b34b6dc8a1483 -size 1456 +oid sha256:f2f3736047e3ae723e83ae8b623dfd81c3856cbf480149b41516c4926750fbc0 +size 1668 diff --git a/assets/voxygen/voxel/npc/peacock/male/leg_r.vox b/assets/voxygen/voxel/npc/peacock/male/leg_r.vox index 850fd36ec8..1f89ac54da 100644 --- a/assets/voxygen/voxel/npc/peacock/male/leg_r.vox +++ b/assets/voxygen/voxel/npc/peacock/male/leg_r.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dbc9d4d6b2057fbbab1341e868eb0802e590b6230301327da2733e075659194 -size 1140 +oid sha256:283cd01d1369049b129995823eb85953ef1c76191c2e52ff4edcd561fe329b2c +size 1220 diff --git a/assets/voxygen/voxel/npc/peacock/male/tail.vox b/assets/voxygen/voxel/npc/peacock/male/tail.vox index 85d004020f..11d0798602 100644 --- a/assets/voxygen/voxel/npc/peacock/male/tail.vox +++ b/assets/voxygen/voxel/npc/peacock/male/tail.vox @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb2c1a3591acaea7e963648fd0253edbab593602ff9d006562d18373a82b411d -size 1320 +oid sha256:bcb5b77297288bb5c99c741be84207bb7920bb4cd951a7de2d4bd77079809b08 +size 2724 diff --git a/assets/voxygen/voxel/npc/peacock/male/torso.vox b/assets/voxygen/voxel/npc/peacock/male/torso.vox deleted file mode 100644 index efec8ac0ca..0000000000 --- a/assets/voxygen/voxel/npc/peacock/male/torso.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24688eaad7d459d4a4c0eba71edaca1ba83ec09552b970ac581c6e2e2081f880 -size 1932 diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_in_r.vox b/assets/voxygen/voxel/npc/peacock/male/wing_in_r.vox new file mode 100644 index 0000000000..a27d6488de --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2dc6eb061e7cbbb4186072ccee2e18a20df5ede9f1dc01b152cc1da2c78d31f +size 1208 diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_out_r.vox b/assets/voxygen/voxel/npc/peacock/male/wing_out_r.vox new file mode 100644 index 0000000000..f1e24d9fc9 --- /dev/null +++ b/assets/voxygen/voxel/npc/peacock/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6e0a06a3faf884fe565caccfe85a62938b31c6d252a048a10a8ba2560ab2e58 +size 1244 diff --git a/assets/voxygen/voxel/npc/peacock/male/wing_r.vox b/assets/voxygen/voxel/npc/peacock/male/wing_r.vox deleted file mode 100644 index 747d997150..0000000000 --- a/assets/voxygen/voxel/npc/peacock/male/wing_r.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:abf9f847e7dc9c9ad319082d9b6438d8747185cdef53b4daff8fc6ae4a83ab72 -size 1236 diff --git a/assets/voxygen/voxel/npc/penguin/male/torso.vox b/assets/voxygen/voxel/npc/penguin/male/chest.vox similarity index 100% rename from assets/voxygen/voxel/npc/penguin/male/torso.vox rename to assets/voxygen/voxel/npc/penguin/male/chest.vox diff --git a/assets/voxygen/voxel/npc/penguin/male/wing.vox b/assets/voxygen/voxel/npc/penguin/male/wing.vox deleted file mode 100644 index 2368c6994b..0000000000 --- a/assets/voxygen/voxel/npc/penguin/male/wing.vox +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:818d474e2288e089f50e9e85952af317d3e0c9b9755c6d10e909f9087eeb828d -size 1196 diff --git a/assets/voxygen/voxel/npc/penguin/male/wing_in_r.vox b/assets/voxygen/voxel/npc/penguin/male/wing_in_r.vox new file mode 100644 index 0000000000..73136fe1b7 --- /dev/null +++ b/assets/voxygen/voxel/npc/penguin/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3bfa34d519934b5572799ffa43223e033c305db82c73bf9b61369e4dd084e01 +size 1128 diff --git a/assets/voxygen/voxel/npc/penguin/male/wing_out_r.vox b/assets/voxygen/voxel/npc/penguin/male/wing_out_r.vox new file mode 100644 index 0000000000..8fb9d8b3dd --- /dev/null +++ b/assets/voxygen/voxel/npc/penguin/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac525fae648e54fe58590d877cd22672d1cabd05560d9ff13918b685e87112a +size 1164 diff --git a/assets/voxygen/voxel/npc/puffin/male/chest.vox b/assets/voxygen/voxel/npc/puffin/male/chest.vox new file mode 100644 index 0000000000..0808484838 --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd39a978b21082bc2cc627d38f7068b87e071d7e9c9a6b3122ff86d2b8aa0c2b +size 2072 diff --git a/assets/voxygen/voxel/npc/puffin/male/head.vox b/assets/voxygen/voxel/npc/puffin/male/head.vox new file mode 100644 index 0000000000..2cf5fd31aa --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:293ebbe8234540a1158b5281139c1d935e5fae8e381783753e8487751e383e30 +size 1792 diff --git a/assets/voxygen/voxel/npc/puffin/male/leg_r.vox b/assets/voxygen/voxel/npc/puffin/male/leg_r.vox new file mode 100644 index 0000000000..d519732db5 --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e60e0b5f52e6c27f27a165c65e82577f394fe24f5f75467bd8a9e1fc704587e6 +size 1232 diff --git a/assets/voxygen/voxel/npc/puffin/male/tail.vox b/assets/voxygen/voxel/npc/puffin/male/tail.vox new file mode 100644 index 0000000000..afe5e5ece0 --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5a70c83295f0ae9782c7cd05c93a64739ff9d8898e0fcb7d7f21e0929b150cd +size 1280 diff --git a/assets/voxygen/voxel/npc/puffin/male/wing_in_r.vox b/assets/voxygen/voxel/npc/puffin/male/wing_in_r.vox new file mode 100644 index 0000000000..a0d98b8160 --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f38c10ae0b65cc5814113571bd7ea0d7a9100bfd861b0812ad9ba232805ec094 +size 1196 diff --git a/assets/voxygen/voxel/npc/puffin/male/wing_out_r.vox b/assets/voxygen/voxel/npc/puffin/male/wing_out_r.vox new file mode 100644 index 0000000000..666ad32b41 --- /dev/null +++ b/assets/voxygen/voxel/npc/puffin/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e56e3c754aab7ddf6569bedb84ddc4d59ea3d38cdda4c50fb5eaac53887e9f20 +size 1304 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/chest.vox b/assets/voxygen/voxel/npc/snowy_owl/male/chest.vox new file mode 100644 index 0000000000..f52f82f398 --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c925060089723639af4476b80eb5b05bfa0f85122e51380c10fe7a9f7373565a +size 2816 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/head.vox b/assets/voxygen/voxel/npc/snowy_owl/male/head.vox new file mode 100644 index 0000000000..256494d3e6 --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca5dbb25435532a8ff9c118c6b03af174d53d2bfafdbcff78597e34fe39b2d2c +size 2156 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/leg_r.vox b/assets/voxygen/voxel/npc/snowy_owl/male/leg_r.vox new file mode 100644 index 0000000000..7086884532 --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b462af6246138842e2559305998a08fac51f0b12f09c8ee516cde0222887a91 +size 1244 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/tail.vox b/assets/voxygen/voxel/npc/snowy_owl/male/tail.vox new file mode 100644 index 0000000000..da63e07bba --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e690f45b7ef2babce26950b35733a58a6b529a941e0233f3c945710fc34e872f +size 1308 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/wing_in_r.vox b/assets/voxygen/voxel/npc/snowy_owl/male/wing_in_r.vox new file mode 100644 index 0000000000..8bf88b7ddf --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f0cdd4f18d5f35d90b18137cf8a226eb8addc46ab61b81c10c8b1cf4419eaef +size 1224 diff --git a/assets/voxygen/voxel/npc/snowy_owl/male/wing_out_r.vox b/assets/voxygen/voxel/npc/snowy_owl/male/wing_out_r.vox new file mode 100644 index 0000000000..a86eb61ad4 --- /dev/null +++ b/assets/voxygen/voxel/npc/snowy_owl/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a4e2e93fd95537e9619b49b70a3d84cb4d4b3a4484e236814dbd680c51029f0 +size 1308 diff --git a/assets/voxygen/voxel/npc/toucan/female/chest.vox b/assets/voxygen/voxel/npc/toucan/female/chest.vox new file mode 100644 index 0000000000..b4f366cf32 --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e09fbaf594fc6534f50b1c296edea6c60a285ee5528dbb12bfe98075fa90cc51 +size 1828 diff --git a/assets/voxygen/voxel/npc/toucan/female/head.vox b/assets/voxygen/voxel/npc/toucan/female/head.vox new file mode 100644 index 0000000000..c9f181e76b --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3acfc5ca188c44e62657e39934b9b1a89104b012d7556eaf2f642503bac1bcd1 +size 1596 diff --git a/assets/voxygen/voxel/npc/toucan/female/leg_r.vox b/assets/voxygen/voxel/npc/toucan/female/leg_r.vox new file mode 100644 index 0000000000..45b912b08b --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fbea676c187fe6f7225b32d42e01db2720834ec0a6483fde6db262798f313b3 +size 1192 diff --git a/assets/voxygen/voxel/npc/toucan/female/tail.vox b/assets/voxygen/voxel/npc/toucan/female/tail.vox new file mode 100644 index 0000000000..95872beefc --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b206c6a217cc527a13e8857e3cfe09e5e57383797514fd1c474e8e9dbf6119 +size 1316 diff --git a/assets/voxygen/voxel/npc/toucan/female/wing_in_r.vox b/assets/voxygen/voxel/npc/toucan/female/wing_in_r.vox new file mode 100644 index 0000000000..3398d3f7b2 --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d88e5d080c966c601fedacfe92e240e45b308e33399942d2769bb591e9ce323 +size 1196 diff --git a/assets/voxygen/voxel/npc/toucan/female/wing_out_r.vox b/assets/voxygen/voxel/npc/toucan/female/wing_out_r.vox new file mode 100644 index 0000000000..0513ae0606 --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/female/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa3d65dae3c5d752fd200e3a240468ab5f77041a7010eebf16cdcf9587a2ced3 +size 1284 diff --git a/assets/voxygen/voxel/npc/toucan/male/chest.vox b/assets/voxygen/voxel/npc/toucan/male/chest.vox new file mode 100644 index 0000000000..3ef56cb2ca --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/chest.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4bb342b327a6dff0bbcf122e7b12a6ee4f2953538169cf75d4c6b0b1c6d776a +size 1828 diff --git a/assets/voxygen/voxel/npc/toucan/male/head.vox b/assets/voxygen/voxel/npc/toucan/male/head.vox new file mode 100644 index 0000000000..07dd6a7c2f --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/head.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ee4c0925152dbc22a3da348b051cb54d43cb4069e6307750e4a087dfcc39c95 +size 1672 diff --git a/assets/voxygen/voxel/npc/toucan/male/leg_r.vox b/assets/voxygen/voxel/npc/toucan/male/leg_r.vox new file mode 100644 index 0000000000..39d420ffc6 --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/leg_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a4b77dba0a751c5ad63322c706e81e570fe67b04c96a30e55427b74776683e7 +size 1192 diff --git a/assets/voxygen/voxel/npc/toucan/male/tail.vox b/assets/voxygen/voxel/npc/toucan/male/tail.vox new file mode 100644 index 0000000000..efe811b4f8 --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/tail.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c098a60462780f0402a7cd96316ee14daaba85246fe17824dc5cc38f8fe4536c +size 1316 diff --git a/assets/voxygen/voxel/npc/toucan/male/wing_in_r.vox b/assets/voxygen/voxel/npc/toucan/male/wing_in_r.vox new file mode 100644 index 0000000000..7e7173c3cc --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/wing_in_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7080acaa221a1ac0459d05b08bb13ebcb5309859ca3855015d45f702ec7dbef9 +size 1196 diff --git a/assets/voxygen/voxel/npc/toucan/male/wing_out_r.vox b/assets/voxygen/voxel/npc/toucan/male/wing_out_r.vox new file mode 100644 index 0000000000..ea96c938bd --- /dev/null +++ b/assets/voxygen/voxel/npc/toucan/male/wing_out_r.vox @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f32e225e68a6f2171db1d43220f514ac334165002d4c157cf8068ae9ad8c656 +size 1284 diff --git a/assets/world/wildlife/spawn/desert/river.ron b/assets/world/wildlife/spawn/desert/river.ron index a0e07abeb2..9ebae7fb66 100644 --- a/assets/world/wildlife/spawn/desert/river.ron +++ b/assets/world/wildlife/spawn/desert/river.ron @@ -5,6 +5,7 @@ SpawnEntry ( Pack( groups: [ (1, (1, 1, "common.entity.wild.aggressive.crocodile")), + (1, (2, 4, "common.entity.wild.peaceful.cockatiel")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/jungle/rainforest_area.ron b/assets/world/wildlife/spawn/jungle/rainforest_area.ron index b60389f0c3..ae13f765fc 100644 --- a/assets/world/wildlife/spawn/jungle/rainforest_area.ron +++ b/assets/world/wildlife/spawn/jungle/rainforest_area.ron @@ -7,6 +7,7 @@ SpawnEntry ( // Casual (5, (1, 1, "common.entity.wild.peaceful.parrot")), (5, (1, 1, "common.entity.wild.peaceful.quokka")), + (5, (1, 1, "common.entity.wild.peaceful.parakeet")), // Rare (1, (1, 1, "common.entity.wild.peaceful.tortoise")), (1, (1, 1, "common.entity.wild.aggressive.monitor")), @@ -15,6 +16,8 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.peaceful.crawler_moss")), (1, (1, 1, "common.entity.wild.aggressive.rootsnapper")), (1, (1, 1, "common.entity.wild.aggressive.axebeak")), + (1, (1, 1, "common.entity.wild.peaceful.toucan")), + (1, (1, 1, "common.entity.wild.peaceful.peacock")), ], spawn_mode: Land, day_period: [Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/taiga/area.ron b/assets/world/wildlife/spawn/taiga/area.ron index d0af2a01d4..42f10d4709 100644 --- a/assets/world/wildlife/spawn/taiga/area.ron +++ b/assets/world/wildlife/spawn/taiga/area.ron @@ -5,11 +5,12 @@ SpawnEntry ( Pack( groups: [ (1, (1, 1, "common.entity.wild.peaceful.eagle")), - (1, (1, 1, "common.entity.wild.peaceful.owl")), + (1, (1, 1, "common.entity.wild.peaceful.horned_owl")), (1, (1, 1, "common.entity.wild.peaceful.arctic_fox")), (1, (1, 1, "common.entity.wild.peaceful.moose")), (1, (1, 1, "common.entity.wild.peaceful.arctic_hare")), (1, (1, 1, "common.entity.wild.peaceful.tuskram")), + (1, (1, 4, "common.entity.wild.peaceful.crow")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/temperate/rainforest.ron b/assets/world/wildlife/spawn/temperate/rainforest.ron index ed520b8547..a872a05ae4 100644 --- a/assets/world/wildlife/spawn/temperate/rainforest.ron +++ b/assets/world/wildlife/spawn/temperate/rainforest.ron @@ -19,6 +19,7 @@ SpawnEntry ( (1, (1, 7, "common.entity.wild.peaceful.llama")), (1, (1, 7, "common.entity.wild.peaceful.alpaca")), (1, (1, 7, "common.entity.wild.peaceful.chicken")), + (1, (1, 4, "common.entity.wild.peaceful.crow")), // Solitary (2, (1, 1, "common.entity.wild.peaceful.forest_fox")), (2, (1, 1, "common.entity.wild.peaceful.donkey")), diff --git a/assets/world/wildlife/spawn/temperate/water.ron b/assets/world/wildlife/spawn/temperate/water.ron index 43c07ae278..1ecbfade3a 100644 --- a/assets/world/wildlife/spawn/temperate/water.ron +++ b/assets/world/wildlife/spawn/temperate/water.ron @@ -7,6 +7,7 @@ SpawnEntry ( (1, (3, 4, "common.entity.wild.peaceful.marlin")), (1, (3, 4, "common.entity.wild.peaceful.piranha")), (1, (3, 4, "common.entity.wild.peaceful.clownfish")), + (1, (1, 1, "common.entity.wild.peaceful.puffin")), ], spawn_mode: Water, day_period: [Night, Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/tropical/rainforest.ron b/assets/world/wildlife/spawn/tropical/rainforest.ron index 7ab5c6dda1..71e7581b4c 100644 --- a/assets/world/wildlife/spawn/tropical/rainforest.ron +++ b/assets/world/wildlife/spawn/tropical/rainforest.ron @@ -6,6 +6,7 @@ SpawnEntry ( groups: [ (1, (1, 2, "common.entity.wild.aggressive.male_lion")), (1, (1, 3, "common.entity.wild.aggressive.hyena")), + (1, (1, 1, "common.entity.wild.peaceful.dodo")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/assets/world/wildlife/spawn/tundra/snow.ron b/assets/world/wildlife/spawn/tundra/snow.ron index 9a3a26905e..1a6f785bb3 100644 --- a/assets/world/wildlife/spawn/tundra/snow.ron +++ b/assets/world/wildlife/spawn/tundra/snow.ron @@ -11,6 +11,7 @@ SpawnEntry ( (1, (1, 1, "common.entity.wild.aggressive.roshwalr")), (5, (5, 20, "common.entity.wild.peaceful.penguin")), (5, (5, 10, "common.entity.wild.peaceful.seal")), + (1, (1, 1, "common.entity.wild.peaceful.snowy_owl")), ], spawn_mode: Land, day_period: [Night, Morning, Noon, Evening], diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs index e45c9e468d..ddf59ce457 100644 --- a/common/src/comp/agent.rs +++ b/common/src/comp/agent.rs @@ -306,12 +306,22 @@ impl<'a> From<&'a Body> for Psyche { _ => 0.5, }, Body::BirdMedium(bird_medium) => match bird_medium.species { + bird_medium::Species::SnowyOwl => 0.4, + bird_medium::Species::HornedOwl => 0.4, + bird_medium::Species::Duck => 0.6, + bird_medium::Species::Cockatiel => 0.6, + bird_medium::Species::Chicken => 0.5, + bird_medium::Species::Bat => 0.1, + bird_medium::Species::Penguin => 0.5, bird_medium::Species::Goose => 0.4, - bird_medium::Species::Peacock => 0.4, - bird_medium::Species::Eagle => 0.3, + bird_medium::Species::Peacock => 0.3, + bird_medium::Species::Eagle => 0.2, bird_medium::Species::Parrot => 0.8, - bird_medium::Species::Bat => 0.0, - _ => 0.5, + bird_medium::Species::Crow => 0.4, + bird_medium::Species::Dodo => 0.8, + bird_medium::Species::Parakeet => 0.8, + bird_medium::Species::Puffin => 0.8, + bird_medium::Species::Toucan => 0.4, }, Body::BirdLarge(_) => 0.1, Body::FishSmall(_) => 1.0, diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs index 26ea7db981..dc2dd4d00d 100644 --- a/common/src/comp/body.rs +++ b/common/src/comp/body.rs @@ -280,21 +280,26 @@ impl Body { _ => 400.0, }, Body::BipedSmall(_) => 50.0, - // ravens are 0.69-2 kg, crows are 0.51 kg on average. Body::BirdMedium(body) => match body.species { - bird_medium::Species::Chicken => 2.0, // ~✅ Red junglefowl are 1-1.5 kg - bird_medium::Species::Duck => 2.0, - bird_medium::Species::Eagle => 10.0, // ~✅ Steller's sea eagle are 5-9 kg - bird_medium::Species::Goose => 3.5, // ~✅ Swan geese are 2.8-3.5 kg - bird_medium::Species::Owl => 2.0, - bird_medium::Species::Parrot => 2.0, - bird_medium::Species::Penguin => 8.0, - bird_medium::Species::Peacock => 5.0, - bird_medium::Species::Bat => 2.0, + bird_medium::Species::SnowyOwl => 3.0, + bird_medium::Species::HornedOwl => 3.0, + bird_medium::Species::Duck => 3.5, + bird_medium::Species::Cockatiel => 2.0, + bird_medium::Species::Chicken => 2.5, // ~✅ Red junglefowl are 1-1.5 kg + bird_medium::Species::Bat => 1.5, + bird_medium::Species::Penguin => 10.0, + bird_medium::Species::Eagle => 7.0, // ~✅ Steller's sea eagle are 5-9 kg + bird_medium::Species::Goose => 3.5, // ~✅ Swan geese are 2.8-3.5 kg + bird_medium::Species::Parrot => 1.0, + bird_medium::Species::Peacock => 6.0, + bird_medium::Species::Crow => 3.0, + bird_medium::Species::Dodo => 4.0, + bird_medium::Species::Parakeet => 1.0, + bird_medium::Species::Puffin => 2.0, + bird_medium::Species::Toucan => 4.5, }, Body::BirdLarge(_) => 100.0, - Body::Dragon(_) => 20_000.0, Body::FishMedium(_) => 5.0, Body::FishSmall(_) => 1.0, @@ -423,14 +428,6 @@ impl Body { _ => Vec3::new(1.0, 0.75, 1.4), }, - Body::BirdMedium(body) => match body.species { - bird_medium::Species::Chicken => Vec3::new(1.0, 1.0, 1.35), - bird_medium::Species::Duck => Vec3::new(0.9, 1.0, 1.4), - bird_medium::Species::Goose => Vec3::new(1.0, 1.2, 1.5), - bird_medium::Species::Peacock => Vec3::new(1.3, 1.1, 1.4), - bird_medium::Species::Bat => Vec3::new(4.0, 2.0, 2.0), - _ => Vec3::new(2.0, 1.0, 1.5), - }, Body::BirdLarge(body) => match body.species { bird_large::Species::Cockatrice => Vec3::new(2.5, 5.5, 3.5), bird_large::Species::Roc => Vec3::new(2.2, 7.5, 4.0), @@ -535,6 +532,24 @@ impl Body { arthropod::Species::Mosscrawler => Vec3::new(3.2, 4.0, 1.4), arthropod::Species::Sandcrawler => Vec3::new(3.2, 4.0, 1.4), }, + Body::BirdMedium(body) => match body.species { + bird_medium::Species::SnowyOwl => Vec3::new(1.8, 1.8, 1.8), + bird_medium::Species::HornedOwl => Vec3::new(1.8, 1.8, 1.8), + bird_medium::Species::Duck => Vec3::new(1.0, 1.5, 1.5), + bird_medium::Species::Cockatiel => Vec3::new(1.2, 1.0, 1.6), + bird_medium::Species::Chicken => Vec3::new(1.2, 1.5, 2.0), + bird_medium::Species::Bat => Vec3::new(2.0, 2.0, 1.5), + bird_medium::Species::Penguin => Vec3::new(1.5, 1.1, 2.5), + bird_medium::Species::Goose => Vec3::new(1.8, 1.8, 2.3), + bird_medium::Species::Peacock => Vec3::new(2.2, 2.5, 2.8), + bird_medium::Species::Eagle => Vec3::new(3.3, 2.5, 2.0), + bird_medium::Species::Parrot => Vec3::new(1.5, 1.5, 1.6), + bird_medium::Species::Crow => Vec3::new(2.0, 2.5, 1.5), + bird_medium::Species::Dodo => Vec3::new(2.5, 2.0, 2.0), + bird_medium::Species::Parakeet => Vec3::new(1.2, 1.0, 1.6), + bird_medium::Species::Puffin => Vec3::new(2.0, 2.0, 2.0), + bird_medium::Species::Toucan => Vec3::new(2.5, 2.0, 1.5), + }, } } @@ -723,15 +738,6 @@ impl Body { quadruped_medium::Species::Ngoubou => 290, _ => 70, }, - Body::BirdMedium(bird_medium) => match bird_medium.species { - bird_medium::Species::Goose => 30, - bird_medium::Species::Peacock => 35, - bird_medium::Species::Eagle => 45, - bird_medium::Species::Owl => 45, - bird_medium::Species::Duck => 10, - bird_medium::Species::Bat => 1, - _ => 15, - }, Body::FishMedium(_) => 15, Body::Dragon(_) => 500, Body::BirdLarge(bird_large) => match bird_large.species { @@ -743,6 +749,24 @@ impl Body { | bird_large::Species::WealdWyvern => 1000, _ => 300, }, + Body::BirdMedium(bird_medium) => match bird_medium.species { + bird_medium::Species::SnowyOwl => 45, + bird_medium::Species::HornedOwl => 45, + bird_medium::Species::Duck => 10, + bird_medium::Species::Cockatiel => 10, + bird_medium::Species::Chicken => 10, + bird_medium::Species::Bat => 20, + bird_medium::Species::Goose => 30, + bird_medium::Species::Peacock => 35, + bird_medium::Species::Penguin => 35, + bird_medium::Species::Eagle => 45, + bird_medium::Species::Parrot => 20, + bird_medium::Species::Crow => 20, + bird_medium::Species::Dodo => 20, + bird_medium::Species::Parakeet => 20, + bird_medium::Species::Puffin => 20, + bird_medium::Species::Toucan => 20, + }, Body::FishSmall(_) => 3, Body::BipedLarge(biped_large) => match biped_large.species { biped_large::Species::Ogre => 320, diff --git a/common/src/comp/body/bird_medium.rs b/common/src/comp/body/bird_medium.rs index 0e64ee7714..701354766d 100644 --- a/common/src/comp/body/bird_medium.rs +++ b/common/src/comp/body/bird_medium.rs @@ -37,15 +37,22 @@ make_case_elim!( )] #[repr(u32)] pub enum Species { - Duck = 0, - Chicken = 1, - Goose = 2, - Peacock = 3, - Eagle = 4, - Owl = 5, - Parrot = 6, - Penguin = 7, - Bat = 8, + SnowyOwl = 0, + HornedOwl = 1, + Duck = 2, + Cockatiel = 3, + Chicken = 4, + Bat = 5, + Penguin = 6, + Goose = 7, + Peacock = 8, + Eagle = 9, + Parrot = 10, + Crow = 11, + Dodo = 12, + Parakeet = 13, + Puffin = 14, + Toucan = 15, } ); @@ -54,15 +61,22 @@ make_case_elim!( /// NOTE: Deliberately don't (yet?) implement serialize. #[derive(Clone, Debug, Deserialize)] pub struct AllSpecies { + pub snowy_owl: SpeciesMeta, + pub horned_owl: SpeciesMeta, pub duck: SpeciesMeta, + pub cockatiel: SpeciesMeta, pub chicken: SpeciesMeta, + pub bat: SpeciesMeta, + pub penguin: SpeciesMeta, pub goose: SpeciesMeta, pub peacock: SpeciesMeta, pub eagle: SpeciesMeta, - pub owl: SpeciesMeta, pub parrot: SpeciesMeta, - pub penguin: SpeciesMeta, - pub bat: SpeciesMeta, + pub crow: SpeciesMeta, + pub dodo: SpeciesMeta, + pub parakeet: SpeciesMeta, + pub puffin: SpeciesMeta, + pub toucan: SpeciesMeta, } impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies { @@ -71,29 +85,43 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies #[inline] fn index(&self, &index: &'a Species) -> &Self::Output { match index { + Species::SnowyOwl => &self.snowy_owl, + Species::HornedOwl => &self.horned_owl, Species::Duck => &self.duck, + Species::Cockatiel => &self.cockatiel, Species::Chicken => &self.chicken, + Species::Bat => &self.bat, + Species::Penguin => &self.penguin, Species::Goose => &self.goose, Species::Peacock => &self.peacock, Species::Eagle => &self.eagle, - Species::Owl => &self.owl, Species::Parrot => &self.parrot, - Species::Penguin => &self.penguin, - Species::Bat => &self.bat, + Species::Crow => &self.crow, + Species::Dodo => &self.dodo, + Species::Parakeet => &self.parakeet, + Species::Puffin => &self.puffin, + Species::Toucan => &self.toucan, } } } -pub const ALL_SPECIES: [Species; 9] = [ +pub const ALL_SPECIES: [Species; 16] = [ + Species::SnowyOwl, + Species::HornedOwl, Species::Duck, + Species::Cockatiel, Species::Chicken, + Species::Bat, + Species::Penguin, Species::Goose, Species::Peacock, Species::Eagle, - Species::Owl, Species::Parrot, - Species::Penguin, - Species::Bat, + Species::Crow, + Species::Dodo, + Species::Parakeet, + Species::Puffin, + Species::Toucan, ]; impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies { diff --git a/common/src/comp/inventory/loadout_builder.rs b/common/src/comp/inventory/loadout_builder.rs index cb82c7ef29..c8f7bf8ffe 100644 --- a/common/src/comp/inventory/loadout_builder.rs +++ b/common/src/comp/inventory/loadout_builder.rs @@ -792,10 +792,16 @@ fn default_main_tool(body: &Body) -> Item { )), }, Body::BirdMedium(bird_medium) => match bird_medium.species { - bird_medium::Species::Bat => Some(Item::new_from_asset_expect( + bird_medium::Species::Cockatiel + | bird_medium::Species::Bat + | bird_medium::Species::Parrot + | bird_medium::Species::Crow + | bird_medium::Species::Parakeet => Some(Item::new_from_asset_expect( "common.items.npc_weapons.unique.simpleflyingbasic", )), - _ => None, + _ => Some(Item::new_from_asset_expect( + "common.items.npc_weapons.unique.birdmediumbasic", + )), }, _ => None, }; diff --git a/server/agent/src/action_nodes.rs b/server/agent/src/action_nodes.rs index 101d39bc1c..9e35a4f778 100644 --- a/server/agent/src/action_nodes.rs +++ b/server/agent/src/action_nodes.rs @@ -874,6 +874,7 @@ impl<'a> AgentData<'a> { "Bird Large Basic" => Tactic::BirdLargeBasic, "Flame Wyvern" | "Frost Wyvern" | "Cloud Wyvern" | "Sea Wyvern" | "Weald Wyvern" => Tactic::Wyvern, + "Bird Medium Basic" => Tactic::BirdMediumBasic, "Mindflayer" => Tactic::Mindflayer, "Minotaur" => Tactic::Minotaur, "Clay Golem" => Tactic::ClayGolem, @@ -1251,6 +1252,9 @@ impl<'a> AgentData<'a> { Tactic::Wyvern => { self.handle_wyvern_attack(agent, controller, &attack_data, tgt_data, read_data, rng) }, + Tactic::BirdMediumBasic => { + self.handle_simple_melee(agent, controller, &attack_data, tgt_data, read_data, rng) + }, Tactic::Minotaur => { self.handle_minotaur_attack(agent, controller, &attack_data, tgt_data, read_data) }, diff --git a/server/agent/src/data.rs b/server/agent/src/data.rs index e08b04cae5..8eb792e323 100644 --- a/server/agent/src/data.rs +++ b/server/agent/src/data.rs @@ -121,6 +121,7 @@ pub enum Tactic { BirdLargeFire, BirdLargeBasic, Wyvern, + BirdMediumBasic, ArthropodMelee, ArthropodRanged, ArthropodAmbush, diff --git a/server/src/rtsim/entity.rs b/server/src/rtsim/entity.rs index 35fd06daf1..57d5ecfcc0 100644 --- a/server/src/rtsim/entity.rs +++ b/server/src/rtsim/entity.rs @@ -999,7 +999,8 @@ fn bird_medium_config(body: comp::bird_medium::Body) -> &'static str { comp::bird_medium::Species::Goose => "common.entity.wild.peaceful.goose", comp::bird_medium::Species::Peacock => "common.entity.wild.peaceful.peacock", comp::bird_medium::Species::Eagle => "common.entity.wild.peaceful.eagle", - comp::bird_medium::Species::Owl => "common.entity.wild.peaceful.owl", + comp::bird_medium::Species::SnowyOwl => "common.entity.wild.peaceful.snowy_owl", + comp::bird_medium::Species::HornedOwl => "common.entity.wild.peaceful.horned_owl", comp::bird_medium::Species::Parrot => "common.entity.wild.peaceful.parrot", _ => unimplemented!(), } diff --git a/voxygen/anim/src/bird_medium/alpha.rs b/voxygen/anim/src/bird_medium/alpha.rs new file mode 100644 index 0000000000..35caf2f027 --- /dev/null +++ b/voxygen/anim/src/bird_medium/alpha.rs @@ -0,0 +1,91 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::states::utils::StageSection; + +pub struct AlphaAnimation; + +impl Animation for AlphaAnimation { + type Dependency<'a> = (Option, f32, f32, Vec3, Vec3, bool); + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_alpha\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_alpha")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (stage_section, global_time, timer, orientation, last_ori, on_ground): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let (move1base, move2base, move3) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time, 0.0), + Some(StageSection::Recover) => (1.0, 1.0, anim_time.powf(4.0)), + _ => (0.0, 0.0, 0.0), + }; + + let wave_slow_cos = (anim_time * 4.5).cos(); + + let pullback = 1.0 - move3; + + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + + let move1 = move1base * pullback; + let move2 = move2base * pullback; + let move1mirror = move1base * pullback * mirror; + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let _tilt = if vek::Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; + + next.chest.position = + Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + wave_slow_cos * 0.06 + move2); + next.chest.orientation = Quaternion::rotation_x(move1 * 0.5 - move2 * 0.8); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = Quaternion::rotation_x(move1 * -0.2 - move2 * 0.2) + * Quaternion::rotation_y(move1mirror * 0.5); + + if on_ground { + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(-move1 * 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(-1.0 + wave_slow_cos * 0.06 + move1 * 1.0 + move2 * 0.5) + * Quaternion::rotation_z(0.2); + next.wing_in_r.orientation = + Quaternion::rotation_y(1.0 - wave_slow_cos * 0.06 + move1 * -1.0 + move2 * -0.5) + * Quaternion::rotation_z(-0.2); + + 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.2 + move1 * -0.3) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = + Quaternion::rotation_y(0.2 + move1 * 0.3) * Quaternion::rotation_z(-0.2); + } else { + } + + next + } +} diff --git a/voxygen/anim/src/bird_medium/breathe.rs b/voxygen/anim/src/bird_medium/breathe.rs new file mode 100644 index 0000000000..da4f81f4b1 --- /dev/null +++ b/voxygen/anim/src/bird_medium/breathe.rs @@ -0,0 +1,101 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::{states::utils::StageSection, util::Dir}; + +pub struct BreatheAnimation; + +type BreatheAnimationDependency = ( + Vec3, + f32, + Vec3, + Vec3, + Option, + f32, + Dir, + bool, +); + +impl Animation for BreatheAnimation { + type Dependency<'a> = BreatheAnimationDependency; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_breathe\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_breathe")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (velocity,global_time, _orientation, _last_ori, stage_section, timer, look_dir, on_ground): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let (movement1base, movement2base, movement3, twitch) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time.min(1.0).powf(0.1), 0.0, anim_time), + Some(StageSection::Recover) => (1.0, 1.0, anim_time, 1.0), + _ => (0.0, 0.0, 0.0, 0.0), + }; + + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let twitch2 = mirror * (twitch * 20.0).sin() * pullback; + + let movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + + let wave_slow_cos = (anim_time * 4.5).cos(); + + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + wave_slow_cos * 0.06 + twitch2 * 0.1, + ); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = + Quaternion::rotation_x(movement1abs * 0.5 - movement2abs * 0.5 + look_dir.z * 0.4); + + if on_ground { + next.chest.orientation = + Quaternion::rotation_x(movement1abs * 0.2 - movement2abs * 0.5 + twitch2 * 0.03); + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + movement2abs * -3.0); + 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( + -1.0 + movement1abs * 0.8 - movement2abs * 0.4 + twitch2 * 0.03, + ) * Quaternion::rotation_z(0.2 - movement1abs * 0.8 + movement2abs * 0.4); + next.wing_in_r.orientation = + Quaternion::rotation_y( + 1.0 - movement1abs * 0.8 + movement2abs * 0.4 + twitch2 * -0.03, + ) * Quaternion::rotation_z(-0.2 + movement1abs * 0.8 - movement2abs * 0.4); + + 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.2) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = + Quaternion::rotation_y(0.2) * Quaternion::rotation_z(-0.2); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = + Quaternion::rotation_x(-movement1abs * 0.1 + movement2abs * 0.1 + twitch2 * 0.1); + } else { + next.head.orientation = Quaternion::rotation_x( + movement1abs * 0.5 + + movement2abs * (-0.5 + velocity.xy().magnitude() * 0.2).min(0.0) + + look_dir.z * 0.4, + ); + } + + next + } +} diff --git a/voxygen/anim/src/bird_medium/dash.rs b/voxygen/anim/src/bird_medium/dash.rs new file mode 100644 index 0000000000..41ebd0ed3c --- /dev/null +++ b/voxygen/anim/src/bird_medium/dash.rs @@ -0,0 +1,147 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::states::utils::StageSection; +use std::f32::consts::PI; + +pub struct DashAnimation; +type DashAnimationDependency<'a> = ( + Vec3, + Vec3, + Vec3, + f32, + Option, + f32, + f32, +); + +impl Animation for DashAnimation { + type Dependency<'a> = DashAnimationDependency<'a>; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_dash\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_dash")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (velocity, orientation, last_ori, acc_vel, stage_section, global_time, timer): Self::Dependency<'_>, + anim_time: f32, + rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + let speed = (Vec2::::from(velocity).magnitude()).min(22.0); + *rate = 1.0; + + let (movement1base, chargemovementbase, movement2base, movement3, legtell) = + match stage_section { + Some(StageSection::Buildup) => (anim_time.sqrt(), 0.0, 0.0, 0.0, anim_time), + Some(StageSection::Charge) => (1.0, 1.0, 0.0, 0.0, 0.0), + Some(StageSection::Action) => (1.0, 0.0, anim_time.powi(4), 0.0, 1.0), + Some(StageSection::Recover) => (1.0, 0.0, 1.0, anim_time, 1.0), + _ => (0.0, 0.0, 0.0, 0.0, 0.0), + }; + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + let legtwitch = (legtell * 6.0).sin() * pullback; + let legswing = legtell * pullback; + let chargeanim = (chargemovementbase * anim_time * 15.0).sin(); + + //let speednorm = speed / 13.0; + let speednorm = (speed / 13.0).powf(0.25); + + let speedmult = 0.8; + let lab: f32 = 0.6; //6 + + // acc_vel and anim_time mix to make sure phase length isn't starting at + // +infinite + let mixed_vel = acc_vel + anim_time * 5.0; //sets run frequency using speed, with anim_time setting a floor + + let short = ((1.0 + / (0.72 + + 0.28 * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()).powi(2))) + .sqrt()) + * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()) + * speednorm; + + // + let shortalt = (mixed_vel * 1.0 * lab * speedmult + PI * 3.0 / 8.0 - 0.5).sin() * speednorm; + + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if vek::Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; + + next.head.scale = Vec3::one() * 0.98; + next.leg_l.scale = Vec3::one() * 0.98; + next.leg_r.scale = Vec3::one() * 0.98; + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = Quaternion::rotation_x( + -0.1 * speednorm + short * -0.05 + movement1abs * -0.8 + movement2abs * 0.2, + ) * Quaternion::rotation_y(tilt * 0.2) + * Quaternion::rotation_z(shortalt * -0.05 - tilt * 1.5); + + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + short * 0.5 + 0.5 * speednorm, + ); + next.chest.orientation = + Quaternion::rotation_x(short * 0.07 + movement1abs * 0.8 + movement2abs * -1.2) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(shortalt * 0.10); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = + Quaternion::rotation_x(0.6 + short * -0.02 + movement1abs * -0.8 + movement2abs * 0.8); + + 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 + movement1abs * 1.0 + chargeanim * 0.2 - movement2abs * 0.6, + ) * Quaternion::rotation_z(0.2 - movement1abs * 0.6 - movement2abs * 0.6); + next.wing_in_r.orientation = + Quaternion::rotation_y( + 0.8 - movement1abs * 1.0 - chargeanim * 0.2 + movement2abs * 0.6, + ) * Quaternion::rotation_z(-0.2 + movement1abs * 0.6 + movement2abs * 0.6); + + 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.2 + short * 0.05) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = + Quaternion::rotation_y(0.2 + short * -0.05) * Quaternion::rotation_z(-0.2); + + if legtell > 0.0 { + if mirror.is_sign_positive() { + next.leg_l.orientation = Quaternion::rotation_x(legswing * 1.1 + legtwitch * 0.5); + + next.leg_r.orientation = Quaternion::rotation_x(0.0); + } else { + next.leg_l.orientation = Quaternion::rotation_x(0.0); + + next.leg_r.orientation = Quaternion::rotation_x(legswing * 1.1 + legtwitch * 0.5); + } + } + + next + } +} diff --git a/voxygen/anim/src/bird_medium/feed.rs b/voxygen/anim/src/bird_medium/feed.rs index a579751e81..e7aacf3df4 100644 --- a/voxygen/anim/src/bird_medium/feed.rs +++ b/voxygen/anim/src/bird_medium/feed.rs @@ -14,8 +14,7 @@ impl Animation for FeedAnimation { const UPDATE_FN: &'static [u8] = b"bird_medium_feed\0"; #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_feed")] - - fn update_skeleton_inner( + fn update_skeleton_inner<'a>( skeleton: &Self::Skeleton, global_time: Self::Dependency<'_>, anim_time: f32, @@ -24,13 +23,8 @@ impl Animation for FeedAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave_slow = (anim_time * 4.5).sin(); - let wave = (anim_time * 8.0).sin(); - - let wave_slow_cos = (anim_time * 4.5).cos(); - let duck_head_look = Vec2::new( - (global_time / 2.0 + anim_time / 2.0) + (global_time / 2.0 + anim_time / 8.0) .floor() .mul(7331.0) .sin() @@ -41,31 +35,37 @@ impl Animation for FeedAnimation { .sin() * 0.25, ); + let wave_slow_cos = (anim_time * 4.5).cos(); + let wave_fast = (anim_time * 9.0).cos(); - next.head.position = Vec3::new(0.0, s_a.head.0 + 1.0, -2.0 + s_a.head.1); + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + wave_slow_cos * 0.06 - 1.8); + next.chest.orientation = Quaternion::rotation_x(s_a.feed); + + 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(-0.3 / s_a.feed + wave_slow_cos * 0.03 + wave * 0.1); - - next.torso.position = Vec3::new( - 0.0, - s_a.chest.0 + s_a.feed, - -1.0 - 5.0 * (s_a.feed - 1.0) + wave_slow * 0.3 + s_a.chest.1, - ); - next.torso.orientation = - Quaternion::rotation_x(-0.5 * s_a.feed) * Quaternion::rotation_y(wave_slow * 0.03); + * Quaternion::rotation_x(-0.2 - duck_head_look.y.abs() + wave_slow_cos * 0.01); next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); - next.tail.orientation = Quaternion::rotation_x(wave_slow_cos * 0.03); + next.tail.orientation = Quaternion::rotation_x(0.0); - next.wing_l.position = Vec3::new(-s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_l.orientation = Quaternion::rotation_y(0.4 - wave_slow * 0.1); + 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_r.position = Vec3::new(s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_r.orientation = Quaternion::rotation_y(-0.4 + wave_slow * 0.1); + next.wing_in_l.orientation = + Quaternion::rotation_y(-0.7 + wave_fast * 0.08) * Quaternion::rotation_z(0.2); + next.wing_in_r.orientation = + Quaternion::rotation_y(0.7 - wave_fast * 0.08) * Quaternion::rotation_z(-0.2); - next.leg_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); + 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.2) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = Quaternion::rotation_y(0.2) * 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); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2); + next.leg_r.orientation = Quaternion::rotation_x(0.0); - next.leg_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); next } } diff --git a/voxygen/anim/src/bird_medium/fly.rs b/voxygen/anim/src/bird_medium/fly.rs index 4f2ec8af68..42473525ab 100644 --- a/voxygen/anim/src/bird_medium/fly.rs +++ b/voxygen/anim/src/bird_medium/fly.rs @@ -2,62 +2,141 @@ use super::{ super::{vek::*, Animation}, BirdMediumSkeleton, SkeletonAttr, }; -use std::f32::consts::PI; pub struct FlyAnimation; impl Animation for FlyAnimation { - type Dependency<'a> = (f32, f32); + type Dependency<'a> = (Vec3, Vec3, Vec3); type Skeleton = BirdMediumSkeleton; #[cfg(feature = "use-dyn-lib")] const UPDATE_FN: &'static [u8] = b"bird_medium_fly\0"; #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_fly")] - fn update_skeleton_inner( + fn update_skeleton_inner<'a>( skeleton: &Self::Skeleton, - _global_time: Self::Dependency<'_>, + (velocity, orientation, last_ori): Self::Dependency<'_>, anim_time: f32, _rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let lab: f32 = 12.0; //14.0 + let slow = (anim_time * 2.0).sin(); + let fast = (anim_time * 4.0).sin(); - let footl = (anim_time * lab + PI).sin(); - let footr = (anim_time * lab).sin(); - let center = (anim_time * lab + PI / 2.0).sin(); - let centeroffset = (anim_time * lab + PI * 1.5).sin(); + // Harmonic series hack to get a sine/saw mix + let freq = 8.0; + let off1 = 0.0; + let off2 = -1.7; + let off3 = -2.0; + let off4 = -2.4; + let flap1 = 7.0 / 16.0 * (freq * anim_time + off1).sin() + + 7.0 / 64.0 * (freq * 2.0 * anim_time + off1).sin() + + 1.0 / 48.0 * (freq * 3.0 * anim_time + off1).sin(); + let flap2 = 7.0 / 16.0 * (freq * anim_time + off2).sin() + + 7.0 / 64.0 * (freq * 2.0 * anim_time + off2).sin() + + 1.0 / 48.0 * (freq * 3.0 * anim_time + off2).sin(); + let flap3 = 7.0 / 16.0 * (freq * anim_time + off3).sin() + + 7.0 / 64.0 * (freq * 2.0 * anim_time + off3).sin() + + 1.0 / 48.0 * (freq * 3.0 * anim_time + off3).sin(); + let flap4 = 7.0 / 16.0 * (freq * anim_time + off4).sin() + + 7.0 / 64.0 * (freq * 2.0 * anim_time + off4).sin() + + 1.0 / 48.0 * (freq * 3.0 * anim_time + off4).sin(); - next.wing_l.scale = Vec3::one() * 1.05; - next.wing_r.scale = Vec3::one() * 1.05; + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if vek::Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; - next.head.position = Vec3::new(0.0, s_a.head.0 + 0.5, s_a.head.1 + center * 0.5 - 1.0); - next.head.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + center * 0.03); + next.head.scale = Vec3::one() * 0.99; + next.leg_l.scale = Vec3::one(); + next.leg_r.scale = Vec3::one(); + next.chest.scale = Vec3::one() * s_a.scaler * 0.99; + next.tail.scale = Vec3::one() * 1.01; - next.torso.position = Vec3::new( - 0.0, - s_a.chest.0 + centeroffset * 0.6, - center * 0.6 + s_a.chest.1, + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + + next.head.orientation = Quaternion::rotation_x( + (-0.5 + 0.2 * velocity.xy().magnitude() / 5.0).min(-0.3) + fast * 0.05, ); - next.torso.orientation = Quaternion::rotation_y(center * 0.05); - next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1 + centeroffset * 0.6); - next.tail.orientation = Quaternion::rotation_x(center * 0.03); + if velocity.z > 2.0 || velocity.xy().magnitude() < 12.0 { + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 - flap4 * 1.5); + next.chest.orientation = Quaternion::rotation_x( + (0.2 - 0.2 * velocity.xy().magnitude() / 5.0).max(-0.2) - flap1 * 0.2, + ) * Quaternion::rotation_y(tilt * 1.8 + fast * 0.01); - next.wing_l.position = Vec3::new(-s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_l.orientation = Quaternion::rotation_y((0.57 + footl * 1.2).max(0.0)); + 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_r.position = Vec3::new(s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_r.orientation = Quaternion::rotation_y((-0.57 + footr * 1.2).min(0.0)); + next.wing_in_l.orientation = + Quaternion::rotation_y(-flap1 * 1.9 + 0.2) * Quaternion::rotation_x(0.4); + next.wing_in_r.orientation = + Quaternion::rotation_y(flap1 * 1.9 - 0.2) * Quaternion::rotation_x(0.4); - next.leg_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.leg_l.orientation = Quaternion::rotation_x(-1.3 + footl * 0.06); + 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.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = + Quaternion::rotation_x(-flap2 * 0.2 + 0.1) * Quaternion::rotation_z(tilt * 1.0); + + next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 - flap4 * 1.5); + next.leg_l.orientation = Quaternion::rotation_x( + (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.2) + flap1 * -0.1, + ) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 - flap4 * 1.5); + next.leg_r.orientation = Quaternion::rotation_x( + (-1.0 * velocity.xy().magnitude() / 5.0).max(-1.2) + flap1 * -0.1, + ) * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); + } else { + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + slow * 0.05); + next.chest.orientation = + Quaternion::rotation_x(-0.2 + slow * 0.05 + (0.8 * velocity.z / 80.0).min(0.8)) + * Quaternion::rotation_y(tilt * 1.8 + fast * 0.01); + + 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.1 + slow * 0.04 + (0.8 * velocity.z / 80.0).min(0.8)) + * Quaternion::rotation_x(0.4); + next.wing_in_r.orientation = + Quaternion::rotation_y(-0.1 + slow * -0.04 - (0.8 * velocity.z / 80.0).min(0.8)) + * Quaternion::rotation_x(0.4); + + 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.1 + slow * 0.04 + (0.4 * velocity.z / 80.0).min(0.2)); + next.wing_out_r.orientation = + Quaternion::rotation_y(-0.1 + slow * -0.04 - (0.4 * velocity.z / 80.0).min(0.2)); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = + Quaternion::rotation_x(0.04 - slow * 0.04) * Quaternion::rotation_z(tilt * 1.0); + + next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1, s_a.leg.2 + slow * 0.05); + next.leg_l.orientation = Quaternion::rotation_x(-1.2 + slow * -0.05) + * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2 + slow * 0.05); + next.leg_r.orientation = Quaternion::rotation_x(-1.2 + slow * -0.05) + * Quaternion::rotation_y(tilt * 1.6 + fast * 0.01); + } - next.leg_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); - next.leg_r.orientation = Quaternion::rotation_x(-1.3 + footr * 0.06); next } } diff --git a/voxygen/anim/src/bird_medium/idle.rs b/voxygen/anim/src/bird_medium/idle.rs index c8a2e3aa65..01d75b6be1 100644 --- a/voxygen/anim/src/bird_medium/idle.rs +++ b/voxygen/anim/src/bird_medium/idle.rs @@ -2,8 +2,7 @@ use super::{ super::{vek::*, Animation}, BirdMediumSkeleton, SkeletonAttr, }; -use std::ops::Mul; - +use std::{f32::consts::PI, ops::Mul}; pub struct IdleAnimation; impl Animation for IdleAnimation { @@ -14,8 +13,7 @@ impl Animation for IdleAnimation { const UPDATE_FN: &'static [u8] = b"bird_medium_idle\0"; #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_idle")] - - fn update_skeleton_inner( + fn update_skeleton_inner<'a>( skeleton: &Self::Skeleton, global_time: Self::Dependency<'_>, anim_time: f32, @@ -24,9 +22,6 @@ impl Animation for IdleAnimation { ) -> Self::Skeleton { let mut next = (*skeleton).clone(); - let wave_slow = (anim_time * 4.5).sin(); - let wave_slow_cos = (anim_time * 4.5).cos(); - let duck_head_look = Vec2::new( (global_time / 2.0 + anim_time / 8.0) .floor() @@ -39,27 +34,44 @@ impl Animation for IdleAnimation { .sin() * 0.25, ); + let wave_slow_cos = (anim_time * 4.5).cos(); - next.wing_l.scale = Vec3::one() * 1.02; - next.wing_r.scale = Vec3::one() * 1.02; + next.head.scale = Vec3::one() * 0.99; + next.leg_l.scale = Vec3::one(); + next.leg_r.scale = Vec3::one(); + next.chest.scale = Vec3::one() * s_a.scaler * 0.99; + next.tail.scale = Vec3::one() * 1.01; + + 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); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2); + next.leg_r.orientation = Quaternion::rotation_x(0.0); + + next.chest.position = + Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + wave_slow_cos * 0.06 + 1.5) * s_a.scaler; 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.03); - - next.torso.position = Vec3::new(0.0, s_a.chest.0, wave_slow * 0.3 + s_a.chest.1); - next.torso.orientation = Quaternion::rotation_y(wave_slow * 0.03); + * Quaternion::rotation_x(-duck_head_look.y.abs() + wave_slow_cos * 0.01); next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); - next.tail.orientation = Quaternion::rotation_x(wave_slow_cos * 0.03); + next.tail.orientation = Quaternion::rotation_x(0.6); - next.wing_l.position = Vec3::new(-s_a.wing.0, s_a.wing.1, s_a.wing.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_r.position = Vec3::new(s_a.wing.0, s_a.wing.1, s_a.wing.2); + next.wing_in_l.orientation = Quaternion::rotation_x(-PI / 2.0) + * Quaternion::rotation_y(-PI / 2.5 + wave_slow_cos * 0.06) + * Quaternion::rotation_z(-PI / 4.0); + next.wing_in_r.orientation = Quaternion::rotation_x(-PI / 2.0) + * Quaternion::rotation_y(PI / 2.5 - wave_slow_cos * 0.06) + * Quaternion::rotation_z(PI / 4.0); - next.leg_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1, s_a.foot.2); + next.wing_out_l.position = Vec3::new(-s_a.wing_out.0 / 2.5, s_a.wing_out.1, s_a.wing_out.2); + next.wing_out_r.position = Vec3::new(s_a.wing_out.0 / 2.5, s_a.wing_out.1, s_a.wing_out.2); + next.wing_out_l.orientation = Quaternion::rotation_y(0.1) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = Quaternion::rotation_y(-0.1) * Quaternion::rotation_z(-0.2); - next.leg_r.position = Vec3::new(s_a.foot.0, s_a.foot.1, s_a.foot.2); next } } diff --git a/voxygen/anim/src/bird_medium/mod.rs b/voxygen/anim/src/bird_medium/mod.rs index 80a4f40cf4..c035293ccb 100644 --- a/voxygen/anim/src/bird_medium/mod.rs +++ b/voxygen/anim/src/bird_medium/mod.rs @@ -1,10 +1,22 @@ +pub mod alpha; +pub mod breathe; +pub mod dash; pub mod feed; pub mod fly; pub mod idle; pub mod run; +pub mod shockwave; +pub mod shoot; +pub mod stunned; +pub mod summon; +pub mod swim; // Reexports -pub use self::{feed::FeedAnimation, fly::FlyAnimation, idle::IdleAnimation, run::RunAnimation}; +pub use self::{ + alpha::AlphaAnimation, breathe::BreatheAnimation, dash::DashAnimation, feed::FeedAnimation, + fly::FlyAnimation, idle::IdleAnimation, run::RunAnimation, shockwave::ShockwaveAnimation, + shoot::ShootAnimation, stunned::StunnedAnimation, summon::SummonAnimation, swim::SwimAnimation, +}; use super::{make_bone, vek::*, FigureBoneData, Offsets, Skeleton}; use common::comp::{self}; @@ -14,10 +26,12 @@ pub type Body = comp::bird_medium::Body; skeleton_impls!(struct BirdMediumSkeleton { + head, - + torso, + + chest, + tail, - + wing_l, - + wing_r, + + wing_in_l, + + wing_in_r, + + wing_out_l, + + wing_out_r, + leg_l, + leg_r, }); @@ -26,7 +40,7 @@ impl Skeleton for BirdMediumSkeleton { type Attr = SkeletonAttr; type Body = Body; - const BONE_COUNT: usize = 7; + const BONE_COUNT: usize = 9; #[cfg(feature = "use-dyn-lib")] const COMPUTE_FN: &'static [u8] = b"bird_medium_compute_mats\0"; @@ -38,18 +52,28 @@ impl Skeleton for BirdMediumSkeleton { buf: &mut [FigureBoneData; super::MAX_BONE_COUNT], body: Self::Body, ) -> Offsets { - let base_mat = base_mat * Mat4::scaling_3d(1.0 / 11.0); - let torso_mat = base_mat * Mat4::::from(self.torso); - let head_mat = torso_mat * Mat4::::from(self.head); + let base_mat = base_mat * Mat4::scaling_3d(SkeletonAttr::from(&body).scaler / 8.0); + + let chest_mat = base_mat * Mat4::::from(self.chest); + let head_mat = chest_mat * Mat4::::from(self.head); + let tail_mat = chest_mat * Mat4::::from(self.tail); + let wing_in_l_mat = chest_mat * Mat4::::from(self.wing_in_l); + let wing_in_r_mat = chest_mat * Mat4::::from(self.wing_in_r); + let wing_out_l_mat = wing_in_l_mat * Mat4::::from(self.wing_out_l); + let wing_out_r_mat = wing_in_r_mat * Mat4::::from(self.wing_out_r); + let leg_l_mat = base_mat * Mat4::::from(self.leg_l); + let leg_r_mat = base_mat * Mat4::::from(self.leg_r); *(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [ make_bone(head_mat), - make_bone(torso_mat), - make_bone(torso_mat * Mat4::::from(self.tail)), - make_bone(torso_mat * Mat4::::from(self.wing_l)), - make_bone(torso_mat * Mat4::::from(self.wing_r)), - make_bone(base_mat * Mat4::::from(self.leg_l)), - make_bone(base_mat * Mat4::::from(self.leg_r)), + make_bone(chest_mat), + make_bone(tail_mat), + make_bone(wing_in_l_mat), + make_bone(wing_in_r_mat), + make_bone(wing_out_l_mat), + make_bone(wing_out_r_mat), + make_bone(leg_l_mat), + make_bone(leg_r_mat), ]; use common::comp::body::bird_medium::Species::*; Offsets { @@ -76,8 +100,10 @@ pub struct SkeletonAttr { head: (f32, f32), chest: (f32, f32), tail: (f32, f32), - wing: (f32, f32, f32), - foot: (f32, f32, f32), + wing_in: (f32, f32, f32), + wing_out: (f32, f32, f32), + leg: (f32, f32, f32), + scaler: f32, feed: f32, } @@ -95,11 +121,13 @@ impl<'a> TryFrom<&'a comp::Body> for SkeletonAttr { impl Default for SkeletonAttr { fn default() -> Self { Self { - head: (0.0, 0.0), chest: (0.0, 0.0), + head: (0.0, 0.0), tail: (0.0, 0.0), - wing: (0.0, 0.0, 0.0), - foot: (0.0, 0.0, 0.0), + wing_in: (0.0, 0.0, 0.0), + wing_out: (0.0, 0.0, 0.0), + leg: (0.0, 0.0, 0.0), + scaler: 0.0, feed: 0.0, } } @@ -109,79 +137,155 @@ impl<'a> From<&'a Body> for SkeletonAttr { fn from(body: &'a Body) -> Self { use comp::bird_medium::{BodyType::*, Species::*}; Self { - head: match (body.species, body.body_type) { - (Duck, _) => (2.0, 5.5), - (Chicken, Male) => (3.0, 4.5), - (Chicken, Female) => (3.0, 6.0), - (Goose, _) => (5.0, 2.5), - (Peacock, _) => (1.0, 1.0), - (Eagle, _) => (2.5, 5.0), - (Owl, Male) => (2.5, 5.0), - (Owl, Female) => (2.5, 7.0), - (Parrot, _) => (0.5, 4.5), - (Penguin, _) => (1.5, 6.0), - (Bat, _) => (2.5, 5.0), - }, chest: match (body.species, body.body_type) { - (Duck, _) => (0.0, 6.0), + (SnowyOwl, _) => (0.0, 4.5), + (HornedOwl, _) => (0.0, 4.5), + (Duck, _) => (0.0, 4.0), + (Cockatiel, _) => (0.0, 4.0), (Chicken, Male) => (0.0, 6.5), (Chicken, Female) => (0.0, 6.5), - (Goose, _) => (0.0, 8.0), - (Peacock, _) => (0.0, 10.0), - (Eagle, _) => (0.0, 8.0), - (Owl, Male) => (0.0, 4.5), - (Owl, Female) => (0.0, 4.5), - (Parrot, _) => (0.0, 5.0), - (Penguin, _) => (0.0, 8.0), (Bat, _) => (0.0, 8.0), + (Penguin, _) => (0.0, 8.0), + (Goose, _) => (0.0, 7.0), + (Peacock, _) => (0.0, 9.5), + (Eagle, _) => (0.0, 6.0), + (Parrot, _) => (0.0, 5.0), + (Crow, _) => (0.0, 4.0), + (Dodo, _) => (0.0, 6.0), + (Parakeet, _) => (0.0, 4.0), + (Puffin, _) => (0.0, 7.0), + (Toucan, _) => (0.0, 5.0), + }, + head: match (body.species, body.body_type) { + (SnowyOwl, _) => (3.5, 5.0), + (HornedOwl, _) => (3.5, 5.0), + (Duck, _) => (2.0, 5.5), + (Cockatiel, _) => (3.0, 5.5), + (Chicken, Male) => (3.0, 4.5), + (Chicken, Female) => (3.0, 6.0), + (Bat, _) => (2.5, 5.0), + (Penguin, _) => (1.5, 6.0), + (Goose, _) => (5.0, 4.0), + (Peacock, _) => (3.0, 5.0), + (Eagle, _) => (4.5, 5.0), + (Parrot, _) => (1.5, 4.5), + (Crow, _) => (4.5, 4.0), + (Dodo, _) => (3.5, 4.5), + (Parakeet, _) => (2.0, 4.0), + (Puffin, _) => (3.5, 5.5), + (Toucan, _) => (2.5, 4.5), }, tail: match (body.species, body.body_type) { + (SnowyOwl, _) => (-6.0, -2.0), + (HornedOwl, _) => (-6.0, -2.0), (Duck, _) => (-5.0, 1.0), + (Cockatiel, _) => (-3.0, -0.5), (Chicken, Male) => (-7.5, 3.5), (Chicken, Female) => (-4.5, 3.0), - (Goose, _) => (-5.0, 3.0), - (Peacock, _) => (-5.5, 2.0), - (Eagle, _) => (-8.0, -4.0), - (Owl, Male) => (-6.0, -2.0), - (Owl, Female) => (-6.0, -2.5), - (Parrot, _) => (-8.0, -2.0), - (Penguin, _) => (-3.0, -4.0), (Bat, _) => (-8.0, -4.0), + (Penguin, _) => (-3.0, -4.0), + (Goose, _) => (-4.0, 3.0), + (Peacock, _) => (-5.5, 1.0), + (Eagle, _) => (-6.0, -2.0), + (Parrot, _) => (-6.0, 0.0), + (Crow, _) => (-5.0, -1.5), + (Dodo, _) => (-7.5, -0.5), + (Parakeet, _) => (-5.0, -1.0), + (Puffin, _) => (-7.0, -2.0), + (Toucan, _) => (-6.0, 0.0), }, - wing: match (body.species, body.body_type) { - (Duck, _) => (3.5, -0.5, 2.0), - (Chicken, Male) => (3.0, -1.0, 2.5), - (Chicken, Female) => (3.0, -1.5, 2.5), - (Goose, _) => (3.75, -1.0, 2.0), - (Peacock, _) => (3.0, 0.0, 1.0), - (Eagle, _) => (3.0, -8.0, 4.0), - (Owl, Male) => (3.5, -5.5, 4.0), - (Owl, Female) => (3.5, -6.0, 3.5), - (Parrot, _) => (2.0, -4.5, 3.0), - (Penguin, _) => (4.0, 0.5, 1.0), - (Bat, _) => (1.0, -8.0, -2.0), + wing_in: match (body.species, body.body_type) { + (SnowyOwl, _) => (2.5, 1.0, 1.5), + (HornedOwl, _) => (2.5, 1.0, 1.5), + (Duck, _) => (2.5, 0.5, 1.0), + (Cockatiel, _) => (1.5, 0.5, 1.0), + (Chicken, Male) => (2.0, 1.0, 1.0), + (Chicken, Female) => (2.0, 1.5, 1.0), + (Bat, _) => (2.0, 2.0, -2.0), + (Penguin, _) => (3.0, 0.5, 1.0), + (Goose, _) => (2.5, 1.0, 2.0), + (Peacock, _) => (2.0, 1.0, 1.0), + (Eagle, _) => (3.0, 1.5, 1.0), + (Parrot, _) => (2.0, 0.5, 0.0), + (Crow, _) => (2.0, 0.5, 1.0), + (Dodo, _) => (3.0, -1.0, 1.0), + (Parakeet, _) => (1.0, 0.5, 0.0), + (Puffin, _) => (2.0, 0.0, 1.0), + (Toucan, _) => (2.0, 0.5, 0.0), }, - foot: match (body.species, body.body_type) { + wing_out: match (body.species, body.body_type) { + (SnowyOwl, _) => (4.5, 3.5, 1.0), + (HornedOwl, _) => (4.5, 3.5, 1.0), + (Duck, _) => (3.0, 2.0, 0.5), + (Cockatiel, _) => (3.0, 2.0, 0.5), + (Chicken, Male) => (3.0, 2.0, 0.5), + (Chicken, Female) => (3.0, 2.0, 0.5), + (Bat, _) => (5.0, 3.0, 0.0), + (Penguin, _) => (3.0, 2.5, 0.5), + (Goose, _) => (4.0, 3.0, 0.5), + (Peacock, _) => (5.0, 3.0, 0.5), + (Eagle, _) => (8.0, 4.5, 0.5), + (Parrot, _) => (5.0, 3.0, 0.5), + (Crow, _) => (5.0, 3.0, 0.5), + (Dodo, _) => (3.0, 3.0, 0.5), + (Parakeet, _) => (3.0, 0.0, 0.5), + (Puffin, _) => (5.0, 3.0, 0.5), + (Toucan, _) => (5.0, 3.0, 0.5), + }, + leg: match (body.species, body.body_type) { + (SnowyOwl, _) => (1.5, -2.5, 7.0), + (HornedOwl, _) => (1.5, -2.5, 7.0), (Duck, _) => (2.5, -2.0, 4.0), + (Cockatiel, _) => (1.5, -1.0, 4.0), (Chicken, Male) => (2.0, 0.0, 6.0), (Chicken, Female) => (2.0, 0.0, 6.0), - (Goose, _) => (2.0, -1.5, 7.0), - (Peacock, _) => (2.0, -2.5, 8.0), - (Eagle, _) => (2.0, -2.0, 8.0), - (Owl, Male) => (1.5, -2.5, 7.0), - (Owl, Female) => (1.5, -3.0, 6.5), - (Parrot, _) => (1.5, -3.0, 3.0), - (Penguin, _) => (2.5, -2.0, 6.0), (Bat, _) => (5.0, -1.0, 8.0), + (Penguin, _) => (2.5, -2.0, 6.0), + (Goose, _) => (2.0, -3.5, 6.0), + (Peacock, _) => (1.0, -2.5, 9.5), + (Eagle, _) => (2.0, -4.0, 6.0), + (Parrot, _) => (1.5, -3.0, 3.0), + (Crow, _) => (2.0, -2.5, 3.0), + (Dodo, _) => (1.5, -3.0, 4.0), + (Parakeet, _) => (1.5, -2.0, 2.0), + (Puffin, _) => (2.0, -3.0, 3.5), + (Toucan, _) => (1.5, -3.0, 3.0), + }, + scaler: match (body.species, body.body_type) { + (SnowyOwl, _) => 1.0, + (HornedOwl, _) => 1.0, + (Duck, _) => 1.0, + (Cockatiel, _) => 1.0, + (Chicken, _) => 1.0, + (Bat, _) => 1.0, + (Penguin, _) => 1.0, + (Goose, _) => 1.0, + (Peacock, _) => 1.0, + (Eagle, _) => 1.0, + (Parrot, _) => 1.0, + (Crow, _) => 1.0, + (Dodo, _) => 1.0, + (Parakeet, _) => 1.0, + (Puffin, _) => 1.0, + (Toucan, _) => 1.0, }, feed: match (body.species, body.body_type) { + (SnowyOwl, _) => -0.65, + (HornedOwl, _) => -0.65, + (Duck, _) => -0.65, + (Cockatiel, _) => -0.65, (Chicken, _) => 1.2, + (Bat, _) => -0.65, + (Penguin, _) => -0.65, (Goose, _) => 1.4, (Peacock, _) => 1.6, (Eagle, _) => 1.2, (Parrot, _) => 1.2, - (Penguin, _) => 1.2, - _ => 1.0, + (Crow, _) => 1.2, + (Dodo, _) => 1.2, + (Parakeet, _) => 1.2, + (Puffin, _) => 1.2, + (Toucan, _) => 1.2, }, } } diff --git a/voxygen/anim/src/bird_medium/run.rs b/voxygen/anim/src/bird_medium/run.rs index c46cbd9cc9..159ec7fef8 100644 --- a/voxygen/anim/src/bird_medium/run.rs +++ b/voxygen/anim/src/bird_medium/run.rs @@ -2,62 +2,117 @@ use super::{ super::{vek::*, Animation}, BirdMediumSkeleton, SkeletonAttr, }; -use std::f32::consts::PI; +use core::f32::consts::PI; pub struct RunAnimation; impl Animation for RunAnimation { - type Dependency<'a> = (f32, f32); + type Dependency<'a> = (Vec3, Vec3, Vec3, Vec3, f32); type Skeleton = BirdMediumSkeleton; #[cfg(feature = "use-dyn-lib")] const UPDATE_FN: &'static [u8] = b"bird_medium_run\0"; #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_run")] - fn update_skeleton_inner( + fn update_skeleton_inner<'a>( skeleton: &Self::Skeleton, - (_velocity, _global_time): Self::Dependency<'_>, + (velocity, orientation, last_ori, avg_vel, acc_vel): Self::Dependency<'_>, anim_time: f32, - _rate: &mut f32, + rate: &mut f32, s_a: &SkeletonAttr, ) -> Self::Skeleton { let mut next = (*skeleton).clone(); + let speed = (Vec2::::from(velocity).magnitude()).min(22.0); + *rate = 1.0; - let lab: f32 = 16.0; //14.0 + //let speednorm = speed / 13.0; + let speednorm = (speed / 13.0).powf(0.25); - let footl = (anim_time * lab + PI).sin(); - let footr = (anim_time * lab).sin(); - let center = (anim_time * lab + PI / 2.0).sin(); - let centeroffset = (anim_time * lab + PI * 1.5).sin(); + let speedmult = 0.8; + let lab: f32 = 0.6; //6 - next.wing_l.scale = Vec3::one() * 1.05; - next.wing_r.scale = Vec3::one() * 1.05; + // acc_vel and anim_time mix to make sure phase lenght isn't starting at + // +infinite + let mixed_vel = acc_vel + anim_time * 5.0; //sets run frequency using speed, with anim_time setting a floor - next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1 + center * 0.5); - next.head.orientation = - Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + center * 0.03); + let short = ((1.0 + / (0.72 + + 0.28 * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()).powi(2))) + .sqrt()) + * ((mixed_vel * 1.0 * lab * speedmult + PI * -0.15 - 0.5).sin()) + * speednorm; - next.torso.position = Vec3::new( + // + let shortalt = (mixed_vel * 1.0 * lab * speedmult + PI * 3.0 / 8.0 - 0.5).sin() * speednorm; + + //FL + let foot1a = (mixed_vel * 2.0 * lab * speedmult + 0.0 + PI).sin() * speednorm; //1.5 + let foot1b = (mixed_vel * 2.0 * lab * speedmult + PI / 2.0 + PI).sin() * speednorm; //1.9 + //FR + let foot2a = (mixed_vel * 2.0 * lab * speedmult).sin() * speednorm; //1.2 + let foot2b = (mixed_vel * 2.0 * lab * speedmult + PI / 2.0).sin() * speednorm; //1.6 + let ori: Vec2 = Vec2::from(orientation); + let last_ori = Vec2::from(last_ori); + let tilt = if vek::Vec2::new(ori, last_ori) + .map(|o| o.magnitude_squared()) + .map(|m| m > 0.001 && m.is_finite()) + .reduce_and() + && ori.angle_between(last_ori).is_finite() + { + ori.angle_between(last_ori).min(0.2) + * last_ori.determine_side(Vec2::zero(), ori).signum() + } else { + 0.0 + } * 1.3; + let x_tilt = avg_vel.z.atan2(avg_vel.xy().magnitude()) * speednorm; + + next.head.scale = Vec3::one() * 0.99; + next.leg_l.scale = Vec3::one(); + next.leg_r.scale = Vec3::one(); + next.chest.scale = Vec3::one() * s_a.scaler * 0.99; + next.tail.scale = Vec3::one() * 1.01; + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = Quaternion::rotation_x(-0.1 * speednorm + short * -0.05) + * Quaternion::rotation_y(tilt * 0.2) + * Quaternion::rotation_z(shortalt * -0.05 - tilt * 1.5); + + next.chest.position = Vec3::new( 0.0, - s_a.chest.0 + centeroffset * 0.6, - center * 0.6 + s_a.chest.1, - ); - next.torso.orientation = Quaternion::rotation_y(center * 0.05); + s_a.chest.0, + s_a.chest.1 + short * 0.5 + x_tilt * 4.0 + 0.5 * speednorm, + ) * s_a.scaler; + next.chest.orientation = Quaternion::rotation_x(short * 0.07 + x_tilt) + * Quaternion::rotation_y(tilt * 0.8) + * Quaternion::rotation_z(shortalt * 0.10); - next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1 + centeroffset * 0.6); - next.tail.orientation = Quaternion::rotation_x(center * 0.03); + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(0.6 + short * -0.02); - next.wing_l.position = Vec3::new(-s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_l.orientation = Quaternion::rotation_y((footl * 0.35).max(0.0)); + next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0); + next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0); - next.wing_r.position = Vec3::new(s_a.wing.0, s_a.wing.1, s_a.wing.2); - next.wing_r.orientation = Quaternion::rotation_y((footr * 0.35).min(0.0)); + next.wing_in_l.orientation = Quaternion::rotation_x(-PI / 1.5) + * Quaternion::rotation_y(-PI / 2.5) + * Quaternion::rotation_z(-PI / 3.0); + next.wing_in_r.orientation = Quaternion::rotation_x(-PI / 1.5) + * Quaternion::rotation_y(PI / 2.5) + * Quaternion::rotation_z(PI / 3.0); - next.leg_l.position = Vec3::new(-s_a.foot.0, s_a.foot.1 + footl * 1.0, s_a.foot.2); - next.leg_l.orientation = Quaternion::rotation_x(footl * 0.5); + 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.2 + short * 0.05) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = + Quaternion::rotation_y(0.2 + short * -0.05) * Quaternion::rotation_z(-0.2); - next.leg_r.position = Vec3::new(s_a.foot.0, s_a.foot.1 + footr * 1.0, s_a.foot.2); - next.leg_r.orientation = Quaternion::rotation_x(footr * 0.5); + next.leg_l.position = Vec3::new(-s_a.leg.0, s_a.leg.1 + foot1b * -2.3, s_a.leg.2); + next.leg_l.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot1a * 0.15) + * Quaternion::rotation_y(tilt * 0.5); + + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1 + foot2b * -2.3, s_a.leg.2); + next.leg_r.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot2a * 0.15) + * Quaternion::rotation_y(tilt * 0.5); next } } diff --git a/voxygen/anim/src/bird_medium/shockwave.rs b/voxygen/anim/src/bird_medium/shockwave.rs new file mode 100644 index 0000000000..a6dc30cb3c --- /dev/null +++ b/voxygen/anim/src/bird_medium/shockwave.rs @@ -0,0 +1,76 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::states::utils::StageSection; + +pub struct ShockwaveAnimation; + +impl Animation for ShockwaveAnimation { + type Dependency<'a> = (Option, bool); + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_shockwave\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_shockwave")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (stage_section, on_ground): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let (movement1base, movement2base, movement3, _twitch) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.5), 0.0, 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time.min(1.0).powf(0.1), 0.0, anim_time), + Some(StageSection::Recover) => (1.0, 1.0, anim_time, 1.0), + _ => (0.0, 0.0, 0.0, 0.0), + }; + + let pullback = 1.0 - movement3; + + let movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + + let wave_slow_cos = (anim_time * 4.5).cos(); + + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + movement1abs * 1.5); + next.chest.orientation = Quaternion::rotation_x(movement1abs * 1.0 + movement2abs * -1.0); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = Quaternion::rotation_x(wave_slow_cos * 0.01); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(0.6); + + if on_ground { + 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 + movement1abs * 1.6 + movement2abs * -1.6) + * Quaternion::rotation_z(0.2 + movement1abs * -0.8); + next.wing_in_r.orientation = + Quaternion::rotation_y(0.8 + movement1abs * -1.6 + movement2abs * 1.6) + * Quaternion::rotation_z(-0.2 + movement1abs * 0.8); + + 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); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2); + next.leg_r.orientation = Quaternion::rotation_x(0.0); + } else { + } + + next + } +} diff --git a/voxygen/anim/src/bird_medium/shoot.rs b/voxygen/anim/src/bird_medium/shoot.rs new file mode 100644 index 0000000000..f8e3e8f7fc --- /dev/null +++ b/voxygen/anim/src/bird_medium/shoot.rs @@ -0,0 +1,79 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::{states::utils::StageSection, util::Dir}; + +pub struct ShootAnimation; + +type ShootAnimationDependency = (Vec3, f32, Option, f32, Dir, bool); + +impl Animation for ShootAnimation { + type Dependency<'a> = ShootAnimationDependency; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_shoot\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_shoot")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (velocity, global_time, stage_section, timer, look_dir, on_ground): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let (movement1base, movement3, twitch) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0), + Some(StageSection::Recover) => (1.0, anim_time.powf(0.25), anim_time), + _ => (0.0, 0.0, 0.0), + }; + + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let twitch2 = mirror * (twitch * 20.0).sin() * pullback; + let movement1abs = movement1base * pullback; + let movement1mirror = movement1abs * mirror; + + let wave_slow_cos = (anim_time * 4.5).cos(); + + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + wave_slow_cos * 0.06 + twitch2 * 0.1, + ); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = + Quaternion::rotation_x(movement1abs * 0.5 + look_dir.z * 0.4 + twitch2) + * Quaternion::rotation_y(movement1mirror * 0.5); + + if on_ground { + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + wave_slow_cos * 0.06 + twitch2 * 0.1 + movement1abs * -3.0, + ); + + next.chest.orientation = Quaternion::rotation_x(movement1abs * 0.1); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(-movement1abs * 0.1 + twitch2 * 0.02); + + next.leg_l.orientation = Quaternion::rotation_x(movement1abs * -0.5); + next.leg_r.orientation = Quaternion::rotation_x(movement1abs * -0.5); + } else { + } + if velocity.xy().magnitude() < 1.0 { + next.wing_in_l.orientation = Quaternion::rotation_y(-1.0 + movement1abs * 0.8) + * Quaternion::rotation_z(0.2 - movement1abs * 0.8); + next.wing_in_r.orientation = Quaternion::rotation_y(1.0 - movement1abs * 0.8) + * Quaternion::rotation_z(-0.2 + movement1abs * 0.8); + }; + next + } +} diff --git a/voxygen/anim/src/bird_medium/stunned.rs b/voxygen/anim/src/bird_medium/stunned.rs new file mode 100644 index 0000000000..e599573448 --- /dev/null +++ b/voxygen/anim/src/bird_medium/stunned.rs @@ -0,0 +1,68 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::states::utils::StageSection; + +pub struct StunnedAnimation; + +impl Animation for StunnedAnimation { + type Dependency<'a> = (f32, Option, f32); + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_stunned\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_stunned")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (global_time, stage_section, timer): Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let wave_slow_cos = (anim_time * 4.5).cos(); + + let (movement1base, movement2, twitch) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.1), 0.0, anim_time), + Some(StageSection::Recover) => (1.0, anim_time.powf(4.0), 1.0), + _ => (0.0, 0.0, 0.0), + }; + let pullback = 1.0 - movement2; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let twitch2 = mirror * (twitch * 20.0).sin() * pullback; + let movement1abs = movement1base * pullback; + + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + wave_slow_cos * 0.06); + next.chest.orientation = Quaternion::rotation_x(movement1base * 0.5); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = + Quaternion::rotation_z(twitch2 * 0.8) * Quaternion::rotation_x(wave_slow_cos * 0.01); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + + 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(wave_slow_cos * 0.06 + twitch2 * 0.8) + * Quaternion::rotation_z(0.2 - movement1abs); + next.wing_in_r.orientation = Quaternion::rotation_y(wave_slow_cos * 0.06 - twitch2 * 0.8) + * Quaternion::rotation_z(-0.2 + movement1abs); + + 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.2) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = Quaternion::rotation_y(0.2) * 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(movement1abs * 0.8); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2); + + next + } +} diff --git a/voxygen/anim/src/bird_medium/summon.rs b/voxygen/anim/src/bird_medium/summon.rs new file mode 100644 index 0000000000..7e3fd8d91a --- /dev/null +++ b/voxygen/anim/src/bird_medium/summon.rs @@ -0,0 +1,92 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use common::{states::utils::StageSection, util::Dir}; + +pub struct SummonAnimation; + +type SummonAnimationDependency = (f32, Option, f32, Dir, bool); + +impl Animation for SummonAnimation { + type Dependency<'a> = SummonAnimationDependency; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_summon\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_summon")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + (global_time, stage_section, timer, look_dir, on_ground): Self::Dependency<'_>, + anim_time: f32, + rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + *rate = 1.0; + let mut next = (*skeleton).clone(); + + let (movement1base, movement2base, movement3, twitch) = match stage_section { + Some(StageSection::Buildup) => (anim_time.powf(0.25), 0.0, 0.0, 0.0), + Some(StageSection::Action) => (1.0, anim_time.min(1.0).powf(0.1), 0.0, anim_time), + Some(StageSection::Recover) => (1.0, 1.0, anim_time.min(1.0).powi(2), 1.0), + _ => (0.0, 0.0, 0.0, 0.0), + }; + + let pullback = 1.0 - movement3; + let subtract = global_time - timer; + let check = subtract - subtract.trunc(); + let mirror = (check - 0.5).signum(); + let twitch2 = mirror * (twitch * 20.0).sin() * pullback; + + let movement1abs = movement1base * pullback; + let movement2abs = movement2base * pullback; + + let wave_slow_cos = (anim_time * 4.5).cos(); + + next.head.scale = Vec3::one() * 0.98; + next.leg_l.scale = Vec3::one() * 0.98; + next.leg_r.scale = Vec3::one() * 0.98; + + next.chest.position = Vec3::new( + 0.0, + s_a.chest.0, + s_a.chest.1 + wave_slow_cos * 0.06 + twitch2 * 0.1, + ); + + next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1); + next.head.orientation = + Quaternion::rotation_x(movement1abs * -1.0 - movement2abs * 0.1 + look_dir.z * 0.4); + + if on_ground { + next.chest.orientation = + Quaternion::rotation_x(movement1abs * 1.1 - movement2abs * 0.1); + + 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_x(movement1abs * 0.4 - movement2abs * 0.4) + * Quaternion::rotation_y(-1.0 + movement1abs * 1.6 - movement2abs * 1.8) + * Quaternion::rotation_z(0.2 - movement1abs * 1.8 + movement2abs * 0.4); + next.wing_in_r.orientation = + Quaternion::rotation_x(movement1abs * 0.4 - movement2abs * 0.4) + * Quaternion::rotation_y(1.0 - movement1abs * 1.6 + movement2abs * 1.8) + * Quaternion::rotation_z(-0.2 + movement1abs * 1.8 - movement2abs * 0.4); + + 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.2 - movement2abs * 0.4) * Quaternion::rotation_z(0.2); + next.wing_out_r.orientation = + Quaternion::rotation_y(0.2 + movement2abs * 0.4) * Quaternion::rotation_z(-0.2); + + next.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = + Quaternion::rotation_x(-movement1abs * 0.1 + movement2abs * 0.1 + twitch2 * 0.02); + } else { + } + + next + } +} diff --git a/voxygen/anim/src/bird_medium/swim.rs b/voxygen/anim/src/bird_medium/swim.rs new file mode 100644 index 0000000000..7e5d64db8f --- /dev/null +++ b/voxygen/anim/src/bird_medium/swim.rs @@ -0,0 +1,79 @@ +use super::{ + super::{vek::*, Animation}, + BirdMediumSkeleton, SkeletonAttr, +}; +use std::ops::Mul; + +pub struct SwimAnimation; + +impl Animation for SwimAnimation { + type Dependency<'a> = f32; + type Skeleton = BirdMediumSkeleton; + + #[cfg(feature = "use-dyn-lib")] + const UPDATE_FN: &'static [u8] = b"bird_medium_swim\0"; + + #[cfg_attr(feature = "be-dyn-lib", export_name = "bird_medium_swim")] + fn update_skeleton_inner<'a>( + skeleton: &Self::Skeleton, + global_time: Self::Dependency<'_>, + anim_time: f32, + _rate: &mut f32, + s_a: &SkeletonAttr, + ) -> Self::Skeleton { + let mut next = (*skeleton).clone(); + + let duck_head_look = Vec2::new( + (global_time / 2.0 + anim_time / 8.0) + .floor() + .mul(7331.0) + .sin() + * 0.5, + (global_time / 2.0 + anim_time / 8.0) + .floor() + .mul(1337.0) + .sin() + * 0.25, + ); + let wave_slow_cos = (anim_time * 4.5).cos(); + + let wave_fast = (anim_time * 6.0).sin(); + let wave_fast_cos = (anim_time * 6.0).cos(); + + next.head.scale = Vec3::one() * 0.99; + next.leg_l.scale = Vec3::one(); + next.leg_r.scale = Vec3::one(); + next.chest.scale = Vec3::one() * s_a.scaler * 0.99; + next.tail.scale = Vec3::one() * 1.01; + + next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + wave_slow_cos * 0.06 + 1.5); + next.chest.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.tail.position = Vec3::new(0.0, s_a.tail.0, s_a.tail.1); + next.tail.orientation = Quaternion::rotation_x(0.6); + + 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_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.8 + wave_fast * 0.5); + next.leg_r.position = Vec3::new(s_a.leg.0, s_a.leg.1, s_a.leg.2); + next.leg_r.orientation = Quaternion::rotation_x(-0.8 + wave_fast_cos * 0.5); + + next + } +} diff --git a/voxygen/src/scene/figure/load.rs b/voxygen/src/scene/figure/load.rs index 9392125476..9c13aa51fe 100644 --- a/voxygen/src/scene/figure/load.rs +++ b/voxygen/src/scene/figure/load.rs @@ -1614,7 +1614,7 @@ struct BirdMediumCentralSpec(HashMap<(BMSpecies, BMBodyType), SidedBMCentralVoxS #[derive(Deserialize)] struct SidedBMCentralVoxSpec { head: BirdMediumCentralSubSpec, - torso: BirdMediumCentralSubSpec, + chest: BirdMediumCentralSubSpec, tail: BirdMediumCentralSubSpec, } #[derive(Deserialize)] @@ -1628,10 +1628,12 @@ struct BirdMediumLateralSpec(HashMap<(BMSpecies, BMBodyType), SidedBMLateralVoxS #[derive(Deserialize)] struct SidedBMLateralVoxSpec { - wing_l: BirdMediumLateralSubSpec, - wing_r: BirdMediumLateralSubSpec, - foot_l: BirdMediumLateralSubSpec, - foot_r: BirdMediumLateralSubSpec, + wing_in_l: BirdMediumLateralSubSpec, + wing_in_r: BirdMediumLateralSubSpec, + wing_out_l: BirdMediumLateralSubSpec, + wing_out_r: BirdMediumLateralSubSpec, + leg_l: BirdMediumLateralSubSpec, + leg_r: BirdMediumLateralSubSpec, } #[derive(Deserialize)] struct BirdMediumLateralSubSpec { @@ -1655,7 +1657,7 @@ make_vox_spec!( body.body_type, ) }), - Some(spec.central.read().0.mesh_torso( + Some(spec.central.read().0.mesh_chest( body.species, body.body_type, )), @@ -1663,24 +1665,30 @@ make_vox_spec!( body.species, body.body_type, )), - Some(spec.lateral.read().0.mesh_wing_l( + Some(spec.lateral.read().0.mesh_wing_in_l( body.species, body.body_type, )), - Some(spec.lateral.read().0.mesh_wing_r( + Some(spec.lateral.read().0.mesh_wing_in_r( body.species, body.body_type, )), - Some(spec.lateral.read().0.mesh_foot_l( + Some(spec.lateral.read().0.mesh_wing_out_l( body.species, body.body_type, )), - Some(spec.lateral.read().0.mesh_foot_r( + Some(spec.lateral.read().0.mesh_wing_out_r( + body.species, + body.body_type, + )), + Some(spec.lateral.read().0.mesh_leg_l( + body.species, + body.body_type, + )), + Some(spec.lateral.read().0.mesh_leg_r( body.species, body.body_type, )), - None, - None, None, None, None, @@ -1709,20 +1717,20 @@ impl BirdMediumCentralSpec { (central, Vec3::from(spec.head.offset)) } - fn mesh_torso(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + fn mesh_chest(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No torso specification exists for the combination of {:?} and {:?}", + "No chest specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let central = graceful_load_segment(&spec.torso.central.0); + let central = graceful_load_segment(&spec.chest.central.0); - (central, Vec3::from(spec.torso.offset)) + (central, Vec3::from(spec.chest.offset)) } fn mesh_tail(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { @@ -1742,70 +1750,103 @@ impl BirdMediumCentralSpec { } } impl BirdMediumLateralSpec { - fn mesh_wing_l(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + fn mesh_wing_in_l(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No wing specification exists for the combination of {:?} and {:?}", + "No wing in in left specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment_flipped(&spec.wing_l.lateral.0, true); + let lateral = graceful_load_segment_flipped(&spec.wing_in_l.lateral.0, true); - (lateral, Vec3::from(spec.wing_l.offset)) + (lateral, Vec3::from(spec.wing_in_l.offset)) } - fn mesh_wing_r(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + fn mesh_wing_in_r(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No wing specification exists for the combination of {:?} and {:?}", + "No wing in right specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.wing_r.lateral.0); + let lateral = graceful_load_segment(&spec.wing_in_r.lateral.0); - (lateral, Vec3::from(spec.wing_r.offset)) + (lateral, Vec3::from(spec.wing_in_r.offset)) } - fn mesh_foot_l(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + fn mesh_wing_out_l(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No foot specification exists for the combination of {:?} and {:?}", + "No wing out specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment_flipped(&spec.foot_l.lateral.0, true); + let lateral = graceful_load_segment_flipped(&spec.wing_out_l.lateral.0, true); - (lateral, Vec3::from(spec.foot_l.offset)) + (lateral, Vec3::from(spec.wing_out_l.offset)) } - fn mesh_foot_r(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + fn mesh_wing_out_r(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { let spec = match self.0.get(&(species, body_type)) { Some(spec) => spec, None => { error!( - "No foot specification exists for the combination of {:?} and {:?}", + "No wing out specification exists for the combination of {:?} and {:?}", species, body_type ); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); }, }; - let lateral = graceful_load_segment(&spec.foot_r.lateral.0); + let lateral = graceful_load_segment(&spec.wing_out_r.lateral.0); - (lateral, Vec3::from(spec.foot_r.offset)) + (lateral, Vec3::from(spec.wing_out_r.offset)) + } + + fn mesh_leg_l(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment_flipped(&spec.leg_l.lateral.0, true); + + (lateral, Vec3::from(spec.leg_l.offset)) + } + + fn mesh_leg_r(&self, species: BMSpecies, body_type: BMBodyType) -> BoneMeshes { + let spec = match self.0.get(&(species, body_type)) { + Some(spec) => spec, + None => { + error!( + "No leg specification exists for the combination of {:?} and {:?}", + species, body_type + ); + return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); + }, + }; + let lateral = graceful_load_segment(&spec.leg_r.lateral.0); + + (lateral, Vec3::from(spec.leg_r.offset)) } } + //// #[derive(Deserialize)] struct TheropodCentralSpec(HashMap<(TSpecies, TBodyType), SidedTCentralVoxSpec>); diff --git a/voxygen/src/scene/figure/mod.rs b/voxygen/src/scene/figure/mod.rs index e19b1be1a6..33e641257f 100644 --- a/voxygen/src/scene/figure/mod.rs +++ b/voxygen/src/scene/figure/mod.rs @@ -2813,6 +2813,7 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::ChargedMelee(s) => { let stage_time = s.timer.as_secs_f32(); @@ -2842,64 +2843,6 @@ impl FigureMgr { skeleton_attr, ) }, - CharacterState::Shockwave(s) => { - let stage_time = s.timer.as_secs_f32(); - - let stage_progress = match s.stage_section { - StageSection::Buildup => { - stage_time / s.static_data.buildup_duration.as_secs_f32() - }, - StageSection::Action => { - stage_time / s.static_data.swing_duration.as_secs_f32() - }, - StageSection::Recover => { - stage_time / s.static_data.recover_duration.as_secs_f32() - }, - - _ => 0.0, - }; - anim::quadruped_low::ShockwaveAnimation::update_skeleton( - &target_base, - ( - rel_vel.magnitude(), - time, - Some(s.stage_section), - state.state_time, - ), - stage_progress, - &mut state_animation_rate, - skeleton_attr, - ) - }, - CharacterState::SpriteSummon(s) => { - let stage_time = s.timer.as_secs_f32(); - - let stage_progress = match s.stage_section { - StageSection::Buildup => { - stage_time / s.static_data.buildup_duration.as_secs_f32() - }, - StageSection::Action => { - stage_time / s.static_data.cast_duration.as_secs_f32() - }, - StageSection::Recover => { - stage_time / s.static_data.recover_duration.as_secs_f32() - }, - - _ => 0.0, - }; - anim::quadruped_low::SpriteSummonAnimation::update_skeleton( - &target_base, - ( - rel_vel.magnitude(), - time, - Some(s.stage_section), - state.state_time, - ), - stage_progress, - &mut state_animation_rate, - skeleton_attr, - ) - }, CharacterState::Stunned(s) => { let stage_time = s.timer.as_secs_f32(); let stage_progress = match s.stage_section { @@ -3094,7 +3037,7 @@ impl FigureMgr { }); // Average velocity relative to the current ground - let _rel_avg_vel = state.avg_vel - physics.ground_vel; + let rel_avg_vel = state.avg_vel - physics.ground_vel; let (character, last_character) = match (character, last_character) { (Some(c), Some(l)) => (c, l), @@ -3121,15 +3064,14 @@ impl FigureMgr { // Running (true, true, false) => anim::bird_medium::RunAnimation::update_skeleton( &BirdMediumSkeleton::default(), - (rel_vel.magnitude(), time), - state.state_time, - &mut state_animation_rate, - skeleton_attr, - ), - // Running - (false, _, true) => anim::bird_medium::RunAnimation::update_skeleton( - &BirdMediumSkeleton::default(), - (rel_vel.magnitude(), time), + ( + rel_vel, + // TODO: Update to use the quaternion. + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + rel_avg_vel, + state.acc_vel, + ), state.state_time, &mut state_animation_rate, skeleton_attr, @@ -3137,11 +3079,25 @@ impl FigureMgr { // In air (false, _, false) => anim::bird_medium::FlyAnimation::update_skeleton( &BirdMediumSkeleton::default(), - (rel_vel.magnitude(), time), + ( + rel_vel, + // TODO: Update to use the quaternion. + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + ), state.state_time, &mut state_animation_rate, skeleton_attr, ), + // Swim + (_, true, _) => anim::bird_medium::SwimAnimation::update_skeleton( + &BirdMediumSkeleton::default(), + time, + state.state_time, + &mut state_animation_rate, + skeleton_attr, + ), + // TODO! _ => anim::bird_medium::IdleAnimation::update_skeleton( &BirdMediumSkeleton::default(), time, @@ -3160,6 +3116,212 @@ impl FigureMgr { skeleton_attr, ) }, + CharacterState::BasicBeam(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Action => s.timer.as_secs_f32(), + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + anim::bird_medium::BreatheAnimation::update_skeleton( + &target_base, + ( + rel_vel, + time, + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + Some(s.stage_section), + state.state_time, + look_dir, + physics.on_ground.is_some(), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::ComboMelee(s) => { + let stage_index = (s.stage - 1) as usize; + let stage_time = s.timer.as_secs_f32(); + let stage_progress = + if let Some(stage) = s.static_data.stage_data.get(stage_index) { + match s.stage_section { + StageSection::Buildup => { + stage_time / stage.base_buildup_duration.as_secs_f32() + }, + StageSection::Action => { + stage_time / stage.base_swing_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / stage.base_recover_duration.as_secs_f32() + }, + _ => 0.0, + } + } else { + 0.0 + }; + + anim::bird_medium::AlphaAnimation::update_skeleton( + &target_base, + ( + Some(s.stage_section), + time, + state.state_time, + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + physics.on_ground.is_some(), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::BasicRanged(s) => { + let stage_time = s.timer.as_secs_f32(); + + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + + _ => 0.0, + }; + anim::bird_medium::ShootAnimation::update_skeleton( + &target_base, + ( + rel_vel, + time, + Some(s.stage_section), + state.state_time, + look_dir, + physics.on_ground.is_some(), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Shockwave(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Action => { + stage_time / s.static_data.swing_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + anim::bird_medium::ShockwaveAnimation::update_skeleton( + &target_base, + (Some(s.stage_section), physics.on_ground.is_some()), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::BasicSummon(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + + StageSection::Action => { + stage_time / s.static_data.cast_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + + anim::bird_medium::SummonAnimation::update_skeleton( + &target_base, + ( + time, + Some(s.stage_section), + state.state_time, + look_dir, + physics.on_ground.is_some(), + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::DashMelee(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Charge => { + stage_time / s.static_data.charge_duration.as_secs_f32() + }, + StageSection::Action => { + stage_time / s.static_data.swing_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + anim::bird_medium::DashAnimation::update_skeleton( + &target_base, + ( + rel_vel, + // TODO: Update to use the quaternion. + ori * anim::vek::Vec3::::unit_y(), + state.last_ori * anim::vek::Vec3::::unit_y(), + state.acc_vel, + Some(s.stage_section), + time, + state.state_time, + ), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + CharacterState::Stunned(s) => { + let stage_time = s.timer.as_secs_f32(); + let stage_progress = match s.stage_section { + StageSection::Buildup => { + stage_time / s.static_data.buildup_duration.as_secs_f32() + }, + StageSection::Recover => { + stage_time / s.static_data.recover_duration.as_secs_f32() + }, + _ => 0.0, + }; + match s.static_data.poise_state { + PoiseState::Normal + | PoiseState::Interrupted + | PoiseState::Stunned + | PoiseState::Dazed + | PoiseState::KnockedDown => { + anim::bird_medium::StunnedAnimation::update_skeleton( + &target_base, + (time, Some(s.stage_section), state.state_time), + stage_progress, + &mut state_animation_rate, + skeleton_attr, + ) + }, + } + }, // TODO! _ => target_base, };