Merge branch 'misc_creatures' into 'master'

misc_creatures

See merge request veloren/veloren!3783
This commit is contained in:
Marcel 2023-02-01 10:41:01 +00:00
commit 2153196294
65 changed files with 688 additions and 10 deletions

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("axebeak"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.theropod.horned"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("bristleback"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.quad_medium.generic"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("tursus"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.biped_large.default"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("seal"),
alignment: Alignment(Wild),
loot: LootTable("common.loot_tables.creature.quad_small.fur"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -567,6 +567,10 @@
keyword: "akhlut", keyword: "akhlut",
generic: "Akhlut" generic: "Akhlut"
), ),
bristleback: (
keyword: "bristleback",
generic: "Bristleback"
),
) )
), ),
quadruped_small: ( quadruped_small: (
@ -781,6 +785,10 @@
goat: ( goat: (
keyword: "goat", keyword: "goat",
generic: "Goat" generic: "Goat"
),
seal: (
keyword: "seal",
generic: "Seal"
) )
) )
), ),
@ -922,6 +930,10 @@
keyword: "husk_brute", keyword: "husk_brute",
generic: "Husk Brute" generic: "Husk Brute"
), ),
tursus: (
keyword: "tursus",
generic: "Tursus"
)
) )
), ),
golem: ( golem: (
@ -994,6 +1006,10 @@
keyword: "dodarock", keyword: "dodarock",
generic: "Dodarock" generic: "Dodarock"
), ),
axebeak: (
keyword: "axebeak",
generic: "Axebeak"
)
) )
), ),
dragon: ( dragon: (

View File

@ -1092,4 +1092,56 @@
central: ("armor.empty"), central: ("armor.empty"),
) )
), ),
(Tursus, Male): (
head: (
offset: (-6.5, 0.0, -6.5),
central: ("npc.tursus.male.head"),
),
torso_upper: (
offset: (-8.0, -12.5, -10.5),
central: ("npc.tursus.male.torso_upper"),
),
torso_lower: (
offset: (-7.5, -7.0, -10.0),
central: ("npc.tursus.male.torso_lower"),
),
jaw: (
offset: (-4.5, 0.0, -4.0),
central: ("npc.tursus.male.jaw"),
),
tail: (
offset: (-4.0, -27.0, -6.0),
central: ("armor.empty"),
),
second: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
)
),
(Tursus, Female): (
head: (
offset: (-6.5, 0.0, -6.5),
central: ("npc.tursus.male.head"),
),
torso_upper: (
offset: (-8.0, -12.5, -10.5),
central: ("npc.tursus.male.torso_upper"),
),
torso_lower: (
offset: (-7.5, -7.0, -10.0),
central: ("npc.tursus.male.torso_lower"),
),
jaw: (
offset: (-4.5, 0.0, -4.0),
central: ("npc.tursus.male.jaw"),
),
tail: (
offset: (-4.0, -27.0, -6.0),
central: ("armor.empty"),
),
second: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
)
),
}) })

View File

@ -1427,4 +1427,72 @@
lateral: ("npc.husk_brute.male.foot_r"), lateral: ("npc.husk_brute.male.foot_r"),
) )
), ),
(Tursus, Male): (
shoulder_l: (
offset: (-4.5, -4.0, -8.0),
lateral: ("npc.tursus.male.shoulder_l"),
),
shoulder_r: (
offset: (-4.5, -4.0, -8.0),
lateral: ("npc.tursus.male.shoulder_r"),
),
hand_l: (
offset: (-5.5, -3.5, -15.0),
lateral: ("npc.tursus.male.hand_l"),
),
hand_r: (
offset: (-5.5, -3.5, -15.0),
lateral: ("npc.tursus.male.hand_r"),
),
leg_l: (
offset: (-3.5, -4.0, -4.0),
lateral: ("npc.tursus.male.leg_l"),
),
leg_r: (
offset: (-3.5, -4.0, -4.0),
lateral: ("npc.tursus.male.leg_r"),
),
foot_l: (
offset: (-3.0, -5.0, -2.0),
lateral: ("npc.tursus.male.foot_l"),
),
foot_r: (
offset: (-3.0, -5.0, -2.0),
lateral: ("npc.tursus.male.foot_r"),
),
),
(Tursus, Female): (
shoulder_l: (
offset: (-4.5, -4.0, -8.0),
lateral: ("npc.tursus.male.shoulder_l"),
),
shoulder_r: (
offset: (-4.5, -4.0, -8.0),
lateral: ("npc.tursus.male.shoulder_r"),
),
hand_l: (
offset: (-5.5, -3.5, -15.0),
lateral: ("npc.tursus.male.hand_l"),
),
hand_r: (
offset: (-5.5, -3.5, -15.0),
lateral: ("npc.tursus.male.hand_r"),
),
leg_l: (
offset: (-3.5, -4.0, -4.0),
lateral: ("npc.tursus.male.leg_l"),
),
leg_r: (
offset: (-3.5, -4.0, -4.0),
lateral: ("npc.tursus.male.leg_r"),
),
foot_l: (
offset: (-3.0, -5.0, -2.0),
lateral: ("npc.tursus.male.foot_l"),
),
foot_r: (
offset: (-3.0, -5.0, -2.0),
lateral: ("npc.tursus.male.foot_r"),
),
),
}) })

BIN
assets/voxygen/voxel/npc/axebeak/male/chest_back.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/chest_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/foot_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/hand_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/jaw.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/leg_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/neck.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axebeak/male/tail_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/jaw.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/leg_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/leg_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/neck.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/tail.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/torso_back.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/bristleback/male/torso_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/seal/male/chest.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/seal/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/seal/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/seal/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/foot_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/foot_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/hand_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/hand_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/jaw.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/leg_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/leg_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/shoulder_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/shoulder_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/torso_lower.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/tursus/male/torso_upper.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -2099,4 +2099,64 @@
central: ("npc.akhlut.male.tail"), central: ("npc.akhlut.male.tail"),
), ),
), ),
(Bristleback, Male): (
head: (
offset: (-7.5, 0.0, -8.5),
central: ("npc.bristleback.male.head"),
),
neck: (
offset: (-3.5, -2.0, -6.5),
central: ("npc.bristleback.male.neck"),
),
jaw: (
offset: (-3.5, -3.5, -0.5),
central: ("npc.bristleback.male.jaw"),
),
torso_front: (
offset: (-6.5, -5.0, -6.0),
central: ("npc.bristleback.male.torso_front"),
),
torso_back: (
offset: (-3.5, -8.0, -6.0),
central: ("npc.bristleback.male.torso_back"),
),
ears: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
tail: (
offset: (-1.5, -6.0, -4.5),
central: ("npc.bristleback.male.tail"),
),
),
(Bristleback, Female): (
head: (
offset: (-7.5, 0.0, -8.5),
central: ("npc.bristleback.male.head"),
),
neck: (
offset: (-3.5, -2.0, -6.5),
central: ("npc.bristleback.male.neck"),
),
jaw: (
offset: (-3.5, -3.5, -0.5),
central: ("npc.bristleback.male.jaw"),
),
torso_front: (
offset: (-6.5, -5.0, -6.0),
central: ("npc.bristleback.male.torso_front"),
),
torso_back: (
offset: (-3.5, -8.0, -6.0),
central: ("npc.bristleback.male.torso_back"),
),
ears: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
tail: (
offset: (-1.5, -6.0, -4.5),
central: ("npc.bristleback.male.tail"),
),
),
}) })

View File

