Adds better swimming/floating logic, Changes tail code logic

This commit is contained in:
2026-06-15 12:54:31 -04:00
parent efb326a186
commit 9e022dd562
105 changed files with 1284 additions and 907 deletions
@@ -11,7 +11,7 @@ public class Constants
public static final String MOD_NAME = "JurassicRevived";
public static final Logger LOG = LoggerFactory.getLogger(MOD_NAME);
public static final boolean DEBUG_SIZES = true;
public static final boolean DEBUG_SIZES = false;
public static ResourceLocation rl(String path) {
//? if >1.20.1 {
@@ -353,15 +353,15 @@ public class ModEntities {
public static final RegistrySupplier<EntityType<CoelacanthEntity>> COELACANTH =
ENTITIES.register("coelacanth", () -> EntityType.Builder.of(CoelacanthEntity::new, MobCategory.CREATURE)
.sized(1.3f, 1.8f).build("coelacanth"));
.sized(0.4f, 0.5f).build("coelacanth"));
public static final RegistrySupplier<EntityType<MawsoniaEntity>> MAWSONIA =
ENTITIES.register("mawsonia", () -> EntityType.Builder.of(MawsoniaEntity::new, MobCategory.CREATURE)
.sized(1.3f, 1.8f).build("mawsonia"));
.sized(0.9f, 1.4f).build("mawsonia"));
public static final RegistrySupplier<EntityType<AlligatorGarEntity>> ALLIGATOR_GAR =
ENTITIES.register("alligator_gar", () -> EntityType.Builder.of(AlligatorGarEntity::new, MobCategory.CREATURE)
.sized(1.3f, 1.8f).build("alligator_gar"));
.sized(0.4f, 0.6f).build("alligator_gar"));
public static void registerAttributes() {
EntityAttributeRegistry.register(APATOSAURUS, ApatosaurusEntity::createAttributes);
@@ -125,6 +125,7 @@ public class DinoAIController {
if (homePos == null) homePos = dino.blockPosition();
handleFloating();
handleWideHitboxJumping();
updateSensors();
checkBreedingReadiness();
@@ -576,7 +577,7 @@ public class DinoAIController {
return handleAvianWaterHuntingMovement(target);
}
if (isGroundCreature()) {
if (isGroundCreature() || dino.isAmphibious()) {
return handleTerrestrialWaterExitMovement();
}
@@ -735,10 +736,8 @@ public class DinoAIController {
return false;
}
double fluidHeight = dino.getFluidHeight(FluidTags.WATER);
if (dino.horizontalCollision) {
Vec3 velocity = dino.getDeltaMovement();
if (fluidHeight > dino.getFluidJumpThreshold() * 0.6D || dino.horizontalCollision) {
dino.setDeltaMovement(
velocity.x,
Math.min(velocity.y + 0.06D, TERRESTRIAL_WATER_EXIT_BOOST),
@@ -800,19 +799,15 @@ public class DinoAIController {
return;
}
Vec3 normalized = direction.normalize();
float yaw = (float)(Mth.atan2(normalized.z, normalized.x) * Mth.RAD_TO_DEG) - 90.0F;
float pitch = (float)(-(Mth.atan2(normalized.y, Math.sqrt(normalized.x * normalized.x + normalized.z * normalized.z)) * Mth.RAD_TO_DEG));
dino.setYRot(yaw);
dino.yRotO = yaw;
dino.yBodyRot = yaw;
dino.yBodyRotO = yaw;
dino.yHeadRot = yaw;
dino.yHeadRotO = yaw;
dino.setXRot(Mth.clamp(pitch, -75.0F, 75.0F));
dino.xRotO = dino.getXRot();
// Instead of forcing the YRot and XRot instantly, tell the LookControl where to look.
// The 30.0F values dictate the maximum turn speed per tick (yaw and pitch).
dino.getLookControl().setLookAt(
dino.getX() + direction.x,
dino.getY() + direction.y,
dino.getZ() + direction.z,
30.0F,
30.0F
);
}
// --- STATE LOGIC ---
@@ -1080,12 +1075,6 @@ public class DinoAIController {
return;
}
boolean resumed = false;
if (roamTarget != null) {
resumed = dino.getNavigation().moveTo(roamTarget.x, roamTarget.y, roamTarget.z, getRoamSpeed());
}
if (!resumed) {
findAndSetRoamTarget();
if (this.roamTarget == null) {
if (dino instanceof FlyingAnimal && !dino.onGround()) {
@@ -1096,7 +1085,6 @@ public class DinoAIController {
}
}
}
}
private void findAndSetRoamTarget() {
this.roamTarget = null;
@@ -1265,25 +1253,10 @@ public class DinoAIController {
transitionTo(State.IDLE);
return;
}
boolean resumed = false;
if (roamTarget != null) {
resumed = dino.getNavigation().moveTo(
roamTarget.x,
roamTarget.y,
roamTarget.z,
getTerritorialRoamSpeed()
);
}
if (!resumed) {
findAndSetTerritorialTarget();
if (this.roamTarget == null) {
this.roamTarget = null;
transitionTo(State.IDLE);
}
}
}
}
private double getBaseRoamSpeed() {
double speed = Math.max(dino.getAIConfig().walkSpeed(), MIN_ROAM_SPEED);
@@ -1472,7 +1445,9 @@ public class DinoAIController {
boolean waterMovementHandled = handleWaterMovementHelper(attackTarget);
if (dino.distanceToSqr(attackTarget) > 1.0D) {
dino.getLookControl().setLookAt(attackTarget, 30.0F, 30.0F);
}
double distSqr = dino.distanceToSqr(attackTarget);
double reachMult = dino.getAIConfig().attackReach();
@@ -1509,12 +1484,11 @@ public class DinoAIController {
return;
}
if (pathRecalcTimer-- <= 0 || dino.getNavigation().isDone()) {
if (pathRecalcTimer-- <= 0) {
if (!dino.getNavigation().moveTo(attackTarget, dino.getAIConfig().runSpeed())) {
pathRecalcTimer = 10; // Wait before retrying to prevent rapid failure loops
pathRecalcTimer = 10;
failedPathfindingAttempts++;
// Tolerance allows for temporary pathfinding failures (e.g., target inside hitbox)
if (failedPathfindingAttempts > 5) {
if (isAvianWaterHunter() && isUnderwaterTarget(attackTarget)) {
failedPathfindingAttempts = 0;
@@ -1539,7 +1513,9 @@ public class DinoAIController {
boolean waterMovementHandled = handleWaterMovementHelper(attackTarget);
if (dino.distanceToSqr(attackTarget) > 1.0D) {
dino.getLookControl().setLookAt(attackTarget, 30.0F, 30.0F);
}
double distSqr = dino.distanceToSqr(attackTarget);
double reachMult = dino.getAIConfig().attackReach();
@@ -1580,7 +1556,10 @@ public class DinoAIController {
} else if (isAvianWaterHunter() && avianDiveInProgress) {
dino.getNavigation().stop();
} else if (distSqr > stopDistSqr) {
if (pathRecalcTimer-- <= 0) {
dino.getNavigation().moveTo(attackTarget, dino.getAIConfig().runSpeed());
pathRecalcTimer = 10;
}
} else {
dino.getNavigation().stop();
}
@@ -1672,6 +1651,31 @@ public class DinoAIController {
}
}
private void handleWideHitboxJumping() {
// We only care about grounded entities that are bumping into something
if (!dino.onGround() || !dino.horizontalCollision) {
return;
}
// Vanilla jump logic works fine for small mobs, only intercept for wide ones
if (dino.getBbWidth() <= 1.0F) {
return;
}
Path path = dino.getNavigation().getPath();
if (path != null && !path.isDone()) {
Node nextNode = path.getNextNode();
if (nextNode != null) {
// If the path's next node is higher than the dinosaur's current block height,
// force it to jump, ignoring Vanilla's strict distance checks.
if (nextNode.y > dino.getBlockY()) {
dino.getJumpControl().jump();
}
}
}
}
private Vec3 getMarineRoamPos() {
for (int i = 0; i < 10; i++) {
BlockPos randomPos = dino.blockPosition().offset(
@@ -79,7 +79,7 @@ public class AchillobatorModel extends GeoModel<AchillobatorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class AlbertosaurusModel extends GeoModel<AlbertosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class AlligatorGarModel extends GeoModel<AlligatorGarEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -86,7 +86,7 @@ public class AllosaurusModel extends GeoModel<AllosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class AlvarezsaurusModel extends GeoModel<AlvarezsaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -86,7 +86,7 @@ public class AnkylosaurusModel extends GeoModel<AnkylosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class ApatosaurusModel extends GeoModel<ApatosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ArambourgianiaModel extends GeoModel<ArambourgianiaEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class BaryonyxModel extends GeoModel<BaryonyxEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class BrachiosaurusModel extends GeoModel<BrachiosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CarcharodontosaurusModel extends GeoModel<CarcharodontosaurusEntity
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CarnotaurusModel extends GeoModel<CarnotaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CearadactylusModel extends GeoModel<CearadactylusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CeratosaurusModel extends GeoModel<CeratosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ChasmosaurusModel extends GeoModel<ChasmosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class ChickenosaurusModel extends GeoModel<ChickenosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class ChilesaurusModel extends GeoModel<ChilesaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class CoelacanthModel extends GeoModel<CoelacanthEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class CoelophysisModel extends GeoModel<CoelophysisEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class CoelurusModel extends GeoModel<CoelurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CompsognathusModel extends GeoModel<CompsognathusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -79,7 +79,7 @@ public class ConcavenatorModel extends GeoModel<ConcavenatorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class CorythosaurusModel extends GeoModel<CorythosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class DeinonychusModel extends GeoModel<DeinonychusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -86,7 +86,7 @@ public class DilophosaurusModel extends GeoModel<DilophosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class DimorphodonModel extends GeoModel<DimorphodonEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class DiplodocusModel extends GeoModel<DiplodocusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class DistortusRexModel extends GeoModel<DistortusRexEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class DryosaurusModel extends GeoModel<DryosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class EdmontosaurusModel extends GeoModel<EdmontosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class FDuckModel extends GeoModel<FDuckEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class GallimimusModel extends GeoModel<GallimimusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -77,7 +77,7 @@ public class GeosternbergiaModel extends GeoModel<GeosternbergiaEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class GiganotosaurusModel extends GeoModel<GiganotosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class GuanlongModel extends GeoModel<GuanlongEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class GuidracoModel extends GeoModel<GuidracoEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class HadrosaurusModel extends GeoModel<HadrosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class HerrerasaurusModel extends GeoModel<HerrerasaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class HypsilophodonModel extends GeoModel<HypsilophodonEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class IndominusRexModel extends GeoModel<IndominusRexEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.12f };
@@ -79,7 +79,7 @@ public class IndoraptorModel extends GeoModel<IndoraptorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.12f };
@@ -79,7 +79,7 @@ public class InostranceviaModel extends GeoModel<InostranceviaEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class LambeosaurusModel extends GeoModel<LambeosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -86,7 +86,7 @@ public class LudodactylusModel extends GeoModel<LudodactylusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class MajungasaurusModel extends GeoModel<MajungasaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class MamenchisaurusModel extends GeoModel<MamenchisaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.12f, 0.08f, 0.06f };
@@ -79,7 +79,7 @@ public class MawsoniaModel extends GeoModel<MawsoniaEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -79,7 +79,7 @@ public class MetriacanthosaurusModel extends GeoModel<MetriacanthosaurusEntity>
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.12f };
@@ -79,7 +79,7 @@ public class MoganopterusModel extends GeoModel<MoganopterusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class MussasaurusModel extends GeoModel<MussasaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.10f };
@@ -79,7 +79,7 @@ public class NyctosaurusModel extends GeoModel<NyctosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class OrnitholestesModel extends GeoModel<OrnitholestesEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f};
@@ -79,7 +79,7 @@ public class OrnithomimusModel extends GeoModel<OrnithomimusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class OuranosaurusModel extends GeoModel<OuranosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class OviraptorModel extends GeoModel<OviraptorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -79,7 +79,7 @@ public class PachycephalosaurusModel extends GeoModel<PachycephalosaurusEntity>
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class ParasaurolophusModel extends GeoModel<ParasaurolophusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ProceratosaurusModel extends GeoModel<ProceratosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class ProcompsognathusModel extends GeoModel<ProcompsognathusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ProtoceratopsModel extends GeoModel<ProtoceratopsEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f };
@@ -79,7 +79,7 @@ public class PteranodonModel extends GeoModel<PteranodonEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class PterodaustroModel extends GeoModel<PterodaustroEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class QuetzalcoatlusModel extends GeoModel<QuetzalcoatlusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class RajasaurusModel extends GeoModel<RajasaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class RugopsModel extends GeoModel<RugopsEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class SegisaurusModel extends GeoModel<SegisaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f };
@@ -79,7 +79,7 @@ public class ShantungosaurusModel extends GeoModel<ShantungosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class SpinosaurusModel extends GeoModel<SpinosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class StegosaurusModel extends GeoModel<StegosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class StyracosaurusModel extends GeoModel<StyracosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class SuchomimusModel extends GeoModel<SuchomimusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class TapejaraModel extends GeoModel<TapejaraEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class TherizinosaurusModel extends GeoModel<TherizinosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ThescelosaurusModel extends GeoModel<ThescelosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f };
@@ -79,7 +79,7 @@ public class TitanosaurusModel extends GeoModel<TitanosaurusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f, 0.16f, 0.12f };
@@ -79,7 +79,7 @@ public class TriceratopsModel extends GeoModel<TriceratopsEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class TroodonModel extends GeoModel<TroodonEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class TropeognathusModel extends GeoModel<TropeognathusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -79,7 +79,7 @@ public class TupuxuaraModel extends GeoModel<TupuxuaraEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -93,7 +93,7 @@ public class TyrannosaurusRexModel extends GeoModel<TyrannosaurusRexEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class UtahraptorModel extends GeoModel<UtahraptorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -104,7 +104,7 @@ public class VelociraptorModel extends GeoModel<VelociraptorEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f, 0.42f, 0.30f, 0.22f };
@@ -79,7 +79,7 @@ public class ZhenyuanopterusModel extends GeoModel<ZhenyuanopterusEntity> {
// Direction: positive sway (left turn) -> tail swings right (negative yaw)
// Flip the sign here if the sway feels inverted
float baseYaw = sway * maxYawDeg * deg2rad;
float baseYaw = (sway * swayGain) * maxYawDeg * deg2rad;
float baseRoll = -baseYaw * rollFraction;
float[] weights = { 1.00f, 0.78f, 0.58f };
@@ -45,7 +45,7 @@ public class AlligatorGarEntity extends DinoEntityBase implements GeoEntity {
private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
public static final int BABY_TO_ADULT_AGE_TICKS = 28800;
private static final float ANIMAL_SCALE = 1.0F;
private static final float ANIMAL_SCALE = 1.4F;
private static final float MIN_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE - 0.2F) : ANIMAL_SCALE;
private static final float MAX_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE + 0.2F) : ANIMAL_SCALE;
@@ -164,9 +164,16 @@ public class BaryonyxEntity extends DinoEntityBase implements GeoEntity {
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> {
if (state.isMoving())
return state.setAndContinue(BaryonyxEntity.this.isSprinting() ? RawAnimation.begin().then("anim.baryonyx.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.baryonyx.walk", Animation.LoopType.LOOP));
controllers.add(new AnimationController<>(this, "MovementController", 5, state -> {
if (BaryonyxEntity.this.isWaterDeepEnoughToSwim()) {
return state.setAndContinue(RawAnimation.begin().then("anim.baryonyx.swim", Animation.LoopType.LOOP));
}
if (state.isMoving()) {
return state.setAndContinue(BaryonyxEntity.this.isSprinting()
? RawAnimation.begin().then("anim.baryonyx.run", Animation.LoopType.LOOP)
: RawAnimation.begin().then("anim.baryonyx.walk", Animation.LoopType.LOOP));
}
return state.setAndContinue(RawAnimation.begin().then("anim.baryonyx.idle", Animation.LoopType.LOOP));
}));
@@ -178,6 +185,10 @@ public class BaryonyxEntity extends DinoEntityBase implements GeoEntity {
.triggerableAnim("mouth", RawAnimation.begin().then("anim.baryonyx.mouth", Animation.LoopType.PLAY_ONCE)));
}
private boolean isWaterDeepEnoughToSwim() {
return this.isInWater() && this.level().getBlockState(this.blockPosition().below()).getFluidState().isSource();
}
private float getSignedTurnDelta() {
// Only consider the body (torso) rotation so head look does not affect tail sway
return Mth.wrapDegrees(this.yBodyRot - this.yBodyRotO);
@@ -51,7 +51,7 @@ public class CoelacanthEntity extends DinoEntityBase implements GeoEntity {
private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
public static final int BABY_TO_ADULT_AGE_TICKS = 28800;
private static final float ANIMAL_SCALE = 1.0F;
private static final float ANIMAL_SCALE = 1.5F;
private static final float MIN_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE - 0.2F) : ANIMAL_SCALE;
private static final float MAX_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE + 0.2F) : ANIMAL_SCALE;
@@ -45,7 +45,7 @@ public class MawsoniaEntity extends DinoEntityBase implements GeoEntity {
private AnimatableInstanceCache cache = new SingletonAnimatableInstanceCache(this);
public static final int BABY_TO_ADULT_AGE_TICKS = 28800;
private static final float ANIMAL_SCALE = 1.0F;
private static final float ANIMAL_SCALE = 1.8F;
private static final float MIN_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE - 0.2F) : ANIMAL_SCALE;
private static final float MAX_ANIMAL_SCALE = !Constants.DEBUG_SIZES ? (ANIMAL_SCALE + 0.2F) : ANIMAL_SCALE;
@@ -166,9 +166,16 @@ public class SpinosaurusEntity extends DinoEntityBase implements GeoEntity {
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> {
if (state.isMoving())
return state.setAndContinue(SpinosaurusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.spinosaurus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.spinosaurus.walk", Animation.LoopType.LOOP));
controllers.add(new AnimationController<>(this, "MovementController", 5, state -> {
if (SpinosaurusEntity.this.isWaterDeepEnoughToSwim()) {
return state.setAndContinue(RawAnimation.begin().then("anim.spinosaurus.swim", Animation.LoopType.LOOP));
}
if (state.isMoving()) {
return state.setAndContinue(SpinosaurusEntity.this.isSprinting()
? RawAnimation.begin().then("anim.spinosaurus.run", Animation.LoopType.LOOP)
: RawAnimation.begin().then("anim.spinosaurus.walk", Animation.LoopType.LOOP));
}
return state.setAndContinue(RawAnimation.begin().then("anim.spinosaurus.idle", Animation.LoopType.LOOP));
}));
@@ -180,6 +187,10 @@ public class SpinosaurusEntity extends DinoEntityBase implements GeoEntity {
.triggerableAnim("mouth", RawAnimation.begin().then("anim.spinosaurus.mouth", Animation.LoopType.PLAY_ONCE)));
}
private boolean isWaterDeepEnoughToSwim() {
return this.isInWater() && this.level().getBlockState(this.blockPosition().below()).getFluidState().isSource();
}
private float getSignedTurnDelta() {
// Only consider the body (torso) rotation so head look does not affect tail sway
return Mth.wrapDegrees(this.yBodyRot - this.yBodyRotO);
@@ -156,9 +156,16 @@ public class SuchomimusEntity extends DinoEntityBase implements GeoEntity {
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> {
if (state.isMoving())
return state.setAndContinue(SuchomimusEntity.this.isSprinting() ? RawAnimation.begin().then("anim.suchomimus.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.suchomimus.walk", Animation.LoopType.LOOP));
controllers.add(new AnimationController<>(this, "MovementController", 5, state -> {
if (SuchomimusEntity.this.isWaterDeepEnoughToSwim()) {
return state.setAndContinue(RawAnimation.begin().then("anim.suchomimus.swim", Animation.LoopType.LOOP));
}
if (state.isMoving()) {
return state.setAndContinue(SuchomimusEntity.this.isSprinting()
? RawAnimation.begin().then("anim.suchomimus.run", Animation.LoopType.LOOP)
: RawAnimation.begin().then("anim.suchomimus.walk", Animation.LoopType.LOOP));
}
return state.setAndContinue(RawAnimation.begin().then("anim.suchomimus.idle", Animation.LoopType.LOOP));
}));
@@ -170,6 +177,10 @@ public class SuchomimusEntity extends DinoEntityBase implements GeoEntity {
.triggerableAnim("mouth", RawAnimation.begin().then("anim.suchomimus.mouth", Animation.LoopType.PLAY_ONCE)));
}
private boolean isWaterDeepEnoughToSwim() {
return this.isInWater() && this.level().getBlockState(this.blockPosition().below()).getFluidState().isSource();
}
private float getSignedTurnDelta() {
// Only consider the body (torso) rotation so head look does not affect tail sway
return Mth.wrapDegrees(this.yBodyRot - this.yBodyRotO);
@@ -167,9 +167,16 @@ public class TyrannosaurusRexEntity extends DinoEntityBase implements GeoEntity
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "Walk/Run/Idle", 5, state -> {
if (state.isMoving())
return state.setAndContinue(TyrannosaurusRexEntity.this.isSprinting() ? RawAnimation.begin().then("anim.tyrannosaurus_rex.run", Animation.LoopType.LOOP) : RawAnimation.begin().then("anim.tyrannosaurus_rex.walk", Animation.LoopType.LOOP));
controllers.add(new AnimationController<>(this, "MovementController", 5, state -> {
if (TyrannosaurusRexEntity.this.isWaterDeepEnoughToSwim()) {
return state.setAndContinue(RawAnimation.begin().then("anim.tyrannosaurus_rex.swim", Animation.LoopType.LOOP));
}
if (state.isMoving()) {
return state.setAndContinue(TyrannosaurusRexEntity.this.isSprinting()
? RawAnimation.begin().then("anim.tyrannosaurus_rex.run", Animation.LoopType.LOOP)
: RawAnimation.begin().then("anim.tyrannosaurus_rex.walk", Animation.LoopType.LOOP));
}
return state.setAndContinue(RawAnimation.begin().then("anim.tyrannosaurus_rex.idle", Animation.LoopType.LOOP));
}));
@@ -181,6 +188,10 @@ public class TyrannosaurusRexEntity extends DinoEntityBase implements GeoEntity
.triggerableAnim("mouth", RawAnimation.begin().then("anim.tyrannosaurus_rex.mouth", Animation.LoopType.PLAY_ONCE)));
}
private boolean isWaterDeepEnoughToSwim() {
return this.isInWater() && this.level().getBlockState(this.blockPosition().below()).getFluidState().isSource();
}
private float getSignedTurnDelta() {
// Only consider the body (torso) rotation so head look does not affect tail sway
return Mth.wrapDegrees(this.yBodyRot - this.yBodyRotO);
@@ -487,106 +487,6 @@
}
}
},
"anim.alligator_gar.mouth": {
"loop": "hold_on_last_frame",
"animation_length": 1.25,
"bones": {
"Jaw": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.25": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.0": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Lowerjawfront": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [40, 0, 0]
},
"1.25": {
"vector": [0, 0, 0]
}
}
},
"root": {
"position": {
"vector": [0, 0, -20]
}
},
"Lowerjawrear": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.625": {
"post": {
"vector": [12.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Lowerjawtop": {
"rotation": {
"0.0": {
"post": {
"vector": [-10, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [-10, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Neck": {
"rotation": {
"0.0": {
"vector": [15, 0, 0]
},
"1.25": {
"vector": [15, 0, 0]
}
}
}
}
},
"anim.alligator_gar.flop": {
"loop": true,
"animation_length": 0.5,
@@ -727,13 +627,13 @@
"root": {
"position": {
"0.0": {
"vector": [4, -16, -17]
"vector": [4, 4, -17]
},
"0.1667": {
"vector": [4, -17, -16]
"vector": [4, 1, -17]
},
"0.5": {
"vector": [4, -16, -17]
"vector": [4, 4, -17]
}
}
},
@@ -3725,7 +3725,137 @@
}
}
}
},
"anim.baryonyx.swim": {
"loop": true,
"animation_length": 3.25,
"bones": {
"Neck6": {
"rotation": {
"vector": [-7.5, 0, 0]
}
},
"geckolib_format_version": 2
"root": {
"rotation": {
"vector": [2.5, 0, 0]
},
"position": {
"vector": ["-math.sin(q.anim_time*90*1.25)*-1.5", -1, 0]
}
},
"RightThigh": {
"rotation": {
"vector": ["32.5+math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"RightCalf1": {
"rotation": {
"vector": ["math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootRight": {
"rotation": {
"vector": ["17.5+math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
},
"Body1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*7.5", "math.sin(q.anim_time*90*1.25)*-0.5"]
}
},
"Tail1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*12.5", 0]
}
},
"Tail2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-20", 0]
}
},
"Tail3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-17.5", 0]
}
},
"Tail4": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-12.5", 0]
}
},
"Tail5": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-20", 0]
}
},
"Body2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-7.5", 0]
}
},
"Body3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-10", 0]
}
},
"Neck_under2": {
"rotation": {
"vector": [15, 0, 0]
},
"position": {
"vector": [0, 2, 0]
}
},
"Neck3": {
"rotation": {
"vector": [-12.5, "-math.sin(q.anim_time*90*1.25)*12.5", "math.sin(q.anim_time*90*1.25)*0.5"]
}
},
"Neck2": {
"rotation": {
"vector": [-5, "-math.sin(q.anim_time*90*1.25)*7.5", 0]
}
},
"Neck1": {
"rotation": {
"vector": [-2.5, "-math.sin(q.anim_time*90*1.25+60)*-7.5", 0]
}
},
"Head": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-5", 0]
}
},
"Neck_under1": {
"rotation": {
"vector": [-30, "-math.sin(q.anim_time*90*1.25)*-5", 0]
},
"position": {
"vector": [0, 1.7, -0.9]
}
},
"LeftThigh": {
"rotation": {
"vector": ["32.5-math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"LeftCalf1": {
"rotation": {
"vector": ["-math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootLeft": {
"rotation": {
"vector": ["17.5-math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
}
}
}
}
}
@@ -735,62 +735,6 @@
}
}
},
"anim.coelacanth.mouth": {
"loop": "hold_on_last_frame",
"animation_length": 1.25,
"bones": {
"Jaw": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.25": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.0": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Lowerjawfront": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.5": {
"post": {
"vector": [40, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
}
}
},
"anim.coelacanth.flop": {
"loop": true,
"animation_length": 0.5,
@@ -1019,25 +963,28 @@
},
"position": {
"0.0": {
"vector": [0, -2, 0]
"post": {
"vector": [0, 12, 0]
},
"lerp_mode": "catmullrom"
},
"0.125": {
"pre": {
"vector": [0, 0, 0]
},
"post": {
"vector": [0, 0, 0]
"vector": [0, 14, 0]
},
"lerp_mode": "catmullrom"
},
"0.375": {
"post": {
"vector": [0, -4, 0]
"vector": [0, 14, 0]
},
"lerp_mode": "catmullrom"
},
"0.5": {
"vector": [0, -2, 0]
"post": {
"vector": [0, 12, 0]
},
"lerp_mode": "catmullrom"
}
}
},
@@ -1037,106 +1037,6 @@
}
}
}
},
"anim.mawsonia.mouth": {
"loop": "hold_on_last_frame",
"animation_length": 1.25,
"bones": {
"Jaw": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.25": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.0": {
"post": {
"vector": [22.5, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Lowerjawfront": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.5": {
"post": {
"vector": [40, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"shape6": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.5": {
"post": {
"vector": [40, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
},
"Lowerjawforward2": {
"rotation": {
"0.0": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
},
"0.5": {
"post": {
"vector": [40, 0, 0]
},
"lerp_mode": "catmullrom"
},
"1.25": {
"post": {
"vector": [0, 0, 0]
},
"lerp_mode": "catmullrom"
}
}
}
}
}
}
}
@@ -3424,7 +3424,121 @@
}
}
}
},
"anim.spinosaurus.swim": {
"loop": true,
"animation_length": 3.25,
"bones": {
"Neck6": {
"rotation": {
"vector": [-7.5, 0, 0]
}
},
"geckolib_format_version": 2
"root": {
"rotation": {
"vector": [-5, 0, 0]
},
"position": {
"vector": ["-math.sin(q.anim_time*90*1.25)*-1.5", 1, 0]
}
},
"RightThigh": {
"rotation": {
"vector": ["32.5+math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"RightCalf1": {
"rotation": {
"vector": ["math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootRight": {
"rotation": {
"vector": ["17.5+math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
},
"Body1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*7.5", "math.sin(q.anim_time*90*1.25)*-0.5"]
}
},
"Tail1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*12.5", 0]
}
},
"Tail2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-20", 0]
}
},
"Tail3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-17.5", 0]
}
},
"Tail4": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-12.5", 0]
}
},
"Tail5": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-20", 0]
}
},
"Body2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-7.5", 0]
}
},
"Body3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-10", 0]
}
},
"Neck1": {
"rotation": {
"vector": [15, "-math.sin(q.anim_time*90*1.25+60)*-7.5", 0]
}
},
"Neck2": {
"rotation": {
"vector": [7.5, "-math.sin(q.anim_time*90*1.25)*7.5", 0]
}
},
"Neck3": {
"rotation": {
"vector": [-12.5, "-math.sin(q.anim_time*90*1.25)*12.5", "math.sin(q.anim_time*90*1.25)*0.5"]
}
},
"Head": {
"rotation": {
"vector": [-10, "-math.sin(q.anim_time*90*1.25)*-5", 0]
}
},
"LeftThigh": {
"rotation": {
"vector": ["32.5-math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"LeftCalf1": {
"rotation": {
"vector": ["-math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootLeft": {
"rotation": {
"vector": ["17.5-math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
}
}
}
}
}
@@ -7082,6 +7082,229 @@
}
}
}
},
"anim.suchomimus.swim": {
"loop": true,
"animation_length": 3.25,
"bones": {
"Neck6": {
"rotation": {
"vector": [-7.5, 0, 0]
}
},
"root": {
"rotation": {
"vector": [2.5, 0, 0]
},
"position": {
"vector": ["-math.sin(q.anim_time*90*1.25)*-1.5", -31, 0]
}
},
"RightThigh": {
"rotation": {
"vector": ["32.5+math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"RightCalf1": {
"rotation": {
"vector": ["math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootRight": {
"rotation": {
"vector": ["17.5+math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
},
"Body1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*7.5", "math.sin(q.anim_time*90*1.25)*-0.5"]
}
},
"Tail1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*12.5", 0]
}
},
"Tail2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-20", 0]
}
},
"Tail3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-17.5", 0]
}
},
"Tail4": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-12.5", 0]
}
},
"Tail5": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-20", 0]
}
},
"Body2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-7.5", 0]
}
},
"Body3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-10", 0]
}
},
"Neck_under2": {
"rotation": {
"vector": [15, 0, 0]
},
"position": {
"vector": [0, 2, 0]
}
},
"Neck3": {
"rotation": {
"vector": [-12.5, "-math.sin(q.anim_time*90*1.25)*12.5", "math.sin(q.anim_time*90*1.25)*0.5"]
}
},
"Neck2": {
"rotation": {
"vector": [-5, "-math.sin(q.anim_time*90*1.25)*7.5", 0]
}
},
"Neck1": {
"rotation": {
"vector": [-2.5, "-math.sin(q.anim_time*90*1.25+60)*-7.5", 0]
}
},
"Neck_under1": {
"rotation": {
"vector": [-30, "-math.sin(q.anim_time*90*1.25)*-5", 0]
},
"position": {
"vector": [0, 1.7, -0.9]
}
},
"LeftThigh": {
"rotation": {
"vector": ["32.5-math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 3, 0]
}
},
"LeftCalf1": {
"rotation": {
"vector": ["-math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"FootLeft": {
"rotation": {
"vector": ["17.5-math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
},
"Right Thigh": {
"rotation": {
"vector": ["32.5+math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"Right Calf 1": {
"rotation": {
"vector": ["-math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"Foot Right": {
"rotation": {
"vector": ["17.5-math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
},
"Body 1": {
"rotation": {
"vector": [2.5, "-math.sin(q.anim_time*90*1.25+60)*7.5", "math.sin(q.anim_time*90*1.25)*-0.5"]
},
"position": {
"vector": [0, 1, 0]
}
},
"Tail 1": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*12.5", 0]
}
},
"Tail 2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-20", 0]
}
},
"Tail 3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-17.5", 0]
}
},
"Tail 4": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-12.5", 0]
}
},
"Tail 5": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-20", 0]
}
},
"Body 2": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-7.5", 0]
}
},
"Body 3": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25+60)*-10", 0]
}
},
"Neck 1": {
"rotation": {
"vector": [7.5, "-math.sin(q.anim_time*90*1.25)*7.5", 0]
}
},
"Neck 2": {
"rotation": {
"vector": [-12.5, "-math.sin(q.anim_time*90*1.25)*12.5", "math.sin(q.anim_time*90*1.25)*0.5"]
},
"position": {
"vector": [0, 0, 1]
}
},
"Head": {
"rotation": {
"vector": [0, "-math.sin(q.anim_time*90*1.25)*-5", 0]
}
},
"Left Thigh": {
"rotation": {
"vector": ["32.5+math.sin(q.anim_time*90*1.25)*-7.5", 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"Left Calf 1": {
"rotation": {
"vector": ["math.sin(q.anim_time*90*1.25+60)*7.5", 0, 0]
}
},
"Foot Left": {
"rotation": {
"vector": ["17.5+math.sin(q.anim_time*90*1.25+60)*20", 0, 0]
}
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More