Add Basilisk and Cyclops models by Gemu, and AirBalloon model by SarraKitty.

This commit is contained in:
Avi Weinstock 2021-06-03 19:24:34 -04:00
parent 59ae5ec573
commit 05c699878f
36 changed files with 245 additions and 174 deletions

View File

@ -25,4 +25,26 @@
central: ("rudder"), central: ("rudder"),
), ),
), ),
AirBalloon: (
bone0: (
offset: (-14.5, -16.0, 0.0),
phys_offset: (0.0, 0.0, 0.0),
central: ("Air_Balloon"),
),
bone1: (
offset: (0.0, 0.0, 0.0),
phys_offset: (0.0, 0.0, 0.0),
central: ("empty"),
),
bone2: (
offset: (0.0, 0.0, 0.0),
phys_offset: (0.0, 0.0, 0.0),
central: ("empty"),
),
bone3: (
offset: (-1.5, 37.0, -6.5),
phys_offset: (0.0, 0.0, 0.0),
central: ("Air_Balloon_rudder"),
),
),
}) })

BIN
assets/server/voxel/Air_Balloon.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/server/voxel/Air_Balloon_rudder.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/server/voxel/empty.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -67,7 +67,7 @@
), ),
jaw: ( jaw: (
offset: (0.0, 0.0, 0.0), offset: (0.0, 0.0, 0.0),
central: ("armor.empty"), central: ("npc.cyclops.male.jaw"),
), ),
tail: ( tail: (
offset: (0.0, 0.0, 0.0), offset: (0.0, 0.0, 0.0),
@ -93,7 +93,7 @@
), ),
jaw: ( jaw: (
offset: (0.0, 0.0, 0.0), offset: (0.0, 0.0, 0.0),
central: ("armor.empty"), central: ("npc.cyclops.male.jaw"),
), ),
tail: ( tail: (
offset: (0.0, 0.0, 0.0), offset: (0.0, 0.0, 0.0),

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -626,19 +626,19 @@
), ),
(Basilisk, Male): ( (Basilisk, Male): (
upper: ( upper: (
offset: (-5.5, 0.0, -11.0), offset: (-7.5, 0.0, -11.0),
central: ("npc.basilisk.male.head_upper"), central: ("npc.basilisk.male.head_upper"),
), ),
lower: ( lower: (
offset: (-8.5, 0.0, -4.0), offset: (-13.5, -2.0, -4.0),
central: ("npc.basilisk.male.head_lower"), central: ("npc.basilisk.male.head_lower"),
), ),
jaw: ( jaw: (
offset: (-2.5, 0.0, -15.0), offset: (-6.5, 0.0, -15.0),
central: ("npc.basilisk.male.jaw"), central: ("npc.basilisk.male.jaw"),
), ),
chest: ( chest: (
offset: (-6.5, -13.0, -12.5), offset: (-13.5, -13.0, -12.5),
central: ("npc.basilisk.male.chest"), central: ("npc.basilisk.male.chest"),
), ),
tail_rear: ( tail_rear: (
@ -646,7 +646,7 @@
central: ("npc.basilisk.male.tail_rear"), central: ("npc.basilisk.male.tail_rear"),
), ),
tail_front: ( tail_front: (
offset: (-4.5, -24.0, -7.0), offset: (-10.5, -24.0, -7.0),
central: ("npc.basilisk.male.tail_front"), central: ("npc.basilisk.male.tail_front"),
), ),
), ),

View File