@ -2379,4 +2379,72 @@
lateral: ("npc.akhlut.male.foot_br"), lateral: ("npc.akhlut.male.foot_br"),
), ),
), ),
(Bristleback, Male): (
leg_fl: (
offset: (-1.5, -2.0, -2.0),
lateral: ("npc.bristleback.male.leg_fr"),
),
leg_fr: (
offset: (-1.5, -2.0, -2.0),
lateral: ("npc.bristleback.male.leg_fr"),
),
leg_bl: (
offset: (-1.5, -2.0, -4.0),
lateral: ("npc.bristleback.male.leg_br"),
),
leg_br: (
offset: (-1.5, -2.0, -4.0),
lateral: ("npc.bristleback.male.leg_br"),
),
foot_fl: (
offset: (-1.5, -1.5, -5.0),
lateral: ("npc.bristleback.male.foot_fr"),
),
foot_fr: (
offset: (-1.5, -1.5, -5.0),
lateral: ("npc.bristleback.male.foot_fr"),
),
foot_bl: (
offset: (-1.0, -2.0, -5.0),
lateral: ("npc.bristleback.male.foot_br"),
),
foot_br: (
offset: (-1.0, -2.0, -5.0),
lateral: ("npc.bristleback.male.foot_br"),
),
),
(Bristleback, Female): (
leg_fl: (
offset: (-1.5, -2.0, -2.0),
lateral: ("npc.bristleback.male.leg_fr"),
),
leg_fr: (
offset: (-1.5, -2.0, -2.0),
lateral: ("npc.bristleback.male.leg_fr"),
),
leg_bl: (
offset: (-1.5, -2.0, -4.0),
lateral: ("npc.bristleback.male.leg_br"),
),
leg_br: (
offset: (-1.5, -2.0, -4.0),
lateral: ("npc.bristleback.male.leg_br"),
),
foot_fl: (
offset: (-1.5, -1.5, -5.0),
lateral: ("npc.bristleback.male.foot_fr"),
),
foot_fr: (
offset: (-1.5, -1.5, -5.0),
lateral: ("npc.bristleback.male.foot_fr"),
),
foot_bl: (
offset: (-1.0, -2.0, -5.0),
lateral: ("npc.bristleback.male.foot_br"),
),
foot_br: (
offset: (-1.0, -2.0, -5.0),
lateral: ("npc.bristleback.male.foot_br"),
),
),
}) })

View File

@ -727,4 +727,32 @@
central: ("npc.goat.male.tail"), central: ("npc.goat.male.tail"),
), ),
), ),
(Seal, Male):(
head: (
offset: (-3.0, 0.0, -3.5),
central: ("npc.seal.male.head"),
),
chest: (
offset: (-4.0, -8.0, -4.0),
central: ("npc.seal.male.chest"),
),
tail: (
offset: (-1.5, -7.5, -2.5),
central: ("armor.empty"),
),
),
(Seal, Female):(
head: (
offset: (-3.0, 0.0, -3.5),
central: ("npc.seal.male.head"),
),
chest: (
offset: (-4.0, -8.0, -4.0),
central: ("npc.seal.male.chest"),
),
tail: (
offset: (-1.5, -7.5, -2.5),
central: ("armor.empty"),
),
),
}) })

View File

@ -937,4 +937,40 @@
lateral: ("npc.goat.male.foot_br"), lateral: ("npc.goat.male.foot_br"),
), ),
), ),
(Seal, Male): (
left_front: (
offset: (-3.5, -2.0, -2.0),
lateral: ("npc.seal.male.foot_fr"),
),
right_front: (
offset: (-3.5, -2.0, -2.0),
lateral: ("npc.seal.male.foot_fr"),
),
left_back: (
offset: (-3.5, -2.0, -3.5),
lateral: ("npc.seal.male.foot_br"),
),
right_back: (
offset: (-3.5, -2.0, -3.5),
lateral: ("npc.seal.male.foot_br"),
),
),
(Seal, Female): (
left_front: (
offset: (-3.5, -2.0, -2.0),
lateral: ("npc.seal.male.foot_fr"),
),
right_front: (
offset: (-3.5, -2.0, -2.0),
lateral: ("npc.seal.male.foot_fr"),
),
left_back: (
offset: (-3.5, -2.0, -3.5),
lateral: ("npc.seal.male.foot_br"),
),
right_back: (
offset: (-3.5, -2.0, -3.5),
lateral: ("npc.seal.male.foot_br"),
),
),
}) })

View File

@ -539,4 +539,64 @@
central: ("npc.ntouka.male.tail_back"), central: ("npc.ntouka.male.tail_back"),
), ),
), ),
(Axebeak, Male): (
head: (
offset: (-2.5, -3.5, -3.0),
central: ("npc.axebeak.male.head"),
),
jaw: (
offset: (-1.5, 0.0, -1.5),
central: ("npc.axebeak.male.jaw"),
),
neck: (
offset: (-2.5, -0.5, -4.0),
central: ("npc.axebeak.male.neck"),
),
chest_front: (
offset: (-3.5, -4.0, -6.5),
central: ("npc.axebeak.male.chest_front"),
),
chest_back: (
offset: (-3.5, -6.0, -6.5),
central: ("npc.axebeak.male.chest_back"),
),
tail_front: (
offset: (-11.5, -19.0, -10.0),
central: ("npc.axebeak.male.tail_front"),
),
tail_back: (
offset: (-1.5, -30.0, -2.0),
central: ("armor.empty"),
),
),
(Axebeak, Female): (
head: (
offset: (-2.5, -3.5, -3.0),
central: ("npc.axebeak.male.head"),
),
jaw: (
offset: (-1.5, 0.0, -1.5),
central: ("npc.axebeak.male.jaw"),
),
neck: (
offset: (-2.5, -0.5, -4.0),
central: ("npc.axebeak.male.neck"),
),
chest_front: (
offset: (-3.5, -4.0, -6.5),
central: ("npc.axebeak.male.chest_front"),
),
chest_back: (
offset: (-3.5, -6.0, -6.5),
central: ("npc.axebeak.male.chest_back"),
),
tail_front: (
offset: (-11.5, -19.0, -10.0),
central: ("npc.axebeak.male.tail_front"),
),
tail_back: (
offset: (-1.5, -30.0, -2.0),
central: ("armor.empty"),
),
),
}) })

View File

@ -467,4 +467,56 @@
lateral: ("npc.ntouka.male.foot_r"), lateral: ("npc.ntouka.male.foot_r"),
), ),
), ),
(Axebeak, Male): (
hand_l: (
offset: (-10.0, -4.0, -12.0),
lateral: ("npc.axebeak.male.hand_r"),
),
hand_r: (
offset: (0.0, -4.0, -12.0),
lateral: ("npc.axebeak.male.hand_r"),
),
leg_l: (
offset: (-5.0, -4.5, -6.5),
lateral: ("npc.axebeak.male.leg_r"),
),
leg_r: (
offset: (0.0, -4.5, -6.5),
lateral: ("npc.axebeak.male.leg_r"),
),
foot_l: (
offset: (-3.5, -7.0, -5.0),
lateral: ("npc.axebeak.male.foot_r"),
),
foot_r: (
offset: (-3.5, -7.0, -5.0),
lateral: ("npc.axebeak.male.foot_r"),
),
),
(Axebeak, Female): (
hand_l: (
offset: (-10.0, -4.0, -12.0),
lateral: ("npc.axebeak.male.hand_r"),
),
hand_r: (
offset: (0.0, -4.0, -12.0),
lateral: ("npc.axebeak.male.hand_r"),
),
leg_l: (
offset: (-5.0, -4.5, -6.5),
lateral: ("npc.axebeak.male.leg_r"),
),
leg_r: (
offset: (0.0, -4.5, -6.5),
lateral: ("npc.axebeak.male.leg_r"),
),
foot_l: (
offset: (-3.5, -7.0, -5.0),
lateral: ("npc.axebeak.male.foot_r"),
),
foot_r: (
offset: (-3.5, -7.0, -5.0),
lateral: ("npc.axebeak.male.foot_r"),
),
),
}) })

View File

@ -12,6 +12,7 @@ SpawnEntry (
Pack( Pack(
groups: [ groups: [
(2, (4, 12, "common.entity.wild.peaceful.penguin")), (2, (4, 12, "common.entity.wild.peaceful.penguin")),
(2, (4, 8, "common.entity.wild.peaceful.seal")),
], ],
spawn_mode: Ice, spawn_mode: Ice,
day_period: [Night, Morning, Noon, Evening], day_period: [Night, Morning, Noon, Evening],

View File

@ -9,6 +9,7 @@ SpawnEntry (
(2, (1, 1, "common.entity.wild.peaceful.sand_hare")), (2, (1, 1, "common.entity.wild.peaceful.sand_hare")),
(2, (1, 1, "common.entity.wild.peaceful.salamander")), (2, (1, 1, "common.entity.wild.peaceful.salamander")),
(2, (1, 1, "common.entity.wild.peaceful.gecko")), (2, (1, 1, "common.entity.wild.peaceful.gecko")),
(2, (1, 1, "common.entity.wild.aggressive.axebeak")),
// Rare // Rare
(1, (1, 1, "common.entity.wild.peaceful.crawler_sand")), (1, (1, 1, "common.entity.wild.peaceful.crawler_sand")),
], ],

View File

@ -14,6 +14,7 @@ SpawnEntry (
(1, (1, 1, "common.entity.wild.aggressive.stag_beetle")), (1, (1, 1, "common.entity.wild.aggressive.stag_beetle")),
(1, (1, 1, "common.entity.wild.peaceful.crawler_moss")), (1, (1, 1, "common.entity.wild.peaceful.crawler_moss")),
(1, (1, 1, "common.entity.wild.aggressive.rootsnapper")), (1, (1, 1, "common.entity.wild.aggressive.rootsnapper")),
(1, (1, 1, "common.entity.wild.aggressive.axebeak")),
], ],
spawn_mode: Land, spawn_mode: Land,
day_period: [Morning, Noon, Evening], day_period: [Morning, Noon, Evening],

View File

@ -42,6 +42,7 @@ SpawnEntry (
(1, (1, 1, "common.entity.wild.aggressive.batfox")), (1, (1, 1, "common.entity.wild.aggressive.batfox")),
(5, (1, 1, "common.entity.wild.peaceful.forest_fox")), (5, (1, 1, "common.entity.wild.peaceful.forest_fox")),
(5, (1, 1, "common.entity.wild.peaceful.raccoon")), (5, (1, 1, "common.entity.wild.peaceful.raccoon")),
(3, (1, 1, "common.entity.wild.aggressive.bristleback")),
// Pack // Pack
(5, (1, 3, "common.entity.wild.peaceful.rat")), (5, (1, 3, "common.entity.wild.peaceful.rat")),
(5, (1, 3, "common.entity.wild.peaceful.squirrel")), (5, (1, 3, "common.entity.wild.peaceful.squirrel")),

View File

@ -10,6 +10,7 @@ SpawnEntry (
(1, (1, 3, "common.entity.wild.aggressive.snow_raptor")), (1, (1, 3, "common.entity.wild.aggressive.snow_raptor")),
(1, (1, 1, "common.entity.wild.aggressive.roshwalr")), (1, (1, 1, "common.entity.wild.aggressive.roshwalr")),
(5, (5, 20, "common.entity.wild.peaceful.penguin")), (5, (5, 20, "common.entity.wild.peaceful.penguin")),
(5, (5, 10, "common.entity.wild.peaceful.seal")),
], ],
spawn_mode: Land, spawn_mode: Land,
day_period: [Night, Morning, Noon, Evening], day_period: [Night, Morning, Noon, Evening],

View File

@ -370,6 +370,7 @@ impl Body {
quadruped_small::Species::Squirrel => 1.0, quadruped_small::Species::Squirrel => 1.0,
quadruped_small::Species::Truffler => 70.0, quadruped_small::Species::Truffler => 70.0,
quadruped_small::Species::Turtle => 40.0, quadruped_small::Species::Turtle => 40.0,
quadruped_small::Species::Seal => 15.0,
}, },
Body::Theropod(body) => match body.species { Body::Theropod(body) => match body.species {
// for reference, elephants are in the range of 2.6-6.9 tons // for reference, elephants are in the range of 2.6-6.9 tons
@ -383,6 +384,7 @@ impl Body {
theropod::Species::Sunlizard => 500.0, theropod::Species::Sunlizard => 500.0,
theropod::Species::Woodraptor => 500.0, theropod::Species::Woodraptor => 500.0,
theropod::Species::Yale => 1_000.0, theropod::Species::Yale => 1_000.0,
theropod::Species::Axebeak => 300.0,
}, },
Body::Ship(ship) => ship.mass().0, Body::Ship(ship) => ship.mass().0,
Body::Arthropod(_) => 200.0, Body::Arthropod(_) => 200.0,
@ -408,6 +410,7 @@ impl Body {
biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5), biped_large::Species::Cultistwarlord => Vec3::new(3.0, 3.0, 4.5),
biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 3.5), biped_large::Species::Cultistwarlock => Vec3::new(3.0, 3.0, 3.5),
biped_large::Species::Huskbrute => Vec3::new(4.6, 3.0, 5.0), biped_large::Species::Huskbrute => Vec3::new(4.6, 3.0, 5.0),
biped_large::Species::Tursus => Vec3::new(4.0, 3.0, 4.0),
_ => Vec3::new(4.6, 3.0, 6.0), _ => Vec3::new(4.6, 3.0, 6.0),
}, },
Body::BipedSmall(body) => match body.species { Body::BipedSmall(body) => match body.species {
@ -462,6 +465,7 @@ impl Body {
quadruped_medium::Species::Horse => Vec3::new(2.0, 3.0, 2.4), quadruped_medium::Species::Horse => Vec3::new(2.0, 3.0, 2.4),
quadruped_medium::Species::Lion => Vec3::new(2.0, 3.3, 2.0), quadruped_medium::Species::Lion => Vec3::new(2.0, 3.3, 2.0),
quadruped_medium::Species::Moose => Vec3::new(2.0, 4.0, 2.5), quadruped_medium::Species::Moose => Vec3::new(2.0, 4.0, 2.5),
quadruped_medium::Species::Bristleback => Vec3::new(2.0, 3.0, 2.0),
quadruped_medium::Species::Roshwalr => Vec3::new(2.0, 3.5, 2.2), quadruped_medium::Species::Roshwalr => Vec3::new(2.0, 3.5, 2.2),
quadruped_medium::Species::Saber => Vec3::new(2.0, 3.0, 2.0), quadruped_medium::Species::Saber => Vec3::new(2.0, 3.0, 2.0),
quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6), quadruped_medium::Species::Tarasque => Vec3::new(2.0, 4.0, 2.6),
@ -516,6 +520,7 @@ impl Body {
theropod::Species::Sunlizard => Vec3::new(2.0, 3.6, 2.5), theropod::Species::Sunlizard => Vec3::new(2.0, 3.6, 2.5),
theropod::Species::Woodraptor => Vec3::new(2.0, 3.0, 2.6), theropod::Species::Woodraptor => Vec3::new(2.0, 3.0, 2.6),
theropod::Species::Yale => Vec3::new(2.0, 3.2, 4.0), theropod::Species::Yale => Vec3::new(2.0, 3.2, 4.0),
theropod::Species::Axebeak => Vec3::new(2.0, 3.6, 3.0),
}, },
Body::Arthropod(body) => match body.species { Body::Arthropod(body) => match body.species {
arthropod::Species::Tarantula => Vec3::new(4.0, 4.0, 1.8), arthropod::Species::Tarantula => Vec3::new(4.0, 4.0, 1.8),
@ -683,6 +688,7 @@ impl Body {
quadruped_small::Species::Beaver => 15, quadruped_small::Species::Beaver => 15,
quadruped_small::Species::Dog => 30, quadruped_small::Species::Dog => 30,
quadruped_small::Species::Sheep => 30, quadruped_small::Species::Sheep => 30,
quadruped_small::Species::Seal => 15,
_ => 20, _ => 20,
}, },
Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species { Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species {
@ -711,6 +717,7 @@ impl Body {
quadruped_medium::Species::Panda => 90, quadruped_medium::Species::Panda => 90,
quadruped_medium::Species::Bear => 90, quadruped_medium::Species::Bear => 90,
quadruped_medium::Species::Moose => 80, quadruped_medium::Species::Moose => 80,
quadruped_medium::Species::Bristleback => 90,
quadruped_medium::Species::Dreadhorn => 370, quadruped_medium::Species::Dreadhorn => 370,
quadruped_medium::Species::Mammoth => 250, quadruped_medium::Species::Mammoth => 250,
quadruped_medium::Species::Ngoubou => 290, quadruped_medium::Species::Ngoubou => 290,
@ -977,6 +984,7 @@ impl Body {
(quadruped_medium::Species::Bear, _) => [0.0, -0.4, 2.5], (quadruped_medium::Species::Bear, _) => [0.0, -0.4, 2.5],
(quadruped_medium::Species::Dreadhorn, _) => [0.0, 0.2, 3.5], (quadruped_medium::Species::Dreadhorn, _) => [0.0, 0.2, 3.5],
(quadruped_medium::Species::Moose, _) => [0.0, -0.6, 2.1], (quadruped_medium::Species::Moose, _) => [0.0, -0.6, 2.1],
(quadruped_medium::Species::Bristleback, _) => [0.0, -0.6, 2.1],
(quadruped_medium::Species::Snowleopard, _) => [-0.5, -0.5, 1.4], (quadruped_medium::Species::Snowleopard, _) => [-0.5, -0.5, 1.4],
(quadruped_medium::Species::Mammoth, _) => [0.0, 4.9, 7.2], (quadruped_medium::Species::Mammoth, _) => [0.0, 4.9, 7.2],
(quadruped_medium::Species::Ngoubou, _) => [0.0, 0.3, 2.0], (quadruped_medium::Species::Ngoubou, _) => [0.0, 0.3, 2.0],

View File

@ -55,6 +55,7 @@ make_case_elim!(
Cultistwarlord = 18, Cultistwarlord = 18,
Cultistwarlock = 19, Cultistwarlock = 19,
Huskbrute = 20, Huskbrute = 20,
Tursus = 21,
} }
); );
@ -84,6 +85,7 @@ pub struct AllSpecies<SpeciesMeta> {
pub cultist_warlord: SpeciesMeta, pub cultist_warlord: SpeciesMeta,
pub cultist_warlock: SpeciesMeta, pub cultist_warlock: SpeciesMeta,
pub husk_brute: SpeciesMeta, pub husk_brute: SpeciesMeta,
pub tursus: SpeciesMeta,
} }
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -113,11 +115,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Cultistwarlord => &self.cultist_warlord, Species::Cultistwarlord => &self.cultist_warlord,
Species::Cultistwarlock => &self.cultist_warlock, Species::Cultistwarlock => &self.cultist_warlock,
Species::Huskbrute => &self.husk_brute, Species::Huskbrute => &self.husk_brute,
Species::Tursus => &self.tursus,
} }
} }
} }
pub const ALL_SPECIES: [Species; 21] = [ pub const ALL_SPECIES: [Species; 22] = [
Species::Ogre, Species::Ogre,
Species::Cyclops, Species::Cyclops,
Species::Wendigo, Species::Wendigo,
@ -139,6 +142,7 @@ pub const ALL_SPECIES: [Species; 21] = [
Species::Cultistwarlord, Species::Cultistwarlord,
Species::Cultistwarlock, Species::Cultistwarlock,
Species::Huskbrute, Species::Huskbrute,
Species::Tursus,
]; ];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {

View File

@ -70,6 +70,7 @@ pub enum Species {
Llama = 34, Llama = 34,
Alpaca = 35, Alpaca = 35,
Akhlut = 36, Akhlut = 36,
Bristleback = 37,
} }
/// Data representing per-species generic data. /// Data representing per-species generic data.
@ -112,6 +113,7 @@ pub struct AllSpecies<SpeciesMeta> {
pub llama: SpeciesMeta, pub llama: SpeciesMeta,
pub alpaca: SpeciesMeta, pub alpaca: SpeciesMeta,
pub akhlut: SpeciesMeta, pub akhlut: SpeciesMeta,
pub bristleback: SpeciesMeta,
} }
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -155,11 +157,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Llama => &self.llama, Species::Llama => &self.llama,
Species::Alpaca => &self.alpaca, Species::Alpaca => &self.alpaca,
Species::Akhlut => &self.akhlut, Species::Akhlut => &self.akhlut,
Species::Bristleback => &self.bristleback,
} }
} }
} }
pub const ALL_SPECIES: [Species; 35] = [ pub const ALL_SPECIES: [Species; 36] = [
Species::Grolgar, Species::Grolgar,
Species::Saber, Species::Saber,
Species::Tiger, Species::Tiger,
@ -195,6 +198,7 @@ pub const ALL_SPECIES: [Species; 35] = [
Species::Llama, Species::Llama,
Species::Alpaca, Species::Alpaca,
Species::Akhlut, Species::Akhlut,
Species::Bristleback,
]; ];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {

View File

@ -61,6 +61,7 @@ pub enum Species {
Beaver = 23, Beaver = 23,
Hare = 24, Hare = 24,
Dog = 25, Dog = 25,
Seal = 26,
} }
/// Data representing per-species generic data. /// Data representing per-species generic data.
@ -94,6 +95,7 @@ pub struct AllSpecies<SpeciesMeta> {
pub hare: SpeciesMeta, pub hare: SpeciesMeta,
pub dog: SpeciesMeta, pub dog: SpeciesMeta,
pub goat: SpeciesMeta, pub goat: SpeciesMeta,
pub seal: SpeciesMeta,
} }
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -128,11 +130,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Hare => &self.hare, Species::Hare => &self.hare,
Species::Dog => &self.dog, Species::Dog => &self.dog,
Species::Goat => &self.goat, Species::Goat => &self.goat,
Species::Seal => &self.seal,
} }
} }
} }
pub const ALL_SPECIES: [Species; 26] = [ pub const ALL_SPECIES: [Species; 27] = [
Species::Pig, Species::Pig,
Species::Fox, Species::Fox,
Species::Sheep, Species::Sheep,
@ -159,6 +162,7 @@ pub const ALL_SPECIES: [Species; 26] = [
Species::Hare, Species::Hare,
Species::Dog, Species::Dog,
Species::Goat, Species::Goat,
Species::Seal,
]; ];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {

View File

@ -37,6 +37,7 @@ pub enum Species {
Yale = 6, Yale = 6,
Ntouka = 7, Ntouka = 7,
Dodarock = 8, Dodarock = 8,
Axebeak = 9,
} }
/// Data representing per-species generic data. /// Data representing per-species generic data.
@ -51,6 +52,7 @@ pub struct AllSpecies<SpeciesMeta> {
pub yale: SpeciesMeta, pub yale: SpeciesMeta,
pub dodarock: SpeciesMeta, pub dodarock: SpeciesMeta,
pub ntouka: SpeciesMeta, pub ntouka: SpeciesMeta,
pub axebeak: SpeciesMeta,
} }
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -68,11 +70,12 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Yale => &self.yale, Species::Yale => &self.yale,
Species::Dodarock => &self.dodarock, Species::Dodarock => &self.dodarock,
Species::Ntouka => &self.ntouka, Species::Ntouka => &self.ntouka,
Species::Axebeak => &self.axebeak,
} }
} }
} }
pub const ALL_SPECIES: [Species; 9] = [ pub const ALL_SPECIES: [Species; 10] = [
Species::Archaeos, Species::Archaeos,
Species::Odonto, Species::Odonto,
Species::Sandraptor, Species::Sandraptor,
@ -82,6 +85,7 @@ pub const ALL_SPECIES: [Species; 9] = [
Species::Yale, Species::Yale,
Species::Dodarock, Species::Dodarock,
Species::Ntouka, Species::Ntouka,
Species::Axebeak,
]; ];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> { impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {

View File

@ -613,7 +613,8 @@ fn default_main_tool(body: &Body) -> Item {
Body::Theropod(theropod) => match theropod.species { Body::Theropod(theropod) => match theropod.species {
theropod::Species::Sandraptor theropod::Species::Sandraptor
| theropod::Species::Snowraptor | theropod::Species::Snowraptor
| theropod::Species::Woodraptor => Some(Item::new_from_asset_expect( | theropod::Species::Woodraptor
| theropod::Species::Axebeak => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.theropodbird", "common.items.npc_weapons.unique.theropodbird",
)), )),
theropod::Species::Yale => Some(Item::new_from_asset_expect( theropod::Species::Yale => Some(Item::new_from_asset_expect(
@ -686,6 +687,9 @@ fn default_main_tool(body: &Body) -> Item {
(biped_large::Species::Werewolf, _) => Some(Item::new_from_asset_expect( (biped_large::Species::Werewolf, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.beast_claws", "common.items.npc_weapons.unique.beast_claws",
)), )),
(biped_large::Species::Tursus, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.beast_claws",
)),
(biped_large::Species::Cyclops, _) => Some(Item::new_from_asset_expect( (biped_large::Species::Cyclops, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.hammer.cyclops_hammer", "common.items.npc_weapons.hammer.cyclops_hammer",
)), )),

View File

@ -89,6 +89,7 @@ impl Body {
quadruped_medium::Species::Llama => 120.0, quadruped_medium::Species::Llama => 120.0,
quadruped_medium::Species::Alpaca => 110.0, quadruped_medium::Species::Alpaca => 110.0,
quadruped_medium::Species::Akhlut => 90.0, quadruped_medium::Species::Akhlut => 90.0,
quadruped_medium::Species::Bristleback => 135.0,
}, },
Body::BipedLarge(body) => match body.species { Body::BipedLarge(body) => match body.species {
biped_large::Species::Slysaurok => 100.0, biped_large::Species::Slysaurok => 100.0,

View File

@ -248,6 +248,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (0.5, 14.5), (Cultistwarlord, _) => (0.5, 14.5),
(Cultistwarlock, _) => (0.5, 11.0), (Cultistwarlock, _) => (0.5, 11.0),
(Huskbrute, _) => (8.5, 4.0), (Huskbrute, _) => (8.5, 4.0),
(Tursus, _) => (-4.5, -14.0),
}, },
jaw: match (body.species, body.body_type) { jaw: match (body.species, body.body_type) {
(Ogre, _) => (0.0, 0.0), (Ogre, _) => (0.0, 0.0),
@ -271,6 +272,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (0.0, 3.5), (Cultistwarlord, _) => (0.0, 3.5),
(Cultistwarlock, _) => (0.0, 3.5), (Cultistwarlock, _) => (0.0, 3.5),
(Huskbrute, _) => (-5.0, -5.0), (Huskbrute, _) => (-5.0, -5.0),
(Tursus, _) => (4.0, 10.5),
}, },
upper_torso: match (body.species, body.body_type) { upper_torso: match (body.species, body.body_type) {
(Ogre, Male) => (0.0, 27.5), (Ogre, Male) => (0.0, 27.5),
@ -295,6 +297,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (-1.0, 18.5), (Cultistwarlord, _) => (-1.0, 18.5),
(Cultistwarlock, _) => (-1.0, 17.5), (Cultistwarlock, _) => (-1.0, 17.5),
(Huskbrute, _) => (-1.0, 23.5), (Huskbrute, _) => (-1.0, 23.5),
(Tursus, _) => (3.0, 26.0),
}, },
lower_torso: match (body.species, body.body_type) { lower_torso: match (body.species, body.body_type) {
(Ogre, Male) => (1.0, -7.0), (Ogre, Male) => (1.0, -7.0),
@ -319,6 +322,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (0.0, -1.5), (Cultistwarlord, _) => (0.0, -1.5),
(Cultistwarlock, _) => (1.0, -2.5), (Cultistwarlock, _) => (1.0, -2.5),
(Huskbrute, _) => (-0.5, -7.0), (Huskbrute, _) => (-0.5, -7.0),
(Tursus, _) => (-5.0, -9.0),
}, },
tail: match (body.species, body.body_type) { tail: match (body.species, body.body_type) {
(Werewolf, _) => (-5.5, -2.0), (Werewolf, _) => (-5.5, -2.0),
@ -351,6 +355,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (11.5, -1.0, 4.5), (Cultistwarlord, _) => (11.5, -1.0, 4.5),
(Cultistwarlock, _) => (8.0, 0.0, 3.5), (Cultistwarlock, _) => (8.0, 0.0, 3.5),
(Huskbrute, _) => (10.5, 0.0, -1.5), (Huskbrute, _) => (10.5, 0.0, -1.5),
(Tursus, _) => (12.5, -2.5, 1.0),
}, },
hand: match (body.species, body.body_type) { hand: match (body.species, body.body_type) {
(Ogre, Male) => (14.5, 0.0, -4.0), (Ogre, Male) => (14.5, 0.0, -4.0),
@ -375,6 +380,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (11.5, -1.0, -1.0), (Cultistwarlord, _) => (11.5, -1.0, -1.0),
(Cultistwarlock, _) => (9.5, -1.0, 1.0), (Cultistwarlock, _) => (9.5, -1.0, 1.0),
(Huskbrute, _) => (13.0, 0.5, -4.0), (Huskbrute, _) => (13.0, 0.5, -4.0),
(Tursus, _) => (15.5, -2.5, -8.0),
}, },
leg: match (body.species, body.body_type) { leg: match (body.species, body.body_type) {
(Ogre, Male) => (0.0, 0.0, -4.0), (Ogre, Male) => (0.0, 0.0, -4.0),
@ -399,6 +405,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (3.5, -1.0, -8.5), (Cultistwarlord, _) => (3.5, -1.0, -8.5),
(Cultistwarlock, _) => (3.5, -1.0, -8.5), (Cultistwarlock, _) => (3.5, -1.0, -8.5),
(Huskbrute, _) => (4.0, 0.0, -7.5), (Huskbrute, _) => (4.0, 0.0, -7.5),
(Tursus, _) => (4.5, 1.0, -9.0),
}, },
foot: match (body.species, body.body_type) { foot: match (body.species, body.body_type) {
(Ogre, Male) => (4.0, 1.0, -12.0), (Ogre, Male) => (4.0, 1.0, -12.0),
@ -423,6 +430,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (3.5, 0.0, -12.5), (Cultistwarlord, _) => (3.5, 0.0, -12.5),
(Cultistwarlock, _) => (3.5, 0.0, -10.5), (Cultistwarlock, _) => (3.5, 0.0, -10.5),
(Huskbrute, _) => (4.5, 0.5, -12.5), (Huskbrute, _) => (4.5, 0.5, -12.5),
(Tursus, _) => (5.5, 3.0, -14.5),
}, },
scaler: match (body.species, body.body_type) { scaler: match (body.species, body.body_type) {
(Ogre, Male) => 1.12, (Ogre, Male) => 1.12,
@ -447,6 +455,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => 1.0, (Cultistwarlord, _) => 1.0,
(Cultistwarlock, _) => 1.0, (Cultistwarlock, _) => 1.0,
(Huskbrute, _) => 1.2, (Huskbrute, _) => 1.2,
(Tursus, _) => 1.0,
}, },
tempo: match (body.species, body.body_type) { tempo: match (body.species, body.body_type) {
(Ogre, Male) => 0.9, (Ogre, Male) => 0.9,
@ -482,6 +491,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Cultistwarlord, _) => (8.0, 0.0), (Cultistwarlord, _) => (8.0, 0.0),
(Cultistwarlock, _) => (8.0, 0.0), (Cultistwarlock, _) => (8.0, 0.0),
(Huskbrute, _) => (12.5, 0.0), (Huskbrute, _) => (12.5, 0.0),
(Tursus, _) => (13.0, 0.0),
}, },
shl: match (body.species, body.body_type) { shl: match (body.species, body.body_type) {
(Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0), (Dullahan, _) => (-4.75, -11.0, 8.5, 1.47, -0.2, 0.0),

View File

@ -237,6 +237,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (0.5, 10.0), (Llama, _) => (0.5, 10.0),
(Alpaca, _) => (0.5, 7.5), (Alpaca, _) => (0.5, 7.5),
(Akhlut, _) => (1.0, 3.5), (Akhlut, _) => (1.0, 3.5),
(Bristleback, _) => (-3.0, -2.0),
}, },
neck: match (body.species, body.body_type) { neck: match (body.species, body.body_type) {
(Grolgar, _) => (1.0, -1.0), (Grolgar, _) => (1.0, -1.0),
@ -276,6 +277,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (2.5, 4.5), (Llama, _) => (2.5, 4.5),
(Alpaca, _) => (-1.5, 3.0), (Alpaca, _) => (-1.5, 3.0),
(Akhlut, _) => (8.5, -1.0), (Akhlut, _) => (8.5, -1.0),
(Bristleback, _) => (6.0, 2.5),
}, },
jaw: match (body.species, body.body_type) { jaw: match (body.species, body.body_type) {
(Grolgar, _) => (7.0, 2.0), (Grolgar, _) => (7.0, 2.0),
@ -316,6 +318,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (4.0, -1.0), (Llama, _) => (4.0, -1.0),
(Alpaca, _) => (3.0, -2.5), (Alpaca, _) => (3.0, -2.5),
(Akhlut, _) => (0.0, -4.5), (Akhlut, _) => (0.0, -4.5),
(Bristleback, _) => (8.0, -6.0),
}, },
tail: match (body.species, body.body_type) { tail: match (body.species, body.body_type) {
(Grolgar, _) => (-11.5, -0.5), (Grolgar, _) => (-11.5, -0.5),
@ -355,6 +358,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (-9.0, 6.0), (Llama, _) => (-9.0, 6.0),
(Alpaca, _) => (-8.5, 3.5), (Alpaca, _) => (-8.5, 3.5),
(Akhlut, _) => (-14.0, -2.0), (Akhlut, _) => (-14.0, -2.0),
(Bristleback, _) => (-7.0, -5.5),
}, },
torso_front: match (body.species, body.body_type) { torso_front: match (body.species, body.body_type) {
(Grolgar, _) => (10.0, 13.0), (Grolgar, _) => (10.0, 13.0),
@ -394,6 +398,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (7.0, 15.0), (Llama, _) => (7.0, 15.0),
(Alpaca, _) => (7.0, 11.5), (Alpaca, _) => (7.0, 11.5),
(Akhlut, _) => (5.5, 14.5), (Akhlut, _) => (5.5, 14.5),
(Bristleback, _) => (1.5, 9.0),
}, },
torso_back: match (body.species, body.body_type) { torso_back: match (body.species, body.body_type) {
(Grolgar, _) => (-10.0, 1.5), (Grolgar, _) => (-10.0, 1.5),
@ -433,6 +438,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (-8.0, 0.0), (Llama, _) => (-8.0, 0.0),
(Alpaca, _) => (-6.0, 0.0), (Alpaca, _) => (-6.0, 0.0),
(Akhlut, _) => (-7.0, 1.0), (Akhlut, _) => (-7.0, 1.0),
(Bristleback, _) => (-4.0, 2.0),
}, },
ears: match (body.species, body.body_type) { ears: match (body.species, body.body_type) {
(Grolgar, _) => (5.0, 8.0), (Grolgar, _) => (5.0, 8.0),
@ -473,6 +479,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (1.0, 3.5), (Llama, _) => (1.0, 3.5),
(Alpaca, _) => (1.0, 2.0), (Alpaca, _) => (1.0, 2.0),
(Akhlut, _) => (12.0, -3.0), (Akhlut, _) => (12.0, -3.0),
(Bristleback, _) => (6.0, 1.0),
}, },
leg_f: match (body.species, body.body_type) { leg_f: match (body.species, body.body_type) {
(Grolgar, _) => (7.5, -5.5, -1.0), (Grolgar, _) => (7.5, -5.5, -1.0),
@ -512,6 +519,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (5.0, -1.5, -1.0), (Llama, _) => (5.0, -1.5, -1.0),
(Alpaca, _) => (3.5, -2.5, -0.5), (Alpaca, _) => (3.5, -2.5, -0.5),
(Akhlut, _) => (8.0, -2.0, 0.5), (Akhlut, _) => (8.0, -2.0, 0.5),
(Bristleback, _) => (6.0, 1.0, -2.0),
}, },
leg_b: match (body.species, body.body_type) { leg_b: match (body.species, body.body_type) {
(Grolgar, _) => (6.0, -6.5, -4.0), (Grolgar, _) => (6.0, -6.5, -4.0),
@ -551,6 +559,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (5.0, -7.0, -2.0), (Llama, _) => (5.0, -7.0, -2.0),
(Alpaca, _) => (3.5, -7.0, 0.0), (Alpaca, _) => (3.5, -7.0, 0.0),
(Akhlut, _) => (6.0, -7.5, -2.0), (Akhlut, _) => (6.0, -7.5, -2.0),
(Bristleback, _) => (4.5, -3.0, -2.0),
}, },
feet_f: match (body.species, body.body_type) { feet_f: match (body.species, body.body_type) {
(Grolgar, _) => (0.0, 0.0, -4.0), (Grolgar, _) => (0.0, 0.0, -4.0),
@ -590,6 +599,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (-0.5, 0.5, -6.0), (Llama, _) => (-0.5, 0.5, -6.0),
(Alpaca, _) => (0.0, -0.5, -5.0), (Alpaca, _) => (0.0, -0.5, -5.0),
(Akhlut, _) => (0.0, 0.0, -5.0), (Akhlut, _) => (0.0, 0.0, -5.0),
(Bristleback, _) => (0.0, -0.5, -2.0),
}, },
feet_b: match (body.species, body.body_type) { feet_b: match (body.species, body.body_type) {
(Grolgar, _) => (0.5, -1.5, -3.0), (Grolgar, _) => (0.5, -1.5, -3.0),
@ -629,6 +639,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Llama, _) => (0.5, -1.5, -3.5), (Llama, _) => (0.5, -1.5, -3.5),
(Alpaca, _) => (-0.5, -0.5, -5.5), (Alpaca, _) => (-0.5, -0.5, -5.5),
(Akhlut, _) => (1.5, -1.0, -4.5), (Akhlut, _) => (1.5, -1.0, -4.5),
(Bristleback, _) => (-0.5, 0.0, -4.0),
}, },
scaler: match (body.species, body.body_type) { scaler: match (body.species, body.body_type) {
(Grolgar, _) => 1.05, (Grolgar, _) => 1.05,
@ -657,6 +668,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Mammoth, _) => 3.0, (Mammoth, _) => 3.0,
(Ngoubou, _) => 1.0, (Ngoubou, _) => 1.0,
(Akhlut, _) => 1.4, (Akhlut, _) => 1.4,
(Bristleback, _) => 1.1,
_ => 0.9, _ => 0.9,
}, },
startangle: match (body.species, body.body_type) { startangle: match (body.species, body.body_type) {
@ -779,6 +791,7 @@ fn mount_point(body: &Body) -> Vec3<f32> {
(Llama, _) => (0.0, -6.0, 2.0), (Llama, _) => (0.0, -6.0, 2.0),
(Alpaca, _) => (0.0, -9.0, 0.0), (Alpaca, _) => (0.0, -9.0, 0.0),
(Akhlut, _) => (0.0, -6.0, 1.0), (Akhlut, _) => (0.0, -6.0, 1.0),
(Bristleback, _) => (0.0, -9.0, 3.0),
} }
.into() .into()
} }

View File

@ -153,6 +153,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Female) => (2.5, 3.0), (Hare, Female) => (2.5, 3.0),
(Dog, _) => (3.0, 4.5), (Dog, _) => (3.0, 4.5),
(Goat, _) => (3.5, 4.0), (Goat, _) => (3.5, 4.0),
(Seal, _) => (4.0, 2.5),
}, },
chest: match (body.species, body.body_type) { chest: match (body.species, body.body_type) {
(Pig, _) => (0.0, 6.0), (Pig, _) => (0.0, 6.0),
@ -182,6 +183,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Female) => (-2.0, 6.0), (Hare, Female) => (-2.0, 6.0),
(Dog, _) => (-2.0, 8.5), (Dog, _) => (-2.0, 8.5),
(Goat, _) => (2.0, 7.5), (Goat, _) => (2.0, 7.5),
(Seal, _) => (-2.0, 4.0),
}, },
feet_f: match (body.species, body.body_type) { feet_f: match (body.species, body.body_type) {
(Pig, _) => (4.5, 3.5, -1.0), (Pig, _) => (4.5, 3.5, -1.0),
@ -211,6 +213,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Female) => (3.0, 0.5, -4.0), (Hare, Female) => (3.0, 0.5, -4.0),
(Dog, _) => (3.5, 3.0, -2.5), (Dog, _) => (3.5, 3.0, -2.5),
(Goat, _) => (3.0, 2.5, -3.5), (Goat, _) => (3.0, 2.5, -3.5),
(Seal, _) => (6.5, 3.0, -2.0),
}, },
feet_b: match (body.species, body.body_type) { feet_b: match (body.species, body.body_type) {
(Pig, _) => (3.5, -2.0, 0.0), (Pig, _) => (3.5, -2.0, 0.0),
@ -240,6 +243,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Female) => (3.5, -3.0, -2.0), (Hare, Female) => (3.5, -3.0, -2.0),
(Dog, _) => (3.0, -3.5, -2.5), (Dog, _) => (3.0, -3.5, -2.5),
(Goat, _) => (3.0, -4.0, -2.0), (Goat, _) => (3.0, -4.0, -2.0),
(Seal, _) => (4.5, -6.0, -0.5),
}, },
tail: match (body.species, body.body_type) { tail: match (body.species, body.body_type) {
(Pig, _) => (-4.5, 2.5), (Pig, _) => (-4.5, 2.5),
@ -269,6 +273,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Female) => (-4.0, 2.0), (Hare, Female) => (-4.0, 2.0),
(Dog, _) => (-5.0, 0.5), (Dog, _) => (-5.0, 0.5),
(Goat, _) => (-7.0, 0.0), (Goat, _) => (-7.0, 0.0),
(Seal, _) => (-1.0, 4.0),
}, },
scaler: match (body.species, body.body_type) { scaler: match (body.species, body.body_type) {
(Pig, _) => 0.72, (Pig, _) => 0.72,
@ -289,6 +294,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Fungome, _) => 0.72, (Fungome, _) => 0.72,
(Porcupine, _) => 0.65, (Porcupine, _) => 0.65,
(Hare, _) => 0.65, (Hare, _) => 0.65,
(Seal, _) => 0.9,
_ => 0.8, _ => 0.8,
}, },
tempo: match (body.species, body.body_type) { tempo: match (body.species, body.body_type) {
@ -306,6 +312,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Porcupine, _) => 1.2, (Porcupine, _) => 1.2,
(Beaver, _) => 1.2, (Beaver, _) => 1.2,
(Hare, _) => 1.15, (Hare, _) => 1.15,
(Seal, _) => 2.5,
_ => 1.0, _ => 1.0,
}, },
maximize: match (body.species, body.body_type) { maximize: match (body.species, body.body_type) {
@ -340,6 +347,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Beaver, _) => 0.9, (Beaver, _) => 0.9,
(Hare, _) => 0.8, (Hare, _) => 0.8,
(Goat, _) => 0.8, (Goat, _) => 0.8,
(Seal, _) => 0.7,
_ => 1.0, _ => 1.0,
}, },
spring: match (body.species, body.body_type) { spring: match (body.species, body.body_type) {
@ -364,6 +372,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Hare, Male) => 2.2, (Hare, Male) => 2.2,
(Hare, Female) => 2.5, (Hare, Female) => 2.5,
(Goat, _) => 1.2, (Goat, _) => 1.2,
(Seal, _) => 0.7,
_ => 1.0, _ => 1.0,
}, },
feed: match (body.species, body.body_type) { feed: match (body.species, body.body_type) {
@ -421,6 +430,7 @@ fn mount_point(body: &Body) -> Vec3<f32> {
(Hare, Female) => (0.0, -4.0, -4.5), (Hare, Female) => (0.0, -4.0, -4.5),
(Dog, _) => (0.0, -4.0, -2.5), (Dog, _) => (0.0, -4.0, -2.5),
(Goat, _) => (0.0, -4.0, -3.5), (Goat, _) => (0.0, -4.0, -3.5),
(Seal, _) => (0.0, -2.0, -2.5),
} }
.into() .into()
} }