@ -2,505 +2,505 @@
(Crocodile, Male): ( (Crocodile, Male): (
front_left: ( front_left: (
offset: (-7.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension offset: (-7.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension
lateral: ("npc.crocodile.male.foot_fr"), lateral: ("npc.crocodile.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension
lateral: ("npc.crocodile.male.foot_fr"), lateral: ("npc.crocodile.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-8.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension offset: (-8.0, -0.0, -4.0),//full x dimension, 0 y dimension, full z dimension
lateral: ("npc.crocodile.male.foot_br"), lateral: ("npc.crocodile.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension offset: (0.0, -0.0, -4.0),//0 x dimension, 0 y dimension, full z dimension
lateral: ("npc.crocodile.male.foot_br"), lateral: ("npc.crocodile.male.foot_br", false),
), ),
), ),
(Crocodile, Female): ( (Crocodile, Female): (
front_left: ( front_left: (
offset: (-7.0, -0.0, -4.0), offset: (-7.0, -0.0, -4.0),
lateral: ("npc.crocodile.male.foot_fr"), lateral: ("npc.crocodile.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -0.0, -4.0), offset: (0.0, -0.0, -4.0),
lateral: ("npc.crocodile.male.foot_fr"), lateral: ("npc.crocodile.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-8.0, -0.0, -4.0), offset: (-8.0, -0.0, -4.0),
lateral: ("npc.crocodile.male.foot_br"), lateral: ("npc.crocodile.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -0.0, -4.0), offset: (0.0, -0.0, -4.0),
lateral: ("npc.crocodile.male.foot_br"), lateral: ("npc.crocodile.male.foot_br", false),
), ),
), ),
(Alligator, Male): ( (Alligator, Male): (
front_left: ( front_left: (
offset: (-7.0, 0.0, -4.0), offset: (-7.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_fr"), lateral: ("npc.alligator.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (-0.0, 0.0, -4.0), offset: (-0.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_fr"), lateral: ("npc.alligator.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-8.0, 0.0, -4.0), offset: (-8.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_br"), lateral: ("npc.alligator.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-0.0, 0.0, -4.0), offset: (-0.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_br"), lateral: ("npc.alligator.male.foot_br", false),
), ),
), ),
(Alligator, Female): ( (Alligator, Female): (
front_left: ( front_left: (
offset: (-7.0, 0.0, -4.0), offset: (-7.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_fr"), lateral: ("npc.alligator.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -4.0), offset: (0.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_fr"), lateral: ("npc.alligator.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-8.0, 0.0, -4.0), offset: (-8.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_br"), lateral: ("npc.alligator.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -4.0), offset: (0.0, 0.0, -4.0),
lateral: ("npc.alligator.male.foot_br"), lateral: ("npc.alligator.male.foot_br", false),
), ),
), ),
(Salamander, Male): ( (Salamander, Male): (
front_left: ( front_left: (
offset: (-6.0, 0.0, -3.0), offset: (-6.0, 0.0, -3.0),
lateral: ("npc.salamander.male.foot_fr"), lateral: ("npc.salamander.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -3.0), offset: (0.0, 0.0, -3.0),
lateral: ("npc.salamander.male.foot_fr"), lateral: ("npc.salamander.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.0, 0.0, -3.0), offset: (-7.0, 0.0, -3.0),
lateral: ("npc.salamander.male.foot_br"), lateral: ("npc.salamander.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-0.0, 0.0, -3.0), offset: (-0.0, 0.0, -3.0),
lateral: ("npc.salamander.male.foot_br"), lateral: ("npc.salamander.male.foot_br", false),
), ),
), ),
(Salamander, Female): ( (Salamander, Female): (
front_left: ( front_left: (
offset: (-6.0, 0.0, -3.0), offset: (-6.0, 0.0, -3.0),
lateral: ("npc.salamander.female.foot_fr"), lateral: ("npc.salamander.female.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -3.0), offset: (0.0, 0.0, -3.0),
lateral: ("npc.salamander.female.foot_fr"), lateral: ("npc.salamander.female.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-8.0, 0.0, -3.0), offset: (-8.0, 0.0, -3.0),
lateral: ("npc.salamander.female.foot_br"), lateral: ("npc.salamander.female.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -3.0), offset: (0.0, 0.0, -3.0),
lateral: ("npc.salamander.female.foot_br"), lateral: ("npc.salamander.female.foot_br", false),
), ),
), ),
(Monitor, Male): ( (Monitor, Male): (
front_left: ( front_left: (
offset: (-8.0, 0.0, -5.0), offset: (-8.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_fr"), lateral: ("npc.monitor.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -5.0), offset: (0.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_fr"), lateral: ("npc.monitor.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.0, 0.0, -5.0), offset: (-7.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_br"), lateral: ("npc.monitor.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -5.0), offset: (0.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_br"), lateral: ("npc.monitor.male.foot_br", false),
), ),
), ),
(Monitor, Female): ( (Monitor, Female): (
front_left: ( front_left: (
offset: (-8.0, 0.0, -5.0), offset: (-8.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_fr"), lateral: ("npc.monitor.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -5.0), offset: (0.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_fr"), lateral: ("npc.monitor.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.0, 0.0, -5.0), offset: (-7.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_br"), lateral: ("npc.monitor.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -5.0), offset: (0.0, 0.0, -5.0),
lateral: ("npc.monitor.male.foot_br"), lateral: ("npc.monitor.male.foot_br", false),
), ),
), ),
(Asp, Male): ( (Asp, Male): (
front_left: ( front_left: (
offset: (-10.0, 0.0, -6.5), offset: (-10.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_fr"), lateral: ("npc.asp.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -6.5), offset: (0.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_fr"), lateral: ("npc.asp.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.5, 0.0, -6.5), offset: (-7.5, 0.0, -6.5),
lateral: ("npc.asp.male.foot_br"), lateral: ("npc.asp.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -6.5), offset: (0.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_br"), lateral: ("npc.asp.male.foot_br", false),
), ),
), ),
(Asp, Female): ( (Asp, Female): (
front_left: ( front_left: (
offset: (-10.0, 0.0, -6.5), offset: (-10.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_fr"), lateral: ("npc.asp.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -6.5), offset: (0.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_fr"), lateral: ("npc.asp.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.5, 0.0, -6.5), offset: (-7.5, 0.0, -6.5),
lateral: ("npc.asp.male.foot_br"), lateral: ("npc.asp.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -6.5), offset: (0.0, 0.0, -6.5),
lateral: ("npc.asp.male.foot_br"), lateral: ("npc.asp.male.foot_br", false),
), ),
), ),
(Tortoise, Male): ( (Tortoise, Male): (
front_left: ( front_left: (
offset: (-7.0, 0.0, -8.0), offset: (-7.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_fr"), lateral: ("npc.tortoise.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -8.0), offset: (0.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_fr"), lateral: ("npc.tortoise.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.0, 0.0, -8.0), offset: (-7.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_br"), lateral: ("npc.tortoise.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -8.0), offset: (0.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_br"), lateral: ("npc.tortoise.male.foot_br", false),
), ),
), ),
(Tortoise, Female): ( (Tortoise, Female): (
front_left: ( front_left: (
offset: (-7.0, 0.0, -8.0), offset: (-7.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_fr"), lateral: ("npc.tortoise.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -8.0), offset: (0.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_fr"), lateral: ("npc.tortoise.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-7.0, 0.0, -8.0), offset: (-7.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_br"), lateral: ("npc.tortoise.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -8.0), offset: (0.0, 0.0, -8.0),
lateral: ("npc.tortoise.male.foot_br"), lateral: ("npc.tortoise.male.foot_br", false),
), ),
), ),
(Rocksnapper, Male): ( (Rocksnapper, Male): (
front_left: ( front_left: (
offset: (-12.0, 0.0, -10.0), offset: (-12.0, 0.0, -10.0),
lateral: ("npc.rocksnapper.male.foot_fr"), lateral: ("npc.rocksnapper.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -10.0), offset: (0.0, 0.0, -10.0),
lateral: ("npc.rocksnapper.male.foot_fr"), lateral: ("npc.rocksnapper.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-11.0, -6.0, -9.0), offset: (-11.0, -6.0, -9.0),
lateral: ("npc.rocksnapper.male.foot_br"), lateral: ("npc.rocksnapper.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -6.0, -9.0), offset: (0.0, -6.0, -9.0),
lateral: ("npc.rocksnapper.male.foot_br"), lateral: ("npc.rocksnapper.male.foot_br", false),
), ),
), ),
(Rocksnapper, Female): ( (Rocksnapper, Female): (
front_left: ( front_left: (
offset: (-12.0, 0.0, -10.0), offset: (-12.0, 0.0, -10.0),
lateral: ("npc.rocksnapper.male.foot_fr"), lateral: ("npc.rocksnapper.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -10.0), offset: (0.0, 0.0, -10.0),
lateral: ("npc.rocksnapper.male.foot_fr"), lateral: ("npc.rocksnapper.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-11.0, -6.0, -9.0),//special case offset: (-11.0, -6.0, -9.0),//special case
lateral: ("npc.rocksnapper.male.foot_br"), lateral: ("npc.rocksnapper.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -6.0, -9.0), offset: (0.0, -6.0, -9.0),
lateral: ("npc.rocksnapper.male.foot_br"), lateral: ("npc.rocksnapper.male.foot_br", false),
), ),
), ),
(Pangolin, Male): ( (Pangolin, Male): (
front_left: ( front_left: (
offset: (-1.5, 0.0, -6.0),//unique offset: (-1.5, 0.0, -6.0),//unique
lateral: ("npc.pangolin.male.foot_fr"), lateral: ("npc.pangolin.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_fr"), lateral: ("npc.pangolin.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_br"), lateral: ("npc.pangolin.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_br"), lateral: ("npc.pangolin.male.foot_br", false),
), ),
), ),
(Pangolin, Female): ( (Pangolin, Female): (
front_left: ( front_left: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_fr"), lateral: ("npc.pangolin.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_fr"), lateral: ("npc.pangolin.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-1.5, 0.0, -6.0),//special case offset: (-1.5, 0.0, -6.0),//special case
lateral: ("npc.pangolin.male.foot_br"), lateral: ("npc.pangolin.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-1.5, 0.0, -6.0), offset: (-1.5, 0.0, -6.0),
lateral: ("npc.pangolin.male.foot_br"), lateral: ("npc.pangolin.male.foot_br", false),
), ),
), ),
(Maneater, Male): ( (Maneater, Male): (
front_left: ( front_left: (
offset: (-6.0, 0.0, -6.5), offset: (-6.0, 0.0, -6.5),
lateral: ("npc.maneater.male.foot_fr"), lateral: ("npc.maneater.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (-2.0, 0.0, -6.5), offset: (-2.0, 0.0, -6.5),
lateral: ("npc.maneater.male.foot_fr"), lateral: ("npc.maneater.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-6.0, -8.0, -9.0), offset: (-6.0, -8.0, -9.0),
lateral: ("npc.maneater.male.foot_br"), lateral: ("npc.maneater.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-2.0, -8.0, -9.0), offset: (-2.0, -8.0, -9.0),
lateral: ("npc.maneater.male.foot_br"), lateral: ("npc.maneater.male.foot_br", false),
), ),
), ),
(Maneater, Female): ( (Maneater, Female): (
front_left: ( front_left: (
offset: (-6.0, 0.0, -6.5), offset: (-6.0, 0.0, -6.5),
lateral: ("npc.maneater.male.foot_fr"), lateral: ("npc.maneater.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (-2.0, 0.0, -6.5), offset: (-2.0, 0.0, -6.5),
lateral: ("npc.maneater.male.foot_fr"), lateral: ("npc.maneater.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-6.0, -8.0, -9.0), offset: (-6.0, -8.0, -9.0),
lateral: ("npc.maneater.male.foot_br"), lateral: ("npc.maneater.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-2.0, -8.0, -9.0), offset: (-2.0, -8.0, -9.0),
lateral: ("npc.maneater.male.foot_br"), lateral: ("npc.maneater.male.foot_br", false),
), ),
), ),
(Hakulaq, Male): ( (Hakulaq, Male): (
front_left: ( front_left: (
offset: (-10.0, 0.0, -9.0), offset: (-10.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_fr"), lateral: ("npc.hakulaq.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_fr"), lateral: ("npc.hakulaq.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-10.0, 0.0, -9.0), offset: (-10.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_br"), lateral: ("npc.hakulaq.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_br"), lateral: ("npc.hakulaq.male.foot_br", false),
), ),
), ),
(Hakulaq, Female): ( (Hakulaq, Female): (
front_left: ( front_left: (
offset: (-10.0, 0.0, -9.0), offset: (-10.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_fr"), lateral: ("npc.hakulaq.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_fr"), lateral: ("npc.hakulaq.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-10.0, 0.0, -9.0), offset: (-10.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_br"), lateral: ("npc.hakulaq.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.hakulaq.male.foot_br"), lateral: ("npc.hakulaq.male.foot_br", false),
), ),
), ),
(Sandshark, Male): ( (Sandshark, Male): (
front_left: ( front_left: (
offset: (-17.0, 0.0, -12.0), offset: (-17.0, 0.0, -12.0),
lateral: ("npc.sandshark.male.foot_fr"), lateral: ("npc.sandshark.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -12.0), offset: (0.0, 0.0, -12.0),
lateral: ("npc.sandshark.male.foot_fr"), lateral: ("npc.sandshark.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-9.0, 0.0, -6.0), offset: (-9.0, 0.0, -6.0),
lateral: ("npc.sandshark.male.foot_br"), lateral: ("npc.sandshark.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-2.0, 0.0, -6.0), offset: (-2.0, 0.0, -6.0),
lateral: ("npc.sandshark.male.foot_br"), lateral: ("npc.sandshark.male.foot_br", false),
), ),
), ),
(Sandshark, Female): ( (Sandshark, Female): (
front_left: ( front_left: (
offset: (-17.0, 0.0, -12.0), offset: (-17.0, 0.0, -12.0),
lateral: ("npc.sandshark.male.foot_fr"), lateral: ("npc.sandshark.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -12.0), offset: (0.0, 0.0, -12.0),
lateral: ("npc.sandshark.male.foot_fr"), lateral: ("npc.sandshark.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-9.0, 0.0, -6.0), offset: (-9.0, 0.0, -6.0),
lateral: ("npc.sandshark.male.foot_br"), lateral: ("npc.sandshark.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (-2.0, 0.0, -6.0), offset: (-2.0, 0.0, -6.0),
lateral: ("npc.sandshark.male.foot_br"), lateral: ("npc.sandshark.male.foot_br", false),
), ),
), ),
(Lavadrake, Male): ( (Lavadrake, Male): (
front_left: ( front_left: (
offset: (-14.0, -4.0, -10.0), offset: (-14.0, -4.0, -10.0),
lateral: ("npc.lavadrake.male.foot_fr"), lateral: ("npc.lavadrake.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -4.0, -10.0), offset: (0.0, -4.0, -10.0),
lateral: ("npc.lavadrake.male.foot_fr"), lateral: ("npc.lavadrake.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-14.0, -7.5, -10.0), offset: (-14.0, -7.5, -10.0),
lateral: ("npc.lavadrake.male.foot_br"), lateral: ("npc.lavadrake.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -7.5, -10.0), offset: (0.0, -7.5, -10.0),
lateral: ("npc.lavadrake.male.foot_br"), lateral: ("npc.lavadrake.male.foot_br", false),
), ),
), ),
(Lavadrake, Female): ( (Lavadrake, Female): (
front_left: ( front_left: (
offset: (-14.0, -4.0, -10.0), offset: (-14.0, -4.0, -10.0),
lateral: ("npc.lavadrake.male.foot_fr"), lateral: ("npc.lavadrake.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -4.0, -10.0), offset: (0.0, -4.0, -10.0),
lateral: ("npc.lavadrake.male.foot_fr"), lateral: ("npc.lavadrake.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-14.0, -7.5, -10.0), offset: (-14.0, -7.5, -10.0),
lateral: ("npc.lavadrake.male.foot_br"), lateral: ("npc.lavadrake.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -7.5, -10.0), offset: (0.0, -7.5, -10.0),
lateral: ("npc.lavadrake.male.foot_br"), lateral: ("npc.lavadrake.male.foot_br", false),
), ),
), ),
(Basilisk, Male): ( (Basilisk, Male): (
front_left: ( front_left: (
offset: (-17.0, 0.0, -9.0), offset: (-15.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_fr"), lateral: ("npc.basilisk.male.foot_fl", true),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_fr"), lateral: ("npc.basilisk.male.foot_fr", true),
), ),
back_left: ( back_left: (
offset: (-15.0, 0.0, -9.0), offset: (-15.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_br"), lateral: ("npc.basilisk.male.foot_bl", true),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_br"), lateral: ("npc.basilisk.male.foot_br", true),
), ),
), ),
(Basilisk, Female): ( (Basilisk, Female): (
front_left: ( front_left: (
offset: (-17.0, 0.0, -9.0), offset: (-15.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_fr"), lateral: ("npc.basilisk.male.foot_fl", true),
), ),
front_right: ( front_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_fr"), lateral: ("npc.basilisk.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-15.0, 0.0, -9.0), offset: (-15.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_br"), lateral: ("npc.basilisk.male.foot_bl", true),
), ),
back_right: ( back_right: (
offset: (0.0, 0.0, -9.0), offset: (0.0, 0.0, -9.0),
lateral: ("npc.basilisk.male.foot_br"), lateral: ("npc.basilisk.male.foot_br", false),
), ),
), ),
(Deadwood, Male): ( (Deadwood, Male): (
front_left: ( front_left: (
offset: (-5.0, -2.0, -7.0), offset: (-5.0, -2.0, -7.0),
lateral: ("npc.deadwood.male.foot_fr"), lateral: ("npc.deadwood.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -2.0, -7.0), offset: (0.0, -2.0, -7.0),
lateral: ("npc.deadwood.male.foot_fr"), lateral: ("npc.deadwood.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-5.0, -1.0, -7.0), offset: (-5.0, -1.0, -7.0),
lateral: ("npc.deadwood.male.foot_br"), lateral: ("npc.deadwood.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -1.0, -7.0), offset: (0.0, -1.0, -7.0),
lateral: ("npc.deadwood.male.foot_br"), lateral: ("npc.deadwood.male.foot_br", false),
), ),
), ),
(Deadwood, Female): ( (Deadwood, Female): (
front_left: ( front_left: (
offset: (-5.0, -2.0, -7.0), offset: (-5.0, -2.0, -7.0),
lateral: ("npc.deadwood.male.foot_fr"), lateral: ("npc.deadwood.male.foot_fr", false),
), ),
front_right: ( front_right: (
offset: (0.0, -2.0, -7.0), offset: (0.0, -2.0, -7.0),
lateral: ("npc.deadwood.male.foot_fr"), lateral: ("npc.deadwood.male.foot_fr", false),
), ),
back_left: ( back_left: (
offset: (-5.0, -1.0, -7.0), offset: (-5.0, -1.0, -7.0),
lateral: ("npc.deadwood.male.foot_br"), lateral: ("npc.deadwood.male.foot_br", false),
), ),
back_right: ( back_right: (
offset: (0.0, -1.0, -7.0), offset: (0.0, -1.0, -7.0),
lateral: ("npc.deadwood.male.foot_br"), lateral: ("npc.deadwood.male.foot_br", false),
), ),
), ),
}) })

Binary file not shown.

View File

@ -621,7 +621,7 @@ impl Body {
Body::BirdLarge(_) => 50.0, Body::BirdLarge(_) => 50.0,
Body::BirdMedium(_) => 40.0, Body::BirdMedium(_) => 40.0,
Body::Dragon(_) => 60.0, Body::Dragon(_) => 60.0,
Body::Ship(ship::Body::DefaultAirship) => 60.0, Body::Ship(ship) if ship.can_fly() => 60.0,
_ => 0.0, _ => 0.0,
} }
} }
@ -688,6 +688,7 @@ impl Body {
pub fn mounting_offset(&self) -> Vec3<f32> { pub fn mounting_offset(&self) -> Vec3<f32> {
match self { match self {
Body::Ship(ship::Body::DefaultAirship) => Vec3::from([0.0, 0.0, 10.0]), Body::Ship(ship::Body::DefaultAirship) => Vec3::from([0.0, 0.0, 10.0]),
Body::Ship(ship::Body::AirBalloon) => Vec3::from([0.0, 0.0, 10.0]),
_ => Vec3::unit_z(), _ => Vec3::unit_z(),
} }
} }

View File

@ -3,15 +3,19 @@ use crate::{
consts::AIR_DENSITY, consts::AIR_DENSITY,
make_case_elim, make_case_elim,
}; };
use rand::prelude::SliceRandom;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use vek::Vec3; use vek::Vec3;
pub const ALL_BODIES: [Body; 2] = [Body::DefaultAirship, Body::AirBalloon];
make_case_elim!( make_case_elim!(
body, body,
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u32)] #[repr(u32)]
pub enum Body { pub enum Body {
DefaultAirship = 0, DefaultAirship = 0,
AirBalloon = 1,
} }
); );
@ -20,13 +24,26 @@ impl From<Body> for super::Body {
} }
impl Body { impl Body {
pub fn random() -> Self {
let mut rng = rand::thread_rng();
Self::random_with(&mut rng)
}
pub fn random_with(rng: &mut impl rand::Rng) -> Self { *(&ALL_BODIES).choose(rng).unwrap() }
pub fn manifest_entry(&self) -> &'static str { pub fn manifest_entry(&self) -> &'static str {
match self { match self {
Body::DefaultAirship => "Human_Airship", Body::DefaultAirship => "Human_Airship",
Body::AirBalloon => "Air_Balloon",
} }
} }
pub fn dimensions(&self) -> Vec3<f32> { Vec3::new(25.0, 50.0, 40.0) } pub fn dimensions(&self) -> Vec3<f32> {
match self {
Body::DefaultAirship => Vec3::new(25.0, 50.0, 40.0),
Body::AirBalloon => Vec3::new(25.0, 50.0, 40.0),
}
}
fn balloon_vol(&self) -> f32 { fn balloon_vol(&self) -> f32 {
let spheroid_vol = |equat_d: f32, polar_d: f32| -> f32 { let spheroid_vol = |equat_d: f32, polar_d: f32| -> f32 {
@ -52,6 +69,12 @@ impl Body {
pub fn density(&self) -> Density { Density(AIR_DENSITY) } pub fn density(&self) -> Density { Density(AIR_DENSITY) }
pub fn mass(&self) -> Mass { Mass((self.hull_vol() + self.balloon_vol()) * self.density().0) } pub fn mass(&self) -> Mass { Mass((self.hull_vol() + self.balloon_vol()) * self.density().0) }
pub fn can_fly(&self) -> bool {
match self {
Body::DefaultAirship | Body::AirBalloon => true,
}
}
} }
/// Terrain is 11.0 scale relative to small-scale voxels, /// Terrain is 11.0 scale relative to small-scale voxels,

View File

@ -3,7 +3,7 @@ use crate::{
biped_large, biped_small, biped_large, biped_small,
inventory::slot::EquipSlot, inventory::slot::EquipSlot,
item::{Hands, ItemKind, Tool, ToolKind}, item::{Hands, ItemKind, Tool, ToolKind},
quadruped_low, quadruped_medium, quadruped_small, ship, quadruped_low, quadruped_medium, quadruped_small,
skills::{Skill, SwimSkill}, skills::{Skill, SwimSkill},
theropod, Body, CharacterAbility, CharacterState, Density, InputAttr, InputKind, theropod, Body, CharacterAbility, CharacterState, Density, InputAttr, InputKind,
InventoryAction, StateUpdate, InventoryAction, StateUpdate,
@ -190,7 +190,7 @@ impl Body {
Body::BirdMedium(_) => Some(GRAVITY * self.mass().0 * 2.0), Body::BirdMedium(_) => Some(GRAVITY * self.mass().0 * 2.0),
Body::BirdLarge(_) => Some(GRAVITY * self.mass().0 * 0.5), Body::BirdLarge(_) => Some(GRAVITY * self.mass().0 * 0.5),
Body::Dragon(_) => Some(200_000.0), Body::Dragon(_) => Some(200_000.0),
Body::Ship(ship::Body::DefaultAirship) => Some(300_000.0), Body::Ship(ship) if ship.can_fly() => Some(300_000.0),
_ => None, _ => None,
} }
} }
@ -390,7 +390,7 @@ pub fn fly_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32) -> b
update.vel.0.z += data.dt.0 * (anti_grav + accel * data.inputs.move_z.max(0.0)); update.vel.0.z += data.dt.0 * (anti_grav + accel * data.inputs.move_z.max(0.0));
}, },
// floaty floaty // floaty floaty
Body::Ship(ship @ ship::Body::DefaultAirship) => { Body::Ship(ship) if ship.can_fly() => {
let regulate_density = |min: f32, max: f32, def: f32, rate: f32| -> Density { let regulate_density = |min: f32, max: f32, def: f32, rate: f32| -> Density {
// Reset to default on no input // Reset to default on no input
let change = if data.inputs.move_z.abs() > std::f32::EPSILON { let change = if data.inputs.move_z.abs() > std::f32::EPSILON {

View File

@ -1152,7 +1152,7 @@ fn handle_spawn_airship(
200.0, 200.0,
) )
}); });
let ship = comp::ship::Body::DefaultAirship; let ship = comp::ship::Body::random();
let mut builder = server let mut builder = server
.state .state
.create_ship(pos, ship, true) .create_ship(pos, ship, true)

View File

@ -37,7 +37,7 @@ impl Entity {
pub fn get_body(&self) -> comp::Body { pub fn get_body(&self) -> comp::Body {
match self.rng(PERM_GENUS).gen::<f32>() { match self.rng(PERM_GENUS).gen::<f32>() {
// we want 5% airships, 45% birds, 50% humans // we want 5% airships, 45% birds, 50% humans
x if x < 0.05 => comp::Body::Ship(comp::ship::Body::DefaultAirship), x if x < 0.05 => comp::ship::Body::random_with(&mut self.rng(PERM_BODY)).into(),
x if x < 0.45 => { x if x < 0.45 => {
let species = *(&comp::bird_medium::ALL_SPECIES) let species = *(&comp::bird_medium::ALL_SPECIES)
.choose(&mut self.rng(PERM_SPECIES)) .choose(&mut self.rng(PERM_SPECIES))

View File

@ -148,6 +148,9 @@ struct VoxSpec<T>(String, [T; 3]);
#[derive(Deserialize)] #[derive(Deserialize)]
struct VoxSimple(String); struct VoxSimple(String);
#[derive(Deserialize)]
struct VoxMirror(String, bool);
#[derive(Deserialize)] #[derive(Deserialize)]
struct ArmorVoxSpec { struct ArmorVoxSpec {
vox_spec: VoxSpec<f32>, vox_spec: VoxSpec<f32>,
@ -4213,7 +4216,7 @@ struct SidedQLLateralVoxSpec {
#[derive(Deserialize)] #[derive(Deserialize)]
struct QuadrupedLowLateralSubSpec { struct QuadrupedLowLateralSubSpec {
offset: [f32; 3], // Should be relative to initial origin offset: [f32; 3], // Should be relative to initial origin
lateral: VoxSimple, lateral: VoxMirror,
} }
make_vox_spec!( make_vox_spec!(
@ -4384,7 +4387,8 @@ impl QuadrupedLowLateralSpec {
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5));
}, },
}; };
let lateral = graceful_load_segment_flipped(&spec.front_left.lateral.0, true); let latspec = &spec.front_left.lateral;
let lateral = graceful_load_segment_flipped(&latspec.0, !latspec.1);
(lateral, Vec3::from(spec.front_left.offset)) (lateral, Vec3::from(spec.front_left.offset))
} }
@ -4400,7 +4404,8 @@ impl QuadrupedLowLateralSpec {
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5));
}, },
}; };
let lateral = graceful_load_segment(&spec.front_right.lateral.0); let latspec = &spec.front_right.lateral;
let lateral = graceful_load_segment_flipped(&latspec.0, latspec.1);
(lateral, Vec3::from(spec.front_right.offset)) (lateral, Vec3::from(spec.front_right.offset))
} }
@ -4416,7 +4421,8 @@ impl QuadrupedLowLateralSpec {
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5));
}, },
}; };
let lateral = graceful_load_segment_flipped(&spec.back_left.lateral.0, true); let latspec = &spec.back_left.lateral;
let lateral = graceful_load_segment_flipped(&latspec.0, !latspec.1);
(lateral, Vec3::from(spec.back_left.offset)) (lateral, Vec3::from(spec.back_left.offset))
} }
@ -4432,7 +4438,8 @@ impl QuadrupedLowLateralSpec {
return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5)); return load_mesh("not_found", Vec3::new(-5.0, -5.0, -2.5));
}, },
}; };
let lateral = graceful_load_segment(&spec.back_right.lateral.0); let latspec = &spec.back_right.lateral;
let lateral = graceful_load_segment_flipped(&latspec.0, latspec.1);
(lateral, Vec3::from(spec.back_right.offset)) (lateral, Vec3::from(spec.back_right.offset))
} }