View File

@ -103,6 +103,7 @@ pub struct SkeletonAttr {
leg: (f32, f32, f32), leg: (f32, f32, f32),
foot: (f32, f32, f32), foot: (f32, f32, f32),
scaler: f32, scaler: f32,
steady_wings: bool,
} }
impl<'a> TryFrom<&'a comp::Body> for SkeletonAttr { impl<'a> TryFrom<&'a comp::Body> for SkeletonAttr {
@ -130,6 +131,7 @@ impl Default for SkeletonAttr {
leg: (0.0, 0.0, 0.0), leg: (0.0, 0.0, 0.0),
foot: (0.0, 0.0, 0.0), foot: (0.0, 0.0, 0.0),
scaler: 0.0, scaler: 0.0,
steady_wings: false,
} }
} }
} }
@ -148,6 +150,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (7.0, 14.0), (Yale, _) => (7.0, 14.0),
(Dodarock, _) => (2.0, 1.5), (Dodarock, _) => (2.0, 1.5),
(Ntouka, _) => (2.0, 2.5), (Ntouka, _) => (2.0, 2.5),
(Axebeak, _) => (11.5, 8.5),
}, },
jaw: match (body.species, body.body_type) { jaw: match (body.species, body.body_type) {
(Archaeos, _) => (1.0, -7.0), (Archaeos, _) => (1.0, -7.0),
@ -159,6 +162,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (2.0, -9.5), (Yale, _) => (2.0, -9.5),
(Dodarock, _) => (0.0, -5.0), (Dodarock, _) => (0.0, -5.0),
(Ntouka, _) => (0.0, -4.0), (Ntouka, _) => (0.0, -4.0),
(Axebeak, _) => (2.5, -4.0),
}, },
neck: match (body.species, body.body_type) { neck: match (body.species, body.body_type) {
(Archaeos, _) => (4.5, -2.0), (Archaeos, _) => (4.5, -2.0),
@ -170,6 +174,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (2.0, 4.0), (Yale, _) => (2.0, 4.0),
(Dodarock, _) => (5.0, -1.0), (Dodarock, _) => (5.0, -1.0),
(Ntouka, _) => (4.0, 0.0), (Ntouka, _) => (4.0, 0.0),
(Axebeak, _) => (-5.5, 0.0),
}, },
chest_front: match (body.species, body.body_type) { chest_front: match (body.species, body.body_type) {
(Archaeos, _) => (0.0, 20.0), (Archaeos, _) => (0.0, 20.0),
@ -181,6 +186,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (0.0, 19.5), (Yale, _) => (0.0, 19.5),
(Dodarock, _) => (0.0, 12.0), (Dodarock, _) => (0.0, 12.0),
(Ntouka, _) => (0.0, 13.0), (Ntouka, _) => (0.0, 13.0),
(Axebeak, _) => (0.0, 12.0),
}, },
chest_back: match (body.species, body.body_type) { chest_back: match (body.species, body.body_type) {
(Archaeos, _) => (-5.5, -1.0), (Archaeos, _) => (-5.5, -1.0),
@ -192,6 +198,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (-3.0, -1.0), (Yale, _) => (-3.0, -1.0),
(Dodarock, _) => (-4.5, -2.0), (Dodarock, _) => (-4.5, -2.0),
(Ntouka, _) => (-4.5, 1.0), (Ntouka, _) => (-4.5, 1.0),
(Axebeak, _) => (-5.0, 0.0),
}, },
tail_front: match (body.species, body.body_type) { tail_front: match (body.species, body.body_type) {
(Archaeos, _) => (-9.0, -1.5), (Archaeos, _) => (-9.0, -1.5),
@ -203,6 +210,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (-9.5, -4.0), (Yale, _) => (-9.5, -4.0),
(Dodarock, _) => (-4.5, -4.5), (Dodarock, _) => (-4.5, -4.5),
(Ntouka, _) => (-9.5, -3.5), (Ntouka, _) => (-9.5, -3.5),
(Axebeak, _) => (-5.5, 4.5),
}, },
tail_back: match (body.species, body.body_type) { tail_back: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -0.5), (Archaeos, _) => (-8.0, -0.5),
@ -214,6 +222,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (-5.0, -2.5), (Yale, _) => (-5.0, -2.5),
(Dodarock, _) => (-8.5, -2.0), (Dodarock, _) => (-8.5, -2.0),
(Ntouka, _) => (-9.5, -2.0), (Ntouka, _) => (-9.5, -2.0),
(Axebeak, _) => (-10.0, 3.0),
}, },
hand: match (body.species, body.body_type) { hand: match (body.species, body.body_type) {
(Archaeos, _) => (3.0, 0.0, -4.0), (Archaeos, _) => (3.0, 0.0, -4.0),
@ -225,6 +234,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (3.0, 2.0, -0.5), (Yale, _) => (3.0, 2.0, -0.5),
(Dodarock, _) => (3.5, 3.0, -5.0), (Dodarock, _) => (3.5, 3.0, -5.0),
(Ntouka, _) => (3.5, 3.0, -4.0), (Ntouka, _) => (3.5, 3.0, -4.0),
(Axebeak, _) => (1.5, -10.5, 9.5),
}, },
leg: match (body.species, body.body_type) { leg: match (body.species, body.body_type) {
(Archaeos, _) => (2.5, -3.0, -4.0), (Archaeos, _) => (2.5, -3.0, -4.0),
@ -236,6 +246,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (3.0, -3.5, -4.0), (Yale, _) => (3.0, -3.5, -4.0),
(Dodarock, _) => (3.5, 1.5, -4.0), (Dodarock, _) => (3.5, 1.5, -4.0),
(Ntouka, _) => (4.5, -5.5, -4.0), (Ntouka, _) => (4.5, -5.5, -4.0),
(Axebeak, _) => (2.5, -0.5, 0.0),
}, },
foot: match (body.species, body.body_type) { foot: match (body.species, body.body_type) {
(Archaeos, _) => (3.0, -0.5, -7.0), (Archaeos, _) => (3.0, -0.5, -7.0),
@ -247,6 +258,7 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => (1.5, 1.0, -3.5), (Yale, _) => (1.5, 1.0, -3.5),
(Dodarock, _) => (1.5, -1.0, -3.5), (Dodarock, _) => (1.5, -1.0, -3.5),
(Ntouka, _) => (1.5, -1.0, -2.5), (Ntouka, _) => (1.5, -1.0, -2.5),
(Axebeak, _) => (2.5, 2.5, -7.0),
}, },
scaler: match (body.species, body.body_type) { scaler: match (body.species, body.body_type) {
(Archaeos, _) => 2.93, (Archaeos, _) => 2.93,
@ -258,7 +270,9 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Yale, _) => 1.26, (Yale, _) => 1.26,
(Dodarock, _) => 1.1, (Dodarock, _) => 1.1,
(Ntouka, _) => 2.93, (Ntouka, _) => 2.93,
(Axebeak, _) => 1.1,
}, },
steady_wings: matches!((body.species, body.body_type), (Axebeak, _)),
} }
} }
} }

View File

@ -103,13 +103,21 @@ impl Animation for RunAnimation {
next.tail_back.position = Vec3::new(0.0, s_a.tail_back.0, s_a.tail_back.1); next.tail_back.position = Vec3::new(0.0, s_a.tail_back.0, s_a.tail_back.1);
next.tail_back.orientation = Quaternion::rotation_x(0.2 + short * -0.1) next.tail_back.orientation = Quaternion::rotation_x(0.2 + short * -0.1)
* Quaternion::rotation_z(shortalt * -0.2 + tilt * 1.4); * Quaternion::rotation_z(shortalt * -0.2 + tilt * 1.4);
if s_a.steady_wings {
next.hand_l.position = Vec3::new(-s_a.hand.0 - 8.0, s_a.hand.1, s_a.hand.2);
next.hand_l.orientation =
Quaternion::rotation_x(-0.2 * speednorm) * Quaternion::rotation_z(-0.6);
next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2); next.hand_r.position = Vec3::new(s_a.hand.0 + 8.0, s_a.hand.1, s_a.hand.2);
next.hand_l.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot2a * 0.3); next.hand_r.orientation =
Quaternion::rotation_x(-0.2 * speednorm) * Quaternion::rotation_z(0.6);
next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2); } else {
next.hand_r.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot1a * 0.3); next.hand_l.position = Vec3::new(-s_a.hand.0, s_a.hand.1, s_a.hand.2);
next.hand_l.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot2a * 0.3);
next.hand_r.position = Vec3::new(s_a.hand.0, s_a.hand.1, s_a.hand.2);
next.hand_r.orientation = Quaternion::rotation_x(-0.2 * speednorm + foot1a * 0.3);
};
next.leg_l.position = Vec3::new( next.leg_l.position = Vec3::new(
-s_a.leg.0 + speednorm * 1.5, -s_a.leg.0 + speednorm * 1.5,
s_a.leg.1 + foot1b * -1.3, s_a.leg.1 + foot1b * -1.3,