diff --git a/common/build.gradle b/common/build.gradle index 38199053..7d413be2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,26 +7,27 @@ dependencies { // modImplementation("curse.maven:create-${create_curseforge_id}:${create_curseforge_file_id}") // modImplementation("curse.maven:selene-499980:4754433") compileOnly("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") - compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") - compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") - compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") - compileOnly("curse.maven:aperture-${project.aperture_curseforge_id}:${project.aperture_curseforge_file_id}") - compileOnly("curse.maven:inventory_pets-${project.inventory_pets_curseforge_id}:${project.inventory_pets_curseforge_file_id}") - compileOnly("curse.maven:cataclysm-${project.cataclysm_curseforge_id}:${project.cataclysm_curseforge_file_id}") - compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") - compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") +// compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") +// compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") +// compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") +// compileOnly("curse.maven:aperture-${project.aperture_curseforge_id}:${project.aperture_curseforge_file_id}") +// compileOnly("curse.maven:inventory_pets-${project.inventory_pets_curseforge_id}:${project.inventory_pets_curseforge_file_id}") +// compileOnly("curse.maven:cataclysm-${project.cataclysm_curseforge_id}:${project.cataclysm_curseforge_file_id}") +// compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") +// compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") // compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") // compileOnly("curse.maven:geckolib-${project.geckolib_curseforge_id}:${project.geckolib_curseforge_file_id}") compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-fabric.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) // compileOnly(files("$rootDir/infinite_dimensions_jars/antarchy-1.0.0+1.21.1-neoforge.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/soul-fire-d-neoforge-1.21-6.1.0.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/prometheus-neoforge-1.21-1.2.5.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/soul-fire-d-neoforge-1.21-6.1.0.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/prometheus-neoforge-1.21-1.2.5.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/sable-neoforge-1.21.1-2.0.3.jar")) + compileOnly(files("$rootDir/infinite_dimensions_jars/antarchy-1.0.0+1.21.1-neoforge.jar")) compileOnly("software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}") // // compileOnly group: 'org.ow2.asm', name: 'asm-tree', version: '9.4' diff --git a/common/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common/src/main/java/com/craisinlord/antarchy/Antarchy.java index aa7fc096..a462f362 100644 --- a/common/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy; +import com.craisinlord.antarchy.content.AttributeRangeInit; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -10,6 +11,7 @@ public class Antarchy { public static final Logger LOGGER = LogManager.getLogger(); public static void init() { + AttributeRangeInit.apply(); ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 2efe7e24..661e6bf3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -5,7 +5,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; public final class AntarchySettings { - private static boolean disableInfinityBookPortalCreation = false; + private static boolean disableInfinityBookPortalCreation = true; private static boolean easterBunnyEnabled = true; private static int easterBunnyNaturalSpawnChancePercent = 1; private static boolean rainbowAntsLeadToInfinityDimensions = true; @@ -31,7 +31,7 @@ public final class AntarchySettings { private static double waspHealth = 16.0D; private static double waspAttackDamage = 4.0D; private static double waspMovementSpeed = 0.39D; - private static double bomberHealth = 10.0D; + private static double bomberHealth = 15.0D; private static double bomberAttackDamage = 4.0D; private static double bomberExplosionDamage = 8.0D; private static double bomberExplosionRadius = 4.0D; @@ -90,6 +90,8 @@ public final class AntarchySettings { private static ResourceKey rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia"); private static double krakenHealth = 1500.0D; private static double krakenAttackDamage = 45.0D; + private static double octopusBombHealth = 100.0D; + private static double octopusBombAttackDamage = 16.0D; private static double brutalflyHealth = 400.0D; private static double brutalflySwipeDamage = 15.0D; private static double brutalflySpitDamage = 5.0D; @@ -98,6 +100,12 @@ public final class AntarchySettings { private static double mantisMovementSpeed = 0.42D; private static double mantisFlyingSpeed = 0.77D; private static boolean mantisIgnoreLightLevel = false; + private static double alphaMantisHealth = 500.0D; + private static double alphaMantisAttackDamage = 18.0D; + private static double alphaMantisMovementSpeed = 0.42D; + private static double alphaMantisFlyingSpeed = 0.77D; + private static int alphaMantisSummonIntervalTicks = 300; + private static int alphaMantisMaxMinions = 4; private static double krakenProjectileDamageTakenMultiplier = 0.5D; private static boolean krakenSquidSpawnEnabled = true; private static boolean krakenMassSpawnEnabled = true; @@ -143,12 +151,12 @@ public final class AntarchySettings { private static double nightmareSwordBaseDamage = 15.0D; - private static double nightmareSwordScalingFactor = 1.0D; + private static double nightmareSwordScalingFactor = 1.5D; private static boolean basiliskPetrifyingGazeEnabled = true; private static int basiliskSpawnMaxLightLevel = 5; private static double basiliskHealth = 150.0D; private static double basiliskAttackDamage = 36.0D; - private static double basiliskMovementSpeed = 0.30D; + private static double basiliskMovementSpeed = 0.225D; private static double basiliskArmor = 6.0D; private static double basiliskKnockbackResistance = 0.5D; private static double basiliskFollowRange = 28.0D; @@ -225,23 +233,23 @@ public final class AntarchySettings { private static final int reverieAmbientTargetMaxAgeTicks = 40; private static final int reverieAmbientPulseIntervalMinTicks = 12; private static final int reverieAmbientPulseIntervalMaxTicks = 19; - private static double emperorScorpionHealth = 100.0D; - private static double emperorScorpionAttackDamage = 12.0D; + private static double emperorScorpionHealth = 400.0D; + private static double emperorScorpionAttackDamage = 28.0D; private static double emperorScorpionMovementSpeed = 0.32D; - private static double emperorScorpionArmor = 6.0D; - private static double emperorScorpionKnockbackResistance = 0.6D; - private static double emperorScorpionFollowRange = 32.0D; + private static double emperorScorpionArmor = 25.0D; + private static double emperorScorpionKnockbackResistance = 0.8D; + private static double emperorScorpionFollowRange = 40.0D; private static int emperorScorpionXpReward = 25; - private static int emperorScorpionClawAnimTicks = 12; - private static int emperorScorpionClawHitTick = 6; - private static int emperorScorpionClawCooldownTicks = 16; - private static int emperorScorpionStingAnimTicks = 18; - private static int emperorScorpionStingHitTick = 9; - private static int emperorScorpionStingCooldownTicks = 42; - private static int emperorScorpionPoisonTicks = 100; - private static int emperorScorpionWeaknessTicks = 80; - private static int emperorScorpionSummonIntervalTicks = 180; - private static int emperorScorpionMaxSummonedScorpions = 4; + private static int emperorScorpionClawAnimTicks = 23; + private static int emperorScorpionClawHitTick = 12; + private static int emperorScorpionClawCooldownTicks = 28; + private static int emperorScorpionStingAnimTicks = 25; + private static int emperorScorpionStingHitTick = 13; + private static int emperorScorpionStingCooldownTicks = 60; + private static int emperorScorpionPoisonTicks = 300; + private static int emperorScorpionWeaknessTicks = 120; + private static int emperorScorpionSummonIntervalTicks = 140; + private static int emperorScorpionMaxSummonedScorpions = 8; private static double scorpionHealth = 30.0D; private static double scorpionAttackDamage = 5.0D; private static double scorpionMovementSpeed = 0.29D; @@ -271,6 +279,10 @@ public final class AntarchySettings { private static double bedBugAttackLungeHorizontalSpeed = 0.42D; private static double bedBugAttackLungeVerticalSpeed = 0.1D; private static float bedBugHealAmount = 2.0F; + private static double jumpyBugHealth = 100.0D; + private static double jumpyBugPounceDamage = 12.0D; + private static double jumpyBugLatchDamage = 1.0D; + private static double jumpyBugCamouflageAlpha = 0.18D; private static double brutalflyArmor = 10.0D; private static double brutalflyArmorToughness = 4.0D; private static double brutalflyKnockbackResistance = 0.7D; @@ -426,6 +438,7 @@ public final class AntarchySettings { private static double ductTapeRepairPercentPerUse = 0.25D; private static double ultimateArmorKnockbackResistance = 0.1D; private static double nightmareArmorKnockbackResistance = 0.1D; + private static double primordialArmorKnockbackPerPiece = 0.5D; private static int fallenKingCrownArmorValue = 2; private static double fallenKingCrownArmorToughness = 0.0D; private static boolean elythiaFireflyParticlesEnabled = true; @@ -447,14 +460,25 @@ public final class AntarchySettings { private static double toreterrorHealth = 300.0D; private static double toreterrorJumpAttackDamage = 14.0D; private static double toreterrorJumpAttackKnockback = 2.5D; - private static double toreterrorSpinDamage = 8.0D; - private static double toreterrorSpinKnockback = 1.5D; + private static double toreterrorSpinDamage = 6.0D; + private static double toreterrorSpinKnockback = 0.9D; private static double toreterrorRangedWaterBombChance = 0.5D; + private static double toreterrorProjectileDamageMultiplier = 0.5D; private static double waterBombDamage = 6.0D; private static int waterBombLifetimeTicks = 120; private static double waterBombGravity = 0.12D; private static double waterBombKnockback = 1.2D; private static double waterCannonCooldownSeconds = 1.5D; + private static double creepingHorrorHealth = 15.0D; + private static double creepingHorrorAttackDamage = 6.0D; + private static double lurkingTerrorHealth = 15.0D; + private static double lurkingTerrorAttackDamage = 6.0D; + private static double cheepHealth = 8.0D; + private static double cheepAttackDamage = 3.0D; + private static double dorrieHealth = 60.0D; + private static double herculesBeetleHealth = 500.0D; + private static double herculesBeetleAttackDamage = 30.0D; + private static double herculesBeetleChargeDamage = 40.0D; private AntarchySettings() { } @@ -723,6 +747,18 @@ public final class AntarchySettings { return krakenAttackDamage; } + public static double octopusBombHealth() { + return octopusBombHealth; + } + + public static void setOctopusBombHealth(double value) { octopusBombHealth = value; } + + public static double octopusBombAttackDamage() { + return octopusBombAttackDamage; + } + + public static void setOctopusBombAttackDamage(double value) { octopusBombAttackDamage = value; } + public static double brutalflyHealth() { return brutalflyHealth; } @@ -759,6 +795,30 @@ public final class AntarchySettings { mantisIgnoreLightLevel = value; } + public static double alphaMantisHealth() { + return alphaMantisHealth; + } + + public static double alphaMantisAttackDamage() { + return alphaMantisAttackDamage; + } + + public static double alphaMantisMovementSpeed() { + return alphaMantisMovementSpeed; + } + + public static double alphaMantisFlyingSpeed() { + return alphaMantisFlyingSpeed; + } + + public static int alphaMantisSummonIntervalTicks() { + return alphaMantisSummonIntervalTicks; + } + + public static int alphaMantisMaxMinions() { + return alphaMantisMaxMinions; + } + public static double waspHealth() { return waspHealth; } @@ -1163,6 +1223,30 @@ public final class AntarchySettings { mantisFlyingSpeed = value; } + public static void setAlphaMantisHealth(double value) { + alphaMantisHealth = value; + } + + public static void setAlphaMantisAttackDamage(double value) { + alphaMantisAttackDamage = value; + } + + public static void setAlphaMantisMovementSpeed(double value) { + alphaMantisMovementSpeed = value; + } + + public static void setAlphaMantisFlyingSpeed(double value) { + alphaMantisFlyingSpeed = value; + } + + public static void setAlphaMantisSummonIntervalTicks(int value) { + alphaMantisSummonIntervalTicks = value; + } + + public static void setAlphaMantisMaxMinions(int value) { + alphaMantisMaxMinions = value; + } + public static void setKrakenProjectileDamageTakenMultiplier(double value) { krakenProjectileDamageTakenMultiplier = value; } @@ -1810,6 +1894,18 @@ public final class AntarchySettings { public static float bedBugHealAmount() { return bedBugHealAmount; } public static void setBedBugHealAmount(float value) { bedBugHealAmount = value; } + public static double jumpyBugHealth() { return jumpyBugHealth; } + public static void setJumpyBugHealth(double value) { jumpyBugHealth = value; } + + public static double jumpyBugPounceDamage() { return jumpyBugPounceDamage; } + public static void setJumpyBugPounceDamage(double value) { jumpyBugPounceDamage = value; } + + public static double jumpyBugLatchDamage() { return jumpyBugLatchDamage; } + public static void setJumpyBugLatchDamage(double value) { jumpyBugLatchDamage = value; } + + public static double jumpyBugCamouflageAlpha() { return jumpyBugCamouflageAlpha; } + public static void setJumpyBugCamouflageAlpha(double value) { jumpyBugCamouflageAlpha = value; } + public static double brutalflyArmor() { return brutalflyArmor; } public static void setBrutalflyArmor(double value) { brutalflyArmor = value; } @@ -2275,6 +2371,9 @@ public final class AntarchySettings { public static double nightmareArmorKnockbackResistance() { return nightmareArmorKnockbackResistance; } public static void setNightmareArmorKnockbackResistance(double value) { nightmareArmorKnockbackResistance = value; } + public static double primordialArmorKnockbackPerPiece() { return primordialArmorKnockbackPerPiece; } + public static void setPrimordialArmorKnockbackPerPiece(double value) { primordialArmorKnockbackPerPiece = value; } + public static int fallenKingCrownArmorValue() { return fallenKingCrownArmorValue; } public static void setFallenKingCrownArmorValue(int value) { fallenKingCrownArmorValue = value; } @@ -2330,6 +2429,8 @@ public final class AntarchySettings { public static void setToreterrorSpinKnockback(double v) { toreterrorSpinKnockback = v; } public static double toreterrorRangedWaterBombChance() { return toreterrorRangedWaterBombChance; } public static void setToreterrorRangedWaterBombChance(double v) { toreterrorRangedWaterBombChance = v; } + public static double toreterrorProjectileDamageMultiplier() { return toreterrorProjectileDamageMultiplier; } + public static void setToreterrorProjectileDamageMultiplier(double v) { toreterrorProjectileDamageMultiplier = v; } public static double waterBombDamage() { return waterBombDamage; } public static void setWaterBombDamage(double v) { waterBombDamage = v; } public static int waterBombLifetimeTicks() { return waterBombLifetimeTicks; } @@ -2340,4 +2441,25 @@ public final class AntarchySettings { public static void setWaterBombKnockback(double v) { waterBombKnockback = v; } public static double waterCannonCooldownSeconds() { return waterCannonCooldownSeconds; } public static void setWaterCannonCooldownSeconds(double v) { waterCannonCooldownSeconds = v; } + + public static double creepingHorrorHealth() { return creepingHorrorHealth; } + public static void setCreepingHorrorHealth(double v) { creepingHorrorHealth = v; } + public static double creepingHorrorAttackDamage() { return creepingHorrorAttackDamage; } + public static void setCreepingHorrorAttackDamage(double v) { creepingHorrorAttackDamage = v; } + public static double lurkingTerrorHealth() { return lurkingTerrorHealth; } + public static void setLurkingTerrorHealth(double v) { lurkingTerrorHealth = v; } + public static double lurkingTerrorAttackDamage() { return lurkingTerrorAttackDamage; } + public static void setLurkingTerrorAttackDamage(double v) { lurkingTerrorAttackDamage = v; } + public static double cheepHealth() { return cheepHealth; } + public static void setCheepHealth(double v) { cheepHealth = v; } + public static double cheepAttackDamage() { return cheepAttackDamage; } + public static void setCheepAttackDamage(double v) { cheepAttackDamage = v; } + public static double dorrieHealth() { return dorrieHealth; } + public static double herculesBeetleHealth() { return herculesBeetleHealth; } + public static void setHerculesBeetleHealth(double v) { herculesBeetleHealth = v; } + public static double herculesBeetleAttackDamage() { return herculesBeetleAttackDamage; } + public static void setHerculesBeetleAttackDamage(double v) { herculesBeetleAttackDamage = v; } + public static double herculesBeetleChargeDamage() { return herculesBeetleChargeDamage; } + public static void setHerculesBeetleChargeDamage(double v) { herculesBeetleChargeDamage = v; } + public static void setDorrieHealth(double v) { dorrieHealth = v; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java b/common/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java new file mode 100644 index 00000000..b80fcf06 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/config/ConfigResetGuard.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.config; + +import com.craisinlord.antarchy.Antarchy; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public final class ConfigResetGuard { + public static final int RESET_GENERATION = 1; + private static final String MARKER_FILE_NAME = ".config_generation"; + + private ConfigResetGuard() { + } + + public static void wipeIfNeeded(Path configDir, Path... configFiles) { + Path markerPath = configDir.resolve(MARKER_FILE_NAME); + if (readGeneration(markerPath) >= RESET_GENERATION) { + return; + } + + for (Path configFile : configFiles) { + try { + if (Files.deleteIfExists(configFile)) { + Antarchy.LOGGER.info("Reset config file {} to defaults (config generation {})", configFile, RESET_GENERATION); + } + } catch (IOException e) { + Antarchy.LOGGER.warn("Failed to delete config file {} during config reset", configFile, e); + } + } + + writeGeneration(markerPath); + } + + private static int readGeneration(Path markerPath) { + if (!Files.exists(markerPath)) { + return 0; + } + + try { + return Integer.parseInt(Files.readString(markerPath).trim()); + } catch (IOException | NumberFormatException e) { + return 0; + } + } + + private static void writeGeneration(Path markerPath) { + try { + Files.createDirectories(markerPath.getParent()); + Files.writeString(markerPath, Integer.toString(RESET_GENERATION)); + } catch (IOException e) { + Antarchy.LOGGER.warn("Failed to write config generation marker at {}", markerPath, e); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index d70e3ecc..4081b129 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -5,9 +5,13 @@ import com.craisinlord.antarchy.content.entity.BomberEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; import com.craisinlord.antarchy.content.entity.CaterpillarEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; @@ -15,6 +19,7 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -25,6 +30,7 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import java.util.function.Supplier; import net.minecraft.core.Holder; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.EntityType; @@ -49,6 +55,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> MISSILE_SQUID = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> MOLEWORM = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MANTIS = (Supplier>) UNBOUND; @@ -79,6 +87,20 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> WATER_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> CREEPING_HORROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> LURKING_TERROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> STINK_BUG = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> CHEEP = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> DORRIE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> HERCULES_BEETLE = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHEEP_ITEM = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_LOG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_SAPLING = (Supplier) UNBOUND; @@ -103,6 +125,12 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier CRACKED_SHELLSTONE_BRICKS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier SHELLSTONE_STAIRS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier SHELLSTONE_SLAB = (Supplier) UNBOUND; @@ -129,6 +157,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier NYXITE_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier CHITEN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHITEN_SPIKE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier POTENT_NYXITE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier ANTIMETAL = (Supplier) UNBOUND; @@ -153,6 +185,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier REVERIE_BOTTLE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier STINK_BUG_ITEM = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> DREAD = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DOUBLE_DAMAGE_CHANCE = (Supplier>) UNBOUND; @@ -165,6 +199,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> INVERTED_EFFECT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> STINKY_EFFECT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier OURANWOOD_ACORN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier MOSSY_OURANWOOD_LOG = (Supplier) UNBOUND; @@ -179,12 +215,18 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier BED_BUG_EGG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier CREEPING_HORROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LURKING_TERROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier WASP_NEST = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier HUSHWEED = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier SQUIRREL_NEST_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier BRUTALFLY_COCOON_SPAWNER = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> ANT_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DREAM_CAMPFIRE_BLOCK_ENTITY = (Supplier>) UNBOUND; @@ -192,6 +234,10 @@ public final class AntarchyObjects { public static Supplier> WASP_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> HUSHWEED_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_GAS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_FLY = (Supplier) UNBOUND; private AntarchyObjects() { } @@ -216,6 +262,7 @@ public final class AntarchyObjects { Supplier> hushProjectile, Supplier> toreterror, Supplier> waterBomb, + Supplier> cheep, Supplier duplicatorLog, Supplier duplicatorSapling, Supplier ductTape, @@ -228,6 +275,9 @@ public final class AntarchyObjects { Supplier chiseledShellstone, Supplier mossyShellstoneBricks, Supplier crackedShellstoneBricks, + Supplier mossyShellstoneBrickStairs, + Supplier mossyShellstoneBrickSlab, + Supplier mossyShellstoneBrickWall, Supplier shellstoneStairs, Supplier shellstoneSlab, Supplier shellstoneWall, @@ -256,6 +306,7 @@ public final class AntarchyObjects { Supplier> dread, Supplier> paralyzedEffect, Supplier> invertedEffect, + Supplier> stinkyEffect, Supplier ouranwoodAcornBlock, Supplier mossyOuranwoodLog, Supplier mossyOuranwoodWood, @@ -266,10 +317,13 @@ public final class AntarchyObjects { Supplier waspNest, Supplier hushweed, Supplier squirrelNestBlock, + Supplier brutalflyCocoonSpawner, Supplier> antNestBlockEntity, Supplier> dreamCampfireBlockEntity, Supplier> waspNestBlockEntity, Supplier> hushweedBlockEntity, + Supplier stinkyGas, + Supplier stinkyFly, Supplier> doubleDamageChance, Supplier> bloodglassMaxHearts, Supplier> bloodglassWard @@ -293,6 +347,7 @@ public final class AntarchyObjects { HUSH_PROJECTILE = hushProjectile; TORETERROR = toreterror; WATER_BOMB = waterBomb; + CHEEP = cheep; DUPLICATOR_LOG = duplicatorLog; DUPLICATOR_SAPLING = duplicatorSapling; DUCT_TAPE = ductTape; @@ -305,6 +360,9 @@ public final class AntarchyObjects { CHISELED_SHELLSTONE = chiseledShellstone; MOSSY_SHELLSTONE_BRICKS = mossyShellstoneBricks; CRACKED_SHELLSTONE_BRICKS = crackedShellstoneBricks; + MOSSY_SHELLSTONE_BRICK_STAIRS = mossyShellstoneBrickStairs; + MOSSY_SHELLSTONE_BRICK_SLAB = mossyShellstoneBrickSlab; + MOSSY_SHELLSTONE_BRICK_WALL = mossyShellstoneBrickWall; SHELLSTONE_STAIRS = shellstoneStairs; SHELLSTONE_SLAB = shellstoneSlab; SHELLSTONE_WALL = shellstoneWall; @@ -333,6 +391,7 @@ public final class AntarchyObjects { DREAD = dread; PARALYZED_EFFECT = paralyzedEffect; INVERTED_EFFECT = invertedEffect; + STINKY_EFFECT = stinkyEffect; OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock; MOSSY_OURANWOOD_LOG = mossyOuranwoodLog; MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood; @@ -343,10 +402,13 @@ public final class AntarchyObjects { WASP_NEST = waspNest; HUSHWEED = hushweed; SQUIRREL_NEST_BLOCK = squirrelNestBlock; + BRUTALFLY_COCOON_SPAWNER = brutalflyCocoonSpawner; ANT_NEST_BLOCK_ENTITY = antNestBlockEntity; DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity; WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; + STINKY_GAS = stinkyGas; + STINKY_FLY = stinkyFly; DOUBLE_DAMAGE_CHANCE = doubleDamageChance; BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; BLOODGLASS_WARD = bloodglassWard; @@ -356,6 +418,14 @@ public final class AntarchyObjects { return state.is(DUPLICATOR_LOG.get()) || state.is(DUPLICATOR_SAPLING.get()); } + public static void setOctopusBomb(Supplier> supplier) { + OCTOPUS_BOMB = supplier; + } + + public static void setHerculesBeetle(Supplier> supplier) { + HERCULES_BEETLE = supplier; + } + public static BlockBehaviour.Properties shellstoneProperties() { return BlockBehaviour.Properties.ofFullCopy(Blocks.STONE).requiresCorrectToolForDrops(); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index cd113d7a..08a19965 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -119,6 +119,23 @@ public final class AntarchySoundEvents { public static Supplier MOLEVORE_HURT = (Supplier) UNBOUND; public static Supplier MOLEVORE_ATTACK = (Supplier) UNBOUND; public static Supplier MOLEVORE_DIG = (Supplier) UNBOUND; + public static Supplier BOMBER_WALK = (Supplier) UNBOUND; + public static Supplier BOMBER_KNOCK = (Supplier) UNBOUND; + public static Supplier BOMBER_EXPLODE = (Supplier) UNBOUND; + public static Supplier TORETERROR_IDLE = (Supplier) UNBOUND; + public static Supplier TORETERROR_HURT = (Supplier) UNBOUND; + public static Supplier TORETERROR_DEATH = (Supplier) UNBOUND; + public static Supplier TORETERROR_BOMBER_FIRE = (Supplier) UNBOUND; + public static Supplier TORETERROR_JUMP_UP = (Supplier) UNBOUND; + public static Supplier TORETERROR_JUMP_LAND = (Supplier) UNBOUND; + public static Supplier STINKY_FLY = (Supplier) UNBOUND; + public static Supplier CREEPING_HORROR_GROWL = (Supplier) UNBOUND; + public static Supplier CREEPING_HORROR_HURT = (Supplier) UNBOUND; + public static Supplier CREEPING_HORROR_BITE = (Supplier) UNBOUND; + public static Supplier LURKING_TERROR_SNARL = (Supplier) UNBOUND; + public static Supplier LURKING_TERROR_HURT = (Supplier) UNBOUND; + public static Supplier LURKING_TERROR_BITE = (Supplier) UNBOUND; + public static Supplier LURKING_TERROR_FLY_LOOP = (Supplier) UNBOUND; public static Supplier DUCT_TAPE_USE = (Supplier) UNBOUND; private AntarchySoundEvents() { @@ -235,6 +252,23 @@ public final class AntarchySoundEvents { Supplier molevoreHurt, Supplier molevoreAttack, Supplier molevoreDig, + Supplier bomberWalk, + Supplier bomberKnock, + Supplier bomberExplode, + Supplier toreterrorIdle, + Supplier toreterrorHurt, + Supplier toreterrorDeath, + Supplier toreterrorBomberFire, + Supplier toreterrorJumpUp, + Supplier toreterrorJumpLand, + Supplier stinkyFly, + Supplier creepingHorrorGrowl, + Supplier creepingHorrorHurt, + Supplier creepingHorrorBite, + Supplier lurkingTerrorSnarl, + Supplier lurkingTerrorHurt, + Supplier lurkingTerrorBite, + Supplier lurkingTerrorFlyLoop, Supplier ductTapeUse ) { SQUIDZOOKA_FIRE = squidzookaFire; @@ -347,6 +381,23 @@ public final class AntarchySoundEvents { MOLEVORE_HURT = molevoreHurt; MOLEVORE_ATTACK = molevoreAttack; MOLEVORE_DIG = molevoreDig; + BOMBER_WALK = bomberWalk; + BOMBER_KNOCK = bomberKnock; + BOMBER_EXPLODE = bomberExplode; + TORETERROR_IDLE = toreterrorIdle; + TORETERROR_HURT = toreterrorHurt; + TORETERROR_DEATH = toreterrorDeath; + TORETERROR_BOMBER_FIRE = toreterrorBomberFire; + TORETERROR_JUMP_UP = toreterrorJumpUp; + TORETERROR_JUMP_LAND = toreterrorJumpLand; + STINKY_FLY = stinkyFly; + CREEPING_HORROR_GROWL = creepingHorrorGrowl; + CREEPING_HORROR_HURT = creepingHorrorHurt; + CREEPING_HORROR_BITE = creepingHorrorBite; + LURKING_TERROR_SNARL = lurkingTerrorSnarl; + LURKING_TERROR_HURT = lurkingTerrorHurt; + LURKING_TERROR_BITE = lurkingTerrorBite; + LURKING_TERROR_FLY_LOOP = lurkingTerrorFlyLoop; DUCT_TAPE_USE = ductTapeUse; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index d7e170f6..3aa23a25 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -30,6 +30,7 @@ public final class AntarchyTags { public static final TagKey MOLEVORE_SEE_THROUGH_BLOCKS = TagKey.create(Registries.BLOCK, id("molevore_see_through_blocks")); public static final TagKey TERMITE_FOODS = TagKey.create(Registries.BLOCK, id("termite_foods")); public static final TagKey UMBRAL_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("umbral_moss_replaceable")); + public static final TagKey HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS = TagKey.create(Registries.BLOCK, id("hercules_beetle_charge_immune_blocks")); private Blocks() { } @@ -55,6 +56,7 @@ public final class AntarchyTags { public static final TagKey> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune")); public static final TagKey> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets")); public static final TagKey> TRIFFID_PREY = TagKey.create(Registries.ENTITY_TYPE, id("triffid_prey")); + public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); public static final TagKey> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune")); public static final TagKey> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist")); @@ -75,6 +77,7 @@ public final class AntarchyTags { public static final TagKey DUCT_TAPE_BLACKLIST = TagKey.create(Registries.ITEM, id("duct_tape_blacklist")); public static final TagKey BROWN_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("brown_ant_activation_items")); public static final TagKey BROWN_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("brown_ant_breeding_foods")); + public static final TagKey MULTISHOT_ENCHANTABLE = TagKey.create(Registries.ITEM, id("multishot_enchantable")); public static final TagKey RED_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("red_ant_activation_items")); public static final TagKey RED_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("red_ant_breeding_foods")); public static final TagKey RAINBOW_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("rainbow_ant_activation_items")); @@ -86,6 +89,7 @@ public final class AntarchyTags { public static final TagKey CATERPILLAR_FOODS = TagKey.create(Registries.ITEM, id("caterpillar_foods")); public static final TagKey BUTTERFLY_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("butterfly_breeding_foods")); public static final TagKey REVERIE_DUPLICATION_ITEMS = TagKey.create(Registries.ITEM, id("reverie_duplication_items")); + public static final TagKey HERCULES_BEETLE_FOOD = TagKey.create(Registries.ITEM, id("hercules_beetle_food")); private Items() { } @@ -94,6 +98,7 @@ public final class AntarchyTags { public static final class Biomes { public static final TagKey MANTIS_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_spawn_biomes")); public static final TagKey MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_overworld_spawn_biomes")); + public static final TagKey ELYTHIA_FIREFLY_PARTICLE_BIOMES = TagKey.create(Registries.BIOME, id("elythia_firefly_particle_biomes")); private Biomes() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java b/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java new file mode 100644 index 00000000..271ebc32 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.mixins.AccessorRangedAttribute; +import com.google.common.collect.ImmutableSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; + +import java.util.Set; + +public class AttributeRangeInit { + + private static final double MAX = 11_000_000D; + + private static final Set TARGETS = ImmutableSet.of( + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.max_health"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor_toughness"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_damage"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_knockback") + ); + + public static void apply() { + for (ResourceLocation id : TARGETS) { + Attribute attribute = BuiltInRegistries.ATTRIBUTE.get(id); + if (attribute instanceof RangedAttribute ranged && ranged instanceof AccessorRangedAttribute accessor) { + if (ranged.getMaxValue() < MAX) { + accessor.antarchyAttributefix$setMaxValue(MAX); + } + } + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java new file mode 100644 index 00000000..bd386b45 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java @@ -0,0 +1,221 @@ +package com.craisinlord.antarchy.content; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; + +public final class StinkyBehavior { + public static final double STINK_BUG_AURA_RADIUS = 5.0D; + public static final double STINKY_NAUSEA_RADIUS = 4.0D; + private static final int TRAIL_INTERVAL_TICKS = 4; + private static final int REACTION_INTERVAL_TICKS = 10; + private static final double ARTHROPOD_ALERT_RADIUS = 28.0D; + private static final double FLEE_RADIUS = 10.0D; + private static final double FLEE_DISTANCE = 8.0D; + private static final int STINKY_NAUSEA_DURATION_TICKS = 60; + private static final int STINK_BUG_BURST_NAUSEA_DURATION_TICKS = 100; + + private StinkyBehavior() { + } + + public static void tickStinkyTrail(LivingEntity entity) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + if (!entity.isAlive() || entity.tickCount % TRAIL_INTERVAL_TICKS != 0 || !entity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return; + } + + Vec3 motion = entity.getDeltaMovement(); + Vec3 horizontalMotion = new Vec3(motion.x, 0.0D, motion.z); + Vec3 direction = horizontalMotion.lengthSqr() > 1.0E-4D + ? horizontalMotion.normalize() + : entity.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() <= 1.0E-4D) { + direction = new Vec3(0.0D, 0.0D, 1.0D); + } else { + direction = direction.normalize(); + } + + Vec3 origin = entity.position() + .subtract(direction.scale(0.35D)) + .add(0.0D, Math.max(0.15D, entity.getBbHeight() * 0.2D), 0.0D); + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + origin.x, + origin.y, + origin.z, + 2, + entity.getBbWidth() * 0.12D, + 0.04D, + entity.getBbWidth() * 0.12D, + 0.005D + ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + 1, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.2D, + entity.getBbWidth() * 0.35D, + 0.0D + ); + applyNearbyNausea(entity, STINKY_NAUSEA_RADIUS, STINKY_NAUSEA_DURATION_TICKS); + if (entity.tickCount % REACTION_INTERVAL_TICKS == 0) { + reactToStinkySource(entity); + } + } + + public static void emitBurst(LivingEntity entity, int count) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + count, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.35D, + 0.045D + ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + Math.max(2, count / 6), + entity.getBbWidth() * 0.45D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.45D, + 0.0D + ); + applyNearbyNausea(entity, STINK_BUG_AURA_RADIUS, STINK_BUG_BURST_NAUSEA_DURATION_TICKS); + } + + public static void applyBurstStinkyEffect(LivingEntity source, double radius, int durationTicks) { + if (source.level().isClientSide()) { + return; + } + for (LivingEntity entity : source.level().getEntitiesOfClass( + LivingEntity.class, + source.getBoundingBox().inflate(radius), + e -> e.isAlive() && e != source + )) { + entity.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), durationTicks, 0, false, true, true)); + } + } + + public static void applyNearbyNausea(LivingEntity source, double radius, int durationTicks) { + if (source.level().isClientSide()) { + return; + } + + for (Player player : source.level().getEntitiesOfClass( + Player.class, + source.getBoundingBox().inflate(radius), + player -> player.isAlive() && !player.isSpectator() && player != source + )) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, durationTicks, 0, false, true, true)); + } + } + + private static void reactToStinkySource(LivingEntity source) { + if (source.level().isClientSide() || !source.isAlive()) { + return; + } + + for (Mob mob : source.level().getEntitiesOfClass( + Mob.class, + source.getBoundingBox().inflate(ARTHROPOD_ALERT_RADIUS), + mob -> mob.isAlive() && mob != source + )) { + if (mob.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + if (source.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + continue; + } + attractArthropod(mob, source); + continue; + } + if (shouldRepelMob(mob, source)) { + repelPassiveOrNeutralMob(mob, source); + } + } + } + + private static void attractArthropod(Mob mob, LivingEntity source) { + if (!isValidStinkyAttackSourceForMob(mob, source)) { + return; + } + + LivingEntity currentTarget = mob.getTarget(); + if (currentTarget != null && currentTarget.isAlive() && currentTarget.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) + && mob.distanceToSqr(currentTarget) <= ARTHROPOD_ALERT_RADIUS * ARTHROPOD_ALERT_RADIUS) { + return; + } + + mob.setTarget(source); + } + + private static void repelPassiveOrNeutralMob(Mob mob, LivingEntity source) { + if (!(mob instanceof PathfinderMob pathfinderMob) || !isValidStinkyRepelSourceForMob(mob, source)) { + return; + } + + Vec3 away = mob.position().subtract(source.position()); + if (away.lengthSqr() < 1.0E-4D) { + away = new Vec3(mob.getRandom().nextDouble() - 0.5D, 0.0D, mob.getRandom().nextDouble() - 0.5D); + } + + Vec3 escapeTarget = mob.position().add(away.normalize().scale(FLEE_DISTANCE)); + pathfinderMob.setTarget(null); + pathfinderMob.getNavigation().moveTo(escapeTarget.x, escapeTarget.y, escapeTarget.z, 1.2D); + } + + private static boolean shouldRepelMob(Mob mob, LivingEntity source) { + if (mob.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) || mob.distanceToSqr(source) > FLEE_RADIUS * FLEE_RADIUS) { + return false; + } + + if (mob.getType().is(AntarchyTags.Entities.STINKY_REPELLED_HOSTILES)) { + return true; + } + + return !(mob instanceof Enemy); + } + + private static boolean isValidStinkyAttackSourceForMob(Mob mob, LivingEntity source) { + if (!isValidStinkyRepelSourceForMob(mob, source)) { + return false; + } + if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return false; + } + if (source instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + return !mob.isAlliedTo(source); + } + + private static boolean isValidStinkyRepelSourceForMob(Mob mob, LivingEntity source) { + if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return false; + } + if (source instanceof Player player && player.isSpectator()) { + return false; + } + return !mob.isAlliedTo(source); + } + +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java new file mode 100644 index 00000000..a0489b1b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public class AmberMossBlock extends Block implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(AmberMossBlock::new); + private static final ResourceKey> AMBER_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_moss_patch_bonemeal") + ); + + public AmberMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return level.getBlockState(pos.above()).isAir(); + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(AMBER_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java index c1be1778..48818b6a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java @@ -96,7 +96,7 @@ public class BedBugEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + if (!this.shouldUpdateHatchLevel(level)) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java new file mode 100644 index 00000000..75d35d4b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BrutalflyCocoonSpawnerBlock.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class BrutalflyCocoonSpawnerBlock extends Block { + + public BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.INVISIBLE; + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + + BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(level); + if (brutalfly == null) { + return; + } + + BlockPos anchor = pos.above(); + brutalfly.moveTo( + anchor.getX() + 0.5D, + anchor.getY() - 1.5D, + anchor.getZ() + 0.5D, + random.nextFloat() * 360.0F, + 0.0F + ); + brutalfly.setCocooned(true, anchor); + brutalfly.setHealth(brutalfly.getMaxHealth()); + level.addFreshEntity(brutalfly); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java new file mode 100644 index 00000000..faf02e93 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java @@ -0,0 +1,166 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.material.Fluids; + +public class ChitenSpikeBlock extends PointedDripstoneBlock { + @SuppressWarnings("rawtypes") + public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitenSpikeBlock::new); + + public ChitenSpikeBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + LevelAccessor level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction direction = calculateTipDirection(level, pos, context.getNearestLookingVerticalDirection().getOpposite()); + if (direction == null) { + return null; + } + + boolean mergeTips = !context.isSecondaryUseActive(); + DripstoneThickness thickness = calculateDripstoneThickness(level, pos, direction, mergeTips); + if (thickness == null) { + return null; + } + + return this.defaultBlockState() + .setValue(TIP_DIRECTION, direction) + .setValue(THICKNESS, thickness) + .setValue(WATERLOGGED, level.getFluidState(pos).getType() == Fluids.WATER); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + if (direction != Direction.UP && direction != Direction.DOWN) { + return state; + } + + Direction tipDirection = state.getValue(TIP_DIRECTION); + if (tipDirection == Direction.DOWN && level.getBlockTicks().hasScheduledTick(pos, this)) { + return state; + } + + if (direction == tipDirection.getOpposite() && !this.canSurvive(state, level, pos)) { + if (tipDirection == Direction.DOWN) { + level.scheduleTick(pos, this, 2); + } else { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + boolean mergeTips = state.getValue(THICKNESS) == DripstoneThickness.TIP_MERGE; + return state.setValue(THICKNESS, calculateDripstoneThickness(level, pos, tipDirection, mergeTips)); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isValidPointedDripstonePlacement(level, pos, state.getValue(TIP_DIRECTION)); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (this.canSurvive(state, level, pos)) { + return; + } + + if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { + BlockPos.MutableBlockPos root = pos.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + root.move(Direction.UP); + } + + BlockPos.MutableBlockPos cursor = root.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + BlockState fallingState = level.getBlockState(cursor); + if (isChitenSpikeWithDirection(fallingState, Direction.DOWN)) { + net.minecraft.world.entity.item.FallingBlockEntity.fall(level, cursor, fallingState); + } + cursor.move(Direction.DOWN); + } + return; + } + + BlockPos.MutableBlockPos cursor = pos.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + BlockState spikeState = level.getBlockState(cursor); + dropResources(spikeState, level, cursor); + level.removeBlock(cursor, false); + cursor.move(Direction.UP); + } + } + + private static Direction calculateTipDirection(LevelReader level, BlockPos pos, Direction preferredDirection) { + if (isValidPointedDripstonePlacement(level, pos, preferredDirection)) { + return preferredDirection; + } + + Direction opposite = preferredDirection.getOpposite(); + return isValidPointedDripstonePlacement(level, pos, opposite) ? opposite : null; + } + + private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { + Direction opposite = direction.getOpposite(); + BlockState forwardState = level.getBlockState(pos.relative(direction)); + if (isChitenSpikeWithDirection(forwardState, opposite)) { + return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE + ? DripstoneThickness.TIP + : DripstoneThickness.TIP_MERGE; + } + + if (!isChitenSpikeWithDirection(forwardState, direction)) { + return DripstoneThickness.TIP; + } + + DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); + if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { + BlockState backState = level.getBlockState(pos.relative(opposite)); + return !isChitenSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + } + + return DripstoneThickness.FRUSTUM; + } + + private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { + BlockPos supportPos = pos.relative(direction.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + return supportState.isFaceSturdy(level, supportPos, direction) || isChitenSpikeWithDirection(supportState, direction); + } + + private static boolean isChitenSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.CHITEN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java new file mode 100644 index 00000000..7f1ffa4f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -0,0 +1,240 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CreepingHorrorEggBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(CreepingHorrorEggBlock::new); + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final float PANIC_HATCH_CHANCE = 0.50F; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public CreepingHorrorEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { + if (level instanceof ServerLevel serverLevel) { + panicHatchNearby(serverLevel, pos); + } + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + private static void panicHatchNearby(ServerLevel level, BlockPos origin) { + int radius = 6; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (dx == 0 && dy == 0 && dz == 0) continue; + mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); + BlockState nearby = level.getBlockState(mutable); + BlockPos immutable = mutable.immutable(); + if (nearby.getBlock() instanceof CreepingHorrorEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } else if (nearby.getBlock() instanceof LurkingTerrorEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } + } + } + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return false; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + return true; + } + + void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); + if (hatchedEggs <= 0) { + return; + } + + this.hatchEggs(level, pos, state, random, hatchedEggs); + } + + void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { + if (eggsToHatch >= state.getValue(EGGS)) { + level.removeBlock(pos, false); + } else { + level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < eggsToHatch; i++) { + CreepingHorrorEntity entity = AntarchyObjects.CREEPING_HORROR.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + private static int rollPanickedEggs(int eggs, RandomSource random) { + int hatchedEggs = 0; + for (int i = 0; i < eggs; i++) { + if (random.nextFloat() < PANIC_HATCH_CHANCE) { + hatchedEggs++; + } + } + return hatchedEggs; + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof CreepingHorrorEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java new file mode 100644 index 00000000..26c43a6b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -0,0 +1,240 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; +import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class LurkingTerrorEggBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(LurkingTerrorEggBlock::new); + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final float PANIC_HATCH_CHANCE = 0.50F; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public LurkingTerrorEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random, state.getValue(EGGS)); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (entity instanceof Player && !entity.isSteppingCarefully() && this.destroyEgg(level, state, pos, entity, 100)) { + if (level instanceof ServerLevel serverLevel) { + panicHatchNearby(serverLevel, pos); + } + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + private static void panicHatchNearby(ServerLevel level, BlockPos origin) { + int radius = 6; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dy = -radius; dy <= radius; dy++) { + for (int dz = -radius; dz <= radius; dz++) { + if (dx == 0 && dy == 0 && dz == 0) continue; + mutable.set(origin.getX() + dx, origin.getY() + dy, origin.getZ() + dz); + BlockState nearby = level.getBlockState(mutable); + BlockPos immutable = mutable.immutable(); + if (nearby.getBlock() instanceof LurkingTerrorEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } else if (nearby.getBlock() instanceof CreepingHorrorEggBlock b) { + b.hatchPanickedEggs(level, immutable, nearby, level.random); + } + } + } + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private boolean destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return false; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + return true; + } + + void hatchPanickedEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + int hatchedEggs = rollPanickedEggs(state.getValue(EGGS), random); + if (hatchedEggs <= 0) { + return; + } + + this.hatchEggs(level, pos, state, random, hatchedEggs); + } + + void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random, int eggsToHatch) { + if (eggsToHatch >= state.getValue(EGGS)) { + level.removeBlock(pos, false); + } else { + level.setBlock(pos, state.setValue(EGGS, state.getValue(EGGS) - eggsToHatch), 2); + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < eggsToHatch; i++) { + LurkingTerrorEntity entity = AntarchyObjects.LURKING_TERROR.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + private static int rollPanickedEggs(int eggs, RandomSource random) { + int hatchedEggs = 0; + for (int i = 0; i < eggs; i++) { + if (random.nextFloat() < PANIC_HATCH_CHANCE) { + hatchedEggs++; + } + } + return hatchedEggs; + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof LurkingTerrorEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java b/common/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java new file mode 100644 index 00000000..4cd02941 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java @@ -0,0 +1,58 @@ +package com.craisinlord.antarchy.content.client; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.function.BooleanSupplier; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; + +public final class CameraShakeClientState { + public static final double TORETERROR_RANGE = 48.0D; + public static final float TORETERROR_STRENGTH = 1.0F; + public static final double NIGHTMARE_RANGE = 32.0D; + public static final float NIGHTMARE_STRENGTH = 1.35F; + + private record Source(double range, float strength, BooleanSupplier active) { + } + + private static final Map SOURCES = new HashMap<>(); + + private CameraShakeClientState() { + } + + public static void register(LivingEntity entity, double range, float strength, BooleanSupplier active) { + SOURCES.putIfAbsent(entity, new Source(range, strength, active)); + } + + public static float getStrength(Vec3 cameraPos) { + if (SOURCES.isEmpty()) { + return 0.0F; + } + + float total = 0.0F; + Iterator> iterator = SOURCES.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + LivingEntity entity = entry.getKey(); + Source source = entry.getValue(); + if (entity.isRemoved() || !entity.isAlive() || !source.active().getAsBoolean()) { + iterator.remove(); + continue; + } + + double distance = Math.sqrt(cameraPos.distanceToSqr(entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D))); + if (distance > source.range()) { + continue; + } + + total += (float) ((1.0D - distance / source.range()) * source.strength()); + } + + return total; + } + + public static void clear() { + SOURCES.clear(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java b/common/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java new file mode 100644 index 00000000..3619e950 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/HerculesBeetleImpactShakeClientState.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.content.client; + +public final class HerculesBeetleImpactShakeClientState { + private static int shakeTicks; + + private HerculesBeetleImpactShakeClientState() { + } + + public static void trigger(int ticks) { + shakeTicks = Math.max(shakeTicks, Math.max(0, ticks)); + } + + public static void tick() { + if (shakeTicks > 0) { + shakeTicks--; + } + } + + public static int getTicks() { + return shakeTicks; + } + + public static void clear() { + shakeTicks = 0; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java new file mode 100644 index 00000000..56c6d041 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/NightmareSwordTooltipHelper.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; + +public final class NightmareSwordTooltipHelper { + private NightmareSwordTooltipHelper() { + } + + public static Component damageLine() { + Player player = Minecraft.getInstance().player; + float damage = player != null + ? NightmareSwordItem.calculateDamage(player) + : (float) AntarchySettings.nightmareSwordBaseDamage(); + return Component.translatable("tooltip.antarchy.nightmare_sword_damage", formatDamage(damage)).withStyle(ChatFormatting.RED); + } + + private static String formatDamage(float damage) { + float rounded = Math.round(damage * 10.0F) / 10.0F; + if (rounded == (int) rounded) { + return String.valueOf((int) rounded); + } + return String.valueOf(rounded); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java new file mode 100644 index 00000000..d4a9071f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/AlphaMantisModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class AlphaMantisModel extends GeoModel { + @Override + public ResourceLocation getModelResource(AlphaMantisEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/mantis.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(AlphaMantisEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/mantis_alpha.png"); + } + + @Override + public ResourceLocation getAnimationResource(AlphaMantisEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/mantis.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java new file mode 100644 index 00000000..82bab75f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CheepModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CheepEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CheepModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CheepEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/cheep.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CheepEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/cheep/cheep_magenta.png"); + } + + @Override + public ResourceLocation getAnimationResource(CheepEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/cheep.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java index c1d8a5ce..c3ba81f4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CloudSharkModel.java @@ -6,6 +6,11 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class CloudSharkModel extends GeoModel { + public static final ResourceLocation BASE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/cloud_shark/cloud_shark.png"); + public static final ResourceLocation EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/cloud_shark/cloud_shark_emissive.png"); + @Override public ResourceLocation getModelResource(CloudSharkEntity animatable) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/cloud_shark.geo.json"); @@ -13,7 +18,7 @@ public class CloudSharkModel extends GeoModel { @Override public ResourceLocation getTextureResource(CloudSharkEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/cloud_shark.png"); + return BASE_TEXTURE; } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java new file mode 100644 index 00000000..f96729cb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CreepingHorrorModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/creeping_horror.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/creeping_horror.png"); + } + + @Override + public ResourceLocation getAnimationResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/creeping_horror.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java new file mode 100644 index 00000000..ff052b05 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/DorrieModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class DorrieModel extends GeoModel { + private static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dorrie.png"); + private static final ResourceLocation TEXTURE_SADDLED = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dorrie_saddle.png"); + + @Override + public ResourceLocation getModelResource(DorrieEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/dorrie.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(DorrieEntity animatable) { + return animatable.hasSaddle() ? TEXTURE_SADDLED : TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(DorrieEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/dorrie.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java index 1c66b057..c7dd6671 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/EmperorScorpionModel.java @@ -7,6 +7,9 @@ import software.bernie.geckolib.model.GeoModel; public class EmperorScorpionModel extends GeoModel { + public static final ResourceLocation EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/emperor_scorpion/emperor_scorpion_emissive.png"); + @Override public ResourceLocation getModelResource(EmperorScorpionEntity animatable) { return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/emperor_scorpion.geo.json"); @@ -14,7 +17,7 @@ public class EmperorScorpionModel extends GeoModel { @Override public ResourceLocation getTextureResource(EmperorScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/emperor_scorpion.png"); + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/emperor_scorpion/emperor_scorpion.png"); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java new file mode 100644 index 00000000..82f53661 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/HerculesBeetleModel.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class HerculesBeetleModel extends GeoModel { + private static final ResourceLocation TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/hercules_beetle/hercules_beetle.png"); + private static final ResourceLocation TEXTURE_SADDLED = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/hercules_beetle/hercules_beetle_saddle.png"); + + @Override + public ResourceLocation getModelResource(HerculesBeetleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/hercules_beetle.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(HerculesBeetleEntity animatable) { + return animatable.hasSaddle() ? TEXTURE_SADDLED : TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(HerculesBeetleEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/hercules_beetle.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java new file mode 100644 index 00000000..ce3332d8 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class JumpyBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/jumpy_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/jumpy_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/jumpy_bug.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java index abed8910..c47a4fb4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java @@ -12,9 +12,7 @@ public class KrakenModel extends GeoModel { @Override public ResourceLocation getTextureResource(KrakenEntity animatable) { - return animatable.isPhaseTwo() - ? ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken_purple.png") - : ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken.png"); + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken.png"); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java new file mode 100644 index 00000000..c5c995be --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class LurkingTerrorModel extends GeoModel { + @Override + public ResourceLocation getModelResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/lurking_terror.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/lurking_terror.png"); + } + + @Override + public ResourceLocation getAnimationResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/lurking_terror.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java new file mode 100644 index 00000000..8936dc67 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class OctopusBombModel extends GeoModel { + @Override + public ResourceLocation getModelResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "geo/octopus_bomb.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/octopus_bomb.png"); + } + + @Override + public ResourceLocation getAnimationResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "animations/octopus_bomb.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java index 5b23cbc6..c408ff34 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java @@ -6,19 +6,39 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class ScorpionModel extends GeoModel { + private static final ResourceLocation MODEL = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/scorpion.geo.json"); + private static final ResourceLocation BLUE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue.png"); + private static final ResourceLocation GREEN_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_green.png"); + private static final ResourceLocation BLUE_EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue_emissive.png"); + private static final ResourceLocation GREEN_EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_green_emissive.png"); + private static final ResourceLocation ANIMATION = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/scorpion.animation.json"); @Override public ResourceLocation getModelResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/scorpion.geo.json"); + return MODEL; } @Override public ResourceLocation getTextureResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion.png"); + return textureFor(animatable); } @Override public ResourceLocation getAnimationResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/scorpion.animation.json"); + return ANIMATION; + } + + public static ResourceLocation textureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_TEXTURE : BLUE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_EMISSIVE_TEXTURE : BLUE_EMISSIVE_TEXTURE; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java new file mode 100644 index 00000000..a051572b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/SpitBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class SpitBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(SpitBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/spit_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(SpitBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/spit_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(SpitBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/spit_bug.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java new file mode 100644 index 00000000..dfc62024 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class StinkBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/stink_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/stink_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/stink_bug.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java new file mode 100644 index 00000000..b760aaf2 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class TermiteModel extends GeoModel { + private static final ResourceLocation MODEL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/termite.geo.json"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/termite.png"); + private static final ResourceLocation ANIMATIONS = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/termite.animation.json"); + + @Override + public ResourceLocation getModelResource(TermiteEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(TermiteEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(TermiteEntity animatable) { + return ANIMATIONS; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java new file mode 100644 index 00000000..560b427f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.SimpleParticleType; + +public final class OrangeAshParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + private OrangeAshParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, SpriteSet sprites) { + super(level, x, y, z, xd, yd, zd); + this.sprites = sprites; + this.friction = 0.98F; + this.gravity = 0.0025F; + this.speedUpWhenYMotionIsBlocked = false; + this.hasPhysics = false; + this.xd = xd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.yd = yd * 0.02D - 0.01D - this.random.nextDouble() * 0.01D; + this.zd = zd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.quadSize *= 0.75F + this.random.nextFloat() * 0.5F; + this.lifetime = 40 + this.random.nextInt(28); + this.setColor(0.96F, 0.46F, 0.12F); + this.setAlpha(0.72F); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + this.pickSprite(this.sprites); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, double xd, double yd, double zd) { + return new OrangeAshParticle(level, x, y, z, xd, yd, zd, this.sprites); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java new file mode 100644 index 00000000..6ee5cedf --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AlphaMantisRenderer.java @@ -0,0 +1,15 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.AlphaMantisModel; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class AlphaMantisRenderer extends GeoEntityRenderer { + public AlphaMantisRenderer(EntityRendererProvider.Context context) { + super(context, new AlphaMantisModel()); + this.shadowRadius = 1.5F; + // Mantis renders at 1.25x; the alpha is 1.5x bigger overall + this.withScale(1.875F); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java index cddb1908..6ec997a2 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodGeoLayer.java @@ -35,11 +35,10 @@ public class AntCarriedFoodGeoLayer extends BlockAndItemGeoLayer @Override protected void renderStackForBone(PoseStack poseStack, GeoBone bone, ItemStack stack, BaseAntEntity animatable, MultiBufferSource bufferSource, float partialTick, int packedLight, int packedOverlay) { - double yOffset = animatable.isDancing() ? -0.055D : -0.04D; - poseStack.translate(0.0D, yOffset, -0.42D); - poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); - poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); - poseStack.scale(0.4F, 0.4F, 0.4F); + double yOffset = animatable.isDancing() ? 0.58D : 0.15D; + poseStack.translate(0.0D, yOffset, -0.50D); + poseStack.mulPose(Axis.YP.rotationDegrees(90.0F)); + poseStack.scale(0.5F, 0.5F, 0.5F); super.renderStackForBone(poseStack, bone, stack, animatable, bufferSource, partialTick, packedLight, packedOverlay); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodLayer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodLayer.java deleted file mode 100644 index 2197e1a6..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/AntCarriedFoodLayer.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; -import net.minecraft.client.model.SilverfishModel; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.renderer.entity.RenderLayerParent; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; - -public class AntCarriedFoodLayer extends RenderLayer> { - private final ItemRenderer itemRenderer; - - public AntCarriedFoodLayer(RenderLayerParent> renderer, ItemRenderer itemRenderer) { - super(renderer); - this.itemRenderer = itemRenderer; - } - - @Override - public void render( - PoseStack poseStack, - MultiBufferSource buffer, - int packedLight, - T ant, - float limbSwing, - float limbSwingAmount, - float partialTick, - float ageInTicks, - float netHeadYaw, - float headPitch - ) { - ItemStack carriedFood = ant.getCarriedFood(); - if (carriedFood.isEmpty()) { - return; - } - - poseStack.pushPose(); - poseStack.translate(0.0F, 0.08F, -0.06F); - poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); - poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); - poseStack.scale(0.22F, 0.22F, 0.22F); - this.itemRenderer.renderStatic( - ant, - carriedFood, - ItemDisplayContext.FIXED, - false, - poseStack, - buffer, - ant.level(), - packedLight, - OverlayTexture.NO_OVERLAY, - ant.getId() - ); - poseStack.popPose(); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java new file mode 100644 index 00000000..e0bed5f3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java @@ -0,0 +1,155 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferUploader; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.MeshData; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexBuffer; +import com.mojang.blaze3d.vertex.VertexFormat; +import java.util.Random; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +public final class CavarynSkyRenderer { + public static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn") + ); + + @org.jetbrains.annotations.Nullable + private static VertexBuffer orangeStarBuffer; + + private CavarynSkyRenderer() { + } + + public static boolean shouldRender(ClientLevel level) { + return level.dimension().equals(CAVARYN); + } + + public static void render( + Minecraft minecraft, + ClientLevel level, + PoseStack poseStack, + org.joml.Matrix4f projectionMatrix, + float partialTick, + Camera camera, + boolean isFoggy, + Runnable setupFog, + VertexBuffer skyBuffer, + VertexBuffer darkBuffer + ) { + setupFog.run(); + if (isFoggy || minecraft.gameRenderer.getMainCamera() != camera) { + return; + } + + float red = 0.015F; + float green = 0.085F; + float blue = 0.035F; + + RenderSystem.depthMask(false); + RenderSystem.setShaderColor(red, green, blue, 1.0F); + skyBuffer.bind(); + skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + float starBrightness = 0.8F; + if (orangeStarBuffer == null) { + orangeStarBuffer = buildOrangeStarBuffer(); + } + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.setShaderColor(starBrightness, starBrightness, starBrightness, starBrightness); + orangeStarBuffer.bind(); + orangeStarBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionColorShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + + if (camera.getEntity() != null) { + double horizon = camera.getEntity().getEyePosition(partialTick).y - level.getLevelData().getHorizonHeight(level); + if (horizon < 0.0D) { + poseStack.pushPose(); + poseStack.translate(0.0F, 12.0F, 0.0F); + darkBuffer.bind(); + darkBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + poseStack.popPose(); + } + } + + RenderSystem.depthMask(true); + } + + private static VertexBuffer buildOrangeStarBuffer() { + Random random = new Random(548721L); + BufferBuilder builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + for (int i = 0; i < 1800; i++) { + double x = random.nextFloat() * 2.0F - 1.0F; + double y = random.nextFloat() * 2.0F - 1.0F; + double z = random.nextFloat() * 2.0F - 1.0F; + double size = 0.12F + random.nextFloat() * 0.12F; + double lenSq = x * x + y * y + z * z; + if (lenSq < 1.0D && lenSq > 0.01D) { + double len = 1.0D / Math.sqrt(lenSq); + x *= len; + y *= len; + z *= len; + double sx = x * 100.0D; + double sy = y * 100.0D; + double sz = z * 100.0D; + double yaw = Math.atan2(x, z); + double sinYaw = Math.sin(yaw); + double cosYaw = Math.cos(yaw); + double pitch = Math.atan2(Math.sqrt(x * x + z * z), y); + double sinPitch = Math.sin(pitch); + double cosPitch = Math.cos(pitch); + double rot = random.nextDouble() * Math.PI * 2.0D; + double sinRot = Math.sin(rot); + double cosRot = Math.cos(rot); + + float[] color = pickStarColor(random); + + for (int j = 0; j < 4; j++) { + double u = (j & 2) - 1; + double v = (j + 1 & 2) - 1; + double px = u * cosRot - v * sinRot; + double py = v * cosRot + u * sinRot; + double qx = px * sinPitch; + double qy = -px * cosPitch; + double rx = qy * sinYaw - py * cosYaw; + double ry = py * sinYaw + qy * cosYaw; + builder.addVertex((float) (sx + rx * size), (float) (sy + qx * size), (float) (sz + ry * size)) + .setColor(color[0], color[1], color[2], 1.0F); + } + } + } + + MeshData mesh = builder.buildOrThrow(); + VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffer.bind(); + buffer.upload(mesh); + VertexBuffer.unbind(); + return buffer; + } + + private static float[] pickStarColor(Random random) { + float roll = random.nextFloat(); + if (roll < 0.70F) return new float[]{1.00F, 0.55F, 0.14F}; + if (roll < 0.90F) return new float[]{1.00F, 0.70F, 0.24F}; + return new float[]{1.00F, 0.84F, 0.40F}; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java new file mode 100644 index 00000000..d321645a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CheepRenderer.java @@ -0,0 +1,12 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CheepModel; +import com.craisinlord.antarchy.content.entity.CheepEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class CheepRenderer extends GeoEntityRenderer { + public CheepRenderer(EntityRendererProvider.Context context) { + super(context, new CheepModel()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java index bc99df12..ec8e9a80 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CloudSharkRenderer.java @@ -2,8 +2,17 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.CloudSharkModel; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; public class CloudSharkRenderer extends GeoEntityRenderer { private static final float SHADOW_RADIUS = 0.6F; @@ -11,5 +20,37 @@ public class CloudSharkRenderer extends GeoEntityRenderer { public CloudSharkRenderer(EntityRendererProvider.Context context) { super(context, new CloudSharkModel()); this.shadowRadius = SHADOW_RADIUS; + this.addRenderLayer(new CloudSharkEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(CloudSharkEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + private static final class CloudSharkEmissiveLayer extends GeoRenderLayer { + private CloudSharkEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, CloudSharkEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(CloudSharkModel.EMISSIVE_TEXTURE); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 0xFFFFFFFF + ); + } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java new file mode 100644 index 00000000..086b326b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java @@ -0,0 +1,29 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CreepingHorrorModel; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class CreepingHorrorRenderer extends GeoEntityRenderer { + public CreepingHorrorRenderer(EntityRendererProvider.Context context) { + super(context, new CreepingHorrorModel()); + this.shadowRadius = 0.5F; + this.withScale(0.85F); + } + + @Override + public void preRender(PoseStack poseStack, CreepingHorrorEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + if (animatable.isWallClimbing()) { + poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); + poseStack.translate(0, -0.5, 0.5); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java new file mode 100644 index 00000000..bc1c7d4c --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/DorrieRenderer.java @@ -0,0 +1,12 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.DorrieModel; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class DorrieRenderer extends GeoEntityRenderer { + public DorrieRenderer(EntityRendererProvider.Context context) { + super(context, new DorrieModel()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java index 013c777a..340a1bc4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/EmperorScorpionRenderer.java @@ -2,14 +2,59 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.EmperorScorpionModel; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; public class EmperorScorpionRenderer extends GeoEntityRenderer { public EmperorScorpionRenderer(EntityRendererProvider.Context context) { super(context, new EmperorScorpionModel()); this.shadowRadius = 3.0F; - this.withScale(1.5F); + this.addRenderLayer(new EmperorScorpionEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(EmperorScorpionEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + @Override + protected float getDeathMaxRotation(EmperorScorpionEntity animatable) { + return 0.0F; + } + + private static final class EmperorScorpionEmissiveLayer extends GeoRenderLayer { + private EmperorScorpionEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, EmperorScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(EmperorScorpionModel.EMISSIVE_TEXTURE); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 0xFFFFFFFF + ); + } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java new file mode 100644 index 00000000..47ef67c4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/HerculesBeetleRenderer.java @@ -0,0 +1,12 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.HerculesBeetleModel; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class HerculesBeetleRenderer extends GeoEntityRenderer { + public HerculesBeetleRenderer(EntityRendererProvider.Context context) { + super(context, new HerculesBeetleModel()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java new file mode 100644 index 00000000..d51f86e9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.JumpyBugModel; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.util.Color; + +public class JumpyBugRenderer extends GeoEntityRenderer { + public JumpyBugRenderer(EntityRendererProvider.Context context) { + super(context, new JumpyBugModel()); + this.shadowRadius = 6.0F; + } + + @Override + public RenderType getRenderType(JumpyBugEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return animatable.isCamouflaged() ? RenderType.entityTranslucent(texture) : RenderType.entityCutoutNoCull(texture); + } + + @Override + public Color getRenderColor(JumpyBugEntity animatable, float partialTick, int packedLight) { + int alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))); + return Color.ofRGBA(255, 255, 255, alpha); + } + + @Override + public void preRender(PoseStack poseStack, JumpyBugEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + this.shadowRadius = animatable.isCamouflaged() ? 1.0F : 6.0F; + + if (animatable.isClingingToCeiling()) { + poseStack.translate(0.0F, animatable.getBbHeight() + 0.05F, 0.0F); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java index 153fd33f..83b72cc1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java @@ -8,7 +8,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class KrakenRenderer extends GeoEntityRenderer { public KrakenRenderer(EntityRendererProvider.Context context) { super(context, new KrakenModel()); - this.shadowRadius = 3.6F; - this.withScale(3.0F); + this.shadowRadius = 2.0F; + this.withScale(1.5F); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java new file mode 100644 index 00000000..c84ffa19 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.LurkingTerrorModel; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class LurkingTerrorRenderer extends GeoEntityRenderer { + public LurkingTerrorRenderer(EntityRendererProvider.Context context) { + super(context, new LurkingTerrorModel()); + this.shadowRadius = 0.5F; + this.withScale(0.85F); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java new file mode 100644 index 00000000..5c557b9a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.OctopusBombModel; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class OctopusBombRenderer extends GeoEntityRenderer { + public OctopusBombRenderer(EntityRendererProvider.Context context) { + super(context, new OctopusBombModel()); + this.shadowRadius = 1.2F; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java index 892679a9..c37d5202 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java @@ -2,13 +2,53 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.ScorpionModel; import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; public class ScorpionRenderer extends GeoEntityRenderer { public ScorpionRenderer(EntityRendererProvider.Context context) { super(context, new ScorpionModel()); this.shadowRadius = 0.6F; + this.addRenderLayer(new ScorpionEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(ScorpionEntity animatable, net.minecraft.resources.ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + private static final class ScorpionEmissiveLayer extends GeoRenderLayer { + private ScorpionEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, ScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(ScorpionModel.emissiveTextureFor(animatable)); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 0xFFFFFFFF + ); + } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java new file mode 100644 index 00000000..7b9fbedd --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugProjectileRenderer.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix4f; + +public class SpitBugProjectileRenderer extends EntityRenderer { + private static final ResourceLocation PROJECTILE_TEXTURE = + ResourceLocation.withDefaultNamespace("textures/entity/enderdragon/dragon_fireball.png"); + + public SpitBugProjectileRenderer(EntityRendererProvider.Context context) { + super(context); + } + + @Override + protected int getBlockLightLevel(SpitBugProjectileEntity entity, BlockPos pos) { + return 15; + } + + @Override + public void render(SpitBugProjectileEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { + poseStack.pushPose(); + poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); + + float scale = entity.getRenderScale(partialTick); + poseStack.scale(scale, scale, scale); + + VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(PROJECTILE_TEXTURE)); + PoseStack.Pose pose = poseStack.last(); + Matrix4f matrix4f = pose.pose(); + float alpha = entity.isLingering() ? 0.78F : 0.95F; + + addVertex(vertexConsumer, pose, matrix4f, -0.5F, -0.5F, 0.0F, 1.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, -0.5F, 1.0F, 1.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, 0.5F, 0.5F, 1.0F, 0.0F, alpha, packedLight); + addVertex(vertexConsumer, pose, matrix4f, -0.5F, 0.5F, 0.0F, 0.0F, alpha, packedLight); + + poseStack.popPose(); + super.render(entity, entityYaw, partialTick, poseStack, buffer, packedLight); + } + + private static void addVertex( + VertexConsumer vertexConsumer, + PoseStack.Pose pose, + Matrix4f matrix4f, + float x, + float y, + float u, + float v, + float alpha, + int packedLight + ) { + vertexConsumer.addVertex(matrix4f, x, y, 0.0F) + .setColor(0.55F, 1.0F, 0.35F, alpha) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(packedLight) + .setNormal(pose, 0.0F, 0.0F, 1.0F); + } + + @Override + public ResourceLocation getTextureLocation(SpitBugProjectileEntity entity) { + return PROJECTILE_TEXTURE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java new file mode 100644 index 00000000..34bae797 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/SpitBugRenderer.java @@ -0,0 +1,14 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.SpitBugModel; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class SpitBugRenderer extends GeoEntityRenderer { + public SpitBugRenderer(EntityRendererProvider.Context context) { + super(context, new SpitBugModel()); + this.shadowRadius = 1.6F; + this.withScale(0.85F); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java new file mode 100644 index 00000000..48cb9ada --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.StinkBugModel; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class StinkBugRenderer extends GeoEntityRenderer { + private static final float ADULT_SCALE = 0.95F; + private static final float ADULT_SHADOW_RADIUS = 0.2F; + + public StinkBugRenderer(EntityRendererProvider.Context context) { + super(context, new StinkBugModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.withScale(ADULT_SCALE); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java new file mode 100644 index 00000000..9ccbad9b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.TermiteModel; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class TermiteRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.3F; + private static final float ADULT_SCALE = 0.85F; + private static final float BABY_SCALE = 0.5F; + + public TermiteRenderer(EntityRendererProvider.Context context) { + super(context, new TermiteModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + + @Override + public void preRender(PoseStack poseStack, TermiteEntity animatable, BakedGeoModel model, @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + + if (animatable.isBaby()) { + poseStack.scale(ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + poseStack.scale(ADULT_SCALE, ADULT_SCALE, ADULT_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java index a4d3546d..cba019e3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java @@ -9,7 +9,7 @@ public class ToreterrorRenderer extends GeoEntityRenderer { public ToreterrorRenderer(EntityRendererProvider.Context context) { super(context, new ToreterrorModel()); - this.shadowRadius = 2.0F; + this.shadowRadius = 1.6F; } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java index 6081a863..3b4f647f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java @@ -24,7 +24,6 @@ public class UpwardFallingBlockRenderer extends EntityRenderer { public void render(WaterBombEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { poseStack.pushPose(); poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); - poseStack.scale(0.5F, 0.5F, 0.5F); + float scale = entity.isHuge() ? 1.5F : 0.5F; + poseStack.scale(scale, scale, scale); VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(WATER_TEXTURE)); PoseStack.Pose pose = poseStack.last(); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java index 676c3522..15568313 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java @@ -5,6 +5,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public final class AntarchyDamageSources { public static DamageSource krakenMauling(ServerLevel level, Entity attacker) { @@ -87,6 +88,34 @@ public final class AntarchyDamageSources { ); } + public static DamageSource toreterrorSpin(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_SPIN), + attacker + ); + } + + public static DamageSource toreterrorJump(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_JUMP), + attacker + ); + } + + public static DamageSource waterSoaked(Level level, @Nullable Entity directEntity, @Nullable Entity causingEntity) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.WATER_SOAKED), + directEntity, + causingEntity + ); + } + private AntarchyDamageSources() { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java index 199db290..424ec2c8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java @@ -61,6 +61,24 @@ public final class AntarchyDamageTypes { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cornea_stalk_prick") ); + public static final ResourceKey TORETERROR_SPIN = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toreterror_spin") + ); + + public static final ResourceKey TORETERROR_JUMP = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toreterror_jump") + ); + + public static final ResourceKey WATER_SOAKED = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "water_soaked") + ); + private AntarchyDamageTypes() { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java new file mode 100644 index 00000000..13715363 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.effect; + +import com.craisinlord.antarchy.content.StinkyBehavior; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; + +public final class StinkyMobEffect extends MobEffect { + public StinkyMobEffect() { + super(MobEffectCategory.HARMFUL, 0x66773A); + } + + @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { + StinkyBehavior.tickStinkyTrail(entity); + return true; + } + + @Override + public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { + return true; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java new file mode 100644 index 00000000..e82d97fd --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -0,0 +1,184 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.Nullable; + +public class AlphaMantisEntity extends MantisEntity { + private final ServerBossEvent bossEvent = + new ServerBossEvent(Component.translatable("entity.antarchy.alpha_mantis"), BossEvent.BossBarColor.GREEN, BossEvent.BossBarOverlay.PROGRESS); + + private int summonCooldownTicks; + + public AlphaMantisEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 60; + this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks() / 2; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.alphaMantisHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.alphaMantisAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, AntarchySettings.alphaMantisMovementSpeed()) + .add(Attributes.FLYING_SPEED, AntarchySettings.alphaMantisFlyingSpeed()) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.ARMOR, 8.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D); + } + + public static boolean checkAlphaMantisSpawnRules(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + if (level.getDifficulty() == Difficulty.PEACEFUL) { + return false; + } + + if (spawnReason != MobSpawnType.NATURAL) { + return false; + } + + boolean atSurface = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, pos).getY() <= pos.getY(); + boolean posOpen = level.isEmptyBlock(pos) && level.isEmptyBlock(pos.above()) && level.getFluidState(pos).isEmpty(); + boolean onSolidGround = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + && !(level.getBlockState(pos.below()).getBlock() instanceof LeavesBlock); + + if (!posOpen || !onSolidGround || !atSurface) { + return false; + } + + // Only one alpha at a time in the area + if (!level.getLevel().getEntitiesOfClass(AlphaMantisEntity.class, new AABB(pos).inflate(128.0D), Entity::isAlive).isEmpty()) { + return false; + } + + boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel(); + + // Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here + if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) { + return level.canSeeSky(pos); + } + + if (level.getLevel().isNight() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_SPAWN_BIOMES)) { + return ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + return false; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + if (this.isDeadOrDying()) { + this.bossEvent.setProgress(0.0F); + return; + } + + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + this.tickMinionSummon(); + } + + private void tickMinionSummon() { + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + if (this.summonCooldownTicks > 0) { + this.summonCooldownTicks--; + return; + } + this.summonCooldownTicks = AntarchySettings.alphaMantisSummonIntervalTicks(); + + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + int nearbyMinions = serverLevel.getEntitiesOfClass( + MantisEntity.class, + this.getBoundingBox().inflate(32.0D), + mantis -> mantis.isAlive() && !(mantis instanceof AlphaMantisEntity) + ).size(); + int maxMinions = AntarchySettings.alphaMantisMaxMinions(); + if (nearbyMinions >= maxMinions) { + return; + } + + int toSummon = Math.min(1 + this.random.nextInt(2), maxMinions - nearbyMinions); + for (int i = 0; i < toSummon; i++) { + MantisEntity minion = AntarchyObjects.MANTIS.get().create(serverLevel); + if (minion == null) { + continue; + } + double angle = this.random.nextDouble() * Math.PI * 2.0D; + double distance = 3.0D + this.random.nextDouble() * 3.0D; + minion.moveTo( + this.getX() + Math.cos(angle) * distance, + this.getY() + 0.5D, + this.getZ() + Math.sin(angle) * distance, + this.random.nextFloat() * 360.0F, + 0.0F + ); + minion.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(minion.blockPosition()), MobSpawnType.MOB_SUMMONED, null); + minion.setTarget(target); + serverLevel.addFreshEntity(minion); + } + this.playSound(com.craisinlord.antarchy.content.AntarchySoundEvents.MANTIS_AMBIENT.get(), 2.0F, 0.6F); + } + + @Override + public void setTarget(@Nullable LivingEntity target) { + super.setTarget(target); + // A boss that despawns mid-fight is no boss — stay loaded once engaged + if (target != null) { + this.setPersistenceRequired(); + } + } + + @Override + public void startSeenByPlayer(ServerPlayer player) { + super.startSeenByPlayer(player); + this.bossEvent.addPlayer(player); + } + + @Override + public void stopSeenByPlayer(ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @Override + public void setCustomName(@Nullable Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java index 13ddc3d6..0b08252f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java @@ -13,7 +13,6 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.animal.Cow; import net.minecraft.world.entity.Shearable; -import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.entity.player.Player; @@ -21,7 +20,6 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -47,7 +45,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable private static final String NAP_COOLDOWN_KEY = "NapCooldown"; private static final String QUIRK_TICKS_KEY = "QuirkTicks"; private static final String SHEARED_KEY = "Sheared"; - private static final String GRASS_EAT_TICKS_KEY = "GrassEatTicks"; + private static final String REGROW_TICKS_KEY = "RegrowTicks"; private static final String MAIN_CONTROLLER = "main_controller"; private static final String SLEEP_TRANSITION_CONTROLLER = "sleep_transition_controller"; private static final String START_SLEEP_TRIGGER = "start_sleep"; @@ -60,7 +58,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable private static final int DAY_NAP_MAX_TICKS = 20 * 60 * 2; private static final int DAY_NAP_COOLDOWN_TICKS = 20 * 60 * 10; private static final int NIGHT_NAP_COOLDOWN_TICKS = 20 * 60 * 8; - private static final int GRASS_REGROW_TICKS = 20 * 60 * 3; + private static final int APPLE_REGROW_TICKS = 20 * 60 * 3; private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); @@ -73,7 +71,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable private int sleepTicksRemaining; private int napCooldownTicks; private int idleAnimationCycleTicks; - private int grassEatTicks; + private int regrowTicks; protected AppleCowEntity(EntityType entityType, Level level) { super(entityType, level); @@ -92,7 +90,6 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new AppleCowSleepGoal()); - this.goalSelector.addGoal(1, new AppleCowGrazeGoal()); } @Override @@ -148,8 +145,12 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable return; } - if (!this.isSheared()) { - this.grassEatTicks = 0; + if (this.isSheared()) { + this.regrowTicks++; + if (this.regrowTicks >= APPLE_REGROW_TICKS) { + this.setSheared(false); + this.regrowTicks = 0; + } } if (this.shouldStartNap()) { @@ -190,7 +191,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable tag.putInt(NAP_COOLDOWN_KEY, this.napCooldownTicks); tag.putInt(QUIRK_TICKS_KEY, this.getQuirkTicks()); tag.putBoolean(SHEARED_KEY, this.isSheared()); - tag.putInt(GRASS_EAT_TICKS_KEY, this.grassEatTicks); + tag.putInt(REGROW_TICKS_KEY, this.regrowTicks); } @Override @@ -201,7 +202,7 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable this.napCooldownTicks = tag.contains(NAP_COOLDOWN_KEY) ? tag.getInt(NAP_COOLDOWN_KEY) : randomNapCooldown(); this.setQuirkTicks(tag.getInt(QUIRK_TICKS_KEY)); this.setSheared(tag.getBoolean(SHEARED_KEY)); - this.grassEatTicks = tag.getInt(GRASS_EAT_TICKS_KEY); + this.regrowTicks = tag.getInt(REGROW_TICKS_KEY); } public boolean isSleeping() { @@ -346,12 +347,24 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable } this.setSheared(true); - this.grassEatTicks = 0; + this.regrowTicks = 0; this.stopCowSleeping(); this.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F); this.spawnAtLocation(new ItemStack(this.shearDropItem(), 2), this.getBbHeight() * 0.66F); } + @Override + protected void dropCustomDeathLoot(ServerLevel level, net.minecraft.world.damagesource.DamageSource damageSource, boolean recentlyHit) { + super.dropCustomDeathLoot(level, damageSource, recentlyHit); + + if (this.isBaby() || this.isSheared()) { + return; + } + + int count = this instanceof AppleCowEntityVariants.EnchantedGoldenAppleCow ? 1 : 1 + this.random.nextInt(2); + this.spawnAtLocation(new ItemStack(this.shearDropItem(), count)); + } + private net.minecraft.world.item.Item shearDropItem() { if (this instanceof AppleCowEntityVariants.EnchantedGoldenAppleCow) { return Items.ENCHANTED_GOLDEN_APPLE; @@ -389,57 +402,4 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable AppleCowEntity.this.applySleepStillness(); } } - - private final class AppleCowGrazeGoal extends Goal { - private AppleCowGrazeGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); - } - - @Override - public boolean canUse() { - return AppleCowEntity.this.isSheared() - && AppleCowEntity.this.isOnGrassBlock() - && AppleCowEntity.this.isEligibleForSleep() - && AppleCowEntity.this.random.nextInt(20) == 0; - } - - @Override - public boolean canContinueToUse() { - return AppleCowEntity.this.isSheared() - && AppleCowEntity.this.isOnGrassBlock() - && AppleCowEntity.this.grassEatTicks < GRASS_REGROW_TICKS; - } - - @Override - public void start() { - AppleCowEntity.this.getNavigation().stop(); - } - - @Override - public void tick() { - AppleCowEntity.this.getNavigation().stop(); - if (!AppleCowEntity.this.level().isClientSide && AppleCowEntity.this.isSheared() && AppleCowEntity.this.isOnGrassBlock()) { - AppleCowEntity.this.grassEatTicks++; - if (AppleCowEntity.this.grassEatTicks >= GRASS_REGROW_TICKS) { - AppleCowEntity.this.setSheared(false); - AppleCowEntity.this.grassEatTicks = 0; - AppleCowEntity.this.playSound(SoundEvents.GENERIC_EAT, 0.7F, 1.0F + AppleCowEntity.this.random.nextFloat() * 0.2F); - } else if (AppleCowEntity.this.grassEatTicks % 40 == 0) { - AppleCowEntity.this.playSound(SoundEvents.GENERIC_EAT, 0.4F, 1.0F + AppleCowEntity.this.random.nextFloat() * 0.15F); - } - } - } - - @Override - public void stop() { - if (!AppleCowEntity.this.isSheared()) { - AppleCowEntity.this.grassEatTicks = 0; - } - } - } - - private boolean isOnGrassBlock() { - BlockPos below = this.blockPosition().below(); - return this.level().getBlockState(below).is(Blocks.GRASS_BLOCK); - } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java index d2608495..5e7ba8ed 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java @@ -1,14 +1,20 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import java.util.Objects; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.tags.DamageTypeTags; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; @@ -48,17 +54,21 @@ import software.bernie.geckolib.animation.AnimationController; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.animation.keyframe.event.builtin.AutoPlayingSoundKeyframeHandler; import software.bernie.geckolib.util.GeckoLibUtil; public class BomberEntity extends Monster implements GeoEntity { + private static final ResourceLocation INTENTIONALLY_EMPTY_SOUND_ID = ResourceLocation.withDefaultNamespace("intentionally_empty"); private static final EntityDataAccessor FUSE_TICKS_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor DETONATING_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.BOOLEAN); - private static final int DEFAULT_FUSE_TICKS = 80; + private static final int DEFAULT_FUSE_TICKS = 120; private static final int EXPLODE_ANIM_START_TICKS = 25; private static final int FLASH_INTERVAL_TICKS = 5; + private static final double KNOCKBACK_MULTIPLIER = 5.5D; + private static final float EXPLOSION_RADIUS_MULTIPLIER = 0.45F; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -117,25 +127,25 @@ public class BomberEntity extends Monster implements GeoEntity { Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth); this.setHealth((float) maxHealth); Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(attackDamage); - return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + SpawnGroupData spawnData = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + this.primeFuse(); + return spawnData; } @Override public boolean doHurtTarget(Entity target) { - if (!(target instanceof LivingEntity livingTarget)) { + if (!(target instanceof LivingEntity)) { return super.doHurtTarget(target); } - livingTarget.hurt(this.damageSources().mobAttack(this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)); this.primeFuse(); return true; } @Override public boolean hurt(DamageSource source, float amount) { - if (source.is(DamageTypeTags.IS_FIRE)) { + if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) { this.primeFuse(); - return false; } Entity directEntity = source.getDirectEntity(); @@ -143,7 +153,19 @@ public class BomberEntity extends Monster implements GeoEntity { this.primeFuse(); } - return super.hurt(source, amount); + this.playSound(AntarchySoundEvents.BOMBER_KNOCK.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + this.pushAwayFrom(source); + return false; + } + + @Override + public void knockback(double strength, double x, double z) { + super.knockback(strength * KNOCKBACK_MULTIPLIER, x, z); + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BOMBER_KNOCK.get(); } @Override @@ -176,7 +198,10 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, "movement_controller", 0, this::movementAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + controllers.add(new AnimationController<>(this, "explode_controller", 0, this::explodeAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); } @Override @@ -188,11 +213,12 @@ public class BomberEntity extends Monster implements GeoEntity { public void tick() { super.tick(); - if (!this.level().isClientSide && this.detonating) { + if (this.detonating && this.fuseTicks <= EXPLODE_ANIM_START_TICKS) { this.getNavigation().stop(); - this.setDeltaMovement(0.0D, 0.0D, 0.0D); - this.hasImpulse = false; + this.setDeltaMovement(Vec3.ZERO); + } + if (!this.level().isClientSide && this.detonating) { if (this.fuseTicks > 0) { this.fuseTicks--; this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); @@ -218,15 +244,23 @@ public class BomberEntity extends Monster implements GeoEntity { && (this.getFuseTicks() / FLASH_INTERVAL_TICKS) % 2 == 0; } - private PlayState mainAnimController(AnimationState state) { + private PlayState movementAnimController(AnimationState state) { + if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { + return PlayState.STOP; + } + + return state.setAndContinue(this.isMovingForAnimation() ? WALK_ANIM : IDLE_ANIM); + } + + private PlayState explodeAnimController(AnimationState state) { if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { return state.setAndContinue(EXPLODE_ANIM); } - return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.STOP; } - private void primeFuse() { + public void primeFuse() { if (this.detonating) { return; } @@ -235,10 +269,7 @@ public class BomberEntity extends Monster implements GeoEntity { this.fuseTicks = DEFAULT_FUSE_TICKS; this.entityData.set(DETONATING_DATA, true); this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - this.hasImpulse = false; - this.playSound(SoundEvents.TNT_PRIMED, 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + this.playSound(AntarchySoundEvents.BOMBER_EXPLODE.get(), 1.0F, 1.0F); } private void detonate() { @@ -250,8 +281,22 @@ public class BomberEntity extends Monster implements GeoEntity { double x = this.getX(); double y = this.getY(0.0625D); double z = this.getZ(); - float radius = (float) AntarchySettings.bomberExplosionRadius(); - serverLevel.explode(this, x, y, z, radius, ExplosionInteraction.TNT); + float radius = (float) (AntarchySettings.bomberExplosionRadius() * EXPLOSION_RADIUS_MULTIPLIER); + serverLevel.playSound(null, x, y, z, SoundEvents.GENERIC_EXPLODE.value(), SoundSource.HOSTILE, 0.55F, 1.0F); + serverLevel.explode( + this, + null, + null, + x, + y, + z, + radius, + false, + ExplosionInteraction.TNT, + ParticleTypes.EXPLOSION_EMITTER, + ParticleTypes.EXPLOSION, + BuiltInRegistries.SOUND_EVENT.getHolder(INTENTIONALLY_EMPTY_SOUND_ID).orElseThrow() + ); double extraDamage = AntarchySettings.bomberExplosionDamage(); if (extraDamage > 0.0D) { @@ -274,6 +319,30 @@ public class BomberEntity extends Monster implements GeoEntity { this.discard(); } + private void pushAwayFrom(DamageSource source) { + Entity sourceEntity = source.getDirectEntity(); + if (sourceEntity == null) { + sourceEntity = source.getEntity(); + } + if (sourceEntity == null || sourceEntity == this) { + return; + } + + double dx = this.getX() - sourceEntity.getX(); + double dz = this.getZ() - sourceEntity.getZ(); + double distance = Math.sqrt(dx * dx + dz * dz); + if (distance < 1.0E-4D) { + return; + } + + double strength = 0.4D * KNOCKBACK_MULTIPLIER; + this.push(dx / distance * strength, 0.08D, dz / distance * strength); + } + + private boolean isMovingForAnimation() { + return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + private final class BomberAttackGoal extends MeleeAttackGoal { private BomberAttackGoal() { super(BomberEntity.this, 1.1D, true); @@ -281,12 +350,12 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - return !BomberEntity.this.detonating && super.canUse(); + return !BomberEntity.this.isDetonating() || BomberEntity.this.getFuseTicks() > EXPLODE_ANIM_START_TICKS && super.canUse(); } @Override public boolean canContinueToUse() { - return !BomberEntity.this.detonating && super.canContinueToUse(); + return !BomberEntity.this.isDetonating() || BomberEntity.this.getFuseTicks() > EXPLODE_ANIM_START_TICKS && super.canContinueToUse(); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java new file mode 100644 index 00000000..ca8ae3b5 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/CheepEntity.java @@ -0,0 +1,95 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.animal.AbstractFish; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class CheepEntity extends AbstractFish implements GeoEntity { + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenLoop("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public CheepEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2D, true)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + } + + public static AttributeSupplier.Builder createAttributes() { + return AbstractFish.createAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.cheepHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.cheepAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, 0.5D); + } + + @Override + public ItemStack getBucketItemStack() { + return new ItemStack(Items.WATER_BUCKET); + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.COD_AMBIENT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.COD_DEATH; + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.COD_HURT; + } + + @Override + protected SoundEvent getFlopSound() { + return SoundEvents.COD_FLOP; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.isAggressive()) { + return state.setAndContinue(ATTACK_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(SWIM_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java new file mode 100644 index 00000000..0f5cea08 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -0,0 +1,198 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class CreepingHorrorEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CLIMBING = + SynchedEntityData.defineId(CreepingHorrorEntity.class, EntityDataSerializers.BOOLEAN); + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenLoop("attack"); + private static final byte ATTACK_ANIM_EVENT = 4; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public CreepingHorrorEntity(EntityType type, Level level) { + super(type, level); + } + + @Override + public float maxUpStep() { + return 1.0F; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(CLIMBING, false); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.38D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + boolean validSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && validSupport + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public boolean onClimbable() { + return this.entityData.get(CLIMBING); + } + + public boolean isWallClimbing() { + return this.entityData.get(CLIMBING) && !this.onGround(); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + this.playSound(AntarchySoundEvents.CREEPING_HORROR_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + attackAnimTicks = 20; + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.CREEPING_HORROR_GROWL.get(); + } + + @Override + protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { + return AntarchySoundEvents.CREEPING_HORROR_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.CREEPING_HORROR_HURT.get(); + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + attackAnimTicks = 20; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + super.tick(); + if (attackAnimTicks > 0) attackAnimTicks--; + if (this.level().isClientSide()) return; + + boolean climbing = this.horizontalCollision; + this.entityData.set(CLIMBING, climbing); + + if (climbing && this.getTarget() != null) { + LivingEntity target = this.getTarget(); + Vec3 toTarget = target.position().subtract(this.position()); + double hDist = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); + double speed = this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 2.8D; + if (hDist > 0.01D) { + this.setDeltaMovement( + (toTarget.x / hDist) * speed, + 0.22D, + (toTarget.z / hDist) * speed + ); + } else { + Vec3 mov = this.getDeltaMovement(); + this.setDeltaMovement(mov.x, 0.22D, mov.z); + } + this.getNavigation().stop(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java new file mode 100644 index 00000000..8fa42815 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -0,0 +1,479 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.EnumSet; +import java.util.List; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Entity.MoveFunction; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.SmoothSwimmingLookControl; +import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; +import net.minecraft.world.entity.ai.goal.BreathAirGoal; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.RandomSwimmingGoal; +import net.minecraft.world.entity.ai.goal.TryFindWaterGoal; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class DorrieEntity extends Animal implements GeoEntity { + private static final ResourceLocation CHEEP_ITEM_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "cheep"); + + private static final EntityDataAccessor HAS_SADDLE = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor TAMED = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor JUMP_CHARGE = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); + + private static final int MAX_CHARGE_TICKS = 40; + private static final float WATER_RIDE_SPEED = 1.26F; + private static final float LAND_BEACH_SPEED = 0.04F; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation JUMP_START_ANIM = RawAnimation.begin().thenPlay("jump_1"); + private static final RawAnimation JUMP_LOOP_ANIM = RawAnimation.begin().thenLoop("jump_2"); + private static final RawAnimation JUMP_LAND_ANIM = RawAnimation.begin().thenPlay("jump_3"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private static final int RIDES_TO_TAME = 4; + private static final int BUCK_DELAY_TICKS = 60; + + private int chargeTicks = 0; + private boolean isCharging = false; + private boolean isLeaping = false; + private boolean wasInAir = false; + private int landAnimTicks = 0; + private int rideAttempts = 0; + private int buckTimer = 0; + private int swimForwardTicks = 0; + + public DorrieEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 1.0F, true); + this.lookControl = new SmoothSwimmingLookControl(this, 10); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(HAS_SADDLE, false); + builder.define(TAMED, false); + builder.define(JUMP_CHARGE, 0); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new BreathAirGoal(this)); + this.goalSelector.addGoal(2, new TryFindWaterGoal(this)); + this.goalSelector.addGoal(3, new HuntCheepGoal(this)); + this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0D, 10)); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.dorrieHealth()) + .add(Attributes.MOVEMENT_SPEED, 1.0D) + .add(Attributes.FOLLOW_RANGE, 16.0D) + .add(Attributes.ATTACK_DAMAGE, 4.0D); + } + + public boolean hasSaddle() { + return this.entityData.get(HAS_SADDLE); + } + + public void setSaddle(boolean saddle) { + this.entityData.set(HAS_SADDLE, saddle); + } + + public boolean isTamed() { + return this.entityData.get(TAMED); + } + + public void setTamed(boolean tamed) { + this.entityData.set(TAMED, tamed); + } + + public int getJumpCharge() { + return this.entityData.get(JUMP_CHARGE); + } + + private void setJumpCharge(int charge) { + this.entityData.set(JUMP_CHARGE, charge); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("Tamed", this.isTamed()); + tag.putBoolean("HasSaddle", this.hasSaddle()); + tag.putInt("RideAttempts", this.rideAttempts); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setTamed(tag.getBoolean("Tamed")); + this.setSaddle(tag.getBoolean("HasSaddle")); + this.rideAttempts = tag.getInt("RideAttempts"); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (!this.isTamed()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this)) { + if (!this.level().isClientSide) { + this.setSaddle(false); + this.spawnAtLocation(new ItemStack(Items.SADDLE)); + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (!this.hasSaddle() && stack.is(Items.SADDLE)) { + if (!this.level().isClientSide) { + this.setSaddle(true); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && !player.isPassengerOfSameVehicle(this)) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + return super.mobInteract(player, hand); + } + + @Override + @Nullable + public LivingEntity getControllingPassenger() { + if (!this.isTamed() || !this.hasSaddle()) { + return null; + } + Entity passenger = this.getFirstPassenger(); + if (passenger instanceof Player player) { + return player; + } + return null; + } + + @Override + protected Vec3 getRiddenInput(Player player, Vec3 travelVector) { + float forward = player.zza; + float strafe = player.xxa * 0.5F; + return new Vec3(strafe, 0, forward); + } + + @Override + protected float getRiddenSpeed(Player player) { + float speed = (this.isInWater() || this.isInLava()) + ? WATER_RIDE_SPEED * (1.0F + Math.min(this.swimForwardTicks, 60) * 0.025F) + : LAND_BEACH_SPEED; + return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * speed; + } + + @Override + public void tick() { + super.tick(); + + if (this.getControllingPassenger() instanceof Player player) { + this.setYRot(player.getYRot()); + this.yRotO = this.getYRot(); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + if (this.isInWater() || this.isInLava()) { + if (player.zza > 0.05F) { + this.swimForwardTicks = Math.min(this.swimForwardTicks + 1, 60); + } else { + this.swimForwardTicks = Math.max(this.swimForwardTicks - 2, 0); + } + } else { + this.swimForwardTicks = 0; + } + } else { + this.swimForwardTicks = 0; + } + + if (!this.level().isClientSide && !this.isTamed() && this.getFirstPassenger() instanceof Player rider) { + buckTimer++; + if (buckTimer >= BUCK_DELAY_TICKS) { + rider.stopRiding(); + buckTimer = 0; + rideAttempts++; + if (rideAttempts >= RIDES_TO_TAME) { + this.setTamed(true); + this.playSound(SoundEvents.HORSE_BREATHE, 0.8F, 1.0F); + } else { + this.playSound(SoundEvents.HORSE_ANGRY, 0.8F, 1.0F); + } + } + } else if (!this.isTamed() && this.getFirstPassenger() == null) { + buckTimer = 0; + } + + if (!this.level().isClientSide && this.getControllingPassenger() instanceof Player && isCharging) { + chargeTicks = Math.min(chargeTicks + 1, MAX_CHARGE_TICKS); + setJumpCharge((int) ((chargeTicks / (float) MAX_CHARGE_TICKS) * 100)); + } + + if (this.isInWater() && !isLeaping) { + Vec3 mov = this.getDeltaMovement(); + double push = this.isUnderWater() ? 0.07D : 0.015D; + double cappedY = this.isUnderWater() ? 0.3D : 0.05D; + this.setDeltaMovement(mov.x, Math.min(mov.y + push, cappedY), mov.z); + } + + if (landAnimTicks > 0) { + landAnimTicks--; + } + + boolean inAirNow = !this.onGround() && !this.isInWater() && !this.isInLava(); + if (wasInAir && !inAirNow && isLeaping) { + isLeaping = false; + landAnimTicks = 12; + } + wasInAir = inAirNow; + } + + public void setPressingJump(boolean pressing) {} + + public void startJumpCharge() { + if (!this.level().isClientSide) { + isCharging = true; + } + } + + public void releaseJump() { + if (!this.level().isClientSide && isCharging) { + float power = chargeTicks / (float) MAX_CHARGE_TICKS; + if (power > 0.05F) { + Vec3 look = this.getLookAngle(); + Vec3 current = this.getDeltaMovement(); + double forwardAdd = power * 0.5D; + double vertical = 0.55D + power * 0.9D; + this.setDeltaMovement( + current.x + look.x * forwardAdd, + vertical, + current.z + look.z * forwardAdd + ); + this.hasImpulse = true; + isLeaping = true; + } + isCharging = false; + chargeTicks = 0; + setJumpCharge(0); + } + } + + @Override + protected void positionRider(Entity passenger, MoveFunction moveFunction) { + if (this.hasPassenger(passenger)) { + Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + moveFunction.accept(passenger, + this.getX() - forward.x * 0.25D, + this.getY() + 0.5D, + this.getZ() - forward.z * 0.25D); + } + } + + public double getPassengersRidingOffset() { + return 0.6D; + } + + @Override + protected void dropEquipment() { + super.dropEquipment(); + if (this.hasSaddle()) { + this.spawnAtLocation(new ItemStack(Items.SADDLE)); + } + } + + @Override + @Nullable + public DorrieEntity getBreedOffspring(ServerLevel level, AgeableMob mob) { + return null; + } + + @Override + public boolean canBeLeashed() { + return true; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.DOLPHIN_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.DOLPHIN_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.DOLPHIN_DEATH; + } + + @Override + protected SoundEvent getSwimSound() { + return SoundEvents.DOLPHIN_SWIM; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (landAnimTicks > 0) { + return state.setAndContinue(JUMP_LAND_ANIM); + } + if (isLeaping) { + return state.setAndContinue(wasInAir ? JUMP_LOOP_ANIM : JUMP_START_ANIM); + } + return state.setAndContinue(state.isMoving() ? SWIM_ANIM : IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public boolean isFood(ItemStack stack) { + return this.isCheepItem(stack); + } + + private boolean isCheepItem(ItemStack stack) { + return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.getOptional(CHEEP_ITEM_ID).orElse(Items.AIR)); + } + + private static class HuntCheepGoal extends Goal { + private static final int COOLDOWN_TICKS = 600; + private static final double HUNT_RANGE = 16.0D; + private static final double ATTACK_RANGE_SQ = 2.5D * 2.5D; + + private final DorrieEntity dorrie; + private CheepEntity target; + private int cooldown = 0; + + HuntCheepGoal(DorrieEntity dorrie) { + this.dorrie = dorrie; + setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + if (dorrie.level().isClientSide) { + return false; + } + if (cooldown > 0) { + cooldown--; + return false; + } + if (dorrie.getControllingPassenger() != null) { + return false; + } + List nearby = dorrie.level().getEntitiesOfClass( + CheepEntity.class, dorrie.getBoundingBox().inflate(HUNT_RANGE)); + if (nearby.isEmpty()) { + return false; + } + nearby.sort((a, b) -> Double.compare(a.distanceToSqr(dorrie), b.distanceToSqr(dorrie))); + target = nearby.get(0); + return true; + } + + @Override + public boolean canContinueToUse() { + return target != null && target.isAlive() + && dorrie.getControllingPassenger() == null + && dorrie.distanceToSqr(target) <= HUNT_RANGE * HUNT_RANGE * 4; + } + + @Override + public void start() { + dorrie.getNavigation().moveTo(target, 1.4D); + } + + @Override + public void tick() { + if (target == null) { + return; + } + dorrie.getLookControl().setLookAt(target, 30.0F, 30.0F); + dorrie.getNavigation().moveTo(target, 1.4D); + if (dorrie.distanceToSqr(target) <= ATTACK_RANGE_SQ) { + target.hurt(dorrie.damageSources().mobAttack(dorrie), + (float) dorrie.getAttributeValue(Attributes.ATTACK_DAMAGE)); + stop(); + } + } + + @Override + public void stop() { + target = null; + dorrie.getNavigation().stop(); + cooldown = COOLDOWN_TICKS; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java index 81b61163..166dadb6 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.AgeableMob; @@ -80,6 +83,21 @@ public class DrTrayaurusEntity extends AbstractVillager { this.overrideXp(1); } + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.VILLAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.VILLAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.VILLAGER_DEATH; + } + @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index bed77337..8ac5a93b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -48,40 +48,50 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; public class EmperorScorpionEntity extends Monster implements GeoEntity { - private static final byte CLAW_ATTACK_ANIM_EVENT = 4; + private static final byte SNAP_ATTACK_ANIM_EVENT = 4; private static final byte STING_ATTACK_ANIM_EVENT = 5; + private static final byte AGRO_ANIM_EVENT = 6; - private static final int CLAW_ATTACK_ANIM_TICKS = 12; - private static final int CLAW_ATTACK_HIT_TICK = 6; - private static final int CLAW_ATTACK_COOLDOWN_TICKS = 16; - private static final int STING_ATTACK_ANIM_TICKS = 18; - private static final int STING_ATTACK_HIT_TICK = 9; - private static final int STING_ATTACK_COOLDOWN_TICKS = 42; - private static final int POISON_DURATION_TICKS = 100; - private static final int WEAKNESS_DURATION_TICKS = 80; - private static final int SUMMON_INTERVAL_TICKS = 180; - private static final int MAX_SUMMONED_SCORPIONS = 4; + private static final int SNAP_ATTACK_ANIM_TICKS = 23; + private static final int SNAP_ATTACK_HIT_TICK = 12; + private static final int SNAP_ATTACK_COOLDOWN_TICKS = 28; + private static final int STING_ATTACK_ANIM_TICKS = 25; + private static final int STING_ATTACK_HIT_TICK = 13; + private static final int STING_ATTACK_COOLDOWN_TICKS = 60; + private static final int AGRO_ANIM_TICKS = 30; + private static final int DEATH_ANIM_TICKS = 40; + private static final float STING_DAMAGE = 18.0F; + private static final double STING_AOE_RADIUS = 5.0D; + private static final int POISON_DURATION_TICKS = 300; + private static final int WEAKNESS_DURATION_TICKS = 120; + private static final int SUMMON_INTERVAL_TICKS = 140; + private static final int MAX_SUMMONED_SCORPIONS = 8; private static final String EMPEROR_SUMMON_TAG = "antarchy_emperor_summoned"; private static final ResourceKey THORAXIS_KEY = ResourceKey.create(Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis")); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation SNAP_ANIM = RawAnimation.begin().thenPlay("snap"); + private static final RawAnimation STING_ANIM = RawAnimation.begin().thenPlay("sting"); + private static final RawAnimation AGRO_ANIM = RawAnimation.begin().thenPlay("agro"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private final ServerBossEvent bossEvent = - new ServerBossEvent(this.getDisplayName(), BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.PROGRESS); + new ServerBossEvent(this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS); private int attackAnimTicks = 0; private int attackHitTick = 0; private int attackCooldownTicks = 0; private int stingCooldownTicks = 0; + private int agroAnimTicks = 0; private int summonCooldown = 0; private boolean attackDamageApplied = false; private boolean stingAttackActive = false; + private boolean hasAgroed = false; @Nullable private LivingEntity attackTarget; public EmperorScorpionEntity(EntityType entityType, Level level) { @@ -92,12 +102,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes() - .add(Attributes.MAX_HEALTH, 200.0D) + .add(Attributes.MAX_HEALTH, 400.0D) .add(Attributes.MOVEMENT_SPEED, 0.32D) - .add(Attributes.ATTACK_DAMAGE, 18.0D) - .add(Attributes.ARMOR, 6.0D) - .add(Attributes.KNOCKBACK_RESISTANCE, 0.6D) - .add(Attributes.FOLLOW_RANGE, 32.0D); + .add(Attributes.ATTACK_DAMAGE, 28.0D) + .add(Attributes.ARMOR, 25.0D) + .add(Attributes.ARMOR_TOUGHNESS, 10.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.8D) + .add(Attributes.FOLLOW_RANGE, 40.0D); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, @@ -154,10 +165,27 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.resetAttackState(); } } + if (this.agroAnimTicks > 0) { + this.agroAnimTicks--; + } if (this.summonCooldown > 0) { this.summonCooldown--; } + if (!this.level().isClientSide) { + if (this.getTarget() != null) { + if (!this.hasAgroed) { + this.hasAgroed = true; + this.agroAnimTicks = AGRO_ANIM_TICKS; + this.getNavigation().stop(); + this.level().broadcastEntityEvent(this, AGRO_ANIM_EVENT); + this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ROAR.get(), 2.0F, 0.7F); + } + } else { + this.hasAgroed = false; + } + } + if (this.getTarget() != null && this.summonCooldown <= 0 && !this.isAttackLocked() @@ -175,7 +203,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return; } - int toSpawn = 1 + this.random.nextInt(2); + int toSpawn = 2 + this.random.nextInt(2); EntityType scorpionType = AntarchyObjects.SCORPION.get(); for (int i = 0; i < toSpawn; i++) { double offsetX = (this.random.nextDouble() - 0.5D) * 6.0D; @@ -198,10 +226,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { @Override public boolean doHurtTarget(Entity target) { - return this.performStingAttack(target); + return this.performSnapAttack(target); } - private boolean performClawAttack(Entity target) { + private boolean performSnapAttack(Entity target) { boolean hurt = super.doHurtTarget(target); if (hurt) { this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ATTACK.get(), 0.9F, 0.95F + this.random.nextFloat() * 0.08F); @@ -210,32 +238,39 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private boolean performStingAttack(Entity target) { - boolean hurt; - if (this.level() instanceof ServerLevel serverLevel) { - hurt = target.hurt(AntarchyDamageSources.emperorScorpionSting(serverLevel, this), - (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)); - } else { - hurt = super.doHurtTarget(target); + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; } - if (hurt && target instanceof LivingEntity living) { - int poisonDuration = this.level().getDifficulty() == Difficulty.HARD - ? POISON_DURATION_TICKS * 2 : POISON_DURATION_TICKS; - living.addEffect(new MobEffectInstance(MobEffects.POISON, poisonDuration, 0)); - living.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, WEAKNESS_DURATION_TICKS, 0)); + boolean hurtAny = false; + for (LivingEntity living : serverLevel.getEntitiesOfClass(LivingEntity.class, + this.getBoundingBox().inflate(STING_AOE_RADIUS), + entity -> entity != this + && entity.isAlive() + && !(entity instanceof EmperorScorpionEntity) + && !(entity instanceof ScorpionEntity))) { + if (living.hurt(AntarchyDamageSources.emperorScorpionSting(serverLevel, this), STING_DAMAGE)) { + hurtAny = true; + int poisonDuration = this.level().getDifficulty() == Difficulty.HARD + ? POISON_DURATION_TICKS * 2 : POISON_DURATION_TICKS; + living.addEffect(new MobEffectInstance(MobEffects.POISON, poisonDuration, 1)); + living.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, WEAKNESS_DURATION_TICKS, 0)); + } + } + if (hurtAny) { this.playSound(AntarchySoundEvents.EMPEROR_SCORPION_ATTACK.get(), 1.0F, 0.9F + this.random.nextFloat() * 0.08F); } - return hurt; + return hurtAny; } - private void beginClawAttack(LivingEntity target) { + private void beginSnapAttack(LivingEntity target) { this.attackTarget = target; - this.attackAnimTicks = CLAW_ATTACK_ANIM_TICKS; - this.attackHitTick = CLAW_ATTACK_HIT_TICK; - this.attackCooldownTicks = CLAW_ATTACK_COOLDOWN_TICKS; + this.attackAnimTicks = SNAP_ATTACK_ANIM_TICKS; + this.attackHitTick = SNAP_ATTACK_HIT_TICK; + this.attackCooldownTicks = SNAP_ATTACK_COOLDOWN_TICKS; this.attackDamageApplied = false; this.stingAttackActive = false; this.getNavigation().stop(); - this.level().broadcastEntityEvent(this, CLAW_ATTACK_ANIM_EVENT); + this.level().broadcastEntityEvent(this, SNAP_ATTACK_ANIM_EVENT); this.commitLunge(target, 0.42D, 0.10D); } @@ -259,14 +294,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } this.getLookControl().setLookAt(this.attackTarget, 30.0F, 30.0F); - if (!this.attackDamageApplied - && this.attackAnimTicks == this.attackHitTick - && this.distanceToSqr(this.attackTarget) <= this.getAttackReachSqr(this.attackTarget)) { - this.attackDamageApplied = true; + if (!this.attackDamageApplied && this.attackAnimTicks == this.attackHitTick) { if (this.stingAttackActive) { + this.attackDamageApplied = true; this.performStingAttack(this.attackTarget); - } else { - this.performClawAttack(this.attackTarget); + } else if (this.distanceToSqr(this.attackTarget) <= this.getAttackReachSqr(this.attackTarget)) { + this.attackDamageApplied = true; + this.performSnapAttack(this.attackTarget); } } @@ -306,13 +340,13 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private boolean isAttackLocked() { - return this.attackAnimTicks > 0; + return this.attackAnimTicks > 0 || this.agroAnimTicks > 0; } @Override public void handleEntityEvent(byte id) { - if (id == CLAW_ATTACK_ANIM_EVENT) { - this.attackAnimTicks = CLAW_ATTACK_ANIM_TICKS; + if (id == SNAP_ATTACK_ANIM_EVENT) { + this.attackAnimTicks = SNAP_ATTACK_ANIM_TICKS; this.attackDamageApplied = false; this.stingAttackActive = false; return; @@ -323,6 +357,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { this.stingAttackActive = true; return; } + if (id == AGRO_ANIM_EVENT) { + this.agroAnimTicks = AGRO_ANIM_TICKS; + return; + } super.handleEntityEvent(id); } @@ -332,8 +370,14 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private PlayState mainController(AnimationState state) { + if (this.isDeadOrDying()) { + return state.setAndContinue(DEATH_ANIM); + } if (this.attackAnimTicks > 0) { - return state.setAndContinue(ATTACK_ANIM); + return state.setAndContinue(this.stingAttackActive ? STING_ANIM : SNAP_ANIM); + } + if (this.agroAnimTicks > 0) { + return state.setAndContinue(AGRO_ANIM); } if (state.isMoving()) { return state.setAndContinue(WALK_ANIM); @@ -341,6 +385,15 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { return state.setAndContinue(IDLE_ANIM); } + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime >= DEATH_ANIM_TICKS && !this.level().isClientSide && !this.isRemoved()) { + this.level().broadcastEntityEvent(this, (byte) 60); + this.remove(RemovalReason.KILLED); + } + } + @Override public AnimatableInstanceCache getAnimatableInstanceCache() { return this.geoCache; @@ -421,7 +474,7 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (EmperorScorpionEntity.this.shouldUseSting(enemy)) { EmperorScorpionEntity.this.beginStingAttack(enemy); } else { - EmperorScorpionEntity.this.beginClawAttack(enemy); + EmperorScorpionEntity.this.beginSnapAttack(enemy); } return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java new file mode 100644 index 00000000..9c0bffee --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -0,0 +1,1270 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import java.util.EnumSet; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerBossEvent; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.DamageTypeTags; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.BossEvent; +import net.minecraft.world.Difficulty; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.FlyingAnimal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.PathType; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.entity.Pose; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, FlyingAnimal { + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor SADDLED = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor FLYING = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor KNOCKED_DOWN = + SynchedEntityData.defineId(HerculesBeetleEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_FLY = 2; + private static final int ANIM_CRY = 3; + private static final int ANIM_ATTACK = 4; + private static final int ANIM_FLY_ATTACK = 5; + private static final int ANIM_CHARGE_START = 6; + private static final int ANIM_CHARGE = 7; + private static final int ANIM_KNOCKED_DOWN = 8; + private static final int ANIM_KNOCKED_DOWN_IDLE = 9; + private static final int ANIM_GET_UP = 10; + private static final int ANIM_OPEN_WINGS = 11; + private static final int ANIM_CLOSE_WINGS = 12; + private static final int ANIM_DEATH = 13; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("fly_attack"); + private static final RawAnimation CHARGE_START_ANIM = RawAnimation.begin().thenPlay("charge_start"); + private static final RawAnimation CHARGE_ANIM = RawAnimation.begin().thenLoop("charge"); + private static final RawAnimation KNOCKED_DOWN_ANIM = RawAnimation.begin().thenPlay("knocked_down"); + private static final RawAnimation KNOCKED_DOWN_IDLE_ANIM = RawAnimation.begin().thenLoop("knocked_down_idle"); + private static final RawAnimation GET_UP_ANIM = RawAnimation.begin().thenPlay("get_up"); + private static final RawAnimation OPEN_WINGS_ANIM = RawAnimation.begin().thenPlay("open_wings"); + private static final RawAnimation CLOSE_WINGS_ANIM = RawAnimation.begin().thenPlay("close_wings"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); + + private static final int CRY_TICKS = 30; + private static final int ATTACK_TICKS = 10; + private static final int ATTACK_HIT_TICK = 5; + private static final int FLY_ATTACK_TICKS = 10; + private static final int FLY_ATTACK_HIT_TICK = 5; + private static final int OPEN_WINGS_TICKS = 10; + private static final int CLOSE_WINGS_TICKS = 5; + private static final int CHARGE_START_TICKS = 15; + private static final int KNOCKED_DOWN_TICKS = 16; + private static final int GET_UP_TICKS = 20; + private static final int MAX_PLAYER_CHARGE_TICKS = 40; + private static final int MIN_MOUNTED_CHARGE_TICKS = 40; + private static final int MAX_CHARGE_TICKS = 200; + private static final int CHARGE_COOLDOWN_TICKS = 200; + private static final int REGULAR_ATTACK_COOLDOWN_TICKS = 18; + private static final int CRY_COOLDOWN_TICKS = 120; + private static final int COMBAT_RESET_TICKS = 60; + private static final int IMPACT_SHAKE_TICKS = 25; + private static final double FLIGHT_SPEED = 1.38D; + private static final double GROUND_SPEED = 0.34D; + private static final double CHARGE_SPEED = 1.5D; + private static final double CHARGE_DISTANCE = 10.0D; + private static final double ATTACK_RANGE = 4.5D; + private static final double FLY_ATTACK_RANGE = 5.5D; + private static final double CHARGE_TRIGGER_RANGE = 12.0D; + private static final int MAX_BROKEN_BLOCKS = 32; + private static final int MAX_SUFFOCATION_BLOCKS = 12; + private static final EntityDimensions DEFAULT_DIMENSIONS = EntityDimensions.scalable(3.0F, 4.0F); + private static final double MOUNTED_FLYING_SPEED_MULTIPLIER = 0.06D; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final ServerBossEvent bossEvent = + new ServerBossEvent(Component.translatable("entity.antarchy.hercules_beetle"), BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.PROGRESS); + + private int actionTicks; + private int actionHitTick; + private int chargeTicksRemaining; + private double chargeDistanceTravelled; + private double chargeDistanceTarget; + private int chargeCooldown; + private int attackCooldown; + private int cryCooldown; + private int flightCooldown; + private int targetlessTicks; + private int groundedTicks; + private boolean attackDamageApplied; + private boolean riderJumpPressed; + private boolean combatCryDone; + private boolean pendingChargeStart; + private boolean pendingMountedCharge; + private int pendingChargeDuration; + @Nullable + private UUID attackTargetId; + private Vec3 chargeDirection = Vec3.ZERO; + + public HerculesBeetleEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new FlyingMoveControl(this, 20, true); + this.setPathfindingMalus(PathType.WATER, -1.0F); + this.setPathfindingMalus(PathType.LAVA, -1.0F); + this.xpReward = 50; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.herculesBeetleHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.herculesBeetleAttackDamage()) + .add(Attributes.MOVEMENT_SPEED, GROUND_SPEED) + .add(Attributes.FLYING_SPEED, FLIGHT_SPEED) + .add(Attributes.FOLLOW_RANGE, 48.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.9D) + .add(Attributes.ARMOR, 12.0D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP) + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation navigation = new FlyingPathNavigation(this, level); + navigation.setCanFloat(true); + navigation.setCanOpenDoors(false); + return navigation; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new HerculesCombatGoal()); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.75D) { + @Override + public boolean canUse() { + return !HerculesBeetleEntity.this.isKnockedDown() + && !HerculesBeetleEntity.this.isVehicle() + && !HerculesBeetleEntity.this.isInBusyAnimation() + && super.canUse(); + } + }); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, entity -> + entity instanceof Player player + && !this.isTame() + && !this.isKnockedDown() + && !player.isCreative() + && !player.isSpectator())); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(SADDLED, false); + builder.define(FLYING, false); + builder.define(KNOCKED_DOWN, false); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_WALK -> state.setAndContinue(WALK_ANIM); + case ANIM_FLY -> state.setAndContinue(FLY_ANIM); + case ANIM_CRY -> state.setAndContinue(CRY_ANIM); + case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); + case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); + case ANIM_CHARGE_START -> state.setAndContinue(CHARGE_START_ANIM); + case ANIM_CHARGE -> state.setAndContinue(CHARGE_ANIM); + case ANIM_KNOCKED_DOWN -> state.setAndContinue(KNOCKED_DOWN_ANIM); + case ANIM_KNOCKED_DOWN_IDLE -> state.setAndContinue(KNOCKED_DOWN_IDLE_ANIM); + case ANIM_GET_UP -> state.setAndContinue(GET_UP_ANIM); + case ANIM_OPEN_WINGS -> state.setAndContinue(OPEN_WINGS_ANIM); + case ANIM_CLOSE_WINGS -> state.setAndContinue(CLOSE_WINGS_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide) { + return; + } + + this.syncConfiguredAttributes(); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.chargeCooldown > 0) { + this.chargeCooldown--; + } + if (this.cryCooldown > 0) { + this.cryCooldown--; + } + + if (this.getTarget() == null) { + if (this.targetlessTicks++ >= COMBAT_RESET_TICKS) { + this.combatCryDone = false; + } + } else { + this.targetlessTicks = 0; + } + + if (this.onGround()) { + this.groundedTicks++; + } else { + this.groundedTicks = 0; + } + + if (this.isDeadOrDying()) { + this.noPhysics = false; + this.setAnimationState(ANIM_DEATH); + this.bossEvent.setProgress(0.0F); + return; + } + + if (this.flightCooldown > 0) { + this.flightCooldown--; + } + + if (!this.level().isClientSide && !this.isKnockedDown() && this.isInWall()) { + this.breakBlocksForSuffocation(); + } + + if (this.isKnockedDown()) { + this.tickKnockedDown(); + } else if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE) { + this.tickCharge(); + } else if (this.isInBusyAnimation()) { + this.tickBusyAnimation(); + } else { + this.tickFlightState(); + this.updateAmbientAnimation(); + } + + if (this.isVehicle()) { + this.tickMountedMotion(); + } + + this.setNoGravity(this.isFlying() || this.chargeTicksRemaining > 0); + if (this.isFlying() || this.chargeTicksRemaining > 0) { + this.fallDistance = 0.0F; + } + + if (this.shouldShowBossBar()) { + this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); + } else { + this.bossEvent.removeAllPlayers(); + } + } + + private void tickKnockedDown() { + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + if (this.getAnimationState() == ANIM_KNOCKED_DOWN && this.actionTicks > 0) { + this.actionTicks--; + if (this.actionTicks <= 0) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } else if (this.getAnimationState() != ANIM_KNOCKED_DOWN_IDLE) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } + + private void tickBusyAnimation() { + this.getNavigation().stop(); + if (this.getTarget() != null) { + this.getLookControl().setLookAt(this.getTarget(), 25.0F, 20.0F); + } + + int state = this.getAnimationState(); + if (state == ANIM_ATTACK || state == ANIM_FLY_ATTACK) { + int elapsed = (state == ANIM_ATTACK ? ATTACK_TICKS : FLY_ATTACK_TICKS) - this.actionTicks; + if (!this.attackDamageApplied && elapsed >= this.actionHitTick) { + this.attackDamageApplied = true; + this.performRegularAttack(state == ANIM_FLY_ATTACK); + } + } + + if (this.actionTicks > 0) { + this.actionTicks--; + } + if (this.actionTicks > 0) { + return; + } + + switch (state) { + case ANIM_OPEN_WINGS -> { + this.setFlying(true); + if (this.pendingChargeStart) { + this.pendingChargeStart = false; + this.beginChargeStart(this.chargeDirection, this.pendingChargeDuration, this.pendingMountedCharge); + return; + } + } + case ANIM_CLOSE_WINGS -> this.setFlying(false); + case ANIM_CHARGE_START -> this.beginChargeLoop(); + case ANIM_GET_UP -> this.setAnimationState(this.isFlying() ? ANIM_FLY : ANIM_IDLE); + case ANIM_CRY, ANIM_ATTACK, ANIM_FLY_ATTACK -> { + } + default -> { + } + } + + this.updateAmbientAnimation(); + } + + private void tickCharge() { + if (this.getAnimationState() != ANIM_CHARGE) { + this.setAnimationState(ANIM_CHARGE); + } + this.setFlying(true); + this.setNoGravity(true); + this.noPhysics = true; + this.fallDistance = 0.0F; + + double remainingDistance = Math.max(0.0D, this.chargeDistanceTarget - this.chargeDistanceTravelled); + if (remainingDistance <= 0.0D) { + this.finishChargeImpact(); + return; + } + + Vec3 move = this.chargeDirection.scale(Math.min(CHARGE_SPEED, remainingDistance)); + Vec3 nextPosition = this.position().add(move); + if (this.blocksChargePath(nextPosition)) { + this.finishChargeImpact(); + return; + } + + this.breakBlocksForChargePath(nextPosition); + this.setDeltaMovement(move); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.lookInDirection(this.chargeDirection); + + this.chargeDistanceTravelled += move.length(); + this.chargeTicksRemaining--; + if (this.chargeDistanceTravelled >= this.chargeDistanceTarget || this.chargeTicksRemaining <= 0) { + this.finishChargeImpact(); + } + } + + private void tickFlightState() { + if (this.isFlying() && this.onGround() && this.groundedTicks > 10 && this.getTarget() == null && !this.riderJumpPressed) { + this.requestFlightStop(); + } + } + + private void tickMountedMotion() { + if (!(this.getControllingPassenger() instanceof Player rider) || this.isKnockedDown()) { + return; + } + if (this.chargeTicksRemaining > 0 || this.getAnimationState() == ANIM_CHARGE_START || this.getAnimationState() == ANIM_OPEN_WINGS) { + return; + } + + this.setYRot(rider.getYHeadRot()); + this.yHeadRot = this.getYRot(); + this.yBodyRot = this.getYRot(); + + if (this.onGround() && this.isFlying()) { + this.requestFlightStop(); + return; + } + + boolean wantsFlight = this.riderJumpPressed || rider.getXRot() < -5.0F || this.fallDistance > 2.5F; + if (wantsFlight && !this.isFlying() && this.onGround() && this.flightCooldown <= 0) { + this.requestFlightStart(); + } + } + + private void updateAmbientAnimation() { + if (this.isKnockedDown()) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + return; + } + if (this.isFlying()) { + this.setAnimationState(ANIM_FLY); + return; + } + if (!this.onGround()) { + this.setAnimationState(ANIM_FLY); + return; + } + if (this.getControllingPassenger() instanceof Player rider + && (Math.abs(rider.zza) > 0.05F || Math.abs(rider.xxa) > 0.05F)) { + this.setAnimationState(ANIM_WALK); + return; + } + Vec3 motion = this.getDeltaMovement(); + boolean moving = motion.horizontalDistanceSqr() > 0.0025D; + this.setAnimationState(moving ? ANIM_WALK : ANIM_IDLE); + } + + @Override + protected Vec3 getRiddenInput(Player player, Vec3 travelVector) { + if (!this.isFlying()) { + return new Vec3(player.xxa * 0.22D, 0.0D, player.zza); + } + + double vertical = 0.0D; + if (this.riderJumpPressed) { + vertical += 0.18D; + } + if (player.zza > 0.0F && player.getXRot() < -5.0F) { + vertical += 0.16D; + } else if (player.zza > 0.0F && player.getXRot() > 20.0F) { + vertical -= 0.16D; + } + + return new Vec3(player.xxa * 0.22D, vertical, player.zza); + } + + @Override + protected float getRiddenSpeed(Player player) { + if (this.isFlying()) { + return (float) (this.getAttributeValue(Attributes.FLYING_SPEED) * MOUNTED_FLYING_SPEED_MULTIPLIER); + } + return (float) this.getAttributeValue(Attributes.MOVEMENT_SPEED); + } + + private void syncConfiguredAttributes() { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(AntarchySettings.herculesBeetleHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(AntarchySettings.herculesBeetleAttackDamage()); + if (this.getHealth() > this.getMaxHealth()) { + this.setHealth(this.getMaxHealth()); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(DamageTypeTags.IS_FALL)) { + return false; + } + + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= 0.5F; + } + + if (!this.level().isClientSide && !this.isTame() && !this.isKnockedDown() && !this.isDeadOrDying()) { + float knockThreshold = Math.max(1.0F, this.getMaxHealth() * 0.05F); + if (this.getHealth() - amount <= knockThreshold) { + float allowedDamage = Math.max(0.0F, this.getHealth() - knockThreshold); + boolean hurt = allowedDamage <= 0.0F || super.hurt(source, allowedDamage); + if (hurt && this.isAlive()) { + this.enterKnockedDown(); + } + return hurt; + } + } + + return super.hurt(source, amount); + } + + private void enterKnockedDown() { + if (this.isKnockedDown()) { + return; + } + this.setKnockedDown(true); + this.setFlying(false); + this.setNoGravity(false); + this.noPhysics = false; + this.pendingChargeStart = false; + this.chargeTicksRemaining = 0; + this.attackCooldown = 0; + this.getNavigation().stop(); + this.setTarget(null); + this.setDeltaMovement(Vec3.ZERO); + this.actionTicks = KNOCKED_DOWN_TICKS; + this.setAnimationState(ANIM_KNOCKED_DOWN); + } + + @Override + public InteractionResult mobInteract(Player player, InteractionHand hand) { + ItemStack stack = player.getItemInHand(hand); + + if (this.isKnockedDown() && this.isFood(stack)) { + if (!this.level().isClientSide) { + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + if (this.random.nextInt(3) == 0) { + this.setTame(true, true); + this.setOwnerUUID(player.getUUID()); + this.setKnockedDown(false); + this.heal(this.getMaxHealth()); + this.setTarget(null); + this.actionTicks = GET_UP_TICKS; + this.setAnimationState(ANIM_GET_UP); + this.level().broadcastEntityEvent(this, (byte) 7); + this.bossEvent.removeAllPlayers(); + } else { + this.level().broadcastEntityEvent(this, (byte) 6); + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.isTame()) { + if (!this.hasSaddle() && stack.is(Items.SADDLE) && this.isOwnedBy(player)) { + if (!this.level().isClientSide) { + this.setSaddled(true); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 1.0F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && player.isShiftKeyDown() && this.isOwnedBy(player) && !player.isPassengerOfSameVehicle(this)) { + if (!this.level().isClientSide) { + this.setSaddled(false); + this.spawnAtLocation(new ItemStack(Items.SADDLE)); + this.playSound(SoundEvents.HORSE_SADDLE, 1.0F, 0.8F); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this) && !this.isKnockedDown()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + } + + return super.mobInteract(player, hand); + } + + @Override + public boolean isFood(ItemStack stack) { + return stack.is(AntarchyTags.Items.HERCULES_BEETLE_FOOD); + } + + public boolean hasSaddle() { + return this.entityData.get(SADDLED); + } + + public void setSaddled(boolean saddled) { + this.entityData.set(SADDLED, saddled); + } + + private void setFlying(boolean flying) { + if (this.entityData.get(FLYING) != flying) { + this.entityData.set(FLYING, flying); + this.refreshDimensions(); + } + } + + public boolean isKnockedDown() { + return this.entityData.get(KNOCKED_DOWN); + } + + private void setKnockedDown(boolean knockedDown) { + this.entityData.set(KNOCKED_DOWN, knockedDown); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + } + + private boolean isInBusyAnimation() { + int state = this.getAnimationState(); + return state == ANIM_CRY + || state == ANIM_ATTACK + || state == ANIM_FLY_ATTACK + || state == ANIM_CHARGE_START + || state == ANIM_CHARGE + || state == ANIM_OPEN_WINGS + || state == ANIM_CLOSE_WINGS + || state == ANIM_GET_UP + || state == ANIM_KNOCKED_DOWN; + } + + private void requestFlightStart() { + if (this.isFlying() + || this.isKnockedDown() + || this.getAnimationState() == ANIM_OPEN_WINGS + || this.getAnimationState() == ANIM_CHARGE + || this.getAnimationState() == ANIM_CHARGE_START + || !this.onGround() + || this.flightCooldown > 0) { + return; + } + this.setAnimationState(ANIM_OPEN_WINGS); + this.actionTicks = OPEN_WINGS_TICKS; + } + + private void requestFlightStop() { + if (!this.isFlying() || this.getAnimationState() == ANIM_CLOSE_WINGS || this.isInBusyAnimation()) { + return; + } + this.setAnimationState(ANIM_CLOSE_WINGS); + this.actionTicks = CLOSE_WINGS_TICKS; + this.flightCooldown = 8; + } + + private void startCry() { + this.setAnimationState(ANIM_CRY); + this.actionTicks = CRY_TICKS; + this.cryCooldown = CRY_COOLDOWN_TICKS; + this.combatCryDone = true; + this.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 200, 1)); + this.playSound(SoundEvents.RAVAGER_ROAR, 1.5F, 0.7F); + } + + private void startRegularAttack(boolean flyingAttack, @Nullable LivingEntity target) { + this.setAnimationState(flyingAttack ? ANIM_FLY_ATTACK : ANIM_ATTACK); + this.actionTicks = flyingAttack ? FLY_ATTACK_TICKS : ATTACK_TICKS; + this.actionHitTick = flyingAttack ? FLY_ATTACK_HIT_TICK : ATTACK_HIT_TICK; + this.attackDamageApplied = false; + this.attackTargetId = target == null ? null : target.getUUID(); + this.attackCooldown = REGULAR_ATTACK_COOLDOWN_TICKS; + } + + private void performRegularAttack(boolean flyingAttack) { + LivingEntity target = this.attackTargetId == null ? null : this.findNearbyLivingEntity(this.attackTargetId); + boolean hit = false; + if (target != null && target.isAlive() && this.distanceToSqr(target) <= 49.0D) { + hit = this.hurtAndLaunchTarget(target, (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE), flyingAttack ? 1.0D : 0.7D); + } + if (!hit) { + for (LivingEntity candidate : this.getFrontTargets(flyingAttack ? 6.0D : 5.0D, 2.5D)) { + if (this.hurtAndLaunchTarget(candidate, (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE), flyingAttack ? 1.0D : 0.7D)) { + break; + } + } + } + this.playSound(SoundEvents.RAVAGER_ATTACK, 1.2F, flyingAttack ? 1.1F : 0.9F); + } + + private boolean hurtAndLaunchTarget(LivingEntity target, float damage, double horizontalKnockback) { + if (!this.canHarm(target)) { + return false; + } + boolean hurt = target.hurt(this.damageSources().mobAttack(this), damage); + if (hurt) { + Vec3 push = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (push.lengthSqr() < 1.0E-4D) { + push = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + push = push.normalize().scale(horizontalKnockback); + target.setDeltaMovement(target.getDeltaMovement().add(push.x, 1.25D, push.z)); + target.hurtMarked = true; + } + return hurt; + } + + private void startCharge(Vec3 direction, int durationTicks, boolean mountedCharge) { + Vec3 horizontal = direction.multiply(1.0D, 0.0D, 1.0D); + if (horizontal.lengthSqr() < 1.0E-4D) { + horizontal = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + } + this.chargeDirection = horizontal.normalize(); + this.pendingChargeDuration = Mth.clamp(durationTicks, MIN_MOUNTED_CHARGE_TICKS, MAX_CHARGE_TICKS); + this.pendingMountedCharge = mountedCharge; + + if (!this.isFlying()) { + this.pendingChargeStart = true; + this.requestFlightStart(); + return; + } + this.beginChargeStart(this.chargeDirection, this.pendingChargeDuration, mountedCharge); + } + + private void beginChargeStart(Vec3 direction, int durationTicks, boolean mountedCharge) { + this.chargeDirection = direction.normalize(); + this.pendingChargeDuration = durationTicks; + this.pendingMountedCharge = mountedCharge; + this.setAnimationState(ANIM_CHARGE_START); + this.actionTicks = CHARGE_START_TICKS; + this.playSound(SoundEvents.ENDER_DRAGON_FLAP, 1.3F, 0.7F); + } + + private void beginChargeLoop() { + this.setAnimationState(ANIM_CHARGE); + this.chargeTicksRemaining = this.pendingChargeDuration; + this.chargeDistanceTravelled = 0.0D; + this.chargeDistanceTarget = CHARGE_DISTANCE; + this.chargeCooldown = CHARGE_COOLDOWN_TICKS; + this.pendingChargeDuration = 0; + this.pendingMountedCharge = false; + this.setFlying(true); + } + + private void finishChargeImpact() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + this.chargeTicksRemaining = 0; + this.noPhysics = false; + this.updateAmbientAnimation(); + return; + } + + this.chargeTicksRemaining = 0; + this.noPhysics = false; + this.setDeltaMovement(Vec3.ZERO); + + AABB impactBox = this.getBoundingBox().inflate(3.0D, 2.0D, 3.0D); + float damage = (float) AntarchySettings.herculesBeetleChargeDamage(); + for (LivingEntity victim : this.level().getEntitiesOfClass(LivingEntity.class, impactBox, this::canHarm)) { + if (victim == this) { + continue; + } + if (victim.hurt(this.damageSources().mobAttack(this), damage)) { + Vec3 push = victim.position().subtract(this.position()); + if (push.lengthSqr() < 1.0E-4D) { + push = this.chargeDirection; + } + push = push.normalize(); + victim.setDeltaMovement(victim.getDeltaMovement().add(push.x * 1.25D, 0.9D, push.z * 1.25D)); + victim.hurtMarked = true; + } + } + + this.breakBlocksForChargeImpact(serverLevel); + this.playSound(SoundEvents.GENERIC_EXPLODE.value(), 1.6F, 0.75F); + serverLevel.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY() + 0.8D, this.getZ(), 4, 1.5D, 0.5D, 1.5D, 0.0D); + serverLevel.sendParticles(ParticleTypes.CRIT, this.getX(), this.getY() + 0.8D, this.getZ(), 20, 2.0D, 0.6D, 2.0D, 0.08D); + this.broadcastImpactShake(serverLevel); + + if (this.onGround()) { + this.requestFlightStop(); + } else { + this.updateAmbientAnimation(); + } + } + + private void breakBlocksForChargeImpact(ServerLevel level) { + if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return; + } + + AABB impactBox = this.getBoundingBox().inflate(3.0D, 2.0D, 3.0D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(impactBox.minX, impactBox.minY, impactBox.minZ), + BlockPos.containing(impactBox.maxX, impactBox.maxY, impactBox.maxZ) + )) { + if (broken >= MAX_BROKEN_BLOCKS) { + break; + } + BlockState state = level.getBlockState(pos); + BlockEntity blockEntity = level.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(level, pos) < 0.0F) { + continue; + } + if (level.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private void breakBlocksForChargePath(Vec3 nextPosition) { + if (!(this.level() instanceof ServerLevel serverLevel) || !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return; + } + + AABB pathBox = this.getBoundingBox().expandTowards(nextPosition.subtract(this.position())).inflate(1.25D, 1.25D, 1.25D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(pathBox.minX, pathBox.minY, pathBox.minZ), + BlockPos.containing(pathBox.maxX, pathBox.maxY, pathBox.maxZ) + )) { + if (broken >= MAX_BROKEN_BLOCKS) { + break; + } + BlockState state = serverLevel.getBlockState(pos); + BlockEntity blockEntity = serverLevel.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + continue; + } + if (serverLevel.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private void breakBlocksForSuffocation() { + if (!(this.level() instanceof ServerLevel serverLevel) || !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { + return; + } + + AABB box = this.getBoundingBox().inflate(0.15D, 0.15D, 0.15D); + int broken = 0; + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(box.minX, box.minY, box.minZ), + BlockPos.containing(box.maxX, box.maxY, box.maxZ) + )) { + if (broken >= MAX_SUFFOCATION_BLOCKS) { + break; + } + BlockState state = serverLevel.getBlockState(pos); + BlockEntity blockEntity = serverLevel.getBlockEntity(pos); + if (state.isAir() + || state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) + || blockEntity != null + || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + continue; + } + if (serverLevel.destroyBlock(pos, true, this)) { + broken++; + } + } + } + + private boolean blocksChargePath(Vec3 nextPosition) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return false; + } + + AABB pathBox = this.getBoundingBox().expandTowards(nextPosition.subtract(this.position())).inflate(1.25D, 1.25D, 1.25D); + for (BlockPos pos : BlockPos.betweenClosed( + BlockPos.containing(pathBox.minX, pathBox.minY, pathBox.minZ), + BlockPos.containing(pathBox.maxX, pathBox.maxY, pathBox.maxZ) + )) { + BlockState state = serverLevel.getBlockState(pos); + if (state.isAir()) { + continue; + } + if (state.is(AntarchyTags.Blocks.HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS) || serverLevel.getBlockEntity(pos) != null || state.getDestroySpeed(serverLevel, pos) < 0.0F) { + return true; + } + } + return false; + } + + private void broadcastImpactShake(ServerLevel level) { + for (ServerPlayer player : level.players()) { + if (player.distanceToSqr(this) <= 48.0D * 48.0D) { + HerculesBeetleImpactShakeSync.send(player, IMPACT_SHAKE_TICKS); + } + } + } + + public void setRiderJumpPressed(boolean riderJumpPressed) { + this.riderJumpPressed = riderJumpPressed; + } + + public void handleMountedRegularAttack(ServerPlayer player) { + if (!this.canPlayerControl(player) || this.attackCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0) { + return; + } + LivingEntity target = this.findFrontTarget(6.0D, 3.0D); + this.startRegularAttack(this.isFlying(), target); + } + + public void handleMountedCharge(ServerPlayer player, int chargeTicks) { + if (!this.canPlayerControl(player) || this.chargeCooldown > 0 || this.isKnockedDown() || this.isInBusyAnimation() || this.chargeTicksRemaining > 0) { + return; + } + int clamped = Mth.clamp(chargeTicks, 0, MAX_PLAYER_CHARGE_TICKS); + if (clamped <= 0) { + return; + } + int duration = MIN_MOUNTED_CHARGE_TICKS + Mth.floor((MAX_CHARGE_TICKS - MIN_MOUNTED_CHARGE_TICKS) * (clamped / (float) MAX_PLAYER_CHARGE_TICKS)); + this.startCharge(player.getLookAngle(), duration, true); + } + + private boolean canPlayerControl(ServerPlayer player) { + return this.isTame() + && this.hasSaddle() + && player.getVehicle() == this + && this.getControllingPassenger() == player; + } + + @Override + @Nullable + public LivingEntity getControllingPassenger() { + if (!this.isTame() || !this.hasSaddle()) { + return null; + } + Entity passenger = this.getFirstPassenger(); + return passenger instanceof LivingEntity living ? living : null; + } + + @Override + protected void positionRider(Entity passenger, MoveFunction moveFunction) { + if (this.hasPassenger(passenger)) { + Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + double yOffset = this.isFlying() ? 5.3D : 0.5D; + double forwardOffset = this.isFlying() ? 2.2D : 0.0D; + moveFunction.accept( + passenger, + this.getX() + forward.x * forwardOffset, + this.getY() + yOffset, + this.getZ() + forward.z * forwardOffset + ); + } + } + + @Override + public boolean canAddPassenger(Entity passenger) { + return this.getPassengers().isEmpty(); + } + + @Override + public void travel(Vec3 travelVector) { + if (!(this.getControllingPassenger() instanceof Player rider) || !this.isVehicle()) { + super.travel(travelVector); + return; + } + + this.setYRot(rider.getYHeadRot()); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + + Vec3 riddenInput = this.getRiddenInput(rider, travelVector); + this.setSpeed(this.getRiddenSpeed(rider)); + Vec3 motion = new Vec3(0.0D, this.getDeltaMovement().y, 0.0D); + this.moveRelative(this.getSpeed(), new Vec3(riddenInput.x, 0.0D, riddenInput.z)); + motion = motion.add(this.getDeltaMovement().x, riddenInput.y, this.getDeltaMovement().z); + this.setDeltaMovement(motion); + this.move(MoverType.SELF, this.getDeltaMovement()); + + if (!this.isFlying() && rider.zza > 0.0F && this.horizontalCollision) { + Vec3 stepUpPos = this.position().add(0.0D, 1.0D, 0.0D); + this.setPos(stepUpPos.x, stepUpPos.y, stepUpPos.z); + this.setDeltaMovement(Vec3.ZERO); + this.moveRelative(this.getSpeed(), new Vec3(riddenInput.x, 0.0D, riddenInput.z)); + this.move(MoverType.SELF, this.getDeltaMovement()); + } + } + + @Override + public boolean doHurtTarget(Entity target) { + if (this.attackCooldown > 0 || this.isKnockedDown()) { + return false; + } + if (target instanceof LivingEntity livingTarget) { + this.startRegularAttack(this.isFlying(), livingTarget); + return true; + } + return super.doHurtTarget(target); + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { + } + + @Override + public boolean isFlying() { + return this.entityData.get(FLYING); + } + + @Override + public EntityDimensions getDefaultDimensions(Pose pose) { + return DEFAULT_DIMENSIONS; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + public boolean canAttack(LivingEntity target) { + if (this.isTame() && target instanceof Player) { + return false; + } + return super.canAttack(target); + } + + private boolean canHarm(@Nullable LivingEntity target) { + if (target == null || !target.isAlive() || target == this || target == this.getControllingPassenger()) { + return false; + } + if (target instanceof Player player) { + return !player.isCreative() && !player.isSpectator() && !this.isTame(); + } + return target.canBeSeenAsEnemy(); + } + + private void lookInDirection(Vec3 direction) { + if (direction.lengthSqr() <= 1.0E-4D) { + return; + } + float yaw = (float) (Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + + @Nullable + private LivingEntity findNearbyLivingEntity(UUID uuid) { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return null; + } + Entity entity = serverLevel.getEntity(uuid); + return entity instanceof LivingEntity living ? living : null; + } + + private List getFrontTargets(double range, double inflation) { + AABB box = this.getBoundingBox().expandTowards(this.getLookAngle().scale(range)).inflate(inflation); + Vec3 forward = this.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + return this.level().getEntitiesOfClass(LivingEntity.class, box, this::canHarm).stream() + .filter(entity -> { + Vec3 toTarget = entity.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { + return true; + } + return forward.normalize().dot(toTarget.normalize()) >= 0.15D; + }) + .toList(); + } + + @Nullable + private LivingEntity findFrontTarget(double range, double inflation) { + List targets = this.getFrontTargets(range, inflation); + return targets.isEmpty() ? null : targets.getFirst(); + } + + private boolean shouldShowBossBar() { + return !this.isTame(); + } + + @Override + public void startSeenByPlayer(ServerPlayer player) { + super.startSeenByPlayer(player); + if (this.shouldShowBossBar()) { + this.bossEvent.addPlayer(player); + } + } + + @Override + public void stopSeenByPlayer(ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + + @Override + public void setCustomName(@Nullable Component name) { + super.setCustomName(name); + this.bossEvent.setName(this.getDisplayName()); + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean("Saddled", this.hasSaddle()); + tag.putBoolean("KnockedDown", this.isKnockedDown()); + tag.putBoolean("Flying", this.isFlying()); + tag.putInt("AnimationState", this.getAnimationState()); + tag.putInt("ChargeCooldown", this.chargeCooldown); + tag.putInt("AttackCooldown", this.attackCooldown); + tag.putBoolean("CombatCryDone", this.combatCryDone); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.setSaddled(tag.getBoolean("Saddled")); + this.setKnockedDown(tag.getBoolean("KnockedDown")); + this.setFlying(tag.getBoolean("Flying")); + this.setAnimationState(tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.chargeCooldown = tag.getInt("ChargeCooldown"); + this.attackCooldown = tag.getInt("AttackCooldown"); + this.combatCryDone = tag.getBoolean("CombatCryDone"); + if (this.isKnockedDown() && this.getAnimationState() != ANIM_KNOCKED_DOWN_IDLE) { + this.setAnimationState(ANIM_KNOCKED_DOWN_IDLE); + } + } + + @Override + protected SoundEvent getAmbientSound() { + return this.isKnockedDown() ? null : SoundEvents.RAVAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.RAVAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.RAVAGER_DEATH; + } + + @Override + protected float getSoundVolume() { + return 1.3F; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState state) { + this.playSound(SoundEvents.RAVAGER_STEP, 0.8F, 0.8F); + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return null; + } + + private final class HerculesCombatGoal extends Goal { + HerculesCombatGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return !HerculesBeetleEntity.this.isTame() + && !HerculesBeetleEntity.this.isKnockedDown() + && HerculesBeetleEntity.this.getTarget() != null; + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = HerculesBeetleEntity.this.getTarget(); + return target != null && target.isAlive() && !HerculesBeetleEntity.this.isTame() && !HerculesBeetleEntity.this.isKnockedDown(); + } + + @Override + public void tick() { + LivingEntity target = HerculesBeetleEntity.this.getTarget(); + if (target == null) { + return; + } + + HerculesBeetleEntity.this.getLookControl().setLookAt(target, 30.0F, 20.0F); + + if (!HerculesBeetleEntity.this.combatCryDone && HerculesBeetleEntity.this.cryCooldown <= 0 && !HerculesBeetleEntity.this.isInBusyAnimation()) { + HerculesBeetleEntity.this.startCry(); + return; + } + + if (HerculesBeetleEntity.this.isInBusyAnimation() || HerculesBeetleEntity.this.chargeTicksRemaining > 0) { + return; + } + + double distanceSqr = HerculesBeetleEntity.this.distanceToSqr(target); + double verticalDelta = Math.abs(target.getY() - HerculesBeetleEntity.this.getY()); + + if (!HerculesBeetleEntity.this.isFlying() && (verticalDelta > 5.0D || HerculesBeetleEntity.this.fallDistance > 4.0F)) { + HerculesBeetleEntity.this.requestFlightStart(); + } else if (HerculesBeetleEntity.this.isFlying() && HerculesBeetleEntity.this.onGround() && distanceSqr < 25.0D && verticalDelta < 1.5D) { + HerculesBeetleEntity.this.requestFlightStop(); + } + + if (HerculesBeetleEntity.this.chargeCooldown <= 0 + && distanceSqr >= CHARGE_TRIGGER_RANGE * CHARGE_TRIGGER_RANGE + && distanceSqr <= 36.0D * 36.0D + && HerculesBeetleEntity.this.random.nextFloat() < 0.015F) { + HerculesBeetleEntity.this.startCharge(target.position().subtract(HerculesBeetleEntity.this.position()), MAX_CHARGE_TICKS, false); + return; + } + + double attackRange = HerculesBeetleEntity.this.isFlying() ? FLY_ATTACK_RANGE : ATTACK_RANGE; + if (HerculesBeetleEntity.this.attackCooldown <= 0 && distanceSqr <= attackRange * attackRange) { + HerculesBeetleEntity.this.startRegularAttack(HerculesBeetleEntity.this.isFlying(), target); + return; + } + + double speed = HerculesBeetleEntity.this.isFlying() ? 1.2D : 1.0D; + HerculesBeetleEntity.this.getNavigation().moveTo(target, speed); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java new file mode 100644 index 00000000..200f0fbb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java @@ -0,0 +1,737 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.ByIdMap; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.EnumSet; +import java.util.function.IntFunction; + +public class JumpyBugEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CAMOUFLAGED = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor CLINGING_TO_CEILING = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ATTACK_STATE = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); + + private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown"; + private static final String RECOVERY_TICKS_KEY = "RecoveryTicks"; + private static final String POUNCE_TICKS_KEY = "PounceTicks"; + private static final String LEAPING_TICKS_KEY = "LeapingTicks"; + + private static final double DEFAULT_MOVEMENT_SPEED = 0.25D; + private static final double DEFAULT_FOLLOW_RANGE = 16.0D; + private static final double MELEE_WALK_RANGE = 4.0D; + private static final double CHASE_LEAP_RANGE_SQR = 8.0D * 8.0D; + private static final int DEFAULT_POUNCE_COOLDOWN = 60; + private static final int DEFAULT_RECOVERY_TICKS = 20; + private static final int CHASE_JUMP_COOLDOWN = 25; + private static final double POUNCE_HORIZONTAL_SPEED = 0.92D; + private static final double POUNCE_UPWARD_SPEED = 0.75D; + private static final double CHASE_LEAP_HORIZONTAL = 1.5D; + private static final double CHASE_LEAP_VERTICAL = 0.55D; + private static final double QUICK_MOVE_SQR = 0.14D * 0.14D; + private static final double POUNCE_LAND_DAMAGE_RANGE = 5.0D; + private static final int CEILING_SEARCH_RANGE = 30; + private static final double CAMOUFLAGE_PLAYER_RANGE = 24.0D; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenLoop("jump"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int pounceCooldownTicks; + private int recoveryTicks; + private int pounceTicks; + private int leapingTicks; + private int chaseJumpCooldownTicks; + private float visualAlpha = 1.0F; + private float previousVisualAlpha = 1.0F; + + public JumpyBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 6; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.jumpyBugHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.jumpyBugPounceDamage()) + .add(Attributes.MOVEMENT_SPEED, DEFAULT_MOVEMENT_SPEED) + .add(Attributes.FOLLOW_RANGE, DEFAULT_FOLLOW_RANGE); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + return level.getDifficulty() != Difficulty.PEACEFUL + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(CAMOUFLAGED, false); + builder.define(CLINGING_TO_CEILING, false); + builder.define(ATTACK_STATE, AttackState.GROUND.id()); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new CloseMeleeGoal()); + this.goalSelector.addGoal(2, new PounceAttackGoal()); + this.goalSelector.addGoal(3, new HideOnCeilingGoal()); + this.goalSelector.addGoal(4, new ChaseTargetGoal()); + this.goalSelector.addGoal(5, new WanderGoal()); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks); + tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks); + tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks); + tag.putInt(LEAPING_TICKS_KEY, this.leapingTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY); + this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY); + this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY); + this.leapingTicks = tag.getInt(LEAPING_TICKS_KEY); + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { + this.setHealth((float) AntarchySettings.jumpyBugHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + } + + @Override + public void tick() { + this.previousVisualAlpha = this.visualAlpha; + float targetAlpha = this.getTargetVisualAlpha(); + if (this.visualAlpha != targetAlpha) { + this.visualAlpha += (targetAlpha - this.visualAlpha) * 0.25F; + } + + super.tick(); + + if (this.level().isClientSide) { + return; + } + + if (this.pounceCooldownTicks > 0) { + this.pounceCooldownTicks--; + } + if (this.recoveryTicks > 0) { + this.recoveryTicks--; + } + if (this.chaseJumpCooldownTicks > 0) { + this.chaseJumpCooldownTicks--; + } + + if (this.isClingingToCeiling()) { + this.tickClinging(); + } else if (this.isPouncing()) { + this.tickPouncing(); + } else if (this.isLeapingToCeiling()) { + this.tickLeapingToCeiling(); + } else { + this.setNoGravity(false); + this.noPhysics = false; + if (this.getAttackState() != AttackState.RECOVERING || this.recoveryTicks <= 0) { + this.setAttackState(AttackState.GROUND); + } + } + + this.updateCamouflage(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isClingingToCeiling()) { + this.setDeltaMovement(Vec3.ZERO); + return; + } + super.travel(travelVector); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (!hurt) { + return false; + } + + this.setCamouflaged(false); + this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS); + if (this.isClingingToCeiling()) { + this.stopClinging(); + } + if (this.isPouncing()) { + this.finishPounce(false); + } + if (this.isLeapingToCeiling()) { + this.cancelLeap(); + } + return true; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState blockState) { + this.playSound(SoundEvents.SPIDER_STEP, 0.12F, 1.1F); + } + + public boolean isCamouflaged() { + return this.entityData.get(CAMOUFLAGED); + } + + public boolean isClingingToCeiling() { + return this.entityData.get(CLINGING_TO_CEILING); + } + + public boolean isPouncing() { + return this.getAttackState() == AttackState.POUNCING; + } + + public boolean isLeapingToCeiling() { + return this.getAttackState() == AttackState.LEAPING_TO_CEILING; + } + + public float getVisualAlpha(float partialTick) { + return Mth.lerp(partialTick, this.previousVisualAlpha, this.visualAlpha); + } + + public AttackState getAttackState() { + return AttackState.BY_ID.apply(this.entityData.get(ATTACK_STATE)); + } + + private void setCamouflaged(boolean value) { + this.entityData.set(CAMOUFLAGED, value); + } + + private void setClingingToCeiling(boolean value) { + this.entityData.set(CLINGING_TO_CEILING, value); + } + + private void setAttackState(AttackState state) { + this.entityData.set(ATTACK_STATE, state.id()); + } + + private float getTargetVisualAlpha() { + return this.isCamouflaged() ? (float) AntarchySettings.jumpyBugCamouflageAlpha() : 1.0F; + } + + private PlayState mainAnimController(AnimationState state) { + AttackState attackState = this.getAttackState(); + if (attackState == AttackState.POUNCING || attackState == AttackState.CLINGING || attackState == AttackState.LEAPING_TO_CEILING) { + return state.setAndContinue(JUMP_ANIM); + } + if (attackState == AttackState.RECOVERING) { + return state.setAndContinue(ATTACK_ANIM); + } + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + private void tickClinging() { + BlockPos clingPos = this.findCeilingWithinRange(2); + if (clingPos == null) { + this.stopClinging(); + return; + } + + this.setAttackState(AttackState.CLINGING); + this.setCamouflaged(true); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.move(MoverType.SELF, Vec3.ZERO); + this.setPos(this.getX(), clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); + } + + private void tickPouncing() { + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.pounceTicks++; + + if (this.onGround() && this.pounceTicks > 8) { + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive() && this.distanceToSqr(target) <= POUNCE_LAND_DAMAGE_RANGE * POUNCE_LAND_DAMAGE_RANGE) { + target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage()); + } + this.finishPounce(false); + } + } + + private void tickLeapingToCeiling() { + this.leapingTicks++; + if (this.leapingTicks > 80) { + this.cancelLeap(); + return; + } + this.getNavigation().stop(); + BlockPos ceiling = this.findCeilingWithinRange(2); + if (ceiling != null) { + this.leapingTicks = 0; + this.beginClinging(); + } + } + + private void updateCamouflage() { + if (this.isPouncing() || this.isLeapingToCeiling()) { + this.setCamouflaged(false); + return; + } + + if (this.isClingingToCeiling()) { + this.setCamouflaged(true); + return; + } + + boolean playerNearby = this.level().getNearestPlayer(this, CAMOUFLAGE_PLAYER_RANGE) != null; + if (!playerNearby) { + this.setCamouflaged(false); + return; + } + + boolean idle = this.getTarget() == null && this.getDeltaMovement().horizontalDistanceSqr() < 0.003D; + boolean movingQuickly = this.getDeltaMovement().lengthSqr() > QUICK_MOVE_SQR; + this.setCamouflaged(!movingQuickly && idle); + } + + @Nullable + private BlockPos findCeilingWithinRange(int maxBlocks) { + BlockPos origin = this.blockPosition(); + for (int dy = 1; dy <= maxBlocks; dy++) { + BlockPos candidate = origin.above(dy); + if (isCeilingBlock(candidate)) { + return candidate; + } + } + return null; + } + + @Nullable + private BlockPos findCeilingForLeap() { + return findCeilingWithinRange(CEILING_SEARCH_RANGE); + } + + private boolean isCeilingBlock(BlockPos pos) { + return this.level().getBlockState(pos).isFaceSturdy(this.level(), pos, net.minecraft.core.Direction.DOWN); + } + + private void beginClinging() { + this.setClingingToCeiling(true); + this.setAttackState(AttackState.CLINGING); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + + private void stopClinging() { + this.setClingingToCeiling(false); + this.setAttackState(AttackState.GROUND); + this.setNoGravity(false); + this.noPhysics = false; + } + + private void beginLeapToCeiling(BlockPos ceilingPos) { + this.setAttackState(AttackState.LEAPING_TO_CEILING); + this.setCamouflaged(false); + this.leapingTicks = 0; + this.getNavigation().stop(); + + double dy = ceilingPos.getY() - this.getY(); + double upwardSpeed = Math.min(2.5D, Math.sqrt(0.16D * Math.max(dy, 1.0D)) + 0.4D); + this.setDeltaMovement(0.0D, upwardSpeed, 0.0D); + this.hasImpulse = true; + } + + private void cancelLeap() { + this.leapingTicks = 0; + this.setAttackState(AttackState.GROUND); + } + + private void beginPounce(LivingEntity target) { + this.stopClinging(); + this.setTarget(target); + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.getNavigation().stop(); + this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; + this.pounceTicks = 0; + + Vec3 from = this.position(); + Vec3 to = target.getEyePosition().subtract(from); + Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); + Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : target.getLookAngle(); + double upward = POUNCE_UPWARD_SPEED + Mth.clamp(to.y * 0.08D, -0.04D, 0.22D); + this.setDeltaMovement(direction.x * POUNCE_HORIZONTAL_SPEED, upward, direction.z * POUNCE_HORIZONTAL_SPEED); + this.hasImpulse = true; + } + + private void finishPounce(boolean keepMomentum) { + this.pounceTicks = 0; + if (!keepMomentum) { + Vec3 movement = this.getDeltaMovement(); + this.setDeltaMovement(movement.x * 0.25D, Math.max(0.0D, movement.y), movement.z * 0.25D); + } + this.setAttackState(AttackState.RECOVERING); + this.recoveryTicks = DEFAULT_RECOVERY_TICKS; + } + + private boolean canUseAmbush() { + return !this.isPouncing() + && !this.isLeapingToCeiling() + && this.recoveryTicks <= 0; + } + + public enum AttackState implements StringRepresentable { + GROUND(0, "ground"), + CLINGING(1, "clinging"), + POUNCING(2, "pouncing"), + RECOVERING(3, "recovering"), + LEAPING_TO_CEILING(4, "leaping_to_ceiling"); + + private static final IntFunction BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + public static final Codec CODEC = StringRepresentable.fromEnum(AttackState::values); + + private final int id; + private final String name; + + AttackState(int id, String name) { + this.id = id; + this.name = name; + } + + public int id() { + return this.id; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + private final class CloseMeleeGoal extends Goal { + private static final double MELEE_RANGE_SQR = 5.0D * 5.0D; + private static final double CONTINUE_RANGE_SQR = 7.0D * 7.0D; + private static final int ATTACK_COOLDOWN = 20; + private int attackCooldown; + + private CloseMeleeGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !JumpyBugEntity.this.isPouncing() + && !JumpyBugEntity.this.isLeapingToCeiling() + && !JumpyBugEntity.this.isClingingToCeiling() + && JumpyBugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR; + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !JumpyBugEntity.this.isPouncing() + && !JumpyBugEntity.this.isLeapingToCeiling() + && !JumpyBugEntity.this.isClingingToCeiling() + && JumpyBugEntity.this.distanceToSqr(target) <= CONTINUE_RANGE_SQR; + } + + @Override + public void start() { + this.attackCooldown = 0; + } + + @Override + public void tick() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target == null) return; + + JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + JumpyBugEntity.this.getNavigation().moveTo(target, 1.1D); + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.attackCooldown <= 0 && JumpyBugEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR) { + JumpyBugEntity.this.doHurtTarget(target); + this.attackCooldown = ATTACK_COOLDOWN; + } + } + } + + private final class PounceAttackGoal extends Goal { + private PounceAttackGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && JumpyBugEntity.this.canUseAmbush() + && JumpyBugEntity.this.pounceCooldownTicks <= 0 + && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D); + } + + @Override + public boolean canContinueToUse() { + return JumpyBugEntity.this.isPouncing(); + } + + @Override + public void start() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target != null) { + JumpyBugEntity.this.beginPounce(target); + } + } + } + + private final class HideOnCeilingGoal extends Goal { + @Nullable + private BlockPos targetCeiling; + + private HideOnCeilingGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + if (!JumpyBugEntity.this.canUseAmbush() || JumpyBugEntity.this.isClingingToCeiling()) { + return false; + } + LivingEntity target = JumpyBugEntity.this.getTarget(); + boolean targetFarAway = target != null + && JumpyBugEntity.this.distanceToSqr(target) > 12.0D * 12.0D; + boolean noTarget = target == null; + if (!noTarget && !targetFarAway) { + return false; + } + if (JumpyBugEntity.this.random.nextInt(25) != 0) { + return false; + } + this.targetCeiling = JumpyBugEntity.this.findCeilingForLeap(); + return this.targetCeiling != null; + } + + @Override + public boolean canContinueToUse() { + return JumpyBugEntity.this.isClingingToCeiling() || JumpyBugEntity.this.isLeapingToCeiling(); + } + + @Override + public void start() { + if (this.targetCeiling != null) { + BlockPos ceil = this.targetCeiling; + // If we're already adjacent to the ceiling, just cling directly + if (ceil.getY() - JumpyBugEntity.this.getY() <= 2) { + JumpyBugEntity.this.beginClinging(); + } else { + JumpyBugEntity.this.beginLeapToCeiling(ceil); + } + } + } + + @Override + public void stop() { + if (JumpyBugEntity.this.isClingingToCeiling()) { + JumpyBugEntity.this.stopClinging(); + } else if (JumpyBugEntity.this.isLeapingToCeiling()) { + JumpyBugEntity.this.cancelLeap(); + } + this.targetCeiling = null; + } + + @Override + public void tick() { + if (JumpyBugEntity.this.isClingingToCeiling()) { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target != null) { + JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (JumpyBugEntity.this.pounceCooldownTicks <= 0 + && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 4.0D)) { + JumpyBugEntity.this.stopClinging(); + JumpyBugEntity.this.beginPounce(target); + } + } + } + } + } + + private final class ChaseTargetGoal extends Goal { + private ChaseTargetGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && !JumpyBugEntity.this.isLeapingToCeiling() + && JumpyBugEntity.this.recoveryTicks <= 0; + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void tick() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target == null) { + return; + } + + JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + double distSqr = JumpyBugEntity.this.distanceToSqr(target); + + if (distSqr <= MELEE_WALK_RANGE * MELEE_WALK_RANGE) { + JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); + } else if (distSqr > CHASE_LEAP_RANGE_SQR) { + if (JumpyBugEntity.this.onGround() && JumpyBugEntity.this.chaseJumpCooldownTicks <= 0) { + Vec3 dir = target.position().subtract(JumpyBugEntity.this.position()).normalize(); + JumpyBugEntity.this.setDeltaMovement( + dir.x * CHASE_LEAP_HORIZONTAL, + CHASE_LEAP_VERTICAL, + dir.z * CHASE_LEAP_HORIZONTAL + ); + JumpyBugEntity.this.hasImpulse = true; + JumpyBugEntity.this.chaseJumpCooldownTicks = CHASE_JUMP_COOLDOWN; + } + JumpyBugEntity.this.getNavigation().stop(); + } else { + JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); + } + } + } + + private final class WanderGoal extends RandomStrollGoal { + private WanderGoal() { + super(JumpyBugEntity.this, 0.8D); + } + + @Override + public boolean canUse() { + return !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && !JumpyBugEntity.this.isLeapingToCeiling() + && JumpyBugEntity.this.getTarget() == null + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && !JumpyBugEntity.this.isLeapingToCeiling() + && super.canContinueToUse(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java new file mode 100644 index 00000000..1a8754fa --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -0,0 +1,178 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class LurkingTerrorEntity extends Monster implements GeoEntity { + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); + private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland"); + private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair"); + private static final byte ATTACK_ANIM_EVENT = 5; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public LurkingTerrorEntity(EntityType type, Level level) { + super(type, level); + this.moveControl = new FlyingMoveControl(this, 10, true); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.35D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D) + .add(Attributes.FLYING_SPEED, 0.55D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + boolean validSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && validSupport + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation nav = new FlyingPathNavigation(this, level); + nav.setCanOpenDoors(false); + nav.setCanFloat(true); + nav.setCanPassDoors(true); + return nav; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { + if (!this.onGround()) { + return state.setAndContinue(ATTACK_AIR_ANIM); + } + return state.setAndContinue(ATTACK_LAND_ANIM); + } + if (!this.onGround()) { + return state.setAndContinue(FLY_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + this.playSound(AntarchySoundEvents.LURKING_TERROR_BITE.get(), 1.0F, 0.95F + this.random.nextFloat() * 0.1F); + attackAnimTicks = 20; + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + @Override + protected SoundEvent getAmbientSound() { + return AntarchySoundEvents.LURKING_TERROR_SNARL.get(); + } + + @Override + protected SoundEvent getHurtSound(net.minecraft.world.damagesource.DamageSource source) { + return AntarchySoundEvents.LURKING_TERROR_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.LURKING_TERROR_HURT.get(); + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + attackAnimTicks = 20; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + super.tick(); + if (!this.level().isClientSide() && !this.onGround() && this.tickCount % 40 == 0) { + this.playSound(AntarchySoundEvents.LURKING_TERROR_FLY_LOOP.get(), 0.45F, 0.95F + this.random.nextFloat() * 0.1F); + } + if (!this.level().isClientSide() && attackAnimTicks > 0) attackAnimTicks--; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, net.minecraft.world.damagesource.DamageSource source) { + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index 5174df37..90995178 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -117,8 +117,9 @@ public class MantisEntity extends Monster implements GeoEntity { boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel(); + // Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) { - return atSurface && level.canSeeSky(pos) && (ignoreLightLevel || Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random)); + return atSurface && level.canSeeSky(pos); } // Elythia meadow (and any future mantis_spawn_biomes): nighttime, no sky-access requirement diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index 4f0f88f4..ca60ec8b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -62,6 +62,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { private static final String LAUNCH_OWNER_KEY = "LaunchOwner"; private static final String ARMED_AFTER_LANDING_KEY = "ArmedAfterLanding"; private static final String ACTION_ANIM_TICKS_KEY = "ActionAnimTicks"; + private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken"; private static final double AGGRO_SPEED = 0.5D; private static final double PATROL_SPEED = 0.28D; private static final double ATTACH_RANGE_SQR = 2.25D; @@ -86,6 +87,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { private int attachedTargetId = -1; private boolean launchedFromSquidzooka; private boolean armedAfterLanding; + private boolean spawnedByKraken; @Nullable private UUID launchOwnerUuid; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -298,6 +300,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { tag.putBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY, this.launchedFromSquidzooka); tag.putBoolean(ARMED_AFTER_LANDING_KEY, this.armedAfterLanding); tag.putInt(ACTION_ANIM_TICKS_KEY, this.actionAnimationTicks); + tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken); if (this.launchOwnerUuid != null) { tag.putUUID(LAUNCH_OWNER_KEY, this.launchOwnerUuid); } @@ -311,10 +314,19 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.launchedFromSquidzooka = tag.getBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY); this.armedAfterLanding = tag.getBoolean(ARMED_AFTER_LANDING_KEY); this.actionAnimationTicks = Math.max(0, tag.getInt(ACTION_ANIM_TICKS_KEY)); + this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY); this.launchOwnerUuid = tag.hasUUID(LAUNCH_OWNER_KEY) ? tag.getUUID(LAUNCH_OWNER_KEY) : null; this.updateAnimationState(); } + public boolean isSpawnedByKraken() { + return this.spawnedByKraken; + } + + public void setSpawnedByKraken(boolean spawnedByKraken) { + this.spawnedByKraken = spawnedByKraken; + } + private void tickAggroMovement(LivingEntity target) { this.patrolTarget = null; this.getLookControl().setLookAt(target, 30.0F, 30.0F); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java new file mode 100644 index 00000000..ecc3edbe --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -0,0 +1,613 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.keyframe.event.builtin.AutoPlayingSoundKeyframeHandler; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.Objects; + +public class OctopusBombEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CAN_FLY = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); + + private static final int ATTACK_NONE = 0; + private static final int ATTACK_GRAB = 1; + private static final int ATTACK_SWIPE = 2; + + private static final int ANIM_IDLE = 0; + private static final int ANIM_SWIM = 2; + private static final int ANIM_SWIPE = 3; + private static final int ANIM_GRAB = 4; + private static final int ANIM_DEATH = 5; + + private static final int DEATH_ANIM_TICKS = 60; + private static final int INK_SPRAY_RANGE = 8; + private static final int INK_SPRAY_COOLDOWN = 80; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("Swipe"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("Grab"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + // Squid-style wander + private float wanderDx, wanderDy, wanderDz; + private int wanderRetargetTicks; + + // Combat + private int attackCooldown; + private int actionTicks; + private int lastAttackState; + private int grabbedTargetId = -1; + private int strafeRetargetTicks; + private float orbitDirection = 1.0F; + private int inkSprayCooldown; + + // Kraken spawn flag + private boolean spawnedByKraken; + + public OctopusBombEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.xpReward = 15; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 100.0D) + .add(Attributes.ATTACK_DAMAGE, 16.0D) + .add(Attributes.MOVEMENT_SPEED, 0.28D) + .add(Attributes.FLYING_SPEED, 0.28D) + .add(Attributes.FOLLOW_RANGE, 32.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.4D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, net.minecraft.core.BlockPos pos, RandomSource random) { + return level.getFluidState(pos).is(net.minecraft.tags.FluidTags.WATER) + && level.getFluidState(pos.above()).is(net.minecraft.tags.FluidTags.WATER); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ATTACK_STATE, ATTACK_NONE); + builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(CAN_FLY, false); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (CAN_FLY.equals(key)) { + this.moveControl = this.canFly() + ? new FlyingMoveControl(this, 20, true) + : new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.navigation = this.canFly() + ? new FlyingPathNavigation(this, this.level()) + : new WaterBoundPathNavigation(this, this.level()); + } + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 20.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + + // Only retaliate when hit — neutral otherwise + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + // When spawned by Kraken and flying, target nearest player + this.targetSelector.addGoal(2, new KrakenSummonTargetGoal(this)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombAttackDamage()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); + case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); + case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void baseTick() { + int airSupply = this.getAirSupply(); + super.baseTick(); + if (!this.canFly()) { + this.handleAirSupply(airSupply); + } else { + this.setAirSupply(this.getMaxAirSupply()); + } + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(this.isInWater() || this.canFly()); + + if (this.level().isClientSide) { + this.updateSwimRotation(); + return; + } + + if (this.attackCooldown > 0) this.attackCooldown--; + if (this.inkSprayCooldown > 0) this.inkSprayCooldown--; + + // Ink spray — always active regardless of aggro state + this.tickInkSpray(); + + LivingEntity target = this.getTarget(); + + if (target == null || !target.isAlive()) { + this.resetCombatState(); + if (this.isInWater()) this.tickWanderMovement(); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (this.getAttackState() != ATTACK_NONE) { + this.tickCurrentAttack(target); + } else { + this.tickPursuitMovement(target); + if (this.attackCooldown <= 0) { + int nextAttack = this.chooseNextAttack(target); + if (nextAttack != ATTACK_NONE) { + this.startAttack(nextAttack); + } + } + } + + this.updateSwimRotation(); + this.updateAnimationState(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() && (this.isInWater() || this.canFly())) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); + return; + } + super.travel(travelVector); + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.KRAKEN_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.KRAKEN_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.2F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt("AttackCooldown", this.attackCooldown); + tag.putInt("ActionTicks", this.actionTicks); + tag.putInt("LastAttackState", this.lastAttackState); + tag.putBoolean("CanFly", this.canFly()); + tag.putBoolean("SpawnedByKraken", this.spawnedByKraken); + if (this.grabbedTargetId >= 0) tag.putInt("GrabTarget", this.grabbedTargetId); + tag.putInt("AttackState", this.getAttackState()); + tag.putInt("AnimationState", this.getAnimationState()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt("AttackCooldown"); + this.actionTicks = tag.getInt("ActionTicks"); + this.lastAttackState = tag.contains("LastAttackState") ? tag.getInt("LastAttackState") : ATTACK_NONE; + this.setCanFly(tag.getBoolean("CanFly")); + this.spawnedByKraken = tag.getBoolean("SpawnedByKraken"); + this.grabbedTargetId = tag.contains("GrabTarget") ? tag.getInt("GrabTarget") : -1; + this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + } + + public boolean canFly() { + return this.entityData.get(CAN_FLY); + } + + public void setCanFly(boolean canFly) { + this.entityData.set(CAN_FLY, canFly); + } + + public int getAttackState() { + return this.entityData.get(ATTACK_STATE); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAttackState(int state) { + this.entityData.set(ATTACK_STATE, state); + } + + private void setAnimationState(int state) { + this.entityData.set(ANIMATION_STATE, state); + } + + public void launchAsProjectile(net.minecraft.world.entity.Entity owner, Vec3 velocity) { + this.spawnedByKraken = true; + this.setCanFly(true); + this.setDeltaMovement(velocity); + } + + // ------------------------------------------------------------------------- + // Squid-style wander + // ------------------------------------------------------------------------- + + private void tickWanderMovement() { + if (--this.wanderRetargetTicks <= 0) { + this.wanderRetargetTicks = 40 + this.random.nextInt(40); + float angle = this.random.nextFloat() * (float) (Math.PI * 2); + this.wanderDx = Mth.cos(angle) * 0.015f; + this.wanderDz = Mth.sin(angle) * 0.015f; + this.wanderDy = -0.01f + this.random.nextFloat() * 0.01f; // slight downward bias + } + + // Surface avoidance: if the block above is not water, push down + float dy = this.wanderDy; + if (!this.level().getFluidState(this.blockPosition().above()).is(net.minecraft.tags.FluidTags.WATER)) { + dy = -0.03f; + } + + this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, dy, this.wanderDz)); + } + + // ------------------------------------------------------------------------- + // Ink spray + // ------------------------------------------------------------------------- + + private void tickInkSpray() { + if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) return; + + Player nearbyPlayer = this.level().getNearestPlayer(this, INK_SPRAY_RANGE); + if (nearbyPlayer == null || nearbyPlayer.isCreative() || nearbyPlayer.isSpectator()) return; + + this.inkSprayCooldown = INK_SPRAY_COOLDOWN; + this.playSound(AntarchySoundEvents.KRAKEN_HURT.get(), 1.0F, 1.49F); + + double cx = this.getX(); + double cy = this.getY() + this.getBbHeight() * 0.5D; + double cz = this.getZ(); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, cx, cy, cz, 120, 2.0D, 1.2D, 2.0D, 0.04D); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, cx, cy, cz, 60, 3.5D, 1.8D, 3.5D, 0.02D); + } + + // ------------------------------------------------------------------------- + // Combat + // ------------------------------------------------------------------------- + + private void tickPursuitMovement(LivingEntity target) { + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 10 + this.random.nextInt(12); + if (this.random.nextFloat() < 0.4F) this.orbitDirection *= -1.0F; + } + Vec3 attackPoint = this.createCombatTarget(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, 1.1D); + } + + private Vec3 createCombatTarget(LivingEntity target) { + double radius = 9.0D; + double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = Mth.clamp( + target.getY() + 1.0D + Math.sin((this.tickCount + this.getId()) * 0.18D), + target.getY() - 3.0D, + target.getY() + 4.0D + ); + return new Vec3(x, y, z); + } + + private void tickCurrentAttack(LivingEntity target) { + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 25.0F); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + + switch (this.getAttackState()) { + case ATTACK_GRAB -> this.tickGrabAttack(target); + case ATTACK_SWIPE -> this.tickSwipeAttack(); + default -> this.finishAttack(); + } + } + + private void startAttack(int attackState) { + this.setAttackState(attackState); + this.grabbedTargetId = -1; + if (attackState == ATTACK_GRAB) { + this.actionTicks = 55; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.2F, 1.07F); + } else if (attackState == ATTACK_SWIPE) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.1F, 1.13F); + } + } + + private void tickGrabAttack(LivingEntity target) { + if (this.actionTicks == 48 && this.distanceToSqr(target) <= 42.25D) { + this.grabbedTargetId = target.getId(); + } + + LivingEntity grabbed = this.getGrabbedTarget(); + if (grabbed != null && grabbed.isAlive()) { + this.holdGrabbedTarget(grabbed); + if (this.actionTicks <= 45 && this.actionTicks > 10 && this.actionTicks % 10 == 0) { + if (this.level() instanceof ServerLevel serverLevel) { + grabbed.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); + } + } + } + + if (--this.actionTicks <= 0) { + if (grabbed != null && grabbed.isAlive()) this.pullDown(grabbed, 2.5D); + this.grabbedTargetId = -1; + this.finishAttack(); + } + } + + private void tickSwipeAttack() { + if (this.actionTicks == 10) this.performSwipe(); + if (--this.actionTicks <= 0) this.finishAttack(); + } + + private void finishAttack() { + int finished = this.getAttackState(); + this.setAttackState(ATTACK_NONE); + this.actionTicks = 0; + this.attackCooldown = 18; + this.grabbedTargetId = -1; + this.lastAttackState = finished; + } + + private int chooseNextAttack(LivingEntity target) { + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 42.25D; + boolean canSwipe = distSqr <= 81.0D && this.isTargetInFront(target, -0.15D); + if (!canGrab && !canSwipe) return ATTACK_NONE; + + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swipeWeight = canSwipe ? (this.lastAttackState == ATTACK_SWIPE ? 1 : 5) : 0; + int total = grabWeight + swipeWeight; + if (total == 0) return ATTACK_NONE; + + int roll = this.random.nextInt(total); + return roll < grabWeight ? ATTACK_GRAB : ATTACK_SWIPE; + } + + private void performSwipe() { + AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, + p -> p.isAlive() && this.isTargetInFront(p, -0.15D)); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + for (Player player : players) { + if (this.level() instanceof ServerLevel serverLevel) { + player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage); + Vec3 dir = player.position().subtract(this.position()); + Vec3 horizontal = new Vec3(dir.x, 0.0D, dir.z).normalize().scale(1.75D); + player.push(horizontal.x, 0.3D, horizontal.z); + player.hurtMarked = true; + } + } + } + + private void holdGrabbedTarget(LivingEntity target) { + Vec3 anchor = this.position().add(0.0D, -this.getBbHeight() * 0.4D, 0.0D); + target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); + target.resetFallDistance(); + if (target instanceof ServerPlayer sp) { + sp.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } else { + target.moveTo(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } + target.hurtMarked = true; + } + + private void pullDown(LivingEntity target, double strength) { + target.push(0.0D, -strength, 0.0D); + target.hurtMarked = true; + } + + @Nullable + private LivingEntity getGrabbedTarget() { + if (this.grabbedTargetId < 0) return null; + net.minecraft.world.entity.Entity e = this.level().getEntity(this.grabbedTargetId); + return e instanceof LivingEntity le ? le : null; + } + + private boolean isTargetInFront(LivingEntity target, double minDot) { + Vec3 forward = this.getViewVector(1.0F); + Vec3 toTarget = target.position().subtract(this.position()).normalize(); + return forward.dot(toTarget) >= minDot; + } + + private void resetCombatState() { + this.setAttackState(ATTACK_NONE); + this.setTarget(null); + this.actionTicks = 0; + this.grabbedTargetId = -1; + } + + private void handleAirSupply(int previousAirSupply) { + if (this.isInWaterOrBubble()) { + this.setAirSupply(this.getMaxAirSupply()); + return; + } + this.setAirSupply(previousAirSupply - 1); + if (this.getAirSupply() <= -20) { + this.setAirSupply(0); + this.hurt(this.damageSources().drown(), 2.0F); + } + } + + private void updateSwimRotation() { + Vec3 velocity = this.getDeltaMovement(); + if (velocity.horizontalDistanceSqr() > 1.0E-4D) { + float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 6.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + if (velocity.lengthSqr() > 1.0E-4D) { + float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); + this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 4.0F)); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + switch (this.getAttackState()) { + case ATTACK_GRAB -> { this.setAnimationState(ANIM_GRAB); return; } + case ATTACK_SWIPE -> { this.setAnimationState(ANIM_SWIPE); return; } + default -> {} + } + if (!this.isInWater()) { + this.setAnimationState(ANIM_SWIM); + return; + } + Vec3 vel = this.getDeltaMovement(); + double hSqr = vel.horizontalDistanceSqr(); + double vSqr = vel.y * vel.y; + if (hSqr > 0.03D && hSqr > vSqr * 2.5D) { + this.setAnimationState(ANIM_SWIM); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.setAttackState(ATTACK_NONE); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) this.setAnimationState(ANIM_DEATH); + if (this.deathTime >= DEATH_ANIM_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(this); + } + } + + // ------------------------------------------------------------------------- + // Inner goal: only target players when spawned by Kraken in fly mode + // ------------------------------------------------------------------------- + + private static final class KrakenSummonTargetGoal extends NearestAttackableTargetGoal { + private final OctopusBombEntity octopus; + + KrakenSummonTargetGoal(OctopusBombEntity octopus) { + super(octopus, Player.class, true); + this.octopus = octopus; + } + + @Override + public boolean canUse() { + return this.octopus.spawnedByKraken && this.octopus.canFly() && super.canUse(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 16999635..40437f18 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -2,8 +2,13 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.AntarchySoundEvents; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; @@ -13,6 +18,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; @@ -39,6 +45,11 @@ import org.jetbrains.annotations.Nullable; public class ScorpionEntity extends Monster implements GeoEntity { private static final byte ATTACK_ANIM_EVENT = 4; + private static final EntityDataAccessor TEXTURE_VARIANT = + SynchedEntityData.defineId(ScorpionEntity.class, EntityDataSerializers.INT); + private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + public static final int BLUE_VARIANT = 0; + public static final int GREEN_VARIANT = 1; private static final int ATTACK_ANIM_TICKS = 12; private static final int ATTACK_HIT_TICK = 6; @@ -82,6 +93,12 @@ public class ScorpionEntity extends Monster implements GeoEntity { && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(TEXTURE_VARIANT, BLUE_VARIANT); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -93,6 +110,13 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { + this.assignRandomTextureVariant(); + return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); + } + @Override public void tick() { super.tick(); @@ -208,6 +232,22 @@ public class ScorpionEntity extends Monster implements GeoEntity { return this.geoCache; } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } else { + this.assignRandomTextureVariant(); + } + } + @Override protected SoundEvent getAmbientSound() { return AntarchySoundEvents.SCORPION_AMBIENT.get(); @@ -228,6 +268,18 @@ public class ScorpionEntity extends Monster implements GeoEntity { return 0.6F; } + public int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + public void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); + } + + private void assignRandomTextureVariant() { + this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); + } + private final class ScorpionMeleeAttackGoal extends MeleeAttackGoal { private ScorpionMeleeAttackGoal() { super(ScorpionEntity.this, 1.15D, true); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java new file mode 100644 index 00000000..8acee363 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java @@ -0,0 +1,265 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.Vec3; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.EnumSet; + +public class SpitBugEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor SPIT_ANIM_TICKS = + SynchedEntityData.defineId(SpitBugEntity.class, EntityDataSerializers.INT); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation SPIT_ANIM = RawAnimation.begin().thenPlay("spit"); + + private static final double MAX_HEALTH = 50.0D; + private static final double MOVEMENT_SPEED = 0.23D; + private static final double ATTACK_DAMAGE = 5.0D; + private static final double FOLLOW_RANGE = 24.0D; + private static final double SPIT_RANGE_SQR = 14.0D * 14.0D; + private static final double MELEE_RANGE_SQR = 3.5D * 3.5D; + private static final int SPIT_COOLDOWN_TICKS = 55; + private static final int SPIT_ANIMATION_TICKS = 18; + private static final int SPIT_RELEASE_TICKS = 8; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int spitCooldownTicks; + private int spitAnimationTicks; + private int spitReleaseTicks; + + public SpitBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 10; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, MAX_HEALTH) + .add(Attributes.MOVEMENT_SPEED, MOVEMENT_SPEED) + .add(Attributes.ATTACK_DAMAGE, ATTACK_DAMAGE) + .add(Attributes.FOLLOW_RANGE, FOLLOW_RANGE) + .add(Attributes.ARMOR, 4.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.2D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + return level.getDifficulty() != Difficulty.PEACEFUL + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(SPIT_ANIM_TICKS, 0); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new SpitAttackGoal()); + this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); + this.goalSelector.addGoal(3, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(4, new LookAtPlayerGoal(this, Player.class, 12.0F)); + this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void tick() { + super.tick(); + if (this.level().isClientSide) { + return; + } + + if (this.spitCooldownTicks > 0) { + this.spitCooldownTicks--; + } + + if (this.spitAnimationTicks > 0) { + this.spitAnimationTicks--; + this.entityData.set(SPIT_ANIM_TICKS, this.spitAnimationTicks); + if (this.spitReleaseTicks > 0 && --this.spitReleaseTicks == 0) { + this.fireSpitProjectile(); + } + } + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean hurt = super.doHurtTarget(target); + if (hurt) { + this.playSound(SoundEvents.SPIDER_HURT, 0.7F, 0.8F + this.random.nextFloat() * 0.2F); + } + return hurt; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState blockState) { + this.playSound(SoundEvents.SPIDER_STEP, 0.18F, 0.95F); + } + + private PlayState mainAnimController(AnimationState state) { + if (this.entityData.get(SPIT_ANIM_TICKS) > 0) { + return state.setAndContinue(SPIT_ANIM); + } + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + private boolean canSpitAt(LivingEntity target) { + return this.spitCooldownTicks <= 0 + && this.spitAnimationTicks <= 0 + && this.hasLineOfSight(target) + && this.distanceToSqr(target) <= SPIT_RANGE_SQR + && this.distanceToSqr(target) > MELEE_RANGE_SQR; + } + + private void startSpitAttack() { + this.spitCooldownTicks = SPIT_COOLDOWN_TICKS; + this.spitAnimationTicks = SPIT_ANIMATION_TICKS; + this.spitReleaseTicks = SPIT_RELEASE_TICKS; + this.entityData.set(SPIT_ANIM_TICKS, this.spitAnimationTicks); + } + + @SuppressWarnings("unchecked") + private void fireSpitProjectile() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + return; + } + + EntityType projectileType = (EntityType) BuiltInRegistries.ENTITY_TYPE.getOptional( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "spit_bug_projectile") + ).orElse(null); + if (projectileType == null) { + return; + } + + SpitBugProjectileEntity projectile = new SpitBugProjectileEntity(projectileType, this, serverLevel); + Vec3 origin = this.position() + .add(0.0D, this.getBbHeight() * 0.55D, 0.0D) + .add(this.getViewVector(0.0F).scale(1.35D)); + Vec3 aimPoint = target.getEyePosition().add(target.getDeltaMovement().scale(0.45D)); + Vec3 direction = aimPoint.subtract(origin).normalize(); + + projectile.setPos(origin.x, origin.y, origin.z); + projectile.shoot(direction.x, direction.y, direction.z, 1.05F, 0.0F); + serverLevel.addFreshEntity(projectile); + this.playSound(SoundEvents.SLIME_ATTACK, 1.0F, 0.85F + this.random.nextFloat() * 0.15F); + } + + private final class SpitAttackGoal extends Goal { + SpitAttackGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = SpitBugEntity.this.getTarget(); + return target != null && target.isAlive(); + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void tick() { + LivingEntity target = SpitBugEntity.this.getTarget(); + if (target == null) { + return; + } + + SpitBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + + if (SpitBugEntity.this.canSpitAt(target)) { + SpitBugEntity.this.getNavigation().stop(); + SpitBugEntity.this.startSpitAttack(); + return; + } + + if (SpitBugEntity.this.distanceToSqr(target) > 36.0D || !SpitBugEntity.this.hasLineOfSight(target)) { + SpitBugEntity.this.getNavigation().moveTo(target, 1.0D); + } else { + SpitBugEntity.this.getNavigation().stop(); + } + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java new file mode 100644 index 00000000..34211277 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugProjectileEntity.java @@ -0,0 +1,172 @@ +package com.craisinlord.antarchy.content.entity; + +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; + +public class SpitBugProjectileEntity extends ThrowableItemProjectile { + private static final EntityDataAccessor LINGERING = + SynchedEntityData.defineId(SpitBugProjectileEntity.class, EntityDataSerializers.BOOLEAN); + private static final int MAX_FLIGHT_TICKS = 100; + private static final int LINGER_DURATION_TICKS = 300; + private static final int DIRECT_HIT_DAMAGE = 8; + private static final float LINGER_RADIUS = 1.65F; + + private boolean lingering; + private int lingeringTicks; + + public SpitBugProjectileEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + public SpitBugProjectileEntity(EntityType entityType, LivingEntity owner, Level level) { + super(entityType, owner, level); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(LINGERING, false); + } + + @Override + protected Item getDefaultItem() { + return Items.SLIME_BALL; + } + + @Override + protected double getDefaultGravity() { + return 0.03D; + } + + @Override + public boolean canBeCollidedWith() { + return false; + } + + @Override + public boolean isAttackable() { + return false; + } + + public boolean isLingering() { + return this.entityData.get(LINGERING); + } + + public float getRenderScale(float partialTick) { + if (!this.isLingering()) { + return 0.65F; + } + float progress = Math.min(1.0F, (this.lingeringTicks + partialTick) / 8.0F); + return 0.6F + progress * 0.5F; + } + + @Override + public void tick() { + if (this.isLingering()) { + this.tickLingering(); + return; + } + + super.tick(); + if (this.tickCount > MAX_FLIGHT_TICKS) { + this.discard(); + return; + } + + if (this.level().isClientSide) { + this.level().addParticle(ParticleTypes.ITEM_SLIME, this.getX(), this.getY(), this.getZ(), 0.0D, 0.0D, 0.0D); + } + } + + private void tickLingering() { + this.lingeringTicks++; + this.setDeltaMovement(Vec3.ZERO); + + if (this.level().isClientSide) { + double radius = 0.4D + this.random.nextDouble() * 0.45D; + this.level().addParticle( + ParticleTypes.ITEM_SLIME, + this.getX() + (this.random.nextDouble() - 0.5D) * radius, + this.getY() + 0.04D, + this.getZ() + (this.random.nextDouble() - 0.5D) * radius, + 0.0D, + 0.0D, + 0.0D + ); + return; + } + + if (this.lingeringTicks % 4 == 0) { + this.applyLingeringSpit(); + } + + if (this.lingeringTicks >= LINGER_DURATION_TICKS) { + this.discard(); + } + } + + private void applyLingeringSpit() { + for (LivingEntity target : this.level().getEntitiesOfClass( + LivingEntity.class, + this.getBoundingBox().inflate(LINGER_RADIUS, 0.6D, LINGER_RADIUS), + entity -> entity.isAlive() && entity != this.getOwner() + )) { + target.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 30, 3, false, true, true)); + target.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.2D, 0.0D, 0.2D)); + } + + if (this.level() instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.ITEM_SLIME, this.getX(), this.getY() + 0.05D, this.getZ(), 3, 0.45D, 0.02D, 0.45D, 0.0D); + } + } + + @Override + protected void onHitEntity(EntityHitResult result) { + if (!this.level().isClientSide && result.getEntity() instanceof LivingEntity livingTarget) { + Entity owner = this.getOwner(); + if (owner instanceof LivingEntity livingOwner) { + livingTarget.hurt(this.damageSources().mobProjectile(this, livingOwner), DIRECT_HIT_DAMAGE); + } else { + livingTarget.hurt(this.damageSources().magic(), DIRECT_HIT_DAMAGE); + } + livingTarget.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 80, 3, false, true, true)); + livingTarget.makeStuckInBlock(Blocks.HONEY_BLOCK.defaultBlockState(), new Vec3(0.25D, 0.0D, 0.25D)); + } + + this.beginLingering(result.getLocation()); + } + + @Override + protected void onHitBlock(BlockHitResult result) { + this.beginLingering(result.getLocation()); + } + + private void beginLingering(Vec3 location) { + if (this.isLingering()) { + return; + } + + this.lingering = true; + this.entityData.set(LINGERING, true); + this.lingeringTicks = 0; + this.noPhysics = true; + this.setPos(location.x, location.y + 0.05D, location.z); + this.setDeltaMovement(Vec3.ZERO); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java new file mode 100644 index 00000000..d54e175e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -0,0 +1,140 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.StinkyBehavior; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.PanicGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class StinkBugEntity extends Animal implements GeoEntity { + private static final String MAIN_CONTROLLER = "main_controller"; + private static final String FART_CONTROLLER = "fart_controller"; + private static final String FART_TRIGGER = "fart"; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FART_ANIM = RawAnimation.begin().thenPlay("fart"); + private static final int FART_ANIMATION_TICKS = 30; + private static final int FART_RELEASE_TICKS = 6; + private static final int STINK_BURST_PARTICLES = 32; + private static final double STINK_BURST_RADIUS = 8.0D; + private static final int STINK_BURST_DURATION_TICKS = 1200; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int fartAnimationTicks; + private boolean pendingFartBurst; + + public StinkBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 2; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 6.0D) + .add(Attributes.MOVEMENT_SPEED, 0.24D) + .add(Attributes.FOLLOW_RANGE, 8.0D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.4D)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + } + + @Override + public void tick() { + super.tick(); + + if (this.fartAnimationTicks > 0) { + this.fartAnimationTicks--; + if (this.fartAnimationTicks == FART_RELEASE_TICKS && this.pendingFartBurst && !this.level().isClientSide()) { + StinkyBehavior.emitBurst(this, STINK_BURST_PARTICLES); + StinkyBehavior.applyBurstStinkyEffect(this, STINK_BURST_RADIUS, STINK_BURST_DURATION_TICKS); + this.pendingFartBurst = false; + } + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (hurt && !this.pendingFartBurst) { + this.triggerFartAnimation(); + this.pendingFartBurst = true; + } + return hurt; + } + + @Override + public boolean isFood(ItemStack stack) { + return false; + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.STINK_BUG.get().create(level); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, MAIN_CONTROLLER, 2, this::mainAnimController)); + controllers.add(new AnimationController<>(this, FART_CONTROLLER, 0, state -> PlayState.STOP) + .triggerableAnim(FART_TRIGGER, FART_ANIM)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private PlayState mainAnimController(AnimationState animationState) { + animationState.setAnimation(animationState.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.CONTINUE; + } + + private void triggerFartAnimation() { + this.fartAnimationTicks = FART_ANIMATION_TICKS; + if (!this.level().isClientSide()) { + this.triggerAnim(FART_CONTROLLER, FART_TRIGGER); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 8d1f2a8c..aadc7a71 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -15,6 +17,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.BossEvent; import net.minecraft.world.Difficulty; +import net.minecraft.tags.DamageTypeTags; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -25,6 +28,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.MoveTowardsTargetGoal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; @@ -53,38 +57,56 @@ import java.util.UUID; public class ToreterrorEntity extends Monster implements GeoEntity { private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor PHASE_2 = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor JUMP_SHAKING = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; private static final int ANIM_SHOOT = 2; private static final int ANIM_JUMP_ATTACK = 3; - private static final int ANIM_SPIN = 4; - private static final int ANIM_DEATH = 5; + private static final int ANIM_SPIN_START = 4; + private static final int ANIM_SPIN_LOOP = 5; + private static final int ANIM_SPIN_END = 6; + private static final int ANIM_DEATH = 7; + private static final int ANIM_RAPID_SHOOT = 8; + + private static final int ATTACK_RAPID_FIRE = 0; + private static final int ATTACK_BOMBERS = 1; private static final int DEATH_TICKS = 60; - private static final int SHOOT_TOTAL_TICKS = 80; - private static final int SHOOT_FIRE_START_TICK = 12; - private static final int SHOOT_FIRE_END_TICK = 68; - private static final int SHOOT_FIRE_INTERVAL = 8; + private static final int SHOOT_TOTAL_TICKS = 75; + private static final int RAPID_FIRE_INTERVAL = 4; + private static final int RAPID_FIRE_END_TICK = 60; private static final int SHOOT_BOMBER_TICK = 12; + private static final int SHOOT_BOMBER_SECOND_TICK = 32; private static final int JUMP_TOTAL_TICKS = 40; private static final int JUMP_LAUNCH_TICK = 10; - private static final int SPIN_TOTAL_TICKS = 40; - private static final int SPIN_START_TICK = 3; - private static final int SPIN_END_TICK = 22; + private static final int JUMP_SHAKE_TICKS = 12; + private static final int SPIN_START_TOTAL_TICKS = 5; + private static final int SPIN_LOOP_MIN_TICKS = 200; + private static final int SPIN_LOOP_MAX_TICKS = 300; + private static final int SPIN_END_TOTAL_TICKS = 10; private static final int SPIN_HIT_INTERVAL = 5; + private static final int SPIN_STUCK_FAIL_LIMIT = 10; - private static final double RANGED_MIN_RANGE_SQR = 9.0D; + private static final double CLOSE_RANGE_SQR = 64.0D; + private static final double JUMP_RANGE_SQR = 400.0D; private static final double RANGED_MAX_RANGE_SQR = 625.0D; - private static final double MELEE_RANGE_SQR = 9.0D; - private static final double SPIN_RADIUS = 4.5D; + private static final double SPIN_TRIGGER_RANGE_SQR = 225.0D; + private static final double SPIN_LEASH_RANGE_SQR = 225.0D; + private static final double SPIN_RADIUS = 2.5D; + private static final double SPIN_MOVE_SPEED = 0.65D; + private static final double SPIN_ANIMATION_SPEED = 0.49D; private static final double JUMP_SHOCKWAVE_RADIUS = 6.0D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("Idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation SHOOT_ANIM = RawAnimation.begin().thenPlay("shoot").thenLoop("Idle"); + private static final RawAnimation RAPID_SHOOT_ANIM = RawAnimation.begin().thenLoop("shoot"); private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_attack").thenLoop("Idle"); - private static final RawAnimation SPIN_ANIM = RawAnimation.begin().thenPlay("spin_attack").thenLoop("Idle"); + private static final RawAnimation SPIN_START_ANIM = RawAnimation.begin().thenPlay("spin_attack_start"); + private static final RawAnimation SPIN_LOOP_ANIM = RawAnimation.begin().thenLoop("spin_attack"); + private static final RawAnimation SPIN_END_ANIM = RawAnimation.begin().thenPlay("spin_attack_end"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -92,15 +114,26 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private int shootAnimTicks; private int jumpAnimTicks; - private int spinAnimTicks; + private int spinStartTicks; + private int spinLoopTicks; + private int spinEndTicks; + private int spinLoopTotalTicks; private int shootCooldown; private int jumpCooldown; private int spinCooldown; private boolean jumpLaunched; + private boolean jumpAirborne; private boolean shockwaveApplied; - private boolean shootUseWaterBombs; + private int jumpShakeTicks; + private int shootAttackType; private boolean shootBomberFired; - private int shootNextFireElapsed; + private boolean shootBomberFiredSecond; + private int rapidFireNextTick; + private Vec3 spinDirection = Vec3.ZERO; + private int spinStrafeSign = 1; + private int spinStuckTicks; + private Vec3 spinProgressAnchor = Vec3.ZERO; + private int spinProgressTicks; private final Map spinHitCooldowns = new HashMap<>(); public ToreterrorEntity(EntityType entityType, Level level) { @@ -112,10 +145,11 @@ public class ToreterrorEntity extends Monster implements GeoEntity { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.toreterrorHealth()) .add(Attributes.ATTACK_DAMAGE, 8.0D) - .add(Attributes.MOVEMENT_SPEED, 0.25D) + .add(Attributes.MOVEMENT_SPEED, 0.325D) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.85D) - .add(Attributes.ARMOR, 10.0D); + .add(Attributes.ARMOR, 16.0D) + .add(Attributes.ARMOR_TOUGHNESS, 4.0D); } public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, net.minecraft.util.RandomSource random) { @@ -127,16 +161,20 @@ public class ToreterrorEntity extends Monster implements GeoEntity { protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(PHASE_2, false); + builder.define(JUMP_SHAKING, false); } @Override protected void registerGoals() { + this.goalSelector.addGoal(0, new ToreterrorFloatGoal()); this.goalSelector.addGoal(1, new ToreterrorRangedGoal()); this.goalSelector.addGoal(2, new ToreterrorJumpGoal()); this.goalSelector.addGoal(3, new ToreterrorSpinGoal()); + this.goalSelector.addGoal(4, new MoveTowardsTargetGoal(this, 1.0D, 64.0F)); this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.6D)); + this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.5D)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); } @@ -148,11 +186,18 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private PlayState mainAnimController(AnimationState state) { int animState = this.getAnimationState(); + state.getController().setAnimationSpeed(1.0D); return switch (animState) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); case ANIM_SHOOT -> state.setAndContinue(SHOOT_ANIM); + case ANIM_RAPID_SHOOT -> state.setAndContinue(RAPID_SHOOT_ANIM); case ANIM_JUMP_ATTACK -> state.setAndContinue(JUMP_ANIM); - case ANIM_SPIN -> state.setAndContinue(SPIN_ANIM); + case ANIM_SPIN_START -> state.setAndContinue(SPIN_START_ANIM); + case ANIM_SPIN_LOOP -> { + state.getController().setAnimationSpeed(SPIN_ANIMATION_SPEED); + yield state.setAndContinue(SPIN_LOOP_ANIM); + } + case ANIM_SPIN_END -> state.setAndContinue(SPIN_END_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); default -> state.setAndContinue(IDLE_ANIM); }; @@ -166,11 +211,27 @@ public class ToreterrorEntity extends Monster implements GeoEntity { @Override public void tick() { super.tick(); - if (this.level().isClientSide) return; + if (this.level().isClientSide) { + if (this.isJumpShaking()) { + com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + this, + com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_RANGE, + com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_STRENGTH, + this::isJumpShaking + ); + } + return; + } if (this.shootCooldown > 0) this.shootCooldown--; if (this.jumpCooldown > 0) this.jumpCooldown--; if (this.spinCooldown > 0) this.spinCooldown--; + if (this.jumpShakeTicks > 0) { + this.jumpShakeTicks--; + if (this.jumpShakeTicks <= 0) { + this.entityData.set(JUMP_SHAKING, false); + } + } this.spinHitCooldowns.replaceAll((uuid, cd) -> cd - 1); this.spinHitCooldowns.entrySet().removeIf(e -> e.getValue() <= 0); @@ -184,8 +245,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.tickShootAnimation(); } else if (this.jumpAnimTicks > 0) { this.tickJumpAnimation(); - } else if (this.spinAnimTicks > 0) { - this.tickSpinAnimation(); + } else if (this.isSpinSequenceActive()) { + this.tickSpinSequence(); } else { this.updateIdleAnimation(); } @@ -193,6 +254,55 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); } + @Override + public boolean hurt(DamageSource source, float amount) { + if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false; + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); + } + if (!this.isPhase2()) { + float halfHealth = this.getMaxHealth() * 0.5F; + if (this.getHealth() - amount <= halfHealth) { + float capDamage = this.getHealth() - halfHealth; + if (capDamage <= 0.0F) { + this.enterPhase2(); + return false; + } + boolean result = super.hurt(source, capDamage); + if (result) this.enterPhase2(); + return result; + } + } + return super.hurt(source, amount); + } + + private void enterPhase2() { + this.entityData.set(PHASE_2, true); + } + + public boolean isPhase2() { + return this.entityData.get(PHASE_2); + } + + public boolean isJumpShaking() { + return this.entityData.get(JUMP_SHAKING); + } + + @Override + protected net.minecraft.sounds.SoundEvent getAmbientSound() { + return AntarchySoundEvents.TORETERROR_IDLE.get(); + } + + @Override + protected net.minecraft.sounds.SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.TORETERROR_HURT.get(); + } + + @Override + protected net.minecraft.sounds.SoundEvent getDeathSound() { + return AntarchySoundEvents.TORETERROR_DEATH.get(); + } + @Override public void startSeenByPlayer(ServerPlayer player) { super.startSeenByPlayer(player); @@ -243,7 +353,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.setAnimationState(ANIM_DEATH); this.shootAnimTicks = 0; this.jumpAnimTicks = 0; - this.spinAnimTicks = 0; + this.stopSpinSequence(); this.setDeltaMovement(Vec3.ZERO); this.getNavigation().stop(); } @@ -279,27 +389,44 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } private boolean isInAttackAnimation() { - return this.shootAnimTicks > 0 || this.jumpAnimTicks > 0 || this.spinAnimTicks > 0; + return this.shootAnimTicks > 0 || this.jumpAnimTicks > 0 || this.isSpinSequenceActive(); + } + + private boolean isSpinSequenceActive() { + return this.spinStartTicks > 0 || this.spinLoopTicks > 0 || this.spinEndTicks > 0; } private void tickShootAnimation() { - this.setAnimationState(ANIM_SHOOT); int elapsed = SHOOT_TOTAL_TICKS - this.shootAnimTicks; - if (this.shootUseWaterBombs) { - if (elapsed >= this.shootNextFireElapsed && this.shootNextFireElapsed <= SHOOT_FIRE_END_TICK) { - this.shootNextFireElapsed += SHOOT_FIRE_INTERVAL; - this.fireWaterBomb(); + switch (this.shootAttackType) { + case ATTACK_RAPID_FIRE -> { + this.setAnimationState(ANIM_RAPID_SHOOT); + if (elapsed >= this.rapidFireNextTick && elapsed < RAPID_FIRE_END_TICK) { + this.rapidFireNextTick += RAPID_FIRE_INTERVAL; + this.fireRapidBomb(); + } } - } else { - if (!this.shootBomberFired && elapsed >= SHOOT_BOMBER_TICK) { - this.shootBomberFired = true; - this.fireBomberBurst(); + default -> { + this.setAnimationState(ANIM_SHOOT); + if (!this.shootBomberFired && elapsed >= SHOOT_BOMBER_TICK) { + this.shootBomberFired = true; + this.fireBomberBurst(); + } + if (this.isPhase2() && !this.shootBomberFiredSecond && elapsed >= SHOOT_BOMBER_SECOND_TICK) { + this.shootBomberFiredSecond = true; + this.fireBomberBurst(); + } } } this.getNavigation().stop(); this.setDeltaMovement(this.getDeltaMovement().scale(0.85D)); if (this.getTarget() != null) { - this.getLookControl().setLookAt(this.getTarget(), 30.0F, 20.0F); + Vec3 toTarget = this.getTarget().position().subtract(this.position()); + float yaw = (float) (net.minecraft.util.Mth.atan2(toTarget.z, toTarget.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); } this.shootAnimTicks--; if (this.shootAnimTicks <= 0) { @@ -315,13 +442,28 @@ public class ToreterrorEntity extends Monster implements GeoEntity { LivingEntity target = this.getTarget(); if (target != null) { Vec3 toTarget = target.position().subtract(this.position()).normalize(); - this.setDeltaMovement(toTarget.x * 0.6D, 0.85D, toTarget.z * 0.6D); + this.setDeltaMovement(toTarget.x * 0.6D, 1.15D, toTarget.z * 0.6D); this.hasImpulse = true; } } - if (this.jumpLaunched && this.onGround() && elapsed > JUMP_LAUNCH_TICK + 3 && !this.shockwaveApplied) { - this.shockwaveApplied = true; - this.applyJumpShockwave(); + if (this.jumpLaunched && !this.onGround()) { + this.jumpAirborne = true; + } + if (this.jumpLaunched && this.jumpAirborne && !this.shockwaveApplied) { + if (this.onGround()) { + this.shockwaveApplied = true; + this.playSound(AntarchySoundEvents.TORETERROR_JUMP_LAND.get(), 1.2F, 0.9F + this.random.nextFloat() * 0.15F); + this.applyJumpShockwave(); + this.jumpShakeTicks = JUMP_SHAKE_TICKS; + this.entityData.set(JUMP_SHAKING, true); + } else if (this.jumpAnimTicks <= 10) { + Vec3 vel = this.getDeltaMovement(); + this.setDeltaMovement(vel.x * 0.5D, Math.min(vel.y, -1.5D), vel.z * 0.5D); + this.hasImpulse = true; + if (this.jumpAnimTicks <= 2) { + this.jumpAnimTicks = 2; + } + } } this.jumpAnimTicks--; if (this.jumpAnimTicks <= 0) { @@ -329,35 +471,270 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } } - private void tickSpinAnimation() { - this.setAnimationState(ANIM_SPIN); - int elapsed = SPIN_TOTAL_TICKS - this.spinAnimTicks; + private void tickSpinSequence() { this.getNavigation().stop(); - this.setDeltaMovement(this.getDeltaMovement().multiply(0.7D, 1.0D, 0.7D)); - if (elapsed >= SPIN_START_TICK && elapsed <= SPIN_END_TICK && elapsed % SPIN_HIT_INTERVAL == 0) { + if (this.spinStartTicks > 0) { + this.tickSpinStart(); + return; + } + if (this.spinLoopTicks > 0) { + this.tickSpinLoop(); + return; + } + this.tickSpinEnd(); + } + + private void tickSpinStart() { + this.setAnimationState(ANIM_SPIN_START); + this.setDeltaMovement(this.getDeltaMovement().scale(0.75D)); + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() > 1.0E-4D) { + this.spinDirection = towardTarget; + this.lookInDirection(towardTarget); + } + } + this.spinStartTicks--; + } + + private void tickSpinLoop() { + this.setAnimationState(ANIM_SPIN_LOOP); + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.beginSpinEnd(); + return; + } + + this.updateSpinDirection(target); + if (!this.moveDuringSpin()) { + this.spinStuckTicks++; + if (this.spinStuckTicks >= SPIN_STUCK_FAIL_LIMIT) { + this.beginSpinEnd(); + return; + } + } else { + this.spinStuckTicks = 0; + } + + this.spinProgressTicks++; + if (this.spinProgressTicks >= 20) { + if (this.position().distanceToSqr(this.spinProgressAnchor) < 4.0D) { + this.beginSpinEnd(); + return; + } + this.spinProgressAnchor = this.position(); + this.spinProgressTicks = 0; + } + + int elapsed = this.spinLoopTotalTicks - this.spinLoopTicks; + if (elapsed % SPIN_HIT_INTERVAL == 0) { this.applySpinDamage(); } - this.spinAnimTicks--; - if (this.spinAnimTicks <= 0) { - this.spinCooldown = 160 + this.random.nextInt(80); + + this.lookInDirection(this.spinDirection); + this.spinLoopTicks--; + if (this.spinLoopTicks <= 0) { + this.beginSpinEnd(); + } + } + + private void tickSpinEnd() { + this.setAnimationState(ANIM_SPIN_END); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.7D, 1.0D, 0.7D)); + this.spinEndTicks--; + if (this.spinEndTicks <= 0) { + this.stopSpinSequence(); + this.spinCooldown = 340 + this.random.nextInt(80); this.spinHitCooldowns.clear(); } } - private void fireWaterBomb() { + private void updateSpinDirection(LivingEntity target) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() <= 1.0E-4D) { + return; + } + if (this.distanceToSqr(target) > SPIN_LEASH_RANGE_SQR) { + this.spinDirection = towardTarget; + return; + } + Vec3 forward = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : towardTarget; + Vec3 combined = forward.scale(0.99D).add(towardTarget.scale(0.01D)); + this.spinDirection = combined.lengthSqr() > 1.0E-4D ? combined.normalize() : towardTarget; + } + + private boolean moveDuringSpin() { + Vec3 direction = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : Vec3.ZERO; + if (direction == Vec3.ZERO) { + return false; + } + + if (this.trySpinMoves(direction, false)) { + return true; + } + + this.spinStrafeSign *= -1; + Vec3 bounced = rotateHorizontal(direction, this.spinStrafeSign * 35.0D); + if (this.trySpinMoves(bounced, true)) { + return true; + } + + Vec3 reversed = direction.scale(-1.0D); + if (this.trySpinMoves(reversed, true)) { + return true; + } + + Vec3 reversedBounce = rotateHorizontal(reversed, this.spinStrafeSign * 25.0D); + return this.trySpinMoves(reversedBounce, true); + } + + private boolean trySpinMoves(Vec3 baseDirection, boolean bounced) { + Vec3[] attempts = new Vec3[]{ + baseDirection, + rotateHorizontal(baseDirection, 28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, 52.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -52.0D * this.spinStrafeSign) + }; + for (Vec3 attempt : attempts) { + if (this.trySpinMove(attempt, 0.0D, 0.0D) || this.trySpinMove(attempt, 1.0D, 0.42D) || this.trySpinMove(attempt, -1.0D, -0.28D)) { + this.spinDirection = attempt.normalize(); + if (bounced) { + this.spinStrafeSign *= -1; + } + return true; + } + } + return false; + } + + private boolean trySpinMove(Vec3 direction, double yOffset, double verticalVelocity) { + Vec3 horizontalMove = new Vec3(direction.x * SPIN_MOVE_SPEED, 0.0D, direction.z * SPIN_MOVE_SPEED); + AABB movedBox = this.getBoundingBox().move(horizontalMove.x, yOffset, horizontalMove.z); + if (!this.level().noCollision(this, movedBox)) { + return false; + } + if (!this.hasSpinSupport(movedBox)) { + return false; + } + + this.setDeltaMovement(horizontalMove.x, verticalVelocity, horizontalMove.z); + this.hasImpulse = true; + return true; + } + + private boolean hasSpinSupport(AABB box) { + double probeY = box.minY - 0.2D; + double[][] probes = new double[][]{ + {box.getCenter().x, box.getCenter().z}, + {box.minX + 0.25D, box.minZ + 0.25D}, + {box.minX + 0.25D, box.maxZ - 0.25D}, + {box.maxX - 0.25D, box.minZ + 0.25D}, + {box.maxX - 0.25D, box.maxZ - 0.25D} + }; + + for (double[] probe : probes) { + BlockPos supportPos = BlockPos.containing(probe[0], probeY, probe[1]); + if (this.level().loadedAndEntityCanStandOnFace(supportPos, this, Direction.UP)) { + return true; + } + BlockPos lowerSupportPos = supportPos.below(); + if (this.level().loadedAndEntityCanStandOnFace(lowerSupportPos, this, Direction.UP)) { + return true; + } + } + return false; + } + + private Vec3 horizontalDirectionTo(Vec3 targetPos) { + Vec3 diff = targetPos.subtract(this.position()); + Vec3 horizontal = new Vec3(diff.x, 0.0D, diff.z); + return horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : Vec3.ZERO; + } + + private void lookInDirection(Vec3 direction) { + if (direction.lengthSqr() <= 1.0E-4D) { + return; + } + float yaw = (float) (net.minecraft.util.Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + + private static Vec3 rotateHorizontal(Vec3 direction, double degrees) { + if (direction.lengthSqr() <= 1.0E-4D) { + return Vec3.ZERO; + } + double radians = Math.toRadians(degrees); + double cos = Math.cos(radians); + double sin = Math.sin(radians); + double x = direction.x * cos - direction.z * sin; + double z = direction.x * sin + direction.z * cos; + return new Vec3(x, 0.0D, z).normalize(); + } + + private void beginSpinEnd() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + if (this.spinEndTicks <= 0) { + this.spinEndTicks = SPIN_END_TOTAL_TICKS; + } + } + + private void stopSpinSequence() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + this.spinEndTicks = 0; + this.spinLoopTotalTicks = 0; + this.spinDirection = Vec3.ZERO; + this.spinStrafeSign = 1; + this.spinStuckTicks = 0; + this.spinProgressAnchor = Vec3.ZERO; + this.spinProgressTicks = 0; + } + + private Vec3 calcLaunchVelocity(Vec3 from, Vec3 to, double minSpeed) { + Vec3 diff = to.subtract(from); + double dh = Math.sqrt(diff.x * diff.x + diff.z * diff.z); + double dy = diff.y; + double gravity = AntarchySettings.waterBombGravity(); + // Choose travel time based on horizontal distance at minSpeed, minimum 8 ticks + double t = Math.max(8.0, dh / minSpeed); + double vx = diff.x / t; + double vz = diff.z / t; + // Compensate for gravity accumulating over t ticks + double vy = dy / t + 0.5 * gravity * t; + return new Vec3(vx, vy, vz); + } + + private void fireRapidBomb() { if (!(this.level() instanceof ServerLevel serverLevel)) return; LivingEntity target = this.getTarget(); if (target == null) return; - WaterBombEntity bomb = new WaterBombEntity(this.level(), this); - bomb.moveTo(this.getX(), this.getEyeY(), this.getZ(), this.getYRot(), 0); - bomb.shootFromRotation(this, this.getXRot(), this.getYRot(), 0.0F, 1.4F, 1.5F); - serverLevel.addFreshEntity(bomb); + this.playSound(AntarchySoundEvents.SQUIDZOOKA_FIRE.get(), 0.8F, 0.9F + this.random.nextFloat() * 0.2F); + Vec3 from = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + Vec3 to = new Vec3(target.getX(), target.getEyeY(), target.getZ()); + Vec3 baseVel = calcLaunchVelocity(from, to, 1.5); + int count = this.isPhase2() ? 2 : 1; + for (int i = 0; i < count; i++) { + double spread = count > 1 ? (i - 0.5) * 0.15 : 0.0; + Vec3 vel = new Vec3(baseVel.x + spread, baseVel.y, baseVel.z - spread); + WaterBombEntity bomb = new WaterBombEntity(this.level(), this); + bomb.setPos(from.x, from.y, from.z); + bomb.setDeltaMovement(vel); + bomb.hasImpulse = true; + serverLevel.addFreshEntity(bomb); + } } private void fireBomberBurst() { if (!(this.level() instanceof ServerLevel serverLevel)) return; LivingEntity target = this.getTarget(); if (target == null) return; + this.playSound(AntarchySoundEvents.TORETERROR_BOMBER_FIRE.get(), 1.1F, 0.9F + this.random.nextFloat() * 0.15F); int count = 3; for (int i = 0; i < count; i++) { BomberEntity bomber = AntarchyObjects.BOMBER.get().create(this.level()); @@ -371,6 +748,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { bomber.setDeltaMovement(vx, vy, vz); bomber.setTarget(target); serverLevel.addFreshEntity(bomber); + bomber.primeFuse(); } } @@ -380,7 +758,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { List victims = this.level().getEntitiesOfClass(LivingEntity.class, shockArea, this::canTargetEntity); float damage = (float) AntarchySettings.toreterrorJumpAttackDamage(); for (LivingEntity victim : victims) { - victim.hurt(this.damageSources().mobAttack(this), damage); + victim.hurt(AntarchyDamageSources.toreterrorJump(serverLevel, this), damage); Vec3 knockDir = victim.position().subtract(this.position()).normalize().add(0, 0.4D, 0); double knockback = AntarchySettings.toreterrorJumpAttackKnockback(); victim.push(knockDir.x * knockback, 0.5D, knockDir.z * knockback); @@ -393,14 +771,14 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private void applySpinDamage() { if (!(this.level() instanceof ServerLevel)) return; - AABB spinArea = this.getBoundingBox().inflate(SPIN_RADIUS, 2.0D, SPIN_RADIUS); + AABB spinArea = this.getBoundingBox().inflate(SPIN_RADIUS, SPIN_RADIUS, SPIN_RADIUS); List victims = this.level().getEntitiesOfClass(LivingEntity.class, spinArea, this::canTargetEntity); float damage = (float) AntarchySettings.toreterrorSpinDamage(); double knockback = AntarchySettings.toreterrorSpinKnockback(); for (LivingEntity victim : victims) { UUID id = victim.getUUID(); if (this.spinHitCooldowns.getOrDefault(id, 0) > 0) continue; - if (victim.hurt(this.damageSources().mobAttack(this), damage)) { + if (victim.hurt(AntarchyDamageSources.toreterrorSpin((ServerLevel) this.level(), this), damage)) { this.spinHitCooldowns.put(id, 20); Vec3 knockDir = victim.position().subtract(this.position()).normalize(); victim.push(knockDir.x * knockback, 0.35D, knockDir.z * knockback); @@ -428,16 +806,19 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.shootCooldown > 0) return false; double distSqr = ToreterrorEntity.this.distanceToSqr(target); - return distSqr >= RANGED_MIN_RANGE_SQR && distSqr <= RANGED_MAX_RANGE_SQR + return distSqr > CLOSE_RANGE_SQR && distSqr <= RANGED_MAX_RANGE_SQR && ToreterrorEntity.this.hasLineOfSight(target); } @Override public void start() { ToreterrorEntity.this.shootAnimTicks = SHOOT_TOTAL_TICKS; - ToreterrorEntity.this.shootUseWaterBombs = ToreterrorEntity.this.random.nextFloat() < (float) AntarchySettings.toreterrorRangedWaterBombChance(); - ToreterrorEntity.this.shootNextFireElapsed = SHOOT_FIRE_START_TICK; ToreterrorEntity.this.shootBomberFired = false; + ToreterrorEntity.this.shootBomberFiredSecond = false; + ToreterrorEntity.this.rapidFireNextTick = 0; + float roll = ToreterrorEntity.this.random.nextFloat(); + if (roll < 0.5F) ToreterrorEntity.this.shootAttackType = ATTACK_RAPID_FIRE; + else ToreterrorEntity.this.shootAttackType = ATTACK_BOMBERS; } @Override @@ -462,14 +843,16 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.jumpCooldown > 0) return false; double distSqr = ToreterrorEntity.this.distanceToSqr(target); - return distSqr <= RANGED_MAX_RANGE_SQR && ToreterrorEntity.this.onGround(); + return distSqr <= JUMP_RANGE_SQR && ToreterrorEntity.this.onGround(); } @Override public void start() { ToreterrorEntity.this.jumpAnimTicks = JUMP_TOTAL_TICKS; ToreterrorEntity.this.jumpLaunched = false; + ToreterrorEntity.this.jumpAirborne = false; ToreterrorEntity.this.shockwaveApplied = false; + ToreterrorEntity.this.playSound(AntarchySoundEvents.TORETERROR_JUMP_UP.get(), 1.2F, 0.9F + ToreterrorEntity.this.random.nextFloat() * 0.15F); } @Override @@ -483,6 +866,28 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } } + private final class ToreterrorFloatGoal extends Goal { + ToreterrorFloatGoal() { + this.setFlags(EnumSet.of(Flag.JUMP)); + } + + @Override + public boolean canUse() { + return ToreterrorEntity.this.isInWater() && !ToreterrorEntity.this.onGround(); + } + + @Override + public boolean canContinueToUse() { + return canUse(); + } + + @Override + public void tick() { + Vec3 vel = ToreterrorEntity.this.getDeltaMovement(); + ToreterrorEntity.this.setDeltaMovement(vel.x, Math.min(vel.y + 0.08D, 0.2D), vel.z); + } + } + private final class ToreterrorSpinGoal extends Goal { ToreterrorSpinGoal() { this.setFlags(EnumSet.of(Flag.MOVE)); @@ -493,22 +898,34 @@ public class ToreterrorEntity extends Monster implements GeoEntity { LivingEntity target = ToreterrorEntity.this.getTarget(); if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.spinCooldown > 0) return false; - return ToreterrorEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR && ToreterrorEntity.this.onGround(); + return ToreterrorEntity.this.distanceToSqr(target) <= SPIN_TRIGGER_RANGE_SQR && ToreterrorEntity.this.onGround(); } @Override public void start() { - ToreterrorEntity.this.spinAnimTicks = SPIN_TOTAL_TICKS; + LivingEntity target = ToreterrorEntity.this.getTarget(); + ToreterrorEntity.this.spinStartTicks = SPIN_START_TOTAL_TICKS; + ToreterrorEntity.this.spinLoopTotalTicks = SPIN_LOOP_MIN_TICKS + ToreterrorEntity.this.random.nextInt(SPIN_LOOP_MAX_TICKS - SPIN_LOOP_MIN_TICKS + 1); + ToreterrorEntity.this.spinLoopTicks = ToreterrorEntity.this.spinLoopTotalTicks; + ToreterrorEntity.this.spinEndTicks = 0; + ToreterrorEntity.this.spinStuckTicks = 0; + ToreterrorEntity.this.spinProgressAnchor = ToreterrorEntity.this.position(); + ToreterrorEntity.this.spinProgressTicks = 0; + ToreterrorEntity.this.spinStrafeSign = ToreterrorEntity.this.random.nextBoolean() ? 1 : -1; + ToreterrorEntity.this.spinHitCooldowns.clear(); + ToreterrorEntity.this.spinDirection = target == null + ? Vec3.ZERO + : ToreterrorEntity.this.horizontalDirectionTo(target.position()); } @Override public boolean canContinueToUse() { - return ToreterrorEntity.this.spinAnimTicks > 0; + return ToreterrorEntity.this.isSpinSequenceActive(); } @Override public void stop() { - ToreterrorEntity.this.spinAnimTicks = 0; + ToreterrorEntity.this.stopSpinSequence(); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java index bd03bf47..dd3a5810 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -11,6 +12,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.ThrowableProjectile; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.CampfireBlock; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.material.Fluids; @@ -18,6 +21,8 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import java.util.HashMap; @@ -26,6 +31,8 @@ import java.util.UUID; public class WaterBombEntity extends ThrowableProjectile { + private static final EntityDataAccessor HUGE = SynchedEntityData.defineId(WaterBombEntity.class, EntityDataSerializers.BOOLEAN); + private int lifetimeTicks; private final Map hitCooldowns = new HashMap<>(); @@ -39,8 +46,18 @@ public class WaterBombEntity extends ThrowableProjectile { this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); } + public WaterBombEntity(Level level, LivingEntity owner, boolean huge) { + this(level, owner); + this.entityData.set(HUGE, huge); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(HUGE, false); + } + + public boolean isHuge() { + return this.entityData.get(HUGE); } @Override @@ -75,23 +92,40 @@ public class WaterBombEntity extends ThrowableProjectile { UUID id = entity.getUUID(); if (this.hitCooldowns.getOrDefault(id, 0) > 0) return; - float damage = (float) AntarchySettings.waterBombDamage(); - if (living.hurt(this.damageSources().thrown(this, this.getOwner()), damage)) { + float damage = (float) AntarchySettings.waterBombDamage() * (this.isHuge() ? 3.0F : 1.0F); + if (living.hurt(AntarchyDamageSources.waterSoaked(this.level(), this, this.getOwner()), damage)) { this.hitCooldowns.put(id, 15); Vec3 knockDir = living.position().subtract(this.position()).normalize(); double knockback = AntarchySettings.waterBombKnockback(); living.push(knockDir.x * knockback, 0.3D, knockDir.z * knockback); living.hurtMarked = true; } + living.clearFire(); } @Override protected void onHitBlock(BlockHitResult result) { - BlockPos hitPos = result.getBlockPos().relative(result.getDirection()); + BlockPos blockPos = result.getBlockPos(); + BlockPos hitPos = blockPos.relative(result.getDirection()); Level level = this.level(); - if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { - level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 2), 3); - level.scheduleTick(hitPos, Fluids.WATER, 2); + if (level.getBlockState(blockPos).getBlock() instanceof CampfireBlock campfire && level.getBlockState(blockPos).getValue(CampfireBlock.LIT)) { + level.setBlock(blockPos, level.getBlockState(blockPos).setValue(CampfireBlock.LIT, false), 3); + this.discard(); + return; + } + if (this.isHuge()) { + for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) { + if (level.getBlockState(pos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(pos, false); + } + } + } else { + if (level.getBlockState(hitPos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(hitPos, false); + } else if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { + level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3); + level.scheduleTick(hitPos, Fluids.WATER, 2); + } } this.discard(); } @@ -100,11 +134,13 @@ public class WaterBombEntity extends ThrowableProjectile { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putBoolean("Huge", this.isHuge()); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.lifetimeTicks = tag.contains("LifetimeTicks") ? tag.getInt("LifetimeTicks") : AntarchySettings.waterBombLifetimeTicks(); + if (tag.contains("Huge")) this.entityData.set(HUGE, tag.getBoolean("Huge")); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 97d66961..d0957941 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -1,29 +1,103 @@ package com.craisinlord.antarchy.content.entity.ant; +import com.craisinlord.antarchy.config.AntarchySettings; +import java.util.ArrayList; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.PlayerRespawnLogic; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.OwnableEntity; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.animal.horse.AbstractHorse; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.vehicle.DismountHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.portal.DimensionTransition; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; public final class AntTeleportHelper { + private static final double COMPANION_FOLLOW_RADIUS = 16.0D; + private AntTeleportHelper() { } + public static void teleportPlayerWithCompanions(ServerPlayer player, ServerLevel destination, Vec3 destinationPos) { + Mob vehicle = player.getVehicle() instanceof Mob mob ? mob : null; + List companions = collectCompanions(player); + player.teleportTo(destination, destinationPos.x, destinationPos.y, destinationPos.z, player.getYRot(), player.getXRot()); + Mob movedVehicle = null; + for (Mob companion : companions) { + Mob moved = moveCompanion(companion, destination, destinationPos); + if (companion == vehicle) { + movedVehicle = moved; + } + } + + if (movedVehicle != null) { + player.startRiding(movedVehicle, true); + } + } + + private static List collectCompanions(ServerPlayer player) { + List companions = new ArrayList<>(); + if (player.getVehicle() instanceof Mob vehicle) { + companions.add(vehicle); + } + + for (Mob mob : player.serverLevel().getEntitiesOfClass(Mob.class, player.getBoundingBox().inflate(COMPANION_FOLLOW_RADIUS), mob -> isFollowingPet(mob, player))) { + if (!companions.contains(mob)) { + companions.add(mob); + } + } + + return companions; + } + + private static boolean isFollowingPet(Mob mob, ServerPlayer player) { + if (!mob.isAlive()) { + return false; + } + + if (mob instanceof TamableAnimal tamable) { + return tamable.isTame() && player.getUUID().equals(tamable.getOwnerUUID()) && !tamable.isOrderedToSit(); + } + + if (mob instanceof AbstractHorse horse) { + return horse.isTamed() && player.getUUID().equals(horse.getOwnerUUID()); + } + + return mob instanceof OwnableEntity ownable && player.getUUID().equals(ownable.getOwnerUUID()); + } + + @Nullable + private static Mob moveCompanion(Mob companion, ServerLevel destination, Vec3 destinationPos) { + companion.stopRiding(); + companion.ejectPassengers(); + companion.getNavigation().stop(); + if (companion.level() == destination) { + companion.teleportTo(destinationPos.x, destinationPos.y, destinationPos.z); + return companion; + } + + Entity moved = companion.changeDimension(new DimensionTransition(destination, destinationPos, Vec3.ZERO, companion.getYRot(), companion.getXRot(), DimensionTransition.DO_NOTHING)); + return moved instanceof Mob mob ? mob : null; + } + static InteractionResult handleInteraction(BaseAntEntity ant, Player player, ItemStack itemStack) { if (ant.requiresActivationReagent() && !ant.isTeleportActivatedState()) { if (!(player instanceof ServerPlayer serverPlayer)) { @@ -59,7 +133,7 @@ public final class AntTeleportHelper { } Vec3 destinationPos = getDestinationPosition(serverPlayer, destination); - serverPlayer.teleportTo(destination, destinationPos.x, destinationPos.y, destinationPos.z, serverPlayer.getYRot(), serverPlayer.getXRot()); + teleportPlayerWithCompanions(serverPlayer, destination, destinationPos); serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); return InteractionResult.CONSUME; } @@ -87,7 +161,7 @@ public final class AntTeleportHelper { return destination; } - // If the player's respawn is not in the overworld, return them to overworld spawn instead. + // If the player's respawn is not in the overworld, return them to overworld spawn instead return player.server.overworld(); } @@ -111,6 +185,11 @@ public final class AntTeleportHelper { @Nullable private static Vec3 findSafeArrivalPosition(ServerPlayer player, ServerLevel destination, BlockPos preferredPos) { + int[] yRange = getDimensionYRange(destination); + if (yRange != null) { + return findSafeArrivalPositionInYRange(player, destination, preferredPos, yRange[0], yRange[1]); + } + Set candidates = new LinkedHashSet<>(); BlockPos adjustedPreferredPos = player.adjustSpawnLocation(destination, preferredPos); addArrivalCandidate(candidates, preferredPos); @@ -146,6 +225,40 @@ public final class AntTeleportHelper { return null; } + @Nullable + private static int[] getDimensionYRange(ServerLevel destination) { + ResourceKey dim = destination.dimension(); + if (dim == AntarchySettings.termiteDestinationDimension()) { + return new int[]{100, 200}; + } + if (dim == AntarchySettings.brownAntDestinationDimension()) { + return new int[]{75, 120}; + } + return null; + } + + @Nullable + private static Vec3 findSafeArrivalPositionInYRange(ServerPlayer player, ServerLevel destination, BlockPos preferredPos, int minY, int maxY) { + for (int radius = 0; radius <= 8; radius++) { + for (int xOff = -radius; xOff <= radius; xOff++) { + for (int zOff = -radius; zOff <= radius; zOff++) { + if (radius > 0 && Math.abs(xOff) != radius && Math.abs(zOff) != radius) { + continue; + } + int x = preferredPos.getX() + xOff; + int z = preferredPos.getZ() + zOff; + for (int y = maxY; y >= minY + 1; y--) { + Vec3 safePos = tryFindSafeDismount(player, destination, new BlockPos(x, y, z)); + if (safePos != null && safePos.y >= minY && safePos.y <= maxY) { + return safePos; + } + } + } + } + } + return null; + } + private static void addArrivalCandidate(Set candidates, @Nullable BlockPos pos) { if (pos == null) { return; @@ -161,17 +274,26 @@ public final class AntTeleportHelper { @Nullable private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) { Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } for (Direction direction : Direction.Plane.HORIZONTAL) { safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } } return null; } + + private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + if (destination.dimension() != AntarchySettings.termiteDestinationDimension()) { + return true; + } + + BlockPos standPos = BlockPos.containing(safePos); + return !destination.getBlockState(standPos.below()).is(Blocks.BEDROCK); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java index 464d61f2..5b09bb03 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -1230,11 +1230,11 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { } private boolean shouldPlayAttackAnimation() { - if (!(this instanceof RedAntEntity)) { - return false; - } + return this.shouldUseBiteAnimation() && this.getBiteAnimationTicks() > 0; + } - return this.getBiteAnimationTicks() > 0; + protected boolean shouldUseBiteAnimation() { + return this instanceof RedAntEntity; } private int getBiteAnimationTicks() { @@ -1245,6 +1245,10 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { this.entityData.set(BITE_ANIM_TICKS, Math.max(0, ticks)); } + protected final void triggerBiteAnimation(int ticks) { + this.setBiteAnimationTicks(ticks); + } + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { if (attributeInstance == null || Math.abs(attributeInstance.getBaseValue() - desiredValue) < ATTRIBUTE_EPSILON) { return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java index 8bab5980..a2cff0a2 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java @@ -1,9 +1,11 @@ package com.craisinlord.antarchy.content.entity.ant; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; @@ -17,10 +19,22 @@ import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; public class TermiteEntity extends BaseAntEntity implements GeoEntity { - private static final int WOOD_SEARCH_INTERVAL_TICKS = 10; + private static final int WOOD_BITE_ANIMATION_TICKS = 8; + private static final int WOOD_SEARCH_INTERVAL_TICKS = 20; private static final int WOOD_REPATH_INTERVAL_TICKS = 6; private static final int WOOD_SEARCH_RADIUS_HORIZONTAL = 12; private static final int WOOD_SEARCH_RADIUS_VERTICAL = 4; + private static final Vec3i[] IMMEDIATE_WOOD_OFFSETS = { + new Vec3i(0, 1, 0), + new Vec3i(0, 0, -1), + new Vec3i(0, 0, 1), + new Vec3i(1, 0, 0), + new Vec3i(-1, 0, 0), + new Vec3i(0, 1, -1), + new Vec3i(0, 1, 1), + new Vec3i(1, 1, 0), + new Vec3i(-1, 1, 0), + }; @Nullable private BlockPos targetWoodPos; private int nextWoodSearchTick; @@ -79,13 +93,8 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } @Override - protected boolean canGroupWithNestmates() { - return false; - } - - @Override - protected boolean canMarch() { - return false; + protected boolean shouldUseBiteAnimation() { + return true; } @Override @@ -119,37 +128,25 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } private boolean tryEatNearbyWood() { - for (BlockPos targetPos : this.getImmediateWoodChecks()) { + BlockPos basePos = this.blockPosition(); + for (Vec3i offset : IMMEDIATE_WOOD_OFFSETS) { + BlockPos targetPos = basePos.offset(offset); BlockState targetState = this.level().getBlockState(targetPos); if (!targetState.is(AntarchyTags.Blocks.TERMITE_FOODS)) { continue; } SoundType soundType = targetState.getSoundType(); + this.triggerBiteAnimation(WOOD_BITE_ANIMATION_TICKS); this.level().destroyBlock(targetPos, false, this); this.level().playSound(null, targetPos, soundType.getBreakSound(), this.getSoundSource(), 0.7F, 1.1F); + this.playSound(AntarchySoundEvents.ANT_BITE.get(), 0.35F, 0.95F + this.random.nextFloat() * 0.1F); return true; } return false; } - private BlockPos[] getImmediateWoodChecks() { - BlockPos basePos = this.blockPosition(); - BlockPos abovePos = basePos.above(); - return new BlockPos[] { - basePos.above(), - basePos.north(), - basePos.south(), - basePos.east(), - basePos.west(), - abovePos.north(), - abovePos.south(), - abovePos.east(), - abovePos.west() - }; - } - @Nullable private BlockPos getCurrentWoodTarget() { if (this.targetWoodPos != null && this.isValidWoodTarget(this.targetWoodPos)) { @@ -168,20 +165,52 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { @Nullable private BlockPos findClosestWoodTarget() { BlockPos origin = this.blockPosition(); + int ox = origin.getX(); + int oy = origin.getY(); + int oz = origin.getZ(); BlockPos bestPos = null; - double bestDistance = Double.MAX_VALUE; + double bestDistSq = Double.MAX_VALUE; + BlockPos.MutableBlockPos candidate = new BlockPos.MutableBlockPos(); - for (BlockPos pos : BlockPos.betweenClosed( - origin.offset(-WOOD_SEARCH_RADIUS_HORIZONTAL, -WOOD_SEARCH_RADIUS_VERTICAL, -WOOD_SEARCH_RADIUS_HORIZONTAL), - origin.offset(WOOD_SEARCH_RADIUS_HORIZONTAL, WOOD_SEARCH_RADIUS_VERTICAL + 2, WOOD_SEARCH_RADIUS_HORIZONTAL))) { - if (!this.isValidWoodTarget(pos)) { - continue; + for (int r = 0; r <= WOOD_SEARCH_RADIUS_HORIZONTAL; r++) { + if (bestPos != null && bestDistSq <= (double)(r * r)) { + break; } - - double distance = pos.distSqr(origin); - if (distance < bestDistance) { - bestDistance = distance; - bestPos = pos.immutable(); + for (int dy = -WOOD_SEARCH_RADIUS_VERTICAL; dy <= WOOD_SEARCH_RADIUS_VERTICAL + 2; dy++) { + if (r == 0) { + candidate.set(ox, oy + dy, oz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + continue; + } + // North/South faces (dz = ±r) + for (int dx = -r; dx <= r; dx++) { + candidate.set(ox + dx, oy + dy, oz - r); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + dx, oy + dy, oz + r); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + } + // East/West faces (dx = ±r, corners already covered above) + for (int dz = -r + 1; dz <= r - 1; dz++) { + candidate.set(ox - r, oy + dy, oz + dz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + r, oy + dy, oz + dz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + } } } @@ -215,9 +244,10 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } private boolean isWalkableStandPos(BlockPos pos) { - BlockState floorState = this.level().getBlockState(pos.below()); + BlockPos floor = pos.below(); + BlockState floorState = this.level().getBlockState(floor); return this.level().getBlockState(pos).isAir() && this.level().getBlockState(pos.above()).isAir() - && floorState.isFaceSturdy(this.level(), pos.below(), Direction.UP); + && floorState.isFaceSturdy(this.level(), floor, Direction.UP); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index fbd45fe2..61abd463 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -604,7 +604,7 @@ public class BasiliskEntity extends Monster implements GeoEntity { BasiliskEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); } - // super handles path recalc and cooldown timer — always run it + // super handles path recalc and cooldown timer super.tick(); if (BasiliskEntity.this.hissChargeTimer > 0 || BasiliskEntity.this.attackAnimTicks > 0) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java index ceab548f..295ede68 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -83,6 +83,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { private static final int SWIPE_TICKS = 18; private static final float SWIPE_KNOCKBACK = 2.8F; private static final int COCOON_HIT_THRESHOLD = 3; + private static final int COCOON_HIT_COOLDOWN_TICKS = 60; private static final int COCOON_HIT_ANIM_TICKS = 30; private static final int COCOON_HATCH_ANIM_TICKS = 40; private static final int COCOON_IDLE_ANIM_TICKS = 70; @@ -111,6 +112,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { @Nullable BlockPos anchorPos; private int cocoonHits; + private int cocoonHitCooldownTicks; private boolean isHatching; private int cocoonAnimTicks; private boolean pendingHatchAnim; @@ -261,6 +263,10 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } private void tickCocoon() { + if (this.cocoonHitCooldownTicks > 0) { + this.cocoonHitCooldownTicks--; + } + // Pin position to hang from anchor if (this.anchorPos != null) { this.setPos(this.anchorPos.getX() + 0.5, this.anchorPos.getY() - 1.5, this.anchorPos.getZ() + 0.5); @@ -319,6 +325,8 @@ public class BrutalflyEntity extends Monster implements GeoEntity { this.entityData.set(IS_COCOONED, false); this.isHatching = false; this.anchorPos = null; + this.cocoonHits = 0; + this.cocoonHitCooldownTicks = 0; this.refreshDimensions(); this.setAnimationState(ANIM_FLY); Player nearbyPlayer = this.level().getNearestPlayer(this, 48.0D); @@ -344,6 +352,10 @@ public class BrutalflyEntity extends Monster implements GeoEntity { this.anchorPos = anchor; this.refreshDimensions(); if (cocooned) { + this.cocoonHits = 0; + this.cocoonHitCooldownTicks = 0; + this.isHatching = false; + this.pendingHatchAnim = false; this.setAnimationState(ANIM_COCOON); } } @@ -355,9 +367,10 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } if (this.isCocooned() && !this.isHatching) { - if (this.level().isClientSide || this.hurtTime > 0) return false; + if (this.level().isClientSide || this.cocoonHitCooldownTicks > 0) return false; this.hurtTime = this.hurtDuration; this.cocoonHits++; + this.cocoonHitCooldownTicks = COCOON_HIT_COOLDOWN_TICKS; if (this.cocoonHits >= COCOON_HIT_THRESHOLD) { this.startHatching(); } else { @@ -706,6 +719,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { super.addAdditionalSaveData(tag); tag.putBoolean("IsCocooned", this.isCocooned()); tag.putInt("CocoonHits", this.cocoonHits); + tag.putInt("CocoonHitCooldown", this.cocoonHitCooldownTicks); if (this.anchorPos != null) { tag.putInt("AnchorX", this.anchorPos.getX()); tag.putInt("AnchorY", this.anchorPos.getY()); @@ -723,6 +737,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } this.setCocooned(true, anchor); this.cocoonHits = tag.getInt("CocoonHits"); + this.cocoonHitCooldownTicks = tag.getInt("CocoonHitCooldown"); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java index d944f823..1c7dcc9f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/flying_squirrel/FlyingSquirrelEntity.java @@ -55,6 +55,7 @@ import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.EnumSet; +import java.util.Optional; import java.util.UUID; public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @@ -71,6 +72,8 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor TEXTURE_VARIANT = SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor> SHOULDER_PLAYER_DATA = + SynchedEntityData.defineId(FlyingSquirrelEntity.class, EntityDataSerializers.OPTIONAL_UUID); private static final String PICKUP_ANIM_TICKS_KEY = "PickupAnimTicks"; private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; @@ -227,6 +230,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { builder.define(CLIMBING, false); builder.define(PICKING_UP_NUT, false); builder.define(TEXTURE_VARIANT, TEXTURE_VARIANT_REGULAR); + builder.define(SHOULDER_PLAYER_DATA, Optional.empty()); } @Override @@ -376,13 +380,19 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } if (this.isOnShoulder()) { - if (!(this.getVehicle() instanceof Player shoulderPlayer) - || !shoulderPlayer.isAlive()) { + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer == null || !shoulderPlayer.isAlive()) { this.dismountShoulder(); } else if (this.shoulderSneakGraceTicks <= 0 && shoulderPlayer.isShiftKeyDown()) { this.glideOffShoulder(); } else { + Vec3 shoulderPos = this.getShoulderRidePos(shoulderPlayer); + this.setPos(shoulderPos.x, shoulderPos.y, shoulderPos.z); this.setDeltaMovement(Vec3.ZERO); + this.setYRot(shoulderPlayer.getYHeadRot()); + this.setXRot(shoulderPlayer.getXRot()); + this.yBodyRot = shoulderPlayer.getYHeadRot(); + this.yHeadRot = shoulderPlayer.getYHeadRot(); this.fallDistance = 0.0F; } this.setNoGravity(true); @@ -434,22 +444,25 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.tickIdleStallLogging(horizontalSpeed); } + if (this.isOnShoulder() && this.level().isClientSide) { + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer != null) { + Vec3 shoulderPos = this.getShoulderRidePos(shoulderPlayer); + this.setPos(shoulderPos.x, shoulderPos.y, shoulderPos.z); + this.setDeltaMovement(Vec3.ZERO); + this.setYRot(shoulderPlayer.getYHeadRot()); + this.setXRot(shoulderPlayer.getXRot()); + this.yBodyRot = shoulderPlayer.getYHeadRot(); + this.yHeadRot = shoulderPlayer.getYHeadRot(); + this.fallDistance = 0.0F; + } + } this.setNoGravity(this.isGliding() || this.isClimbingTrunk() || this.isClimbingToShoulder() || this.isOnShoulder()); } @Override public void rideTick() { super.rideTick(); - if (this.getVehicle() instanceof Player player) { - Vec3 shoulderPos = this.getShoulderRidePos(player); - this.setPos(shoulderPos.x, shoulderPos.y, shoulderPos.z); - this.setDeltaMovement(Vec3.ZERO); - this.setYRot(player.getYHeadRot()); - this.setXRot(player.getXRot()); - this.yBodyRot = player.getYHeadRot(); - this.yHeadRot = player.getYHeadRot(); - this.fallDistance = 0.0F; - } } @Override @@ -703,7 +716,14 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } public boolean isOnShoulder() { - return this.getVehicle() instanceof Player; + return this.entityData.get(SHOULDER_PLAYER_DATA).isPresent(); + } + + @Nullable + private Player getShoulderPlayer() { + return this.entityData.get(SHOULDER_PLAYER_DATA) + .map(uuid -> this.level().getPlayerByUUID(uuid)) + .orElse(null); } public boolean isClimbingToShoulder() { @@ -725,10 +745,9 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } private void dismountShoulder() { - Entity vehicle = this.getVehicle(); - if (vehicle != null) { - this.stopRiding(); - Vec3 dismountPos = vehicle.position().add(0.0D, 0.1D, 0.0D); + Player shoulderPlayer = this.getShoulderPlayer(); + if (shoulderPlayer != null) { + Vec3 dismountPos = shoulderPlayer.position().add(0.0D, 0.1D, 0.0D); this.setPos(dismountPos.x, dismountPos.y, dismountPos.z); } this.clearShoulderMountState(); @@ -737,6 +756,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } private void clearShoulderMountState() { + this.entityData.set(SHOULDER_PLAYER_DATA, Optional.empty()); this.shoulderPlayerId = null; this.shoulderClimbStartPos = null; this.climbingToShoulderTicks = 0; @@ -746,16 +766,15 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } private void glideOffShoulder() { - Entity vehicle = this.getVehicle(); - if (!(vehicle instanceof Player player)) { + Player player = this.getShoulderPlayer(); + if (player == null) { this.dismountShoulder(); return; } Vec3 launchPos = this.getShoulderRidePos(player); - this.stopRiding(); - this.setPos(launchPos.x, launchPos.y, launchPos.z); this.clearShoulderMountState(); + this.setPos(launchPos.x, launchPos.y, launchPos.z); this.fallDistance = 0.0F; BlockPos glideTarget = this.findFallGlideTarget(); @@ -815,7 +834,7 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { this.shoulderPlayerId = null; this.shoulderSneakGraceTicks = SHOULDER_SNEAK_GRACE_TICKS; this.setClimbingTrunk(false); - this.startRiding(player, true); + this.entityData.set(SHOULDER_PLAYER_DATA, Optional.of(player.getUUID())); this.setDeltaMovement(Vec3.ZERO); this.fallDistance = 0.0F; } @@ -1118,11 +1137,16 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { } public void collectNut(ItemEntity itemEntity) { + ItemStack itemStack = itemEntity.getItem(); + if (itemStack.isEmpty()) { + itemEntity.discard(); + return; + } + this.startPickupAnimation(); - ItemStack particleStack = itemEntity.getItem().copy(); + ItemStack particleStack = itemStack.copy(); particleStack.setCount(1); - ItemStack itemStack = itemEntity.getItem(); itemStack.shrink(1); if (itemStack.isEmpty()) { itemEntity.discard(); @@ -1648,6 +1672,11 @@ public class FlyingSquirrelEntity extends TamableAnimal implements GeoEntity { @Override public void tick() { if (this.targetNut != null) { + if (!this.targetNut.isAlive() || this.targetNut.getItem().isEmpty()) { + this.targetNut = null; + return; + } + FlyingSquirrelEntity.this.getLookControl().setLookAt(this.targetNut, 30.0F, 30.0F); if (--this.repathDelay <= 0 && !FlyingSquirrelEntity.this.isGliding()) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index b46c6853..5a5b93c5 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -5,8 +5,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; - +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.damage.AntarchyDamageTypes; + import java.util.List; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -68,24 +69,28 @@ public class KrakenEntity extends Monster implements GeoEntity { private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; private static final String ACTION_TICKS_KEY = "ActionTicks"; private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; - private static final String NEXT_ATTACK_INDEX_KEY = "NextAttackIndex"; - private static final String SLAM_COOLDOWN_KEY = "SlamCooldown"; private static final String PHASE_SUMMON_COOLDOWN_KEY = "PhaseSummonCooldown"; private static final String LAST_ATTACK_STATE_KEY = "LastAttackState"; private static final String AGGRO_TRIGGERED_KEY = "AggroTriggered"; private static final String GRAB_TARGET_KEY = "GrabTarget"; + private static final double BOSS_BAR_RANGE = 40.0D; + private static final int ATTACK_NONE = 0; private static final int ATTACK_GRAB = 1; - private static final int ATTACK_SWIPE = 2; - private static final int ATTACK_SLAM = 3; - private static final int ANIM_IDLE = 0; - private static final int ANIM_IDLE_TWO = 1; - private static final int ANIM_SWIM = 2; - private static final int ANIM_SWIPE = 3; - private static final int ANIM_GRAB = 4; + private static final int ATTACK_SWING_LEFT = 2; + private static final int ATTACK_SWING_RIGHT = 3; + + // Synced animation state values + private static final int ANIM_NONE = 0; + private static final int ANIM_CRY = 1; + private static final int ANIM_GRAB = 2; + private static final int ANIM_SWING_LEFT = 3; + private static final int ANIM_SWING_RIGHT = 4; private static final int ANIM_DEATH = 5; + private static final int DEATH_ANIM_TICKS = 60; + private static final ResourceLocation PHASE_TWO_SPEED_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_speed"); private static final ResourceLocation PHASE_TWO_FLYING_SPEED_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_flying_speed"); private static final ResourceLocation PHASE_TWO_DAMAGE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_damage"); @@ -96,21 +101,21 @@ public class KrakenEntity extends Monster implements GeoEntity { private static final AttributeModifier PHASE_TWO_DAMAGE = new AttributeModifier(PHASE_TWO_DAMAGE_ID, PHASE_TWO_DAMAGE_BONUS, AttributeModifier.Operation.ADD_VALUE); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); - private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("Swipe"); - private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("Grab"); - private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); + private static final RawAnimation SWING_LEFT_ANIM = RawAnimation.begin().thenPlay("swing_left"); + private static final RawAnimation SWING_RIGHT_ANIM = RawAnimation.begin().thenPlay("swing_right"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); private final ServerBossEvent bossEvent = new ServerBossEvent(Component.literal("The Kraken"), BossEvent.BossBarColor.BLUE, BossEvent.BossBarOverlay.PROGRESS); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + @Nullable private Vec3 patrolTarget; private int patrolRetargetTicks; private int attackCooldown; private int actionTicks; private int phaseTransitionTicks; - private int nextAttackIndex; - private int slamCooldown; private int phaseSummonCooldown; private int lastAttackState; private boolean aggroTriggered; @@ -121,6 +126,7 @@ public class KrakenEntity extends Monster implements GeoEntity { private int strafeRetargetTicks; private float orbitDirection = 1.0F; private boolean stormActive; + public KrakenEntity(EntityType entityType, Level level) { super(entityType, level); this.moveControl = new FlyingMoveControl(this, 20, true); @@ -149,7 +155,7 @@ public class KrakenEntity extends Monster implements GeoEntity { builder.define(ATTACK_STATE, ATTACK_NONE); builder.define(ROARING, false); builder.define(PHASE_TWO, false); - builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(ANIMATION_STATE, ANIM_NONE); } @Override @@ -165,17 +171,26 @@ public class KrakenEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + // idle_controller always loops idle; action_controller layers on top when active + controllers.add(new AnimationController<>(this, "idle_controller", 0, state -> { + if (this.getAnimationState() == ANIM_DEATH) { + return PlayState.STOP; + } + state.setAndContinue(IDLE_ANIM); + return PlayState.CONTINUE; + }).setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + controllers.add(new AnimationController<>(this, "action_controller", 0, this::actionAnimController) .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); } - private PlayState mainAnimController(AnimationState state) { + private PlayState actionAnimController(AnimationState state) { return switch (this.getAnimationState()) { + case ANIM_CRY -> state.setAndContinue(CRY_ANIM); case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); - case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); - case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + case ANIM_SWING_LEFT -> state.setAndContinue(SWING_LEFT_ANIM); + case ANIM_SWING_RIGHT -> state.setAndContinue(SWING_RIGHT_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); - default -> state.setAndContinue(IDLE_ANIM); + default -> PlayState.STOP; }; } @@ -221,9 +236,6 @@ public class KrakenEntity extends Monster implements GeoEntity { if (this.attackCooldown > 0) { this.attackCooldown--; } - if (this.slamCooldown > 0) { - this.slamCooldown--; - } if (this.phaseSummonCooldown > 0) { this.phaseSummonCooldown--; } @@ -307,7 +319,8 @@ public class KrakenEntity extends Monster implements GeoEntity { if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypes.LIGHTNING_BOLT) || source.is(AntarchyDamageTypes.KRAKEN_LIGHTNING) - || source.getEntity() instanceof MissileSquidEntity) { + || source.getEntity() instanceof MissileSquidEntity + || source.getEntity() instanceof OctopusBombEntity) { return false; } @@ -351,8 +364,6 @@ public class KrakenEntity extends Monster implements GeoEntity { tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); tag.putInt(ACTION_TICKS_KEY, this.actionTicks); tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); - tag.putInt(NEXT_ATTACK_INDEX_KEY, this.nextAttackIndex); - tag.putInt(SLAM_COOLDOWN_KEY, this.slamCooldown); tag.putInt(PHASE_SUMMON_COOLDOWN_KEY, this.phaseSummonCooldown); tag.putInt(LAST_ATTACK_STATE_KEY, this.lastAttackState); tag.putBoolean(AGGRO_TRIGGERED_KEY, this.aggroTriggered); @@ -374,8 +385,6 @@ public class KrakenEntity extends Monster implements GeoEntity { this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); this.actionTicks = tag.getInt(ACTION_TICKS_KEY); this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); - this.nextAttackIndex = tag.getInt(NEXT_ATTACK_INDEX_KEY); - this.slamCooldown = tag.getInt(SLAM_COOLDOWN_KEY); this.phaseSummonCooldown = tag.getInt(PHASE_SUMMON_COOLDOWN_KEY); this.lastAttackState = tag.contains(LAST_ATTACK_STATE_KEY) ? tag.getInt(LAST_ATTACK_STATE_KEY) : ATTACK_NONE; this.aggroTriggered = tag.getBoolean(AGGRO_TRIGGERED_KEY); @@ -384,7 +393,7 @@ public class KrakenEntity extends Monster implements GeoEntity { this.entityData.set(ROARING, tag.getBoolean("Roaring")); this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); this.entityData.set(PHASE_TWO, tag.getBoolean("PhaseTwo")); - this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_NONE); this.lightningStrikeCooldown = tag.getInt("LightningStrikeCooldown"); this.lightningAmbientCooldown = tag.getInt("LightningAmbientCooldown"); this.stormActive = false; @@ -394,6 +403,17 @@ public class KrakenEntity extends Monster implements GeoEntity { this.updateAnimationState(); } + @Override + public void startSeenByPlayer(net.minecraft.server.level.ServerPlayer player) { + super.startSeenByPlayer(player); + } + + @Override + public void stopSeenByPlayer(net.minecraft.server.level.ServerPlayer player) { + super.stopSeenByPlayer(player); + this.bossEvent.removePlayer(player); + } + @Override public void remove(Entity.RemovalReason reason) { this.clearKrakenStorm(); @@ -475,7 +495,7 @@ public class KrakenEntity extends Monster implements GeoEntity { this.getLookControl().setLookAt(target, 25.0F, 20.0F); if (!this.spawnedPhaseMinions && this.phaseTransitionTicks <= 40) { - this.spawnPhaseMinions(1 + this.random.nextInt(2), true, target); + this.spawnMinions(1 + this.random.nextInt(2), target); this.spawnedPhaseMinions = true; } @@ -499,8 +519,8 @@ public class KrakenEntity extends Monster implements GeoEntity { switch (this.getAttackState()) { case ATTACK_GRAB -> this.tickGrabAttack(target); - case ATTACK_SWIPE -> this.tickSwipeAttack(); - case ATTACK_SLAM -> this.tickSlamAttack(); + case ATTACK_SWING_LEFT -> this.tickSwingAttack(false); + case ATTACK_SWING_RIGHT -> this.tickSwingAttack(true); default -> this.finishAttack(); } } @@ -512,12 +532,9 @@ public class KrakenEntity extends Monster implements GeoEntity { if (attackState == ATTACK_GRAB) { this.actionTicks = 55; this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.45F, 0.9F); - } else if (attackState == ATTACK_SWIPE) { + } else if (attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT) { this.actionTicks = 40; this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.3F, 0.95F); - } else if (attackState == ATTACK_SLAM) { - this.actionTicks = 34; - this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.5F, 0.82F); } } @@ -545,19 +562,10 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private void tickSwipeAttack() { + // swingRight=true means ATTACK_SWING_RIGHT, which knocks players to the Kraken's LEFT + private void tickSwingAttack(boolean swingRight) { if (this.actionTicks == 10) { - this.performSwipe(); - } - - if (--this.actionTicks <= 0) { - this.finishAttack(); - } - } - - private void tickSlamAttack() { - if (this.actionTicks == 8) { - this.performTentacleSlam(); + this.performSwing(swingRight); } if (--this.actionTicks <= 0) { @@ -566,15 +574,12 @@ public class KrakenEntity extends Monster implements GeoEntity { } private void finishAttack() { - int finishedAttack = this.getAttackState(); + int finished = this.getAttackState(); this.setAttackState(ATTACK_NONE); this.actionTicks = 0; this.attackCooldown = this.isPhaseTwo() ? 12 : 18; this.grabbedTargetId = -1; - this.lastAttackState = finishedAttack; - if (finishedAttack == ATTACK_SLAM) { - this.slamCooldown = this.isPhaseTwo() ? 110 : 150; - } + this.lastAttackState = finished; this.updateAnimationState(); } @@ -614,96 +619,57 @@ public class KrakenEntity extends Monster implements GeoEntity { } private int chooseNextAttack(LivingEntity target) { - int[] attackRotation = new int[] {ATTACK_GRAB, ATTACK_SWIPE, ATTACK_SLAM}; - int[] weightedAttacks = new int[attackRotation.length]; - int[] weights = new int[attackRotation.length]; - int eligibleCount = 0; - int totalWeight = 0; + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 64.0D; + boolean canSwing = distSqr <= 81.0D; - for (int attack : attackRotation) { - if (!this.canUseAttack(attack, target)) { - continue; - } - - int weight = this.getAttackWeight(attack); - if (attack == this.lastAttackState) { - weight = Math.max(1, weight / 3); - } - if (weight <= 0) { - continue; - } - - weightedAttacks[eligibleCount] = attack; - weights[eligibleCount] = weight; - totalWeight += weight; - eligibleCount++; - } - - if (eligibleCount == 0) { + if (!canGrab && !canSwing) { return ATTACK_NONE; } - int roll = this.random.nextInt(totalWeight); - for (int i = 0; i < eligibleCount; i++) { - roll -= weights[i]; - if (roll < 0) { - return weightedAttacks[i]; - } + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swingWeight = canSwing ? (this.isSwingAttack(this.lastAttackState) ? 1 : 5) : 0; + int total = grabWeight + swingWeight; + if (total == 0) { + return ATTACK_NONE; } - return weightedAttacks[eligibleCount - 1]; - } - - private int getAttackWeight(int attackState) { - return switch (attackState) { - case ATTACK_GRAB -> 4; - case ATTACK_SWIPE -> 5; - case ATTACK_SLAM -> this.isPhaseTwo() ? 1 : 0; - default -> 0; - }; - } - - private void tickPhaseTwoPressure(LivingEntity target) { - if (!this.isPhaseTwo() || this.phaseSummonCooldown > 0) { - return; + int roll = this.random.nextInt(total); + if (roll < grabWeight) { + return ATTACK_GRAB; } - if (this.countNearbyMissileSquids() >= 12) { - this.phaseSummonCooldown = 40; - return; - } - this.spawnPhaseMinions(1 + this.random.nextInt(2), true, target); - this.phaseSummonCooldown = 90 + this.random.nextInt(50); + return this.resolveSwingDirection(target); } - private int countNearbyMissileSquids() { - return this.level().getEntitiesOfClass( - MissileSquidEntity.class, - this.getBoundingBox().inflate(28.0D), - squid -> squid.isAlive() - ).size(); + private boolean isSwingAttack(int attackState) { + return attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT; } - private boolean canUseAttack(int attackState, LivingEntity target) { - double distanceToTarget = this.distanceToSqr(target); - return switch (attackState) { - case ATTACK_GRAB -> distanceToTarget <= 64.0D; - case ATTACK_SWIPE -> distanceToTarget <= 81.0D && this.isTargetInFront(target, 0.1D); - case ATTACK_SLAM -> this.slamCooldown <= 0 && distanceToTarget <= 144.0D; - default -> false; - }; - } - - private boolean isTargetInFront(LivingEntity target, double minimumDot) { + // Determines left vs right based on which side the target is on relative to the Kraken. + // Kraken's right vector is forward x world-up. If target is on the Kraken's right side, + // use swing_right (which knocks them left). If on the left, use swing_left (knocks them right). + private int resolveSwingDirection(LivingEntity target) { Vec3 forward = this.getViewVector(1.0F); - Vec3 toTarget = target.position().subtract(this.position()).normalize(); - return forward.dot(toTarget) >= minimumDot; + Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); + Vec3 toTarget = target.position().subtract(this.position()); + return right.dot(toTarget) > 0 ? ATTACK_SWING_RIGHT : ATTACK_SWING_LEFT; } - private void performSwipe() { + private void performSwing(boolean swingRight) { AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); - List players = this.level().getEntitiesOfClass(Player.class, hitBox, player -> player.isAlive() && this.isTargetInFront(player, -0.15D)); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + + Vec3 forward = this.getViewVector(1.0F); + // swingRight knocks to Kraken's left (-right), swingLeft knocks to Kraken's right (+right) + Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); + Vec3 knockDir = swingRight ? right.scale(-1) : right; + for (Player player : players) { - this.hurtAndKnockback(player, (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE), 1.75D, 0.45D); + if (!(this.level() instanceof ServerLevel serverLevel)) continue; + if (!player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) continue; + player.push(knockDir.x * 1.75D, 0.4D, knockDir.z * 1.75D); + player.hurtMarked = true; } if (this.level() instanceof ServerLevel serverLevel) { @@ -711,19 +677,6 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private void performTentacleSlam() { - AABB hitBox = this.getBoundingBox().inflate(8.5D, 2.5D, 8.5D); - List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); - float damage = (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.75F; - for (Player player : players) { - this.hurtAndKnockback(player, damage, 1.35D, 0.62D); - } - - if (this.level() instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY() + 0.5D, this.getZ(), 36, 1.8D, 0.5D, 1.8D, 0.12D); - } - } - private void holdGrabbedTarget(LivingEntity target) { Vec3 anchor = this.position() .add(this.getViewVector(1.0F).normalize().scale(this.getBbWidth() * 0.65D)) @@ -738,14 +691,6 @@ public class KrakenEntity extends Monster implements GeoEntity { target.hurtMarked = true; } - private void hurtAndKnockback(LivingEntity target, float damage, double horizontalStrength, double verticalStrength) { - if (!(this.level() instanceof ServerLevel serverLevel) || !target.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) { - return; - } - - this.knockAway(target, horizontalStrength, verticalStrength); - } - private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { Vec3 direction = target.position().subtract(this.position()); Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); @@ -771,7 +716,25 @@ public class KrakenEntity extends Monster implements GeoEntity { return entity instanceof LivingEntity livingEntity ? livingEntity : null; } - private void spawnPhaseMinions(int desiredCount, boolean launched, @Nullable LivingEntity currentTarget) { + private void tickPhaseTwoPressure(LivingEntity target) { + if (!this.isPhaseTwo() || this.phaseSummonCooldown > 0) { + return; + } + if (this.countNearbyMinions() >= 12) { + this.phaseSummonCooldown = 40; + return; + } + this.spawnMinions(1 + this.random.nextInt(2), target); + this.phaseSummonCooldown = 90 + this.random.nextInt(50); + } + + private int countNearbyMinions() { + net.minecraft.world.phys.AABB range = this.getBoundingBox().inflate(28.0D); + return this.level().getEntitiesOfClass(OctopusBombEntity.class, range, OctopusBombEntity::isAlive).size() + + this.level().getEntitiesOfClass(MissileSquidEntity.class, range, MissileSquidEntity::isAlive).size(); + } + + private void spawnMinions(int desiredCount, @Nullable LivingEntity currentTarget) { if (!(this.level() instanceof ServerLevel serverLevel)) { return; } @@ -779,21 +742,23 @@ public class KrakenEntity extends Monster implements GeoEntity { int spawned = 0; for (int attempt = 0; attempt < desiredCount * 4 && spawned < desiredCount; attempt++) { - Vec3 spawnPos = this.findPhaseMinionSpawnPos(currentTarget); - MissileSquidEntity missileSquid = AntarchyObjects.MISSILE_SQUID.get().create(serverLevel); - if (missileSquid == null) { - continue; - } + Vec3 spawnPos = this.findBombSpawnPos(currentTarget); + boolean spawnBomb = this.random.nextBoolean(); - missileSquid.setCanFly(true); - missileSquid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); - serverLevel.addFreshEntity(missileSquid); - if (launched) { - missileSquid.launchAsProjectile(this, this.createPhaseMinionLaunchVelocity(spawnPos, currentTarget)); - } else if (currentTarget != null) { - missileSquid.setTarget(currentTarget); + if (spawnBomb) { + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(serverLevel); + if (bomb == null) continue; + bomb.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(bomb); + bomb.launchAsProjectile(this, this.createBombLaunchVelocity(spawnPos, currentTarget)); + serverLevel.sendParticles(ParticleTypes.BUBBLE, bomb.getX(), bomb.getY() + 0.4D, bomb.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); + } else { + MissileSquidEntity squid = AntarchyObjects.MISSILE_SQUID.get().create(serverLevel); + if (squid == null) continue; + squid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(squid); + serverLevel.sendParticles(ParticleTypes.BUBBLE, squid.getX(), squid.getY() + 0.4D, squid.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); } - serverLevel.sendParticles(ParticleTypes.BUBBLE, missileSquid.getX(), missileSquid.getY() + 0.4D, missileSquid.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); spawned++; } @@ -802,7 +767,7 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private Vec3 findPhaseMinionSpawnPos(@Nullable LivingEntity currentTarget) { + private Vec3 findBombSpawnPos(@Nullable LivingEntity currentTarget) { Vec3 anchor = currentTarget != null ? currentTarget.position() : this.position(); for (int attempt = 0; attempt < 18; attempt++) { double angle = this.random.nextDouble() * Mth.TWO_PI; @@ -821,7 +786,7 @@ public class KrakenEntity extends Monster implements GeoEntity { return this.position().add(0.0D, this.getBbHeight() * 0.6D, 0.0D); } - private Vec3 createPhaseMinionLaunchVelocity(Vec3 spawnPos, @Nullable LivingEntity currentTarget) { + private Vec3 createBombLaunchVelocity(Vec3 spawnPos, @Nullable LivingEntity currentTarget) { Vec3 aimPoint = currentTarget != null ? currentTarget.getEyePosition() : this.position().add(this.getViewVector(1.0F).scale(10.0D)); @@ -1042,14 +1007,14 @@ public class KrakenEntity extends Monster implements GeoEntity { private void updateSwimRotation() { Vec3 velocity = this.getDeltaMovement(); if (velocity.horizontalDistanceSqr() > 1.0E-4D) { - float targetYaw = (float)(Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; + float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 6.0F)); this.yBodyRot = this.getYRot(); this.yHeadRot = this.getYRot(); } if (velocity.lengthSqr() > 1.0E-4D) { - float targetPitch = (float)(-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); + float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 4.0F)); } } @@ -1089,8 +1054,13 @@ public class KrakenEntity extends Monster implements GeoEntity { return; } - if (this.phaseTransitionTicks > 0 || this.isRoaring()) { - this.setAnimationState(ANIM_IDLE); + if (this.isRoaring()) { + this.setAnimationState(ANIM_CRY); + return; + } + + if (this.phaseTransitionTicks > 0) { + this.setAnimationState(ANIM_NONE); return; } @@ -1099,22 +1069,18 @@ public class KrakenEntity extends Monster implements GeoEntity { this.setAnimationState(ANIM_GRAB); return; } - case ATTACK_SWIPE, ATTACK_SLAM -> { - this.setAnimationState(ANIM_SWIPE); + case ATTACK_SWING_LEFT -> { + this.setAnimationState(ANIM_SWING_LEFT); + return; + } + case ATTACK_SWING_RIGHT -> { + this.setAnimationState(ANIM_SWING_RIGHT); return; } default -> { } } - Vec3 velocity = this.getDeltaMovement(); - double horizontalSpeedSqr = velocity.horizontalDistanceSqr(); - double verticalSpeedSqr = velocity.y * velocity.y; - if (horizontalSpeedSqr > 0.03D && horizontalSpeedSqr > verticalSpeedSqr * 2.5D) { - this.setAnimationState(ANIM_SWIM); - return; - } - - this.setAnimationState(this.isPhaseTwo() ? ANIM_IDLE_TWO : ANIM_IDLE); + this.setAnimationState(ANIM_NONE); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index 6eaef628..93ffbfed 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -76,16 +76,13 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int ANIM_ATTACK = 3; private static final int ANIM_FLY_ATTACK = 4; private static final int ANIM_ROAR = 5; - private static final int ANIM_DEATH = 6; - private static final int ANIM_TAKEOFF = 7; - private static final int ANIM_FLY_DAMAGED = 8; - - private static final int ATTACK_TOTAL_TICKS = 18; - private static final int ATTACK_DAMAGE_TICK = 9; - private static final int INTRO_ROAR_TICKS = 32; - private static final int COMBAT_ROAR_TICKS = 24; - private static final int DEATH_TICKS = 36; + private static final int ATTACK_TOTAL_TICKS = 20; + private static final int ATTACK_DAMAGE_TICK = 10; + private static final int INTRO_ROAR_TICKS = 30; + private static final int COMBAT_ROAR_TICKS = 30; + private static final int DEATH_TICKS = 30; private static final int TARGET_RESET_TICKS = 60; + private static final int MIN_AIRBORNE_TICKS_FOR_FLY_ANIM = 4; private static final int DREAD_TICKS = 160; private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; @@ -101,15 +98,12 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final double FLIGHT_DISENGAGE_RANGE_SQR = 36.0D; private static final double ROAR_RETRY_DISTANCE_SQR = 400.0D; - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("Idle"); + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation TAKEOFF_ANIM = RawAnimation.begin().thenPlay("animation").thenLoop("fly"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("Idle"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("fly_attack").thenLoop("fly"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("Idle"); - private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); - + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("idle"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("attack2").thenLoop("fly"); + private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("idle"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int attackCooldown; @@ -179,18 +173,14 @@ public class NightmareEntity extends Monster implements GeoEntity { int animState = this.getAnimationState(); state.getController().setAnimationSpeed(switch (animState) { case ANIM_FLY -> 0.45D; - case ANIM_DEATH -> 0.6D; default -> 1.0D; }); return switch (animState) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); - case ANIM_TAKEOFF -> state.setAndContinue(TAKEOFF_ANIM); case ANIM_FLY -> state.setAndContinue(FLY_ANIM); -// case ANIM_FLY_DAMAGED -> state.setAndContinue(FLY_ANIM); case ANIM_ATTACK -> state.setAndContinue(ATTACK_ANIM); case ANIM_FLY_ATTACK -> state.setAndContinue(FLY_ATTACK_ANIM); case ANIM_ROAR -> state.setAndContinue(ROAR_ANIM); - case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); default -> state.setAndContinue(IDLE_ANIM); }; } @@ -216,6 +206,14 @@ public class NightmareEntity extends Monster implements GeoEntity { if (this.level().isClientSide) { this.tickClientParticles(); this.updateFlightRotation(); + if (this.isRoaring()) { + com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + this, + com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_RANGE, + com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_STRENGTH, + this::isRoaring + ); + } return; } @@ -249,7 +247,6 @@ public class NightmareEntity extends Monster implements GeoEntity { } if (this.isDeadOrDying()) { - this.setAnimationState(ANIM_DEATH); this.updateFlightRotation(); return; } @@ -367,7 +364,6 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override public void die(DamageSource damageSource) { if (!this.level().isClientSide) { - this.setAnimationState(ANIM_DEATH); this.attackAnimationTicks = 0; this.attackCooldown = 0; this.roarTicks = 0; @@ -381,9 +377,6 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void tickDeath() { this.deathTime++; - if (this.deathTime == 1) { - this.setAnimationState(ANIM_DEATH); - } if (this.deathTime >= DEATH_TICKS) { this.remove(RemovalReason.KILLED); this.dropExperience(this); @@ -641,7 +634,6 @@ public class NightmareEntity extends Monster implements GeoEntity { private void updateAnimationState() { if (this.isDeadOrDying()) { - this.setAnimationState(ANIM_DEATH); this.groundMoveTicks = 0; this.wingFlapCooldown = 0; return; @@ -653,23 +645,18 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.onGround() ? ANIM_ATTACK : ANIM_FLY_ATTACK); + this.setAnimationState(this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM ? ANIM_FLY_ATTACK : ANIM_ATTACK); this.groundMoveTicks = 0; this.tickWingFlapSound(); return; } if (this.flyingToTarget) { this.groundMoveTicks = 0; - if (this.onGround() || this.airborneTicks <= 8) { - this.setAnimationState(ANIM_TAKEOFF); - this.wingFlapCooldown = 0; - } else { - this.setAnimationState(ANIM_FLY); - this.tickWingFlapSound(); - } + this.setAnimationState(ANIM_FLY); + this.tickWingFlapSound(); return; } - if (!this.onGround()) { + if (this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM) { this.groundMoveTicks = 0; this.setAnimationState(ANIM_FLY); this.tickWingFlapSound(); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java new file mode 100644 index 00000000..1a6de863 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java @@ -0,0 +1,85 @@ +package com.craisinlord.antarchy.content.fluid; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluids; + +public class BileLiquidBlock extends LiquidBlock { + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final ResourceLocation FLOWING_BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flowing_bile"); + private static final ResourceLocation BROODSTONE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "broodstone"); + private static final ResourceLocation MYRMITE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "myrmite"); + private static final int EFFECT_DURATION_TICKS = 100; + + public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block neighborBlock, BlockPos neighborPos, boolean movedByPiston) { + super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston); + if (!level.isClientSide) { + reactWithWater(state, level, pos); + } + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide) { + reactWithWater(state, level, pos); + } + } + + private void reactWithWater(BlockState state, Level level, BlockPos pos) { + for (Direction dir : Direction.values()) { + FluidState neighbor = level.getFluidState(pos.relative(dir)); + if (neighbor.is(Fluids.WATER) || neighbor.is(Fluids.FLOWING_WATER)) { + boolean isSource = state.getFluidState().isSource(); + ResourceLocation resultId = isSource ? BROODSTONE_ID : MYRMITE_ID; + Block resultBlock = BuiltInRegistries.BLOCK.getOptional(resultId).orElse(null); + if (resultBlock != null) { + level.setBlock(pos, resultBlock.defaultBlockState(), 3); + level.levelEvent(1501, pos, 0); + } + return; + } + } + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); + + if (entity instanceof LivingEntity livingEntity) { + if (!level.isClientSide) { + if (livingEntity.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + return; + } + livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), EFFECT_DURATION_TICKS, 0, false, true, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, EFFECT_DURATION_TICKS, 0, false, true, true)); + } + } + } + + public static boolean isBile(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return BILE_ID.equals(fluidId) || FLOWING_BILE_ID.equals(fluidId); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index ce7d56a4..e280010f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -62,6 +62,14 @@ public class BigBerthaItem extends SwordItem implements GeoItem { private static final String SPIN_TICKS_TAG = "antarchy.big_bertha_spin_ticks"; private static final String SPIN_DIRECTION_X_TAG = "antarchy.big_bertha_spin_direction_x"; private static final String SPIN_DIRECTION_Z_TAG = "antarchy.big_bertha_spin_direction_z"; + private static final String TORETERROR_JUMPING_TAG = "antarchy.toreterror_jumping"; + private static final String TORETERROR_LAUNCHED_TAG = "antarchy.toreterror_launched"; + private static final int TORETERROR_LANDING_RADIUS = 6; + private static final int TORETERROR_COOLDOWN_TICKS = 200; + private static final int TORETERROR_SHAKE_TICKS = 25; + + /** Client-side only: how many ticks of camera shake remain from a Toreterror landing. */ + public static int clientShakeTicks = 0; private static final ResourceLocation ATTACK_RANGE_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "big_bertha_attack_range"); private final Tier tier; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -116,6 +124,14 @@ public class BigBerthaItem extends SwordItem implements GeoItem { return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); } + if (mode == BossMode.TORETERROR) { + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + startToreterrorJump(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + if (mode != BossMode.MOLEVORE) { return InteractionResultHolder.pass(stack); } @@ -144,7 +160,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem { case LUCID -> applyLucidHit(target, player, serverLevel); case NIGHTMARE -> applyNightmareHit(target, serverLevel); case KRAKEN -> applyKrakenHit(player, target, serverLevel); - case MOLEVORE -> { + case MOLEVORE, TORETERROR -> { } } @@ -158,6 +174,32 @@ public class BigBerthaItem extends SwordItem implements GeoItem { return; } + // Toreterror jump tracking + if (isToreterrorJumping(stack) && player.getMainHandItem() == stack) { + player.fallDistance = 0.0F; // prevent fall damage during the crash-down + boolean launched = readInt(stack, TORETERROR_LAUNCHED_TAG) == 1; + if (!launched && !player.onGround()) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(TORETERROR_LAUNCHED_TAG, 1)); + } + if (launched && player.onGround()) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + tag.remove(TORETERROR_JUMPING_TAG); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + if (!level.isClientSide && player instanceof ServerPlayer serverPlayer) { + applyToreterrorLanding((ServerLevel) level, serverPlayer); + } + if (level.isClientSide) { + clientShakeTicks = TORETERROR_SHAKE_TICKS; + } + } + } + + // Tick client shake counter + if (level.isClientSide && clientShakeTicks > 0) { + clientShakeTicks--; + } + int spinTicks = getSpinTicks(stack); if (spinTicks <= 0) { return; @@ -293,6 +335,15 @@ public class BigBerthaItem extends SwordItem implements GeoItem { } } + public boolean tryCycleModeWhileCoolingDown(Level level, Player player, ItemStack stack) { + if (player.getMainHandItem() != stack || !player.isShiftKeyDown() || !player.getCooldowns().isOnCooldown(this)) { + return false; + } + + cycleMode(level, player, stack); + return true; + } + private void startMolevoreSpin(Level level, Player player, ItemStack stack) { Vec3 direction = player.getLookAngle().multiply(1.0D, 0.0D, 1.0D); if (direction.lengthSqr() < 1.0E-4D) { @@ -317,6 +368,43 @@ public class BigBerthaItem extends SwordItem implements GeoItem { } } + private void startToreterrorJump(Level level, Player player, ItemStack stack) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + tag.putInt(TORETERROR_JUMPING_TAG, 1); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + player.setDeltaMovement(player.getDeltaMovement().x, 1.5D, player.getDeltaMovement().z); + player.hasImpulse = true; + player.fallDistance = 0.0F; + player.getCooldowns().addCooldown(this, TORETERROR_COOLDOWN_TICKS); + player.awardStat(Stats.ITEM_USED.get(this)); + level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_UP.get(), SoundSource.PLAYERS, 1.2F, 0.9F); + } + + private void applyToreterrorLanding(ServerLevel level, ServerPlayer player) { + ItemStack heldStack = player.getMainHandItem(); + float damage = (float) (player.getAttributeValue(Attributes.ATTACK_DAMAGE) * 2.0D); + AABB aoe = player.getBoundingBox().inflate(TORETERROR_LANDING_RADIUS, 3.0D, TORETERROR_LANDING_RADIUS); + for (LivingEntity victim : level.getEntitiesOfClass(LivingEntity.class, aoe, + e -> e.isAlive() && e != player && !e.isSpectator())) { + victim.hurt(player.damageSources().playerAttack(player), damage); + Vec3 knockDir = victim.position().subtract(player.position()).multiply(1.0D, 0.0D, 1.0D); + if (knockDir.lengthSqr() < 1.0E-4D) knockDir = player.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 normalized = knockDir.normalize(); + victim.push(normalized.x * 2.5D, 0.6D, normalized.z * 2.5D); + victim.hurtMarked = true; + } + level.playSound(null, player.blockPosition(), AntarchySoundEvents.TORETERROR_JUMP_LAND.get(), SoundSource.PLAYERS, 1.2F, 0.9F); + level.sendParticles(ParticleTypes.EXPLOSION, player.getX(), player.getY() + 0.5D, player.getZ(), 4, 1.5D, 0.3D, 1.5D, 0.0D); + level.sendParticles(ParticleTypes.SPLASH, player.getX(), player.getY() + 0.5D, player.getZ(), 60, 3.0D, 0.5D, 3.0D, 0.2D); + level.sendParticles(ParticleTypes.CRIT, player.getX(), player.getY() + 0.5D, player.getZ(), 20, 2.0D, 0.5D, 2.0D, 0.1D); + heldStack.hurtAndBreak(1, player, EquipmentSlot.MAINHAND); + } + + private static boolean isToreterrorJumping(ItemStack stack) { + return readInt(stack, TORETERROR_JUMPING_TAG) == 1; + } + private void tickMolevoreSpin(ServerLevel level, ServerPlayer player, ItemStack stack, int spinTicks) { Vec3 direction = getStoredSpinDirection(stack); double verticalBoost = player.onGround() ? 0.08D : Math.max(-0.08D, player.getDeltaMovement().y); @@ -505,7 +593,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem { NIGHTMARE(1, "tooltip.antarchy.big_bertha.mode.nightmare", "message.antarchy.big_bertha.mode.nightmare"), KRAKEN(2, "tooltip.antarchy.big_bertha.mode.kraken", "message.antarchy.big_bertha.mode.kraken"), MOLEVORE(3, "tooltip.antarchy.big_bertha.mode.molevore", "message.antarchy.big_bertha.mode.molevore"), - LUCID(4, "tooltip.antarchy.big_bertha.mode.lucid", "message.antarchy.big_bertha.mode.lucid"); + LUCID(4, "tooltip.antarchy.big_bertha.mode.lucid", "message.antarchy.big_bertha.mode.lucid"), + TORETERROR(5, "tooltip.antarchy.big_bertha.mode.toreterror", "message.antarchy.big_bertha.mode.toreterror"); private final int id; private final String tooltipKey; @@ -523,7 +612,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem { case LUCID -> NIGHTMARE; case NIGHTMARE -> KRAKEN; case KRAKEN -> MOLEVORE; - case MOLEVORE -> BASILISK; + case MOLEVORE -> TORETERROR; + case TORETERROR -> BASILISK; }; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java new file mode 100644 index 00000000..db801b58 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.item; + +public final class JumpyBootsHelper { + public static final int CHARGE_TICKS_MAX = 30; + public static final int PRIME_WINDOW_TICKS = 15; + public static final int COOLDOWN_TICKS = 40; + + public static final float MAX_VERTICAL_BOOST = 2.0F; + public static final float SPRINT_FORWARD_BOOST = 0.3F; + public static final long FALL_PROTECTION_TICKS = 120L; + public static final String FALL_PROTECTION_NBT_KEY = "antarchy:jumpy_boots_protection_until"; + + private JumpyBootsHelper() { + } + + public static float verticalBoostFor(int chargeTicks) { + float ratio = Math.min(chargeTicks / (float) CHARGE_TICKS_MAX, 1.0F); + return ratio * MAX_VERTICAL_BOOST; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java new file mode 100644 index 00000000..56606f28 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +import java.util.List; + +public final class JumpyBootsItem extends ArmorItem { + public JumpyBootsItem(Holder material, Properties properties) { + super(material, Type.BOOTS, properties); + } + + public static boolean isWearingJumpyBoots(net.minecraft.world.entity.LivingEntity entity) { + return entity != null && entity.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.FEET).getItem() instanceof JumpyBootsItem; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.jumpy_boots").withStyle(ChatFormatting.DARK_RED)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java index 48e09ec4..bff8a536 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/NightmareSwordItem.java @@ -1,9 +1,11 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.client.NightmareSwordTooltipHelper; import java.util.List; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.SwordItem; @@ -21,6 +23,18 @@ public class NightmareSwordItem extends SwordItem { this.attackSpeed = attackSpeed; } + public static float calculateDamage(LivingEntity attacker) { + float baseDamage = (float) AntarchySettings.nightmareSwordBaseDamage(); + float maxHealth = attacker.getMaxHealth(); + if (maxHealth <= 0.0F) { + return baseDamage; + } + + float missingFraction = (maxHealth - attacker.getHealth()) / maxHealth; + float scalingFactor = (float) AntarchySettings.nightmareSwordScalingFactor(); + return baseDamage + missingFraction * scalingFactor * baseDamage; + } + @Override public ItemAttributeModifiers getDefaultAttributeModifiers() { return SwordItem.createAttributes( @@ -38,6 +52,7 @@ public class NightmareSwordItem extends SwordItem { @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { tooltipComponents.add(Component.translatable("tooltip.antarchy.nightmare_sword").withStyle(ChatFormatting.DARK_RED)); + tooltipComponents.add(NightmareSwordTooltipHelper.damageLine()); super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java index cb47e3be..7f6c85f9 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -1,12 +1,144 @@ package com.craisinlord.antarchy.content.item; +import java.util.List; +import java.util.Locale; +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.ChatFormatting; import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.ItemAttributeModifiers; +import net.minecraft.world.level.Level; public class PrimordialArmorItem extends ArmorItem { + private final Type armorType; public PrimordialArmorItem(Holder material, Type type, Properties properties) { super(material, type, properties); + this.armorType = type; + } + + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers() { + String prefix = "primordial_" + this.armorType.getName(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder() + .add( + Attributes.ARMOR, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_armor"), + getDefense(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ) + .add( + Attributes.ARMOR_TOUGHNESS, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_armor_toughness"), + getToughness(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + + double knockbackResistance = getKnockbackResistance(this.armorType); + if (knockbackResistance > 0.0D) { + builder.add( + Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_knockback_resistance"), + knockbackResistance, + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + } + + builder.add( + Attributes.ATTACK_KNOCKBACK, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_attack_knockback"), + AntarchySettings.primordialArmorKnockbackPerPiece(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + + return builder.build(); + } + + @Override + public int getDefense() { + return super.getDefense(); + } + + @Override + public float getToughness() { + return super.getToughness(); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + if (!level.isClientSide && this.armorType == Type.HELMET && entity instanceof LivingEntity living) { + if (living.getItemBySlot(EquipmentSlot.HEAD) == stack) { + living.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 40, 0, false, false, true)); + } + } + super.inventoryTick(stack, level, entity, slotId, isSelected); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + if (this.armorType == Type.HELMET) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_helmet_water_breathing").withStyle(ChatFormatting.AQUA)); + } + String knockbackDealt = String.format(Locale.ROOT, "%.1f", AntarchySettings.primordialArmorKnockbackPerPiece()); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_knockback_dealt", knockbackDealt).withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_set_bonus").withStyle(ChatFormatting.DARK_GREEN)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } + + public static double getKnockbackDealtBonus(LivingEntity entity) { + int pieces = 0; + for (ItemStack armorStack : entity.getArmorSlots()) { + if (armorStack.getItem() instanceof PrimordialArmorItem) { + pieces++; + } + } + return pieces * AntarchySettings.primordialArmorKnockbackPerPiece(); + } + + public static boolean hasFullSet(LivingEntity entity) { + return entity.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof PrimordialArmorItem; + } + + private static double getKnockbackResistance(Type armorType) { + return switch (armorType) { + case HELMET -> 0.20D; + case CHESTPLATE, BODY -> 0.30D; + case LEGGINGS -> 0.30D; + case BOOTS -> 0.20D; + }; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java index 45d1a567..e907bdb1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import java.util.function.Consumer; import java.util.function.Predicate; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -21,7 +22,11 @@ import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ProjectileWeaponItem; import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.client.GeoRenderProvider; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -55,17 +60,10 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { } if (!level.isClientSide()) { - MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level); - if (projectileSquid != null) { - projectileSquid.moveTo( - player.getX(), - player.getEyeY() - 0.2D, - player.getZ(), - player.getYRot(), - player.getXRot() - ); - projectileSquid.launchFromSquidzooka(player, (float) AntarchySettings.squidzookaLaunchVelocity()); - level.addFreshEntity(projectileSquid); + fireSquid(level, player, 0.0F); + if (hasMultishot(itemStack)) { + fireSquid(level, player, -10.0F); + fireSquid(level, player, 10.0F); } spawnFireParticles((ServerLevel) level, player); itemStack.hurtAndBreak(1, player, usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); @@ -115,6 +113,16 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { projectile.shootFromRotation(livingEntity, livingEntity.getXRot(), livingEntity.getYRot(), angle, velocity, inaccuracy); } + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) @@ -147,6 +155,32 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); } + private static void fireSquid(Level level, Player player, float yawOffset) { + MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level); + if (projectileSquid == null) { + return; + } + + float yaw = player.getYRot() + yawOffset; + Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); + projectileSquid.moveTo( + player.getX(), + player.getEyeY() - 0.2D, + player.getZ(), + yaw, + player.getXRot() + ); + projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(player.getDeltaMovement())); + level.addFreshEntity(projectileSquid); + } + + private static boolean hasMultishot(ItemStack stack) { + return stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) + .keySet() + .stream() + .anyMatch(holder -> holder.is(Enchantments.MULTISHOT)); + } + private static void spawnFireParticles(ServerLevel level, Player player) { double lookX = player.getLookAngle().x; double lookY = player.getLookAngle().y; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java new file mode 100644 index 00000000..d3f1fcc4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/BigBerthaModeCyclePayload.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record BigBerthaModeCyclePayload() implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bertha_mode_cycle")); + public static final StreamCodec STREAM_CODEC = StreamCodec.unit(new BigBerthaModeCyclePayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java new file mode 100644 index 00000000..d54da8e6 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieChargeJumpPayload.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record DorrieChargeJumpPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dorrie_charge_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, DorrieChargeJumpPayload::pressing, + DorrieChargeJumpPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java new file mode 100644 index 00000000..a53f2600 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/DorrieJumpInputPayload.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record DorrieJumpInputPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dorrie_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, DorrieJumpInputPayload::pressing, + DorrieJumpInputPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java new file mode 100644 index 00000000..6e8a14dc --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakePayload.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleImpactShakePayload(int durationTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hercules_beetle_impact_shake")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.VAR_INT.map(HerculesBeetleImpactShakePayload::new, HerculesBeetleImpactShakePayload::durationTicks); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.java b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.java new file mode 100644 index 00000000..3f415f7c --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleImpactShakeSync.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.network; + +import java.util.function.BiConsumer; +import net.minecraft.server.level.ServerPlayer; + +public final class HerculesBeetleImpactShakeSync { + private static final BiConsumer NOOP = (player, ticks) -> { + }; + + private static volatile BiConsumer sink = NOOP; + + private HerculesBeetleImpactShakeSync() { + } + + public static void setSink(BiConsumer sink) { + HerculesBeetleImpactShakeSync.sink = sink == null ? NOOP : sink; + } + + public static void send(ServerPlayer player, int ticks) { + sink.accept(player, ticks); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java new file mode 100644 index 00000000..a356b2c8 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleJumpInputPayload.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleJumpInputPayload(boolean pressing) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hercules_beetle_jump_input")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.BOOL, HerculesBeetleJumpInputPayload::pressing, + HerculesBeetleJumpInputPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java new file mode 100644 index 00000000..76b5e8d3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedAttackPayload.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleMountedAttackPayload() implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hercules_beetle_mounted_attack")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(new HerculesBeetleMountedAttackPayload()); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java new file mode 100644 index 00000000..292532ef --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/HerculesBeetleMountedChargePayload.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record HerculesBeetleMountedChargePayload(int chargeTicks) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "hercules_beetle_mounted_charge")); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.VAR_INT.map(HerculesBeetleMountedChargePayload::new, HerculesBeetleMountedChargePayload::chargeTicks); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java new file mode 100644 index 00000000..705a7146 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record JumpyBootsLaunchPayload(int chargeTicks, boolean sprinting) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots_launch")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.VAR_INT, JumpyBootsLaunchPayload::chargeTicks, + ByteBufCodecs.BOOL, JumpyBootsLaunchPayload::sprinting, + JumpyBootsLaunchPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java new file mode 100644 index 00000000..43ed184a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java @@ -0,0 +1,180 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileCystFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 20; + private static final int VERTICAL_SCAN = 10; + private static final float OOZE_CHANCE = 0.02f; + + public CavarynBileCystFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || bileBlock == null) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos center = findCenter(level, context.origin(), random); + if (center == null) { + return false; + } + + return placeCyst(level, center, bileVeinBlock, bileBlock, random); + } + + private static BlockPos findCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 6, level.getMaxBuildHeight() - 6); + mutable.set(x, y, z); + + if (!isSolid(level.getBlockState(mutable))) { + continue; + } + + Direction openDir = null; + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + openDir = dir; + break; + } + } + if (openDir == null) { + continue; + } + + int depth = 1 + random.nextInt(2); + BlockPos candidate = mutable.immutable().relative(openDir.getOpposite(), depth); + if (isSolid(level.getBlockState(candidate))) { + return candidate; + } + } + return null; + } + + private boolean placeCyst(WorldGenLevel level, BlockPos center, Block veinBlock, Block bileBlock, RandomSource random) { + double rx = 1.5 + random.nextDouble() * 12.0; + double ry = 1.5 + random.nextDouble() * 12.0; + double rz = 1.5 + random.nextDouble() * 12.0; + + int stretchAxis = random.nextInt(3); + if (stretchAxis == 0) rx *= 1.3 + random.nextDouble() * 0.7; + else if (stretchAxis == 1) ry *= 1.3 + random.nextDouble() * 0.7; + else rz *= 1.3 + random.nextDouble() * 0.7; + + double f1x = 0.6 + random.nextDouble() * 1.2; + double f1z = 0.6 + random.nextDouble() * 1.2; + double f2y = 0.7 + random.nextDouble() * 1.0; + double f2x = 0.5 + random.nextDouble() * 0.9; + double f3z = 0.8 + random.nextDouble() * 1.1; + double f3y = 0.5 + random.nextDouble() * 0.8; + double wobbleAmp = 0.15 + random.nextDouble() * 0.2; + + int maxR = (int) Math.ceil(Math.max(Math.max(rx, ry), rz)) + 2; + List placed = new ArrayList<>(); + + for (int dx = -maxR; dx <= maxR; dx++) { + for (int dy = -maxR; dy <= maxR; dy++) { + for (int dz = -maxR; dz <= maxR; dz++) { + double baseDist = Math.sqrt( + (dx * dx) / (rx * rx) + + (dy * dy) / (ry * ry) + + (dz * dz) / (rz * rz)); + + double wobble = wobbleAmp * ( + 0.4 * Math.sin(dx * f1x + dz * f1z) + + 0.35 * Math.cos(dy * f2y + dx * f2x) + + 0.25 * Math.sin(dz * f3z + dy * f3y)); + + double distorted = baseDist + wobble; + if (distorted > 1.0) { + continue; + } + + BlockPos pos = center.offset(dx, dy, dz); + BlockState existing = level.getBlockState(pos); + if (!isSolid(existing)) { + continue; + } + + if (distorted < 0.7) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } else { + level.setBlock(pos, veinBlock.defaultBlockState(), 2); + placed.add(pos.immutable()); + } + } + } + } + + if (placed.isEmpty()) { + return false; + } + + if (random.nextFloat() >= 0.30f) { + return true; + } + + for (BlockPos cystPos : placed) { + for (Direction dir : Direction.values()) { + BlockPos adj = cystPos.relative(dir); + BlockState adjState = level.getBlockState(adj); + if ((adjState.isAir() || adjState.canBeReplaced()) && random.nextFloat() < OOZE_CHANCE) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(adj, bileState, 2); + scheduleFluidTick(level, adj, bileState); + } + } + } + + return true; + } + + private static boolean isSolid(BlockState state) { + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty(); + } + + private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java new file mode 100644 index 00000000..5cf07aa4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java @@ -0,0 +1,236 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; + +import java.util.*; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileVeinFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 10; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final float BRANCH_CHANCE = 0.12f; + private static final float LIQUID_POCKET_CHANCE = 0.008f; + + public CavarynBileVeinFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos start = findStart(level, context.origin(), random); + if (start == null) { + return false; + } + + return growVeinNetwork(level, start, bileVeinBlock, bileBlock, random); + } + + private static BlockPos findStart(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 2, level.getMaxBuildHeight() - 3); + mutable.set(x, y, z); + + if (!isVeinCandidate(level.getBlockState(mutable))) { + continue; + } + + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + return mutable.immutable(); + } + } + } + return null; + } + + private boolean growVeinNetwork(WorldGenLevel level, BlockPos start, Block veinBlock, Block bileBlock, RandomSource random) { + Set visited = new HashSet<>(); + List pendingBranches = new ArrayList<>(); + boolean placedAny = false; + + Direction mainDir = Direction.values()[random.nextInt(6)]; + placedAny |= growArm(level, start, mainDir, 45 + random.nextInt(25), visited, pendingBranches, veinBlock, bileBlock, random); + + for (BranchStart branch : pendingBranches) { + Direction branchDir = perpendiculars(branch.dir())[random.nextInt(4)]; + int branchLen = 15 + random.nextInt(20); + growArm(level, branch.pos(), branchDir, branchLen, visited, null, veinBlock, bileBlock, random); + } + + return placedAny; + } + + private boolean growArm( + WorldGenLevel level, + BlockPos start, + Direction initialDir, + int maxSteps, + Set visited, + List branches, + Block veinBlock, + Block bileBlock, + RandomSource random + ) { + BlockPos current = start; + Direction dir = initialDir; + boolean placedAny = false; + + for (int step = 0; step < maxSteps; step++) { + if (visited.contains(current)) { + current = current.relative(biasedNextDir(dir, random)); + continue; + } + + BlockState state = level.getBlockState(current); + if (!isVeinCandidate(state)) { + BlockPos redirect = findSolidNeighbor(current, dir, visited, level, random); + if (redirect == null) { + break; + } + current = redirect; + state = level.getBlockState(current); + if (!isVeinCandidate(state)) { + break; + } + } + + visited.add(current); + level.setBlock(current, veinBlock.defaultBlockState(), 2); + placedAny = true; + + if (random.nextFloat() < LIQUID_POCKET_CHANCE) { + tryPlaceLiquidPocket(level, current, bileBlock, visited, random); + } + + if (branches != null && random.nextFloat() < BRANCH_CHANCE) { + Direction[] perps = perpendiculars(dir); + branches.add(new BranchStart(current, perps[random.nextInt(perps.length)])); + } + + dir = biasedNextDir(dir, random); + current = current.relative(dir); + } + + return placedAny; + } + + private static Direction biasedNextDir(Direction current, RandomSource random) { + int roll = random.nextInt(10); + if (roll < 6) { + return current; + } + return perpendiculars(current)[roll - 6]; + } + + private static BlockPos findSolidNeighbor(BlockPos from, Direction preferredDir, Set visited, WorldGenLevel level, RandomSource random) { + Direction[] perps = perpendiculars(preferredDir); + for (int i = perps.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = perps[i]; + perps[i] = perps[j]; + perps[j] = tmp; + } + for (Direction d : perps) { + BlockPos candidate = from.relative(d); + if (!visited.contains(candidate) && isVeinCandidate(level.getBlockState(candidate))) { + return candidate; + } + } + return null; + } + + private static void tryPlaceLiquidPocket(WorldGenLevel level, BlockPos veinPos, Block bileBlock, Set visited, RandomSource random) { + Direction[] dirs = Direction.values().clone(); + for (int i = dirs.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = dirs[i]; + dirs[i] = dirs[j]; + dirs[j] = tmp; + } + for (Direction d : dirs) { + BlockPos candidate = veinPos.relative(d); + if (visited.contains(candidate)) { + continue; + } + BlockState candidateState = level.getBlockState(candidate); + if (!isVeinCandidate(candidateState)) { + continue; + } + if (isEnclosed(level, candidate) || random.nextFloat() < 0.01f) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(candidate, bileState, 2); + scheduleFluidTick(level, candidate, bileState); + visited.add(candidate); + return; + } + } + } + + private static boolean isEnclosed(WorldGenLevel level, BlockPos pos) { + for (Direction d : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(d)); + if (neighbor.isAir() || neighbor.canBeReplaced()) { + return false; + } + } + return true; + } + + private static boolean isVeinCandidate(BlockState state) { + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty(); + } + + private static Direction[] perpendiculars(Direction dir) { + return switch (dir.getAxis()) { + case X -> new Direction[]{Direction.UP, Direction.DOWN, Direction.NORTH, Direction.SOUTH}; + case Z -> new Direction[]{Direction.UP, Direction.DOWN, Direction.EAST, Direction.WEST}; + case Y -> new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST}; + }; + } + + private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record BranchStart(BlockPos pos, Direction dir) {} +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java new file mode 100644 index 00000000..2086253d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynCreepvineFeature extends Feature { + private static final ResourceLocation CREEPVINE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "creepvine"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + + public CavarynCreepvineFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block creepvineBlock = getBlock(CREEPVINE_ID); + if (!(creepvineBlock instanceof VineBlock vineBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + return placeVineColumn(level, vineBlock, anchor, random); + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static boolean placeVineColumn(WorldGenLevel level, VineBlock vineBlock, Anchor anchor, RandomSource random) { + boolean placedAny = false; + int length = 3 + random.nextInt(6); + + for (int offset = 0; offset < length; offset++) { + BlockPos vinePos = anchor.pos().below(offset); + if (vinePos.getY() <= level.getMinBuildHeight()) { + break; + } + + BlockState existing = level.getBlockState(vinePos); + if (!existing.canBeReplaced() && !existing.is(vineBlock)) { + break; + } + + BlockState vineState = createVineState(vineBlock, anchor.supportDirection()); + if (vineState == null || !vineState.canSurvive(level, vinePos)) { + break; + } + + level.setBlock(vinePos, vineState, 3); + placedAny = true; + } + + return placedAny; + } + + private static BlockState createVineState(VineBlock vineBlock, Direction attachedFace) { + BlockState state = vineBlock.defaultBlockState(); + return switch (attachedFace) { + case NORTH -> state.setValue(VineBlock.NORTH, Boolean.TRUE); + case SOUTH -> state.setValue(VineBlock.SOUTH, Boolean.TRUE); + case EAST -> state.setValue(VineBlock.EAST, Boolean.TRUE); + case WEST -> state.setValue(VineBlock.WEST, Boolean.TRUE); + default -> null; + }; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java new file mode 100644 index 00000000..90f743c6 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java @@ -0,0 +1,169 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynEggPatchFeature extends Feature { + private static final ResourceLocation AMBER_MOSS_BLOCK_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_moss_block"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MAX_RADIUS_Y = 3; + + public CavarynEggPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + Block amberMossBlock = getBlock(AMBER_MOSS_BLOCK_ID); + BlockPos center = findCavityCenter(level, origin, random); + if (center == null) { + return false; + } + + EggType eggType = random.nextBoolean() ? EggType.CREEPING_HORROR : EggType.LURKING_TERROR; + return carveCavityAndPlaceEggs(level, center, random, eggType, amberMossBlock); + } + + private static BlockPos findCavityCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + MAX_RADIUS_Y + 2, level.getMaxBuildHeight() - MAX_RADIUS_Y - 2); + + mutable.set(x, y, z); + if (isSolidEnoughForCavity(level, mutable)) { + return mutable.immutable(); + } + } + return null; + } + + private static boolean isSolidEnoughForCavity(WorldGenLevel level, BlockPos center) { + BlockState centerState = level.getBlockState(center); + if (!centerState.blocksMotion() || centerState.is(Blocks.BEDROCK)) { + return false; + } + + int solidCount = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -2; dx <= 2; dx += 2) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -2; dz <= 2; dz += 2) { + mutable.set(center.getX() + dx, center.getY() + dy, center.getZ() + dz); + if (level.getBlockState(mutable).blocksMotion()) { + solidCount++; + } + } + } + } + return solidCount >= 9; + } + + private boolean carveCavityAndPlaceEggs(WorldGenLevel level, BlockPos center, RandomSource random, EggType eggType, Block amberMossBlock) { + int rx = 3 + random.nextInt(3); + int ry = 2 + random.nextInt(2); + int rz = 3 + random.nextInt(3); + + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + double norm = (double)(dx * dx) / (rx * rx) + + (double)(dy * dy) / (ry * ry) + + (double)(dz * dz) / (rz * rz); + if (norm > 1.0) { + continue; + } + BlockPos pos = center.offset(dx, dy, dz); + BlockState existing = level.getBlockState(pos); + if (!existing.is(Blocks.BEDROCK) && existing.blocksMotion() && existing.getFluidState().isEmpty()) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } + } + } + } + + List eggPositions = new ArrayList<>(); + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry - 1; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + BlockPos pos = center.offset(dx, dy, dz); + if (!level.getBlockState(pos).isAir()) { + continue; + } + BlockPos below = pos.below(); + BlockState belowState = level.getBlockState(below); + if (belowState.blocksMotion() && !belowState.isAir() && belowState.isFaceSturdy(level, below, Direction.UP)) { + eggPositions.add(pos); + } + } + } + } + + if (eggPositions.isEmpty()) { + return false; + } + + boolean placedAny = false; + for (BlockPos eggPos : eggPositions) { + if (random.nextFloat() > 0.65f) { + continue; + } + + if (amberMossBlock != null) { + BlockPos floorPos = eggPos.below(); + BlockState floorState = level.getBlockState(floorPos); + if (floorState.blocksMotion() && !floorState.is(Blocks.BEDROCK) && floorState.getFluidState().isEmpty()) { + level.setBlock(floorPos, amberMossBlock.defaultBlockState(), 2); + } + } + + BlockState eggState = eggType == EggType.CREEPING_HORROR + ? AntarchyObjects.CREEPING_HORROR_EGGS.get().defaultBlockState() + : AntarchyObjects.LURKING_TERROR_EGGS.get().defaultBlockState(); + eggState = eggState.setValue( + eggType == EggType.CREEPING_HORROR ? CreepingHorrorEggBlock.EGGS : LurkingTerrorEggBlock.EGGS, + 1 + random.nextInt(4)); + level.setBlock(eggPos, eggState, 3); + placedAny = true; + } + + return placedAny; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private enum EggType { + CREEPING_HORROR, + LURKING_TERROR + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java new file mode 100644 index 00000000..806f8de3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java @@ -0,0 +1,162 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.MultifaceBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynWallAmberMossFeature extends Feature { + private static final ResourceLocation AMBER_LICHEN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_lichen"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 28; + private static final int VERTICAL_SCAN = 10; + + public CavarynWallAmberMossFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Block amberLichenBlock = getBlock(AMBER_LICHEN_ID); + if (amberLichenBlock == null) { + return false; + } + + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + List placedPatch = placeWallPatch(level, anchor, amberLichenBlock, random); + if (placedPatch.isEmpty()) { + return false; + } + + placeLichenFringe(level, placedPatch, anchor.supportDirection(), amberLichenBlock, random); + return true; + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + startY = Math.max(level.getMinBuildHeight() + 2, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static List placeWallPatch(WorldGenLevel level, Anchor anchor, Block amberLichenBlock, RandomSource random) { + List placed = new ArrayList<>(); + Direction lateral = anchor.supportDirection().getClockWise(); + int width = 1 + random.nextInt(3); + int height = 2 + random.nextInt(4); + + for (int yOffset = 0; yOffset < height; yOffset++) { + for (int lateralOffset = -width; lateralOffset <= width; lateralOffset++) { + if (Math.abs(lateralOffset) == width && random.nextBoolean()) { + continue; + } + + BlockPos pos = anchor.pos().above(yOffset).relative(lateral, lateralOffset); + if (!canPlaceWallMoss(level, pos, anchor.supportDirection())) { + continue; + } + + BlockState state = createLichenState(amberLichenBlock, anchor.supportDirection()); + if (!state.canSurvive(level, pos)) { + continue; + } + + level.setBlock(pos, state, 3); + placed.add(pos.immutable()); + } + } + + return placed; + } + + private static void placeLichenFringe( + WorldGenLevel level, + List patchPositions, + Direction supportDirection, + Block amberLichenBlock, + RandomSource random + ) { + for (BlockPos patchPos : patchPositions) { + for (Direction spread : List.of(Direction.UP, Direction.DOWN, supportDirection.getClockWise(), supportDirection.getCounterClockWise())) { + if (random.nextFloat() > 0.45F) { + continue; + } + + BlockPos targetPos = patchPos.relative(spread); + if (!level.getBlockState(targetPos).canBeReplaced()) { + continue; + } + if (!hasSupport(level, targetPos, supportDirection)) { + continue; + } + + BlockState state = createLichenState(amberLichenBlock, supportDirection); + if (!state.canSurvive(level, targetPos)) { + continue; + } + + level.setBlock(targetPos, state, 3); + } + } + } + + private static boolean canPlaceWallMoss(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + return level.getBlockState(pos).canBeReplaced() && hasSupport(level, pos, supportDirection); + } + + private static boolean hasSupport(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + BlockPos supportPos = pos.relative(supportDirection); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, supportDirection.getOpposite()); + } + + private static BlockState createLichenState(Block lichenBlock, Direction supportDirection) { + return lichenBlock.defaultBlockState().setValue(MultifaceBlock.getFaceProperty(supportDirection), true); + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java new file mode 100644 index 00000000..2160f745 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record ChitenSpikeConfiguration( + int floorToCeilingSearchRange, + int radius, + int maxColumnHeight, + int heightDeviation, + float chanceOfColumnAtMaxDistanceFromCenter, + int maxDistanceFromCenterAffectingChanceOfColumn, + int maxDistanceFromCenterAffectingHeightBias, + int maxHeightDifference, + float largeVariantChance, + int largeVariantExtraRadius, + int largeVariantExtraHeight, + int largeVariantExtraHeightDeviation, + float largeVariantSurfaceSpikeMultiplier +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitenSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitenSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitenSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitenSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitenSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitenSpikeConfiguration::maxHeightDifference), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitenSpikeConfiguration::largeVariantChance), + Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraRadius), + Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeight), + Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeightDeviation), + Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitenSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) + ).apply(instance, ChitenSpikeConfiguration::new)); +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java new file mode 100644 index 00000000..cd73c28b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java @@ -0,0 +1,253 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.OptionalInt; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.levelgen.Column; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ChitenSpikeFeature extends Feature { + private record ResolvedVariant(int radius, int maxColumnHeight, int heightDeviation, int surfaceSpikeAttempts) { + } + + public ChitenSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + ChitenSpikeConfiguration config = context.config(); + RandomSource random = context.random(); + + if (!level.getBlockState(origin).isAir()) { + return false; + } + + boolean placedAny = false; + List placedBlocks = new ArrayList<>(); + ResolvedVariant variant = this.resolveVariant(config, random); + int radius = variant.radius(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double chance = this.getChanceOfColumn(radius, dx, dz, config); + if (chance <= 0.0D) { + continue; + } + if (this.placeColumn(level, random, origin.offset(dx, 0, dz), dx, dz, chance, config, variant, placedBlocks)) { + placedAny = true; + } + } + } + + if (this.dotSurfaceSpikes(level, random, placedBlocks, config, variant)) { + placedAny = true; + } + return placedAny; + } + + private ResolvedVariant resolveVariant(ChitenSpikeConfiguration config, RandomSource random) { + if (config.largeVariantChance() > 0.0F && random.nextFloat() < config.largeVariantChance()) { + int radius = config.radius() + config.largeVariantExtraRadius(); + int maxColumnHeight = config.maxColumnHeight() + config.largeVariantExtraHeight(); + int heightDeviation = config.heightDeviation() + config.largeVariantExtraHeightDeviation(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + int surfaceSpikeAttempts = Math.max(baseAttempts + 4, Math.round(baseAttempts * config.largeVariantSurfaceSpikeMultiplier())); + return new ResolvedVariant(radius, maxColumnHeight, heightDeviation, surfaceSpikeAttempts); + } + + int radius = config.radius(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + return new ResolvedVariant(radius, config.maxColumnHeight(), config.heightDeviation(), baseAttempts); + } + + private boolean placeColumn( + WorldGenLevel level, + RandomSource random, + BlockPos pos, + int dx, + int dz, + double chance, + ChitenSpikeConfiguration config, + ResolvedVariant variant, + List placedBlocks + ) { + Optional optional = Column.scan(level, pos, config.floorToCeilingSearchRange(), state -> state.isAir(), state -> !state.isAir()); + if (optional.isEmpty()) { + return false; + } + + Column column = optional.get(); + OptionalInt ceiling = column.getCeiling(); + OptionalInt floor = column.getFloor(); + int maxHeight = this.getMaxLength(variant, ceiling, floor); + int downLength = 0; + int upLength = 0; + + if (ceiling.isPresent()) { + downLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + if (floor.isPresent()) { + if (downLength > 0) { + upLength = Mth.clamp( + downLength + Mth.randomBetweenInclusive(random, -config.maxHeightDifference(), config.maxHeightDifference()), + 0, + maxHeight + ); + } else { + upLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + } + + boolean placedAny = false; + if (ceiling.isPresent() && downLength > 0) { + placedAny |= this.growChitenColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); + } + if (floor.isPresent() && upLength > 0) { + placedAny |= this.growChitenColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); + } + return placedAny; + } + + private int getMaxLength(ResolvedVariant variant, OptionalInt ceiling, OptionalInt floor) { + if (ceiling.isPresent() && floor.isPresent()) { + return Math.min(variant.maxColumnHeight(), ceiling.getAsInt() - floor.getAsInt() - 1); + } + return variant.maxColumnHeight(); + } + + private boolean growChitenColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = rootStart.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + + BlockState current = level.getBlockState(spikePos); + if (!current.isAir()) { + break; + } + + BlockState chitenState = AntarchyObjects.CHITEN_BLOCK.get().defaultBlockState(); + level.setBlock(spikePos, chitenState, 3); + placedBlocks.add(spikePos.immutable()); + placedAny = true; + } + return placedAny; + } + + private boolean dotSurfaceSpikes( + WorldGenLevel level, + RandomSource random, + List placedBlocks, + ChitenSpikeConfiguration config, + ResolvedVariant variant + ) { + boolean placedAny = false; + if (placedBlocks.isEmpty()) { + return false; + } + + int attempts = Math.max(variant.surfaceSpikeAttempts(), placedBlocks.size() / 6); + for (int i = 0; i < attempts; i++) { + BlockPos anchor = placedBlocks.get(random.nextInt(placedBlocks.size())); + Direction direction = random.nextBoolean() ? Direction.UP : Direction.DOWN; + int length = 1 + random.nextInt(Math.max(1, config.maxHeightDifference() + 1)); + BlockPos start = anchor.relative(direction); + if (this.growSurfaceSpike(level, start, direction, length)) { + placedAny = true; + } + } + return placedAny; + } + + private boolean growSurfaceSpike(WorldGenLevel level, BlockPos startPos, Direction direction, int length) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = startPos.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + if (!level.getBlockState(spikePos).isAir()) { + break; + } + + BlockState spikeState = AntarchyObjects.CHITEN_SPIKE.get().defaultBlockState() + .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) + .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) + .setValue(PointedDripstoneBlock.WATERLOGGED, false); + if (!spikeState.canSurvive(level, spikePos)) { + break; + } + + level.setBlock(spikePos, spikeState, 3); + placedAny = true; + } + return placedAny; + } + + private static DripstoneThickness getThicknessForRootOffset(int offsetFromRoot, int length) { + if (length <= 1 || offsetFromRoot == length - 1) { + return DripstoneThickness.TIP; + } + if (offsetFromRoot == length - 2) { + return DripstoneThickness.FRUSTUM; + } + if (offsetFromRoot == 0) { + return DripstoneThickness.BASE; + } + return DripstoneThickness.MIDDLE; + } + + private int getSpikeHeight( + RandomSource random, + int dx, + int dz, + double chance, + int maxHeight, + int maxDistanceFromCenterAffectingHeightBias, + int heightDeviation + ) { + if (maxHeight <= 0 || random.nextDouble() > chance) { + return 0; + } + + int distance = Math.abs(dx) + Math.abs(dz); + float mean = (float) Mth.clampedMap( + (double) distance, + 0.0D, + (double) maxDistanceFromCenterAffectingHeightBias, + (double) maxHeight, + 1.0D + ); + int sampled = Math.round((float) (mean + random.nextGaussian() * Math.max(1, Math.min(maxHeight, heightDeviation)))); + return Mth.clamp(sampled, 1, maxHeight); + } + + private double getChanceOfColumn(int radius, int dx, int dz, ChitenSpikeConfiguration config) { + int remainingX = radius - Math.abs(dx); + int remainingZ = radius - Math.abs(dz); + int edgeDistance = Math.min(remainingX, remainingZ); + return Mth.clampedMap( + (double) edgeDistance, + 0.0D, + (double) config.maxDistanceFromCenterAffectingChanceOfColumn(), + (double) config.chanceOfColumnAtMaxDistanceFromCenter(), + 1.0D + ); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java index e68f0827..bb0aa81c 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/BrutalflyCocoonFeature.java @@ -1,25 +1,20 @@ package com.craisinlord.antarchy.content.worldgen.elythia; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.WorldGenRegion; import net.minecraft.tags.BlockTags; import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class BrutalflyCocoonFeature extends Feature { - private static final Logger LOGGER = LoggerFactory.getLogger(BrutalflyCocoonFeature.class); private static final int MAX_ANCHOR_Y = 160; private static final int COCOON_CLEAR_RADIUS = 1; private static final int COCOON_CLEAR_MIN_Y_OFFSET = -16; @@ -33,22 +28,11 @@ public class BrutalflyCocoonFeature extends Feature { @Override public boolean place(FeaturePlaceContext context) { WorldGenLevel level = context.level(); - ServerLevel serverLevel; - if (level instanceof WorldGenRegion region) { - serverLevel = region.getLevel(); - } else if (level instanceof ServerLevel sl) { - serverLevel = sl; - } else { - return false; - } - RandomSource random = context.random(); BlockPos origin = context.origin(); int chunkX = origin.getX() & ~15; int chunkZ = origin.getZ() & ~15; BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); - int failNoLog = 0; - int failClearBelow = 0; for (int attempt = 0; attempt < 12; attempt++) { int x = chunkX + 1 + random.nextInt(14); @@ -59,49 +43,21 @@ public class BrutalflyCocoonFeature extends Feature { } int searchTopY = Math.min(MAX_ANCHOR_Y, level.getMaxBuildHeight() - 2); - boolean foundLog = false; for (int y = searchTopY; y > groundY + 12; y--) { pos.set(x, y, z); if (!level.getBlockState(pos).is(BlockTags.LOGS)) { continue; } - foundLog = true; BlockPos anchor = pos.immutable(); - BlockPos blocker = findCocoonBlocker(level, anchor); - if (blocker != null) { - failClearBelow++; - LOGGER.info( - "[BrutalflyCocoon] chamber failed at log ({},{},{}) blocked by {} ({}) at {}", - x, - y, - z, - level.getBlockState(blocker), - level.getBlockState(blocker).getBlock(), - blocker - ); + if (findCocoonBlocker(level, anchor) != null) { continue; } - if (spawnCocoonedBrutalfly(serverLevel, level, anchor, random)) { - LOGGER.info("[BrutalflyCocoon] SUCCESS at ({},{},{})", x, y, z); - return true; - } - return false; - } - - if (!foundLog) { - failNoLog++; + return placeCocoonSpawner(level, anchor); } } - LOGGER.info( - "[BrutalflyCocoon] FAILED for chunk ({},{}): no-log={}, chamber={}", - chunkX >> 4, - chunkZ >> 4, - failNoLog, - failClearBelow - ); return false; } @@ -113,30 +69,23 @@ public class BrutalflyCocoonFeature extends Feature { return findCocoonBlocker(level, anchor) == null; } - static boolean spawnCocoonedBrutalfly(ServerLevel serverLevel, WorldGenLevel level, BlockPos anchor, RandomSource random) { + static boolean placeCocoonSpawner(WorldGenLevel level, BlockPos anchor) { if (!canUseAnchor(level, anchor)) { return false; } clearCocoonVolume(level, anchor); - BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel); - if (brutalfly == null) { - return false; - } - - brutalfly.moveTo( - anchor.getX() + 0.5, - anchor.getY() - 15.0, - anchor.getZ() + 0.5, - random.nextFloat() * 360.0F, - 0.0F - ); - brutalfly.setCocooned(true, anchor); - brutalfly.setHealth(brutalfly.getMaxHealth()); - serverLevel.addFreshEntity(brutalfly); + setCocoonSpawnerMarker(level, anchor); return true; } + static void setCocoonSpawnerMarker(WorldGenLevel level, BlockPos anchor) { + Block marker = AntarchyObjects.BRUTALFLY_COCOON_SPAWNER.get(); + BlockPos markerPos = anchor.below(); + level.setBlock(markerPos, marker.defaultBlockState(), 19); + level.scheduleTick(markerPos, marker, 20); + } + static @org.jetbrains.annotations.Nullable BlockPos findCocoonBlocker(WorldGenLevel level, BlockPos anchor) { if (!hasCanopySupport(level, anchor)) { return anchor; @@ -173,7 +122,7 @@ public class BrutalflyCocoonFeature extends Feature { } pos.set(anchor.getX() + dx, worldY, anchor.getZ() + dz); - level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 19); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java new file mode 100644 index 00000000..feb0f283 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java @@ -0,0 +1,213 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SeaPickleBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class CoralSpikeFeature extends Feature { + + private record CoralSet( + net.minecraft.world.level.block.Block block, + net.minecraft.world.level.block.Block coral, + net.minecraft.world.level.block.Block wallFan, + net.minecraft.world.level.block.Block floorFan, + net.minecraft.world.level.block.Block deadBlock, + net.minecraft.world.level.block.Block deadCoral, + net.minecraft.world.level.block.Block deadWallFan, + net.minecraft.world.level.block.Block deadFloorFan + ) {} + + private static final CoralSet[] CORAL_SETS = { + new CoralSet(Blocks.TUBE_CORAL_BLOCK, Blocks.TUBE_CORAL, Blocks.TUBE_CORAL_WALL_FAN, Blocks.TUBE_CORAL_FAN, Blocks.DEAD_TUBE_CORAL_BLOCK, Blocks.DEAD_TUBE_CORAL, Blocks.DEAD_TUBE_CORAL_WALL_FAN, Blocks.DEAD_TUBE_CORAL_FAN), + new CoralSet(Blocks.BRAIN_CORAL_BLOCK, Blocks.BRAIN_CORAL, Blocks.BRAIN_CORAL_WALL_FAN, Blocks.BRAIN_CORAL_FAN, Blocks.DEAD_BRAIN_CORAL_BLOCK, Blocks.DEAD_BRAIN_CORAL, Blocks.DEAD_BRAIN_CORAL_WALL_FAN, Blocks.DEAD_BRAIN_CORAL_FAN), + new CoralSet(Blocks.BUBBLE_CORAL_BLOCK, Blocks.BUBBLE_CORAL, Blocks.BUBBLE_CORAL_WALL_FAN, Blocks.BUBBLE_CORAL_FAN, Blocks.DEAD_BUBBLE_CORAL_BLOCK, Blocks.DEAD_BUBBLE_CORAL, Blocks.DEAD_BUBBLE_CORAL_WALL_FAN, Blocks.DEAD_BUBBLE_CORAL_FAN), + new CoralSet(Blocks.FIRE_CORAL_BLOCK, Blocks.FIRE_CORAL, Blocks.FIRE_CORAL_WALL_FAN, Blocks.FIRE_CORAL_FAN, Blocks.DEAD_FIRE_CORAL_BLOCK, Blocks.DEAD_FIRE_CORAL, Blocks.DEAD_FIRE_CORAL_WALL_FAN, Blocks.DEAD_FIRE_CORAL_FAN), + new CoralSet(Blocks.HORN_CORAL_BLOCK, Blocks.HORN_CORAL, Blocks.HORN_CORAL_WALL_FAN, Blocks.HORN_CORAL_FAN, Blocks.DEAD_HORN_CORAL_BLOCK, Blocks.DEAD_HORN_CORAL, Blocks.DEAD_HORN_CORAL_WALL_FAN, Blocks.DEAD_HORN_CORAL_FAN), + }; + + public CoralSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int seaLevel = level.getSeaLevel(); + + int spikes = 1 + random.nextInt(3); + boolean placed = false; + for (int i = 0; i < spikes; i++) { + int offX = random.nextInt(11) - 5; + int offZ = random.nextInt(11) - 5; + placed |= placeSpike(level, random, origin.offset(offX, 0, offZ), seaLevel); + } + return placed; + } + + private boolean placeSpike(WorldGenLevel level, RandomSource random, BlockPos origin, int seaLevel) { + int floorY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, origin.getX(), origin.getZ()); + if (floorY >= seaLevel) return false; + + CoralSet coral = CORAL_SETS[random.nextInt(CORAL_SETS.length)]; + + int baseRadius = 2 + random.nextInt(2); // 2-3 wide at base + int totalHeight = 20 + random.nextInt(15); // 20-34 blocks tall + + double curveAngle = random.nextDouble() * Math.PI * 2; + double curveDX = Math.cos(curveAngle); + double curveDZ = Math.sin(curveAngle); + double maxCurve = 4.0 + random.nextDouble() * 5.0; // 4-9 block lean at tip + + boolean placed = false; + + for (int dy = 0; dy < totalHeight; dy++) { + int blockY = floorY + dy; + double progress = (double) dy / totalHeight; + + // Quadratic lean -- slow at base, bending hard near tip + double curveOffset = maxCurve * progress * progress; + double centerX = origin.getX() + curveDX * curveOffset; + double centerZ = origin.getZ() + curveDZ * curveOffset; + + // Taper: full width for bottom 25%, then narrows sharply to a point + double taperT = Math.max(0.0, (progress - 0.25) / 0.75); + int radius = (int) Math.max(0, baseRadius * (1.0 - taperT * taperT * 1.3)); + + for (int dx = -(radius + 1); dx <= radius + 1; dx++) { + for (int dz = -(radius + 1); dz <= radius + 1; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - centerX) * (origin.getX() + dx - centerX) + + (origin.getZ() + dz - centerZ) * (origin.getZ() + dz - centerZ)); + + if (dist > radius + 0.5) continue; + + BlockPos pos = new BlockPos(origin.getX() + dx, blockY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(pos))) continue; + + boolean inWater = touchesWater(level, pos); + level.setBlock(pos, inWater + ? coral.block().defaultBlockState() + : coral.deadBlock().defaultBlockState(), + 2); + placed = true; + + if (dist >= radius - 0.6 && radius > 0) { + BlockPos above = pos.above(); + if (canReplace(level.getBlockState(above))) { + boolean aboveInWater = level.getBlockState(above).is(Blocks.WATER); + if (random.nextFloat() < 0.35f && aboveInWater) { + level.setBlock(above, + coral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true), + 2); + } + } + } + + if (dist >= radius - 0.5) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + if (random.nextFloat() >= 0.4f) continue; + BlockPos fanPos = pos.relative(dir); + BlockState existing = level.getBlockState(fanPos); + if (!existing.isAir() && !existing.is(Blocks.WATER)) continue; + boolean fanInWater = existing.is(Blocks.WATER); + if (fanInWater) { + level.setBlock(fanPos, + coral.wallFan().defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, dir) + .setValue(BlockStateProperties.WATERLOGGED, true), + 2); + } else { + level.setBlock(fanPos, + coral.deadWallFan().defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, dir) + .setValue(BlockStateProperties.WATERLOGGED, false), + 2); + } + } + } + } + } + } + + // Floor scatter: coral plants, fans, and sea pickles around the base + int decorCount = 10 + random.nextInt(12); + for (int i = 0; i < decorCount; i++) { + int fx = origin.getX() + random.nextInt(13) - 6; + int fz = origin.getZ() + random.nextInt(13) - 6; + int fy = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, fx, fz); + BlockPos decorPos = new BlockPos(fx, fy, fz); + + if (!canReplace(level.getBlockState(decorPos))) continue; + BlockState below = level.getBlockState(decorPos.below()); + if (below.isAir() || !below.isFaceSturdy(level, decorPos.below(), Direction.UP)) continue; + + boolean decorInWater = level.getBlockState(decorPos).is(Blocks.WATER); + float roll = random.nextFloat(); + CoralSet randomCoral = CORAL_SETS[random.nextInt(CORAL_SETS.length)]; + + if (roll < 0.35f) { + if (decorInWater) { + BlockState coralState = randomCoral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true); + if (coralState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, coralState, 2); + } + } else { + BlockState coralState = randomCoral.deadCoral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, false); + if (coralState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, coralState, 2); + } + } + } else if (roll < 0.65f) { + if (decorInWater) { + BlockState fanState = randomCoral.floorFan().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true); + if (fanState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, fanState, 2); + } + } else { + BlockState fanState = randomCoral.deadFloorFan().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, false); + if (fanState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, fanState, 2); + } + } + } else if (decorInWater) { + // Sea pickle cluster -- only underwater + BlockState pickle = Blocks.SEA_PICKLE.defaultBlockState() + .setValue(SeaPickleBlock.PICKLES, 1 + random.nextInt(4)); + if (pickle.canSurvive(level, decorPos)) { + level.setBlock(decorPos, pickle, 2); + } + } + } + + return placed; + } + + private static boolean touchesWater(WorldGenLevel level, BlockPos pos) { + if (level.getBlockState(pos).is(Blocks.WATER)) return true; + for (Direction dir : Direction.values()) { + if (level.getBlockState(pos.relative(dir)).is(Blocks.WATER)) return true; + } + return false; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.is(Blocks.WATER) || state.canBeReplaced(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 99958d6a..90eb49c8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.worldgen.elythia; import com.craisinlord.antarchy.Antarchy; +import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -20,41 +21,72 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moleworm_caves") ); + private static final ResourceKey ELYTHIA_LUSH_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_lush_caves") + ); + private static final ResourceKey ELYTHIA_OCEAN = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_ocean") + ); + private static final ResourceKey ELYTHIA_CORAL_SPIKES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_coral_spikes") + ); + private static final ResourceKey ELYTHIA_BEACH = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_beach") + ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), - Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY) + Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY), + Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY), + Codec.INT.optionalFieldOf("sea_level", 78).forGetter(ElythiaBiomeSource::seaLevel) ).apply(instance, ElythiaBiomeSource::new)); private final Climate.ParameterList> parameters; private final MultiNoiseBiomeSource delegate; private final int molewormCavesMaxY; private final int surfaceBiomeSampleY; + private final int oceanMaxY; + private final int seaLevel; private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; + private final int seaLevelQuartY; + private final Holder oceanHolder; + private final Holder defaultLandHolder; - public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY) { + public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { this.parameters = parameters; this.delegate = MultiNoiseBiomeSource.createFromList(parameters); this.molewormCavesMaxY = molewormCavesMaxY; this.surfaceBiomeSampleY = surfaceBiomeSampleY; + this.oceanMaxY = oceanMaxY; + this.seaLevel = seaLevel; this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); + this.seaLevelQuartY = QuartPos.fromBlock(seaLevel); + this.oceanHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> h.is(ELYTHIA_OCEAN)) + .findFirst() + .orElse(null); + this.defaultLandHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH) + && !h.is(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES)) + .findFirst() + .orElse(null); } - private Climate.ParameterList> parameters() { - return this.parameters; - } - - private int molewormCavesMaxY() { - return this.molewormCavesMaxY; - } - - private int surfaceBiomeSampleY() { - return this.surfaceBiomeSampleY; - } + private Climate.ParameterList> parameters() { return this.parameters; } + private int molewormCavesMaxY() { return this.molewormCavesMaxY; } + private int surfaceBiomeSampleY() { return this.surfaceBiomeSampleY; } + private int oceanMaxY() { return this.oceanMaxY; } + private int seaLevel() { return this.seaLevel; } @Override protected MapCodec codec() { @@ -66,21 +98,69 @@ public class ElythiaBiomeSource extends BiomeSource { return this.delegate.possibleBiomes().stream(); } + // Conservative threshold well inside the ocean entry range (-0.85 to -0.92). + // At continentalness < -0.80 the terrain is reliably below sea level. + // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid + // ocean biome appearing over above-sea-level terrain. + private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); + @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { Holder biome = this.delegate.getNoiseBiome(x, y, z, sampler); - if (!biome.is(MOLEWORM_CAVES) || y <= this.molewormCavesMaxQuartY) { - return biome; + + // Cap moleworm caves below their max Y — replace with surface biome above it + if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { + return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES); } + // Use continentalness (XZ-only noise) to classify the column. + // Ocean columns get the ocean biome at every Y so structures, particles, + // and ambient effects work correctly above the water surface. + // Cave biomes are always preserved even in ocean columns. + Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); + if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { + if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome; + Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); + // MultiNoise can return a land biome at sea-level depth — force ocean if so + if (isOceanBiome(seaLevelBiome)) return seaLevelBiome; + return oceanHolder != null ? oceanHolder : seaLevelBiome; + } + + // Land column below sea level: force any non-allowed surface biome to ocean. + // Cave sand/decorations are prevented by above_preliminary_surface in the + // surface rules, so this is safe to apply unconditionally. + if (y <= this.seaLevelQuartY && oceanHolder != null && !allowedBelowSeaLevel(biome)) { + return oceanHolder; + } + + // Land column: prevent ocean biomes from bleeding in at any Y + if (isOceanBiome(biome)) { + return resolveLandFallback(x, z, sampler); + } + + return biome; + } + + private static boolean allowedBelowSeaLevel(Holder biome) { + return biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) + || biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); + } + + private static boolean isOceanBiome(Holder biome) { + return biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); + } + + // Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives + @SafeVarargs + private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (!fallback.is(MOLEWORM_CAVES)) { + if (!isExcluded(fallback, excluded)) { return fallback; } for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!candidate.is(MOLEWORM_CAVES)) { + if (!isExcluded(candidate, excluded)) { return candidate; } } @@ -88,9 +168,42 @@ public class ElythiaBiomeSource extends BiomeSource { return fallback; } + // Used when ocean bleeds into a land column — guaranteed to never return an ocean/cave biome + private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { + Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); + if (!isOceanOrCave(fallback)) return fallback; + + for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { + Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); + if (!isOceanOrCave(candidate)) return candidate; + } + + return defaultLandHolder != null ? defaultLandHolder : fallback; + } + + @SafeVarargs + private static boolean isExcluded(Holder biome, ResourceKey... excluded) { + for (ResourceKey key : excluded) { + if (biome.is(key)) return true; + } + return false; + } + + private static boolean isOceanOrCave(Holder biome) { + return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) + || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES); + } + @Override public void addDebugInfo(java.util.List debug, net.minecraft.core.BlockPos pos, Climate.Sampler sampler) { - this.delegate.addDebugInfo(debug, pos, sampler); + try { + this.delegate.addDebugInfo(debug, pos, sampler); + } catch (NullPointerException ignored) { + // TerraBlender's MixinMultiNoiseBiomeSource.addDebugInfo reads an internal + // field (uniqueness) that it only injects into TerraBlender-registered sources. + // Our delegate is not one of those, so we swallow the NPE here. + } debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); + debug.add("Elythia sea level: " + this.seaLevel); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java new file mode 100644 index 00000000..d7a1861a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -0,0 +1,138 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class FallenOuranwoodFeature extends Feature { + + public FallenOuranwoodFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + Direction.Axis axis = random.nextBoolean() ? Direction.Axis.X : Direction.Axis.Z; + int length = 36 + random.nextInt(44); // 36–79 blocks long + int outerRadius = 1 + random.nextInt(3); // 1–3 (cross-section up to 7-wide) + boolean hollow = outerRadius >= 2; + + Block ouranwoodLog = BuiltInRegistries.BLOCK.getOptional( + ResourceLocation.fromNamespaceAndPath("antarchy", "ouranwood_log")) + .orElse(AntarchyObjects.MOSSY_OURANWOOD_LOG.get()); + + BlockState mossyLogState = AntarchyObjects.MOSSY_OURANWOOD_LOG.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + BlockState freshLogState = ouranwoodLog.defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + BlockState woodState = AntarchyObjects.MOSSY_OURANWOOD_WOOD.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); + + // Pre-generate a smoothed damage profile along the length (0=solid, 1=gap) + float[] damage = new float[length]; + for (int i = 0; i < length; i++) damage[i] = random.nextFloat(); + for (int pass = 0; pass < 4; pass++) { + for (int i = 1; i < length - 1; i++) { + damage[i] = (damage[i - 1] + damage[i] * 2 + damage[i + 1]) / 4f; + } + } + // Bias upward so more sections are heavily damaged + for (int i = 0; i < length; i++) damage[i] = damage[i] * damage[i]; + + int anchorY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()); + boolean placed = false; + + for (int step = 0; step < length; step++) { + int bx = axis == Direction.Axis.X ? origin.getX() + step : origin.getX(); + int bz = axis == Direction.Axis.Z ? origin.getZ() + step : origin.getZ(); + + float dmg = damage[step]; + + if (dmg > 0.78f) continue; + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz); + int centerY = Math.max(anchorY, Math.min(anchorY + 2, surfaceY)) + outerRadius; + + for (int dy = -outerRadius; dy <= outerRadius; dy++) { + for (int dp = -outerRadius; dp <= outerRadius; dp++) { + double dist = Math.sqrt(dy * dy + dp * dp); + if (dist > outerRadius + 0.5) continue; + + boolean isShell = dist >= outerRadius - 0.5; + + if (hollow && dist < outerRadius - 0.5) continue; + + if (dmg > 0.55f && !isShell) continue; + if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) continue; + + if (isShell && random.nextFloat() < dmg * 0.4f) continue; + + int px = axis == Direction.Axis.X ? bx : bx + dp; + int pz = axis == Direction.Axis.Z ? bz : bz + dp; + BlockPos pos = new BlockPos(px, centerY + dy, pz); + + if (!canReplace(level.getBlockState(pos))) continue; + + float r = random.nextFloat(); + BlockState toPlace; + if (r < 0.08f) { + toPlace = Blocks.MOSS_BLOCK.defaultBlockState(); + } else if (r < 0.22f) { + toPlace = freshLogState; + } else if (r < 0.32f) { + toPlace = woodState; + } else { + toPlace = mossyLogState; + } + + level.setBlock(pos, toPlace, 2); + placed = true; + } + } + } + + int mossCount = 20 + random.nextInt(25); + for (int i = 0; i < mossCount; i++) { + int mx = origin.getX() + random.nextInt(length + 6) - 3; + int mz = axis == Direction.Axis.X + ? origin.getZ() + random.nextInt(9) - 4 + : origin.getZ() + random.nextInt(length + 6) - 3; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz); + BlockPos mossPos = new BlockPos(mx, my, mz); + + if (!canReplace(level.getBlockState(mossPos))) continue; + BlockState below = level.getBlockState(mossPos.below()); + if (!below.isFaceSturdy(level, mossPos.below(), Direction.UP)) continue; + + level.setBlock(mossPos, + random.nextFloat() < 0.35f + ? Blocks.MOSS_BLOCK.defaultBlockState() + : Blocks.MOSS_CARPET.defaultBlockState(), + 2); + } + + return placed; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() || (state.getBlock() instanceof LeavesBlock); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java new file mode 100644 index 00000000..a6da40dd --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -0,0 +1,178 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HugeMushroomBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class FungalMushroomFeature extends Feature { + + public FungalMushroomFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + boolean isRed = random.nextBoolean(); + Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK; + Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM; + + int stemSize = random.nextBoolean() ? 2 : 3; + int stemHeight = 6 + random.nextInt(7); + + double leanAngle = random.nextDouble() * Math.PI * 2; + double leanDX = Math.cos(leanAngle); + double leanDZ = Math.sin(leanAngle); + double maxLean = 2.0 + random.nextDouble() * 3.5; + + int baseY = origin.getY(); + int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin + + BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, false) + .setValue(HugeMushroomBlock.SOUTH, false) + .setValue(HugeMushroomBlock.EAST, false) + .setValue(HugeMushroomBlock.WEST, false) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + BlockState stemSide = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, true) + .setValue(HugeMushroomBlock.SOUTH, true) + .setValue(HugeMushroomBlock.EAST, true) + .setValue(HugeMushroomBlock.WEST, true) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + + for (int dy = 0; dy < stemHeight; dy++) { + double leanProgress = (double) dy / stemHeight; + int leanX = (int) Math.round(leanDX * maxLean * leanProgress); + int leanZ = (int) Math.round(leanDZ * maxLean * leanProgress); + + for (int dx = 0; dx < stemSize; dx++) { + for (int dz = 0; dz < stemSize; dz++) { + int wx = origin.getX() + stemOffset + dx + leanX; + int wz = origin.getZ() + stemOffset + dz + leanZ; + BlockPos pos = new BlockPos(wx, baseY + dy, wz); + if (!canReplace(level.getBlockState(pos))) continue; + boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); + BlockState stemState = isEdge ? stemSide : stemPore; + level.setBlock(pos, stemState, 2); + BlockPos below = pos.below(); + while (canReplace(level.getBlockState(below)) && below.getY() > level.getMinBuildHeight()) { + level.setBlock(below, stemState, 2); + below = below.below(); + } + } + } + } + + double capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean; + double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean; + int capTopY = baseY + stemHeight; + int baseCapRadius = stemSize + 2 + random.nextInt(2); + + int jitterRange = baseCapRadius + 4; + float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1]; + for (float[] row : jitter) { + for (int j = 0; j < row.length; j++) { + row[j] = random.nextFloat() * 1.0f - 0.5f; + } + } + + int capLayers = baseCapRadius + 2; + for (int cl = 0; cl < capLayers; cl++) { + int capY = capTopY + cl; + double nomRadius = baseCapRadius - cl; + if (nomRadius < 0) break; + + // The cap center also shifts slightly with lean for a drooping overhang feel + double layerCapX = capCenterX + leanDX * cl * 0.3; + double layerCapZ = capCenterZ + leanDZ * cl * 0.3; + + for (int dx = -(jitterRange); dx <= jitterRange; dx++) { + for (int dz = -(jitterRange); dz <= jitterRange; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - layerCapX) * (origin.getX() + dx - layerCapX) + + (origin.getZ() + dz - layerCapZ) * (origin.getZ() + dz - layerCapZ)); + + float j = jitter[dx + jitterRange][dz + jitterRange]; + double effectiveRadius = nomRadius + j; + + if (dist > effectiveRadius + 0.5) continue; + if (effectiveRadius < 0) continue; + + BlockPos capPos = new BlockPos(origin.getX() + dx, capY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(capPos))) continue; + + boolean isOuter = dist >= effectiveRadius - 0.7; + boolean isTop = cl == capLayers - 1; + + BlockState capState = capBlock.defaultBlockState() + .setValue(HugeMushroomBlock.UP, isTop || isOuter) + .setValue(HugeMushroomBlock.NORTH, isOuter) + .setValue(HugeMushroomBlock.SOUTH, isOuter) + .setValue(HugeMushroomBlock.EAST, isOuter) + .setValue(HugeMushroomBlock.WEST, isOuter) + .setValue(HugeMushroomBlock.DOWN, false); + + level.setBlock(capPos, capState, 2); + } + } + } + + int myceliumCount = 12 + random.nextInt(12); + for (int i = 0; i < myceliumCount; i++) { + int radius = stemSize + 3 + random.nextInt(3); + int mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int mz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1; + BlockPos myceliumPos = new BlockPos(mx, my, mz); + + BlockState existing = level.getBlockState(myceliumPos); + if (existing.is(Blocks.GRASS_BLOCK) || existing.is(Blocks.DIRT) + || existing.is(Blocks.MOSS_BLOCK) || existing.is(Blocks.ROOTED_DIRT)) { + level.setBlock(myceliumPos, Blocks.MYCELIUM.defaultBlockState(), 2); + } + } + + int smallCount = 5 + random.nextInt(8); + for (int i = 0; i < smallCount; i++) { + int radius = stemSize + 4 + random.nextInt(4); + int sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int sz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz); + BlockPos smallPos = new BlockPos(sx, sy, sz); + + if (!canReplace(level.getBlockState(smallPos))) continue; + BlockState below = level.getBlockState(smallPos.below()); + if (!below.isFaceSturdy(level, smallPos.below(), Direction.UP)) continue; + + Block plant = random.nextBoolean() ? smallMushroom + : (isRed ? Blocks.BROWN_MUSHROOM : Blocks.RED_MUSHROOM); + BlockState plantState = plant.defaultBlockState(); + if (plantState.canSurvive(level, smallPos)) { + level.setBlock(smallPos, plantState, 2); + } + } + + return true; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() + || (state.getBlock() instanceof net.minecraft.world.level.block.LeavesBlock); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java index fe086d50..942edd7e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java @@ -1,11 +1,8 @@ package com.craisinlord.antarchy.content.worldgen.elythia; -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; @@ -19,33 +16,22 @@ public class OuranwoodCocoonTreeFeature extends OuranwoodTreeFeature { @Override public boolean place(FeaturePlaceContext context) { if (!super.place(context)) return false; - spawnGuaranteedCocoon(context.level(), context.origin(), context.config(), context.random()); + placeGuaranteedCocoon(context.level(), context.origin(), context.config(), context.random()); return true; } - private void spawnGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) { - if (!(level.getLevel() instanceof ServerLevel serverLevel)) return; - - // Pick a branch direction and a Y somewhere in the lower-mid trunk + private void placeGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) { Direction dir = Direction.Plane.HORIZONTAL.getRandomDirection(random); int branchY = 10 + random.nextInt(8); - int branchLength = 4 + random.nextInt(3); // 4–6 logs out from the trunk + int branchLength = 4 + random.nextInt(3); - // Place the branch logs, then re-assert the anchor tip so it's always a log for (int i = 1; i <= branchLength; i++) { BlockPos p = origin.above(branchY).relative(dir, i); setBlock(level, p, config.trunkProvider().getState(random, p)); } BlockPos anchor = origin.above(branchY).relative(dir, branchLength); - // Clear everything below the anchor and spawn the cocooned brutalfly BrutalflyCocoonFeature.clearCocoonVolume(level, anchor); - BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel); - if (brutalfly == null) return; - brutalfly.moveTo(anchor.getX() + 0.5, anchor.getY() - 15.0, anchor.getZ() + 0.5, - random.nextFloat() * 360.0F, 0.0F); - brutalfly.setCocooned(true, anchor); - brutalfly.setHealth(brutalfly.getMaxHealth()); - serverLevel.addFreshEntity(brutalfly); + BrutalflyCocoonFeature.setCocoonSpawnerMarker(level, anchor); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java index 98e24455..db2bd8d6 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java @@ -553,8 +553,6 @@ public class OuranwoodTreeFeature extends Feature { return; } - // Place the marker block at the first floor position; it will spawn squirrels and - // convert itself to COARSE_DIRT shortly after the chunk loads. // The tick is scheduled here on the WorldGenLevel because onPlace() is never // called during world generation, so the block cannot self-schedule. int squirrelCount = 1 + random.nextInt(3); @@ -824,7 +822,6 @@ public class OuranwoodTreeFeature extends Feature { } } - // Set correct surface type on top soil block (from refreshTerrainSurface) BlockPos topSoilPos = null; for (int y = maxY; y >= minY; y--) { BlockPos pos = new BlockPos(worldX, y, worldZ); diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java new file mode 100644 index 00000000..99fd4fa0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RangedAttribute.class) +public interface AccessorRangedAttribute { + + @Accessor("minValue") + @Mutable + void antarchyAttributefix$setMinValue(double minValue); + + @Accessor("maxValue") + @Mutable + void antarchyAttributefix$setMaxValue(double maxValue); +} \ No newline at end of file diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java new file mode 100644 index 00000000..de6f8f78 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntityTypeSignMixin.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.Antarchy; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BlockEntityType.class) +public abstract class BlockEntityTypeSignMixin { + @Unique + private static Block antarchy$ouranwoodSign; + @Unique + private static Block antarchy$ouranwoodWallSign; + @Unique + private static Block antarchy$ouranwoodHangingSign; + @Unique + private static Block antarchy$ouranwoodWallHangingSign; + + @Inject(method = "isValid", at = @At("HEAD"), cancellable = true) + private void antarchy$allowOuranwoodSigns(BlockState state, CallbackInfoReturnable cir) { + Object self = this; + if (self == BlockEntityType.SIGN) { + if (state.is(antarchy$sign()) || state.is(antarchy$wallSign())) { + cir.setReturnValue(true); + } + } else if (self == BlockEntityType.HANGING_SIGN) { + if (state.is(antarchy$hangingSign()) || state.is(antarchy$wallHangingSign())) { + cir.setReturnValue(true); + } + } + } + + @Unique + private static Block antarchy$sign() { + if (antarchy$ouranwoodSign == null) { + antarchy$ouranwoodSign = antarchy$resolve("ouranwood_sign"); + } + return antarchy$ouranwoodSign; + } + + @Unique + private static Block antarchy$wallSign() { + if (antarchy$ouranwoodWallSign == null) { + antarchy$ouranwoodWallSign = antarchy$resolve("ouranwood_wall_sign"); + } + return antarchy$ouranwoodWallSign; + } + + @Unique + private static Block antarchy$hangingSign() { + if (antarchy$ouranwoodHangingSign == null) { + antarchy$ouranwoodHangingSign = antarchy$resolve("ouranwood_hanging_sign"); + } + return antarchy$ouranwoodHangingSign; + } + + @Unique + private static Block antarchy$wallHangingSign() { + if (antarchy$ouranwoodWallHangingSign == null) { + antarchy$ouranwoodWallHangingSign = antarchy$resolve("ouranwood_wall_hanging_sign"); + } + return antarchy$ouranwoodWallHangingSign; + } + + @Unique + private static Block antarchy$resolve(String path) { + return BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java new file mode 100644 index 00000000..35040515 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/NightmareSwordDamageMixin.java @@ -0,0 +1,30 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.NightmareSwordItem; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(LivingEntity.class) +public abstract class NightmareSwordDamageMixin { + @ModifyVariable(method = "hurt", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private float antarchy$applyNightmareSwordDamage(float amount, DamageSource source) { + LivingEntity self = (LivingEntity) (Object) this; + if (self.level().isClientSide) { + return amount; + } + + if (!(source.getEntity() instanceof Player attacker)) { + return amount; + } + + if (!(attacker.getMainHandItem().getItem() instanceof NightmareSwordItem)) { + return amount; + } + + return NightmareSwordItem.calculateDamage(attacker); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java new file mode 100644 index 00000000..433fd05a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java @@ -0,0 +1,31 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.enchantment.Enchantments; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Enchantments.class) +public abstract class SquidzookaEnchantMixin { + @Redirect( + method = "bootstrap", + at = @At(value = "INVOKE", target = "Lnet/minecraft/core/HolderGetter;getOrThrow(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/core/HolderSet$Named;"), + slice = @org.spongepowered.asm.mixin.injection.Slice( + from = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;MULTISHOT:Lnet/minecraft/resources/ResourceKey;"), + to = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;QUICK_CHARGE:Lnet/minecraft/resources/ResourceKey;") + ) + ) + private static HolderSet.Named antarchy$allowSquidzookaForMultishot(HolderGetter holderGetter, TagKey tag) { + if (tag.equals(ItemTags.CROSSBOW_ENCHANTABLE)) { + return holderGetter.getOrThrow(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); + } + + return holderGetter.getOrThrow(tag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java new file mode 100644 index 00000000..e8a51510 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Enchantment.class) +public abstract class SquidzookaMultishotMixin { + @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) + private void antarchy$allowSquidzookaForMultishot(ItemStack stack, CallbackInfoReturnable cir) { + if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + cir.setReturnValue(true); + } + } + + @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) + private void antarchy$allowSquidzookaAsPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { + if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + cir.setReturnValue(true); + } + } + + @Unique + private boolean antarchy$isMultishot() { + return "Multishot".equals(((Enchantment) (Object) this).description().getString()); + } + + @Unique + private boolean antarchy$isSquidzooka(ItemStack stack) { + return "squidzooka".equals(BuiltInRegistries.ITEM.getKey(stack.getItem()).getPath()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java new file mode 100644 index 00000000..33d18b90 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.StinkyBehavior; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LivingEntity.class) +public abstract class StinkyLivingEntityMixin { + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$tickStinkyTrail(CallbackInfo ci) { + LivingEntity livingEntity = (LivingEntity) (Object) this; + if (livingEntity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + StinkyBehavior.tickStinkyTrail(livingEntity); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java new file mode 100644 index 00000000..04857183 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.renderer.CavarynSkyRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexBuffer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.LevelRenderer; +import org.joml.Matrix4f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LevelRenderer.class) +public abstract class CavarynSkyMixin { + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private ClientLevel level; + + @Shadow + @Final + private VertexBuffer skyBuffer; + + @Shadow + @Final + private VertexBuffer darkBuffer; + + @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) + private void antarchy$renderCavarynSky(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean isFoggy, Runnable setupFog, CallbackInfo ci) { + if (this.level == null || !CavarynSkyRenderer.shouldRender(this.level)) { + return; + } + + PoseStack poseStack = new PoseStack(); + poseStack.mulPose(modelViewMatrix); + CavarynSkyRenderer.render( + this.minecraft, + this.level, + poseStack, + projectionMatrix, + partialTick, + camera, + isFoggy, + setupFog, + this.skyBuffer, + this.darkBuffer + ); + ci.cancel(); + } + + @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) + private void antarchy$skipCavarynClouds(PoseStack poseStack, Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float partialTick, double camX, double camY, double camZ, CallbackInfo ci) { + if (this.level != null && CavarynSkyRenderer.shouldRender(this.level)) { + ci.cancel(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java new file mode 100644 index 00000000..47605151 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/MountedVehicleCameraMixin.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import net.minecraft.client.Camera; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; + +@Mixin(Camera.class) +public abstract class MountedVehicleCameraMixin { + @Shadow + private Entity entity; + + @ModifyArgs( + method = "setup", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(FFF)V") + ) + private void antarchy$adjustMountedCameraOffset( + Args args, + BlockGetter level, + Entity entity, + boolean detached, + boolean mirrored, + float partialTick + ) { + if (!detached || this.entity == null || this.entity.getVehicle() == null) { + return; + } + + Entity vehicle = this.entity.getVehicle(); + if (vehicle instanceof HerculesBeetleEntity) { + args.set(0, (Float) args.get(0) * 1.45F); + args.set(1, (Float) args.get(1) + 0.2F); + args.set(2, (Float) args.get(2) + 0.45F); + return; + } + + if (vehicle instanceof DorrieEntity) { + args.set(0, (Float) args.get(0) * 1.6F); + args.set(1, (Float) args.get(1) + 0.15F); + args.set(2, (Float) args.get(2) + 0.55F); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java index 83f930db..e812287b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java @@ -13,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @Mixin(SplashManager.class) -/* - * Adds Antarchy splash text without replacing vanilla handling. - */ public abstract class SplashManagerMixin { @Shadow @Final @@ -35,5 +32,6 @@ public abstract class SplashManagerMixin { this.splashes.add("Rainbow sugar yummy"); this.splashes.add("Now with inverted gravity!"); this.splashes.add("Everything we need is already here"); + this.splashes.add("Rub some bacon on it!"); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java index 220d86e9..5e92df94 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java @@ -293,4 +293,5 @@ public abstract class LivingEntityMixin { ); original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); } + } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java index ff6d76d9..2ea84d5c 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java @@ -2,9 +2,14 @@ package com.craisinlord.antarchy.mixins.gravity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,4 +32,34 @@ public abstract class PlayerAttackMixin { ci.cancel(); } } + + /* + * Primordial's full set bonus makes player melee knockback ignore the target's knockback resistance. + */ + @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) + private void antarchy$ignorePrimordialKnockbackResistance(LivingEntity target, double strength, double x, double z, Operation original) { + Player player = (Player) (Object) this; + if (!PrimordialArmorItem.hasFullSet(player)) { + original.call(target, strength, x, z); + return; + } + + if (strength <= 0.0D) { + return; + } + + target.hasImpulse = true; + while (x * x + z * z < 1.0E-5D) { + x = (Math.random() - Math.random()) * 0.01D; + z = (Math.random() - Math.random()) * 0.01D; + } + + Vec3 previousMovement = target.getDeltaMovement(); + Vec3 knockback = new Vec3(x, 0.0D, z).normalize().scale(strength); + target.setDeltaMovement( + previousMovement.x / 2.0D - knockback.x, + target.onGround() ? Math.min(0.4D, previousMovement.y / 2.0D + strength) : previousMovement.y, + previousMovement.z / 2.0D - knockback.z + ); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java deleted file mode 100644 index 42846ba0..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.craisinlord.antarchy.mixins.stellaris; - -import com.st0x0ef.stellaris.common.oxygen.DimensionOxygenManager; -import net.minecraft.core.component.DataComponentType; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(value = DimensionOxygenManager.class, priority = 2000) -/* - * Tweaks Stellaris oxygen checks for Antarchy dimensions. - */ -public abstract class DimensionOxygenManagerMixin { - @Unique - private static final TagKey ANTARCHY_MARK_39_ARMOR = TagKey.create( - Registries.ITEM, - ResourceLocation.fromNamespaceAndPath("marvel", "iron_man_mark_39_armor") - ); - - @Unique - private static final ResourceLocation ANTARCHY_HELMET_OPEN_ID = - ResourceLocation.fromNamespaceAndPath("marvel", "helmet_open"); - - @Inject(method = "breath", at = @At("HEAD"), cancellable = true) - private void antarchy$allowClosedMark39SuitToBreathe( - LivingEntity entity, - CallbackInfoReturnable cir - ) { - if (antarchy$hasArmor(entity)) { - cir.setReturnValue(true); - } - } - - @Unique - private static boolean antarchy$hasArmor(LivingEntity entity) { - ItemStack helmet = entity.getItemBySlot(EquipmentSlot.HEAD); - boolean hasHelmet = helmet.is(ANTARCHY_MARK_39_ARMOR) && !antarchy$isHelmetOpen(helmet); - boolean hasChestplate = entity.getItemBySlot(EquipmentSlot.CHEST).is(ANTARCHY_MARK_39_ARMOR); - boolean hasLeggings = entity.getItemBySlot(EquipmentSlot.LEGS).is(ANTARCHY_MARK_39_ARMOR); - boolean hasBoots = entity.getItemBySlot(EquipmentSlot.FEET).is(ANTARCHY_MARK_39_ARMOR); - return hasHelmet && hasChestplate && hasLeggings && hasBoots; - } - - @Unique - @SuppressWarnings("unchecked") - private static boolean antarchy$isHelmetOpen(ItemStack helmet) { - DataComponentType componentType = BuiltInRegistries.DATA_COMPONENT_TYPE.get(ANTARCHY_HELMET_OPEN_ID); - if (componentType == null) { - return false; - } - return Boolean.TRUE.equals(helmet.get((DataComponentType) componentType)); - } -} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index 3c4e6fa9..5638e466 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -2,19 +2,25 @@ "required": true, "package": "com.craisinlord.antarchy.mixins", "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", + "refmap": "antarchy.refmap.json", "compatibilityLevel": "JAVA_21", "mixins": [ + "AccessorRangedAttribute", + "BlockEntityTypeSignMixin", "BloodglassMixin", - "DreamSandLowGravityMixin", "DreamFireBlockMixin", + "DreamSandLowGravityMixin", "FireVisualBaseFireBlockMixin", "FireVisualEntityMixin", "GlowVinesUnderLeavesMixin", - "multipart.EntityMultipartLifecycleMixin", + "NightmareSwordDamageMixin", "ServerPlayerGameModeMixin", + "SquidzookaEnchantMixin", + "SquidzookaMultishotMixin", "TorchflowerBlockStateMixin", "gravity.AbstractArrowGravityMixin", "gravity.BucketItemGravityMixin", + "gravity.ChunkMapAccessor", "gravity.CrossbowItemGravityMixin", "gravity.DirectionFacingMixin", "gravity.EntityCollisionContextMixin", @@ -27,31 +33,31 @@ "gravity.GroundPathNavigationMixin", "gravity.LivingEntityMixin", "gravity.MobHurtMixin", + "gravity.PathNavigationAccessor", + "gravity.PathNavigationDebugMixin", "gravity.PlayerAttackMixin", "gravity.PlayerGravityMixin", "gravity.PlayerPoseFitMixin", "gravity.PlayerSneakMixin", - "gravity.PathNavigationDebugMixin", - "gravity.PathNavigationAccessor", "gravity.ProjectileGravityMixin", + "gravity.ServerChunkCacheAccessor", + "gravity.ServerEntityAccessor", "gravity.ServerGamePacketListenerMixin", "gravity.ServerPlayerGravityMixin", "gravity.ThrowableProjectileGravityMixin", - "gravity.ChunkMapAccessor", - "gravity.ServerChunkCacheAccessor", - "gravity.ServerEntityAccessor", "gravity.TrackedEntityAccessor", - "stellaris.DimensionOxygenManagerMixin" + "multipart.EntityMultipartLifecycleMixin" ], "client": [ + "client.ElythiaSkyMixin", "client.ElytraModelAccessor", "client.LightningBoltRendererMixin", + "client.MountedVehicleCameraMixin", "client.ParalyzedMouseTurnMixin", "client.ScreenEffectRendererFireVisualMixin", "client.SplashManagerMixin", - "client.WolfRendererGrimMixin", - "client.ElythiaSkyMixin", "client.ThoraxisFogMixin", + "client.WolfRendererGrimMixin", "gravity.client.CameraGravityMixin", "gravity.client.ClientPacketListenerGravityMixin", "gravity.client.EntityRenderDispatcherGravityMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json index 5571a40d..30d3d351 100644 --- a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json @@ -64,6 +64,11 @@ "walk": { "loop": true, "animation_length": 0.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:bomber_walk|0.6|1.0" + } + }, "bones": { "root": { "rotation": { @@ -313,4 +318,4 @@ } } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/animations/cheep.animation.json b/common/src/main/resources/assets/antarchy/animations/cheep.animation.json new file mode 100644 index 00000000..a6ef31c6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/cheep.animation.json @@ -0,0 +1,492 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "right_arm": { + "rotation": { + "vector": [0, 0, 52.5] + } + }, + "left_arm": { + "rotation": { + "vector": [0, 0, -52.5] + } + } + } + }, + "attack": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 110] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 1, 0.3] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 1, -2.7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -110] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 117.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -117.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 17.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.4, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json b/common/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json index a71ef427..7a3524e8 100644 --- a/common/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/cloud_shark.animation.json @@ -4,11 +4,6 @@ "idle": { "loop": true, "animation_length": 8, - "sound_effects": { - "0.0": { - "effect": "antarchy:cloud_shark_idle|0.55|1.0" - } - }, "bones": { "head": { "rotation": { @@ -78,7 +73,7 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -100,7 +95,7 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" }, @@ -122,7 +117,7 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, 37.5] }, "lerp_mode": "catmullrom" }, @@ -144,7 +139,7 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -178,7 +173,7 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -280,50 +275,6 @@ } } }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - } - }, "left_wing": { "rotation": { "0.0": { @@ -368,94 +319,6 @@ } } }, - "right_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -50] - }, - "lerp_mode": "catmullrom" - }, - "8.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, "halo": { "rotation": { "0.0": { @@ -471,17 +334,144 @@ "lerp_mode": "catmullrom" } } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "8.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } } } }, "swim": { "loop": true, "animation_length": 4, - "sound_effects": { - "0.0": { - "effect": "antarchy:cloud_shark_fly|0.7|1.0" - } - }, "bones": { "head": { "rotation": { @@ -715,50 +705,6 @@ } } }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -82.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 67.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, "left_wing": { "rotation": { "0.0": { @@ -803,94 +749,6 @@ } } }, - "right_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 70] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -70] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 72.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, "halo": { "rotation": { "0.0": { @@ -906,6 +764,138 @@ "lerp_mode": "catmullrom" } } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 82.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } } } }, @@ -1264,110 +1254,6 @@ } } }, - "right_wing": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-28.48347, 25.49671, 55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-28.48347, 25.49671, 55.92684] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-26.25382, -27.79687, -25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-26.25382, -27.79687, -25.89482] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.40559, 30.89218, 68.73521] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [-22.40559, 30.89218, 68.73521] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -30] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -30] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - } - }, "left_wing": { "rotation": { "0.0": { @@ -1472,214 +1358,6 @@ } } }, - "right_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-76.5498, 41.70738, -43.45893] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-76.5498, 41.70738, -43.45893] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-78.99034, -24.59477, -57.12934] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-78.99034, -24.59477, -57.12934] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [72.25889, 53.70751, 113.03177] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [72.25889, 53.70751, 113.03177] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, 50] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-76.5498, -41.70738, 43.45893] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-76.5498, -41.70738, 43.45893] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-78.99034, 24.59477, 57.12934] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [-78.99034, 24.59477, 57.12934] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [72.25889, -53.70751, -113.03177] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [72.25889, -53.70751, -113.03177] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_wing4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - } - } - }, "halo": { "rotation": { "0.0": { @@ -1695,8 +1373,320 @@ "lerp_mode": "catmullrom" } } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-28.48347, -25.49671, -55.92684] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-26.25382, 27.79687, 25.89482] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-22.40559, -30.89218, -68.73521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + } } } } } -} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json b/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json new file mode 100644 index 00000000..f9736e11 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json @@ -0,0 +1,2372 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [20, 0, 0] + }, + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json b/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json new file mode 100644 index 00000000..c3ac7ebb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json @@ -0,0 +1,2927 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 3, + "bones": { + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5897, -8.165, -12.5307] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.95905, -0.95638] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5897, 8.165, 12.5307] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_1": { + "loop": "hold_on_last_frame", + "animation_length": 0.25, + "bones": { + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [3.8261, -7.6671, 6.293] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5.7195, -7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, -1.95259, 0.43288] + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, -1.95259, -0.43288] + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -2.46, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5.04, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [3.8261, 7.6671, -6.293] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5.7195, 7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_2": { + "loop": true, + "animation_length": 0.1667, + "bones": { + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.7195, -7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5897, -8.165, -12.5307] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5.7195, -7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 5.04, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.09, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.09, -1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.7195, 7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5897, 8.165, 12.5307] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5.7195, 7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_3": { + "loop": "hold_on_last_frame", + "animation_length": 0.3333, + "bones": { + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.7195, -7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.917, -7.5418, -3.15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.99144, -0.13053] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.99619, -0.08716] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 5.04, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.09, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.09, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.7195, 7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.917, 7.5418, 3.15] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.3, 0.92, 0.23] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "bones": { + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5.7195, -7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [5.7195, -7.8752, 9.4221] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-16.3645, -10.7765, -27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1.58671, -1.21752] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.98481, 0.17365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.98481, 0.17365] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.98481, 0.17365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.98481, 0.17365] + }, + "lerp_mode": "catmullrom" + } + } + }, + "waist": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.04362, -0.99905] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0.08716, -0.99619] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "bone": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -6.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5.7195, 7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [5.7195, 7.8752, -9.4221] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-16.3645, 10.7765, 27.5693] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.3036, 0.92388, 0.23296] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json b/common/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json index 441992c5..05be1d2a 100644 --- a/common/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/emperor_scorpion.animation.json @@ -9,19 +9,183 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [5, 0, 0] + "vector": [22.5, 0, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.76424, 15.58169, 6.41363] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.55159, -66.49678, 18.63503] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.76424, -15.58169, -6.41363] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.55159, 66.49678, -18.63503] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 40, 0] }, "lerp_mode": "catmullrom" } @@ -29,6 +193,26 @@ }, "torso": { "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-14.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { "0.0": { "post": { "vector": [0, 0, 0] @@ -37,7 +221,7 @@ }, "2.0": { "post": { - "vector": [-7.5, 0, 0] + "vector": [0.01701, -1.932, -0.51681] }, "lerp_mode": "catmullrom" }, @@ -49,133 +233,29 @@ } } }, - "r_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 35, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 35, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -35, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -35, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0417": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "tail": { "rotation": { "0.0": { "post": { - "vector": [42.5, 0, 0] + "vector": [55, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.7917": { "post": { - "vector": [35, 0, 0] + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [55, 0, 0] }, "lerp_mode": "catmullrom" }, "4.0": { "post": { - "vector": [42.5, 0, 0] + "vector": [55, 0, 0] }, "lerp_mode": "catmullrom" } @@ -184,86 +264,4328 @@ "tail2": { "rotation": { "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [85, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "4.0": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "4.0": { + "vector": [0, 2.97433, 0.39158] + } + } + } + } + }, + "snap": { + "animation_length": 1.1667, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [23.42856, 32.02895, 39.9583] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [21.71157, 23.54515, 36.82727] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [23.42856, 32.02895, 39.9583] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [36.336, 33.21119, 61.27705] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.17428, -54.73839, -13.49464] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [30.90401, -59.1128, -17.94168] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [17.57153, -29.15131, 0.47837] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.00519, -46.91401, 10.92044] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.1917, -22.90321, 6.52626] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.96435, -39.49556, 9.40333] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-0.31701, -52.5214, -0.0116] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.69574, -37.01886, 8.96963] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.68128, -37.43886, 12.90265] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.68128, -37.43886, 12.90265] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.62424, -29.93934, 12.80003] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-0.58525, -22.43976, 12.71188] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-1.00506, -57.43681, 13.33557] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.54094, 0.05918, 12.48792] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.61309, 44.44348, -10.37251] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.62424, 29.93934, -12.80003] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-0.04217, 4.92423, 0.86613] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.19914, 3.52239, -38.53112] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [14.11306, 1.80961, -55.00433] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [14.06755, -1.76775, -41.10726] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [42.40833, -20.72687, -59.24866] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [9.19914, -3.52239, 38.53112] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [4.48533, -9.12111, 50.99268] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [14.11306, -1.80961, 55.00433] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [14.06755, 1.76775, 41.10726] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [42.40833, 20.72687, 59.24866] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "sting": { + "animation_length": 1.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [40.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.59276, 9.44321, 19.44192] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-13.01253, -61.64994, 15.81446] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-13.01253, -61.64994, 15.81446] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.59657, -24.93963, 12.74003] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.59657, -24.93963, 12.74003] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [40.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [40.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.59276, -9.44321, -19.44192] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-13.01253, 61.64994, -15.81446] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-13.01253, 61.64994, -15.81446] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.59657, 24.93963, -12.74003] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.59657, 24.93963, -12.74003] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-22.47522, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-22.47522, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.52478, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.52478, -0.248, -0.4204] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-0.06748, 7.39206, 3.05824] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-0.06748, 7.39206, 3.05824] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [27.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [27.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [25.0008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [42.5008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [25.0008, -0.21542, 0.08621] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [42.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [42.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50.00154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [37.50154, -0.01397, 0.41232] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 10.90589, -1.43579] + }, + "0.4583": { + "vector": [0, 10.90589, -1.43579] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [8.93029, -6.60604, 45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [8.93029, -6.60604, 45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2917": { + "vector": [0, 10.90589, -1.43579] + }, + "0.4583": { + "vector": [0, 10.90589, -1.43579] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [8.93029, 6.60604, -45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [8.93029, 6.60604, -45.80307] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "1.25": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "1.25": { + "vector": [0, 2.97433, 0.39158] + } + } + }, + "Emperor_scorpion": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, -7, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, -7, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "tail_base": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [90, 0, 0] + }, + "0.8333": { + "vector": [90, 0, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + } + } + }, + "death": { + "animation_length": 2, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-95, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-95, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10.90072, -2.02429, -7.48359] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-11.0335, -1.07248, -2.57317] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-58.57884, -69.14305, 63.52353] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.45814, -34.54067, 8.56333] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1.65088, -1.8911, 41.16658] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-0.58731, -2.4278, 13.42887] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.43439, -2.462, -10.00933] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10.90072, 2.02429, 7.48359] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-11.0335, 1.07248, 2.57317] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-58.57884, 69.14305, -63.52353] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.45814, 34.54067, -8.56333] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1.65088, 1.8911, -41.16658] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-0.58731, 2.4278, -13.42887] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.43439, 2.462, 10.00933] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-19.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0.65263, 4.95722] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [68.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [73.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [92.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { "post": { "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.9167": { "post": { - "vector": [25, 0, 0] + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.5": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.96013, 14.15594, 3.28955] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [8.24992, -11.63031, 6.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.16727, -27.01074, 12.61337] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.06542, -45.90473, 19.36303] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.96013, -14.15594, -3.28955] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [8.24992, 11.63031, -6.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.16727, 27.01074, -12.61337] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.06542, 45.90473, -19.36303] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.97433, 0.39158] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Emperor_scorpion": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [17.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, -13, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, -8, 0] + } + } + } + } + }, + "agro": { + "animation_length": 1.5, + "bones": { + "right_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-93.69768, 47.44052, -2.72535] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-93.69768, -47.44052, 2.72535] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-110, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.24317, 40.3589, 22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.96462, 16.54425, 13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-26.01017, -75.88812, 29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.54143, -2.4407, 12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.24317, -40.3589, -22.679] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.96462, -16.54425, -13.90465] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-26.01017, 75.88812, -29.64312] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.54143, 2.4407, -12.51153] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 40, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [20.02448, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-9.97552, -0.15113, -0.46411] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.44, 9.12, 4.16] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, 8.58419, 3.91301] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 6.26, -13.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 5.84314, -16.90733] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 5.84, -16.91] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 6.26, -13.74] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { "post": { "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" - } - } - }, - "r_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" }, - "4.0": { + "1.5": { "post": { - "vector": [0, -22.5, 0] + "vector": [55, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "r_leg3": { + "tail2": { "rotation": { "0.0": { "post": { - "vector": [0, 22.5, 0] + "vector": [92.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.1667": { "post": { - "vector": [0, 22.5, 0] + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [92.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "l_leg": { + "left_leg": { "rotation": { "0.0": { "post": { - "vector": [0, 22.5, 0] + "vector": [-1.72297, 17.16639, -38.21031] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.3333": { "post": { - "vector": [0, 22.5, 0] + "vector": [-1.64738, 2.1728, -37.76412] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1.72297, 17.16639, -38.21031] }, "lerp_mode": "catmullrom" } } }, - "l_leg3": { + "left_leg2": { "rotation": { "0.0": { "post": { - "vector": [0, -22.5, 0] + "vector": [0, 0, 90] }, "lerp_mode": "catmullrom" }, - "4.0": { + "0.3333": { "post": { - "vector": [0, -22.5, 0] + "vector": [0, 0, 52.5] }, "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.10576, -1.86677, -40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [26.72762, -5.14185, -60.34804] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [23.97832, -13.07344, -43.46517] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [24.22538, -12.71913, -44.36617] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-4, 0.26105, 1.98289] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [43.07231, -19.03, -61.20103] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [39.26594, -26.7138, -51.59932] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [39.98602, -25.67186, -53.11029] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [-5, 0.78316, 5.94867] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-1.64738, -2.1728, 37.76412] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1.72297, -17.16639, 38.21031] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.10576, 1.86677, 40.45934] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [26.72762, 5.14185, 60.34804] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [23.97832, 13.07344, 43.46517] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [24.22538, 12.71913, 44.36617] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [4, 0.26105, 1.98289] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [43.07231, 19.03, 61.20103] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [39.26594, 26.7138, 51.59932] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [39.98602, 25.67186, 53.11029] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [5, 0.78316, 5.94867] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [-7.5, 0, 0] + }, + "0.625": { + "vector": [-7.5, 0, 0] + }, + "1.5": { + "vector": [-7.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 2.97433, 0.39158] + }, + "0.625": { + "vector": [0, 2.97433, 0.39158] + }, + "1.5": { + "vector": [0, 2.97433, 0.39158] + } + } + }, + "Emperor_scorpion": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [0, 0, 0] + }, + "1.5": { + "vector": [0, 0, 0] } } } @@ -275,572 +4597,267 @@ "bones": { "head": { "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } + "vector": [17.5, 0, 0] } }, - "torso": { + "right_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0.04276, 27.49038, 0.45373] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.15033, 44.97993, 0.86308] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0.04276, -27.49038, -0.45373] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.15033, -44.97993, -0.86308] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [42.5, 0, 0] + "vector": [20.54, 14.15, -3.24] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] + "vector": [21.0706, 18.8197, -1.3935] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [35, 0, 0] + "vector": [20.54, 14.15, -3.24] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [22.5, 0, 0] + "vector": [21.0706, 18.8197, -1.3935] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [35, 0, 0] + "vector": [20.54, 14.15, -3.24] }, "lerp_mode": "catmullrom" } } }, - "r_leg": { + "right_arm2": { + "rotation": { + "vector": [-87.84727, -83.85782, 92.15322] + } + }, + "right_claw": { "rotation": { "0.0": { "post": { - "vector": [25.03181, -64.37177, -18.5617] + "vector": [-2.96, -26.64, 18.35] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.0833": { "post": { - "vector": [-18.98448, 42.68932, -3.98448] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [25.03181, -64.37177, -18.5617] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [-14.51082, 43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [6.1191, -21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-14.51082, 43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [11.3148, -21.1262, 0.14658] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-27.20957, 63.66301, -22.12815] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [11.3148, -21.1262, 0.14658] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-11.3148, -21.1262, -0.14658] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [8.95013, 43.76278, 5.89364] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-11.3148, -21.1262, -0.14658] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [14.51082, 43.07952, 5.75357] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.1191, -21.69365, 1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [14.51082, 43.07952, 5.75357] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [-25.03181, -64.37177, 18.5617] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [11.39429, 20.39034, 3.57575] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25.03181, -64.37177, 18.5617] - }, - "lerp_mode": "catmullrom" - } - } - }, - "scorpion_emperor": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [-2.91413, -24.7865, 18.24873] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [0, 0, -9] + "vector": [-2.9769, -27.2832, 18.3917] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-2.91413, -24.7865, 18.24873] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.9769, -27.2832, 18.3917] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 0] + "vector": [-2.96, -26.64, 18.35] }, "lerp_mode": "catmullrom" } } - } - } - }, - "attack": { - "animation_length": 1.0417, - "bones": { - "head": { + }, + "right_claw_open": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [21.0706, -18.8197, 1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [21.0706, -18.8197, 1.3935] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.54, -14.15, 3.24] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm2": { + "rotation": { + "vector": [-26.01017, 75.88812, -29.64312] + } + }, + "left_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.96, 26.64, -18.35] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-2.91413, 24.7865, -18.24873] }, "lerp_mode": "catmullrom" }, "0.2083": { "post": { - "vector": [17.5, 0, 0] + "vector": [-2.9769, 27.2832, -18.3917] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.3333": { "post": { - "vector": [17.5, 0, 0] + "vector": [-2.91413, 24.7865, -18.24873] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.4583": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-2.9769, 27.2832, -18.3917] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.5": { "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 0, 0] + "vector": [-2.96, 26.64, -18.35] }, "lerp_mode": "catmullrom" } } }, + "left_claw_open": { + "rotation": { + "vector": [0, 40, 0] + } + }, "torso": { "rotation": { "0.0": { + "post": { + "vector": [-0.5595, 0.0244, 2.4999] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5062, 0.0203, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5595, 0.0244, 2.4999] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.25": { "post": { - "vector": [-20, 0, 0] + "vector": [0, 1, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { + "0.375": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - } - } - }, - "r_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" }, - "0.2083": { + "0.5": { "post": { - "vector": [0.28453, -7.47189, -1.1911] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.28453, -7.47189, -1.1911] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [3.28812, 82.43115, 5.72119] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [3.28812, 82.43115, 5.72119] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.72824, 7.55891, -0.3803] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [0.72824, 7.55891, -0.3803] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0.28453, 7.47189, 1.1911] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.28453, 7.47189, 1.1911] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_claw2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [3.28812, -82.43115, -5.72119] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [3.28812, -82.43115, -5.72119] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.72824, -7.55891, 0.3803] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [0.72824, -7.55891, 0.3803] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, -22.5, 0] + "vector": [0, 1, 0] }, "lerp_mode": "catmullrom" } @@ -850,37 +4867,31 @@ "rotation": { "0.0": { "post": { - "vector": [42.5, 0, 0] + "vector": [47.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.125": { "post": { - "vector": [15, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.25": { "post": { - "vector": [15, 0, 0] + "vector": [47.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.375": { "post": { - "vector": [80, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.5": { "post": { - "vector": [80, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [42.5, 0, 0] + "vector": [47.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -890,292 +4901,434 @@ "rotation": { "0.0": { "post": { - "vector": [35, 0, 0] + "vector": [85, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.125": { "post": { - "vector": [20, 0, 0] + "vector": [90, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.25": { "post": { - "vector": [20, 0, 0] + "vector": [85, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.375": { "post": { - "vector": [50, 0, 0] + "vector": [90, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.5": { "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [35, 0, 0] + "vector": [85, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "tail3": { + "left_leg2": { "rotation": { "0.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 100] }, - "0.2083": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [6.1191, -21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [14.51082, -43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [14.51082, -43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [6.1191, -21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [6.1191, -21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [6.1191, -21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "r_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.1191, 21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-14.51082, 43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-14.51082, 43.07952, -5.75357] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [-6.1191, 21.69365, -1.17354] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [6.1191, 21.69365, 1.17354] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [31.99897, 63.17628, 19.99913] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [31.99897, 63.17628, 19.99913] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [6.1191, 21.69365, 1.17354] - }, - "lerp_mode": "catmullrom" - } - } - }, - "l_leg2": { - "rotation": { - "0.5417": { + "0.125": { "pre": { - "vector": [6.1191, 21.69365, 1.17354] + "vector": [0, 0, 46.25] }, "post": { - "vector": [6.1191, 21.69365, 1.17354] + "vector": [0, 0, 46.25] }, "lerp_mode": "catmullrom" }, - "0.7083": { - "post": { - "vector": [6.1191, 21.69365, 1.17354] - }, - "lerp_mode": "catmullrom" + "0.25": { + "vector": [0, 0, 37.5] + }, + "0.5": { + "vector": [0, 0, 100] } } }, - "l_leg3": { + "left_leg": { "rotation": { "0.0": { + "vector": [-17.835, 32.8234, -50.8252] + }, + "0.0833": { + "pre": { + "vector": [-20.0712, 36.5326, -44.5604] + }, "post": { - "vector": [0, -22.5, 0] + "vector": [-20.0712, 36.5326, -44.5604] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.1667": { "post": { - "vector": [-7.91848, -44.03198, 4.42617] + "vector": [-6.2969, 50.0472, -11.6665] }, "lerp_mode": "catmullrom" }, - "0.4167": { - "post": { - "vector": [-7.91848, -44.03198, 4.42617] - }, - "lerp_mode": "catmullrom" + "0.25": { + "vector": [-7.94, 50.66, -4.89] }, - "0.5417": { - "post": { - "vector": [5.68464, -0.69026, -1.16451] - }, - "lerp_mode": "catmullrom" + "0.375": { + "vector": [-17.8875, 41.7417, -27.8576] }, - "0.7083": { - "post": { - "vector": [5.68464, -0.69026, -1.16451] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" + "0.5": { + "vector": [-17.835, 32.8234, -50.8252] } } }, - "scorpion_emperor": { - "position": { + "left_leg3": { + "rotation": { "0.0": { + "vector": [-1.44, 27.42, -21.33] + }, + "0.25": { + "vector": [17.1566, 10.2095, -27.2558] + }, + "0.375": { + "pre": { + "vector": [10.79, 18.48, -35.15] + }, "post": { - "vector": [0, 0, 0] + "vector": [10.79, 18.48, -35.15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-1.44, 27.42, -21.33] + } + } + }, + "left_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, 57.5] + }, + "0.25": { + "vector": [0, 0, 67.5] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 76.67] + }, + "post": { + "vector": [0, 0, 76.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 57.5] + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "vector": [19.53, -19.29, -27.48] + }, + "0.0833": { + "pre": { + "vector": [34.4927, -6.1161, -39.5276] + }, + "post": { + "vector": [34.4927, -6.1161, -39.5276] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5576, -3.3509, -35.748] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [6.6225, -0.5857, -31.9684] + }, + "0.5": { + "vector": [19.53, -19.29, -27.48] + } + } + }, + "left_leg_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, 52.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, 75.83] + }, + "post": { + "vector": [0, 0, 75.83] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 70] + }, + "0.5": { + "vector": [0, 0, 52.5] + } + } + }, + "left_leg_back3": { + "rotation": { + "0.0": { + "vector": [49.9401, -51.5736, -59.3599] + }, + "0.0833": { + "pre": { + "vector": [46.73, -44.95, -59.15] + }, + "post": { + "vector": [46.73, -44.95, -59.15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [44.9524, -15.2516, -64.3241] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [54.2, -15.58, -64.99] + }, + "0.5": { + "vector": [49.9401, -51.5736, -59.3599] + } + } + }, + "left_leg_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, 57.5] + }, + "0.125": { + "pre": { + "vector": [0, 0, 61.67] + }, + "post": { + "vector": [0, 0, 61.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, 107.5] + }, + "0.5": { + "vector": [0, 0, 57.5] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [-7.94, -50.66, 4.89] + }, + "0.125": { + "vector": [-17.8875, -41.7417, 27.8576] + }, + "0.25": { + "vector": [-17.835, -32.8234, 50.8252] + }, + "0.3333": { + "pre": { + "vector": [-20.0712, -36.5326, 44.5604] + }, + "post": { + "vector": [-20.0712, -36.5326, 44.5604] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [0, 0, 0] + "vector": [-6.2969, -50.0472, 11.6665] }, "lerp_mode": "catmullrom" }, - "0.5417": { - "post": { - "vector": [0, 0, -8] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.5": { + "vector": [-7.94, -50.66, 4.89] } } + }, + "right_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, -37.5] + }, + "0.25": { + "vector": [0, 0, -100] + }, + "0.375": { + "pre": { + "vector": [0, 0, -46.25] + }, + "post": { + "vector": [0, 0, -46.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -37.5] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "vector": [17.1566, -10.2095, 27.2558] + }, + "0.125": { + "pre": { + "vector": [10.79, -18.48, 35.15] + }, + "post": { + "vector": [10.79, -18.48, 35.15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [-1.44, -27.42, 21.33] + }, + "0.5": { + "vector": [17.1566, -10.2095, 27.2558] + } + } + }, + "right_leg4": { + "rotation": { + "0.0": { + "vector": [0, 0, -67.5] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -76.67] + }, + "post": { + "vector": [0, 0, -76.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "vector": [0, 0, -57.5] + }, + "0.5": { + "vector": [0, 0, -67.5] + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "vector": [6.6225, 0.5857, 31.9684] + }, + "0.25": { + "vector": [19.53, 19.29, 27.48] + }, + "0.3333": { + "pre": { + "vector": [34.4927, 6.1161, 39.5276] + }, + "post": { + "vector": [34.4927, 6.1161, 39.5276] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5576, 3.3509, 35.748] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [6.6225, 0.5857, 31.9684] + } + } + }, + "right_leg_back2": { + "rotation": { + "0.0": { + "vector": [0, 0, -70] + }, + "0.25": { + "vector": [0, 0, -52.5] + }, + "0.375": { + "pre": { + "vector": [0, 0, -75.83] + }, + "post": { + "vector": [0, 0, -75.83] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -70] + } + } + }, + "right_leg_back3": { + "rotation": { + "0.0": { + "vector": [54.2, 15.58, 64.99] + }, + "0.25": { + "vector": [49.9401, 51.5736, 59.3599] + }, + "0.3333": { + "pre": { + "vector": [46.73, 44.95, 59.15] + }, + "post": { + "vector": [46.73, 44.95, 59.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [44.9524, 15.2516, 64.3241] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [54.2, 15.58, 64.99] + } + } + }, + "right_leg_back4": { + "rotation": { + "0.0": { + "vector": [0, 0, -107.5] + }, + "0.25": { + "vector": [0, 0, -57.5] + }, + "0.375": { + "pre": { + "vector": [0, 0, -61.67] + }, + "post": { + "vector": [0, 0, -61.67] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -107.5] + } + } + }, + "body": { + "rotation": { + "vector": [-9.98, -0.15, -0.46] + } } } } diff --git a/common/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json b/common/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json new file mode 100644 index 00000000..57b4d3f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/hercules_beetle.animation.json @@ -0,0 +1,5186 @@ +{ + "format_version": "1.8.0", + "animations": { + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.57975, 43.25372, -16.57975] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.93039, 32.02562, 6.52939] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-16.57975, -43.25372, 16.57975] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-0.93039, -32.02562, -6.52939] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-16.57975, -43.25372, 16.57975] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.74513, 43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -11.73] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.74513, -43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.74513, 43.76124, -16.7308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [6.73, -34.87, 0.43] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [15.97027, -43.38318, -15.97027] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.11, 30.62, -16.19] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6.64862, 44.32489, -16.23144] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [2.96236, -24.4491, 2.91702] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.73, -34.87, 0.43] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [11.74513, 43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.74513, -43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 11.73] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.74513, 43.76124, 16.7308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.11, -30.62, 16.19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-6.64862, -44.32489, 16.23144] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.96236, 24.4491, -2.91702] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [15.97027, 43.38318, 15.97027] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.11, -30.62, 16.19] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "vector": [0, -0.5, 0] + }, + "0.0417": { + "vector": [0, 2.5, 0] + }, + "0.0833": { + "vector": [0, 1.5, 0] + }, + "0.125": { + "vector": [0, -0.5, 0] + }, + "0.1667": { + "vector": [0, 2.5, 0] + }, + "0.2083": { + "vector": [0, 1.5, 0] + }, + "0.25": { + "vector": [0, -0.5, -3] + }, + "0.5": { + "vector": [0, -0.5, 0] + }, + "0.5417": { + "vector": [0, 2.5, 0] + }, + "0.5833": { + "vector": [0, 1.5, 0] + }, + "0.625": { + "vector": [0, -0.5, 0] + }, + "0.6667": { + "vector": [0, 2.5, 0] + }, + "0.7083": { + "vector": [0, 1.5, 0] + }, + "0.75": { + "vector": [0, -0.5, 0] + }, + "1.0": { + "vector": [0, -0.5, 0] + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 0.5, + "bones": { + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "vector": [-10, 0, 0] + } + }, + "lower_mandibule": { + "rotation": { + "vector": [5, 0, 0] + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, -18.88323, -72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, 18.88323, 72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, 55.97144, -89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, -55.97144, 89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [11.91861, -0.27828, 2.31334] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 1.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.24721, 1.93597, 14.87739] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.49294, 0.32621, 2.47864] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-22.49294, 0.32621, 2.47864] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.95081, -4.9739, 6.58427] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [7.95081, -4.9739, 6.58427] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-31.33009, -33.67379, 40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-31.33009, -33.67379, 40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [-1.45479, 6.82059, -0.6026] + }, + "1.25": { + "vector": [-1.45479, 6.82059, -0.6026] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-31.33009, 33.67379, -40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-31.33009, 33.67379, -40.64063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.625": { + "vector": [1.45479, 6.82059, -0.6026] + }, + "1.25": { + "vector": [1.45479, 6.82059, -0.6026] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -0.5, 0] + }, + "0.7083": { + "vector": [1, -0.5, 0] + }, + "0.75": { + "vector": [0, -0.5, 0] + }, + "0.7917": { + "vector": [0, -0.5, 0] + }, + "0.8333": { + "vector": [1, -0.5, 0] + }, + "0.875": { + "vector": [0, -0.5, 0] + }, + "0.9167": { + "vector": [0, -0.5, 0] + }, + "0.9583": { + "vector": [1, -0.5, 0] + }, + "1.0": { + "vector": [0, -0.5, 0] + }, + "1.0417": { + "vector": [0, -0.5, 0] + }, + "1.0833": { + "vector": [1, -0.5, 0] + }, + "1.125": { + "vector": [0, -0.5, 0] + }, + "1.1667": { + "vector": [1, -0.5, 0] + }, + "1.5": { + "pre": { + "vector": [0, -0.5, 0] + }, + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [4.97887, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [4.97887, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.52113, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.52113, -0.26087, -0.6191] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-0.05473, 0.86734, 9.96216] + }, + "0.2083": { + "vector": [-0.05473, 0.86734, 9.96216] + }, + "0.2917": { + "vector": [0.05947, -0.86469, -9.96433] + }, + "0.375": { + "vector": [0.05947, -0.86469, -9.96433] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [5, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-9.81813, -0.79148, 1.79756] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-9.81813, -0.79148, 1.79756] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "knocked_down": { + "animation_length": 1.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.65239, -43.46301, -23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.65239, -43.46301, -23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.25": { + "pre": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "post": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.65239, 43.46301, 23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [11.65239, 43.46301, 23.71876] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.24697, 5.84622, -0.51651] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -8.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "knocked_down_idle": { + "loop": true, + "animation_length": 3.9583, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "3.9583": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "get_up": { + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.46207, 0.43399, 9.99067] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.4905, -0.21782, -4.99527] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-2.49067, 0.21359, 4.89821] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.72569, 0.10178, 14.7325] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-1.97477, -1.27275, -21.99496] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-4.29571, 1.86279, 16.90721] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [1.72284, -0.71348, 22.48927] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [2.6458, 1.39813, -20.13565] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [3.83112, -1.6697, 21.99487] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, -44.43751, 0.64124] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.38754, 44.43751, -0.64124] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.73591, -0.12394, -0.73862] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, 0.84622, 1.43679] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, 32.70657, 1.88071] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.43548, -0.84622, -1.43679] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.35498, -32.70657, -1.88071] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "charge_start": { + "loop": true, + "animation_length": 0.7917, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 8, 11] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.36483, 31.64082, -21.76303] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.36483, -31.64082, 21.76303] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "pre": { + "vector": [0, 6, 0] + }, + "post": { + "vector": [0, 6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "charge": { + "loop": true, + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.36335, 22.93078, -9.94559] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.3039, 23.14148, -12.65259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.36335, 22.93078, -9.94559] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.36335, -22.93078, 9.94559] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4.3039, -23.14148, 12.65259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.36335, -22.93078, 9.94559] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.62486, 43.40317, -19.12057] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.28065, 43.85689, -15.72372] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.62486, 43.40317, -19.12057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88845, 54.95252, -16.09531] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10.38874, 54.57678, -20.38005] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.88845, 54.95252, -16.09531] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-11.62486, -43.40317, 19.12057] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.28065, -43.85689, 15.72372] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-11.62486, -43.40317, 19.12057] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88845, -54.95252, 16.09531] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-10.38874, -54.57678, 20.38005] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.88845, -54.95252, 16.09531] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly_attack": { + "loop": true, + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [43.48302, 43.39816, 33.08878] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-39.00258, -42.80378, 28.82357] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, -18.88323, -72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.46212, 18.88323, 72.6448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, 55.97144, -89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.86765, -55.97144, 89.0885] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.79959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.53852, -9.99038, -0.44067] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 47, 9] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 47, -14] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "loop": true, + "animation_length": 1.25, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 0, 7] + }, + "0.25": { + "vector": [0, 0, 7] + }, + "0.5": { + "vector": [0, -3.96578, 7.5221] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-45, 0, 0] + }, + "0.25": { + "vector": [-45, 0, 0] + }, + "0.5": { + "vector": [-45, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "0.8333": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.30391, -25.06046, 54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.81107, -44.15009, 4.11111] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 23, 0] + }, + "0.25": { + "vector": [0, 23, 0] + }, + "0.5": { + "vector": [0, 23, 0] + }, + "0.5833": { + "vector": [0, -6.47431, 0.78484] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.30391, 25.06046, -54.7666] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.81107, 44.15009, -4.11111] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "vector": [0, 23, 0] + }, + "0.25": { + "vector": [0, 23, 0] + }, + "0.5": { + "vector": [0, 23, 0] + }, + "0.5833": { + "vector": [0, -6.47431, 0.78484] + }, + "0.6667": { + "vector": [0, -12, 0] + }, + "0.75": { + "vector": [0, -12, 0] + }, + "0.8333": { + "vector": [0, -12, 0] + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-8.46408, 0.47881, -1.03624] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, 15, 0] + }, + "0.25": { + "vector": [0, 15, 0] + }, + "0.4583": { + "vector": [0, 1.11977, 1.82737] + }, + "0.5": { + "vector": [0, -3.83745, 2.48] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1.74746, 32.81788, -1.08936] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-8.46408, -0.47881, 1.03624] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.125": { + "vector": [0, 15, 0] + }, + "0.25": { + "vector": [0, 15, 0] + }, + "0.4583": { + "vector": [0, 1.11977, 1.82737] + }, + "0.5": { + "vector": [0, -3.83745, 2.48] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.7917": { + "vector": [0, -10, 0] + }, + "0.875": { + "vector": [0, -10, 0] + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1.74746, -32.81788, 1.08936] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "0.8333": { + "vector": [0, -10, 0] + } + } + }, + "right_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-7.5, 0, 0] + }, + "0.25": { + "vector": [-7.5, 0, 0] + }, + "0.5": { + "vector": [-7.5, 0, 0] + }, + "0.6667": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, 0, 0] + }, + "0.875": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 3.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -3.65, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, -9.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "open_wings": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.5": { + "pre": { + "vector": [67.5, -22.5, 0] + }, + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.5": { + "pre": { + "vector": [67.5, 22.5, 0] + }, + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "close_wings": { + "animation_length": 0.25, + "bones": { + "torso": { + "rotation": { + "0.25": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "vector": [2.5, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_mandibule": { + "rotation": { + "0.0": { + "vector": [-10, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lower_mandibule": { + "rotation": { + "0.0": { + "vector": [5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [7.5, 0, 0] + }, + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, -20.46503, -59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, -44.27038, -16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [5.00964, 20.46503, 59.47267] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6.90489, 44.27038, 16.87235] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, -0.9929, -10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, 57.1835, -75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, 32.56029, -12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-8.41959, 0.9929, 10.92772] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-3.61644, -57.1835, 75.62758] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-4.68734, -32.56029, 12.97361] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, 46.64908, 4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wingcase": { + "rotation": { + "0.0": { + "post": { + "vector": [25.29959, -46.64908, -4.91564] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, -22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_wing": { + "rotation": { + "0.0": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-45, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [67.5, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Hercules_beetle": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 47, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json new file mode 100644 index 00000000..210f6cab --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json @@ -0,0 +1,5790 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, -29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.2252, -29.0774, 13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [13.6745, 58.6061, 23.203] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [6, -34.72, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6, -32.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [4, -29.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -28.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6, -34.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-6, -32.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-6, -32.24, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.5714, 35.9552, -34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-23.5556, 44.8303, -14.2689] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, -0.9366, -25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, 0.9366, 25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk2": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, -2.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -5, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -0.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "vector": [0.51, 55.12, 1.91] + }, + "0.0417": { + "vector": [-0.84, 56.48, -0.24] + }, + "0.0833": { + "vector": [-2.1902, 57.84, -2.3841] + }, + "0.125": { + "vector": [-5.39, 59.14, -6.72] + }, + "0.1667": { + "vector": [-7.0069, 60.4955, -9.1801] + }, + "0.2083": { + "vector": [-12.5271, 61.5058, -16.1362] + }, + "0.375": { + "pre": { + "vector": [9.8447, 60.1008, 12.6529] + }, + "post": { + "vector": [9.8447, 60.1008, 12.6529] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [15.5045, 44.0387, 23.0263] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [6.77, 46.22, 12.33] + }, + "0.75": { + "vector": [7.3232, 47.2763, 12.8944] + }, + "0.7917": { + "vector": [6.6433, 48.4639, 11.7564] + }, + "0.8333": { + "vector": [5.9013, 49.6755, 10.5073] + }, + "0.875": { + "vector": [4.56, 51.04, 8.36] + }, + "0.9167": { + "vector": [3.21, 52.4, 6.21] + }, + "0.9583": { + "vector": [1.86, 53.76, 4.06] + }, + "1.0": { + "vector": [0.51, 55.12, 1.91] + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, 41.88] + }, + "0.2083": { + "vector": [0, 0, 70] + }, + "0.375": { + "pre": { + "vector": [0, 0, 57.5] + }, + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 2.5] + }, + "1.0": { + "vector": [0, 0, 41.88] + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -25.83] + }, + "0.2083": { + "vector": [0, 0, -55] + }, + "0.375": { + "pre": { + "vector": [0, 0, -47.5] + }, + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1.26] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 18.59] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 15] + }, + "1.0": { + "vector": [0, 0, -25.83] + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 25.42] + }, + "0.2083": { + "vector": [0, 0, 40] + }, + "0.375": { + "pre": { + "vector": [0, 0, 28.34] + }, + "post": { + "vector": [0, 0, 28.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -18.33] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [0, 0, 5] + }, + "1.0": { + "vector": [0, 0, 25.42] + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "vector": [0, -26, 0] + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [15.08, -49.85, -21.28] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [15.5045, -44.0387, -23.0263] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [6.77, -46.22, -12.33] + }, + "0.25": { + "vector": [7.3232, -47.2763, -12.8944] + }, + "0.2917": { + "vector": [6.6433, -48.4639, -11.7564] + }, + "0.3333": { + "vector": [5.9013, -49.6755, -10.5073] + }, + "0.375": { + "vector": [4.56, -51.04, -8.36] + }, + "0.4167": { + "vector": [3.21, -52.4, -6.21] + }, + "0.4583": { + "vector": [1.86, -53.76, -4.06] + }, + "0.5": { + "vector": [0.51, -55.12, -1.91] + }, + "0.5417": { + "vector": [-0.84, -56.48, 0.24] + }, + "0.5833": { + "vector": [-2.1902, -57.84, 2.3841] + }, + "0.625": { + "vector": [-5.39, -59.14, 6.72] + }, + "0.6667": { + "vector": [-7.0069, -60.4955, 9.1801] + }, + "0.7083": { + "vector": [-12.5271, -61.5058, 16.1362] + }, + "0.875": { + "pre": { + "vector": [9.8447, -60.1008, -12.6529] + }, + "post": { + "vector": [9.8447, -60.1008, -12.6529] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.08, -49.85, -21.28] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -19.88] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -2.5] + }, + "0.5": { + "vector": [0, 0, -41.88] + }, + "0.7083": { + "vector": [0, 0, -70] + }, + "0.875": { + "pre": { + "vector": [0, 0, -57.5] + }, + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -19.88] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 1.26] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -6.09] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -18.59] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -15] + }, + "0.5": { + "vector": [0, 0, 25.83] + }, + "0.7083": { + "vector": [0, 0, 55] + }, + "0.875": { + "pre": { + "vector": [0, 0, 47.5] + }, + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 1.26] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 18.33] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "vector": [0, 0, -5] + }, + "0.5": { + "vector": [0, 0, -25.42] + }, + "0.7083": { + "vector": [0, 0, -40] + }, + "0.875": { + "pre": { + "vector": [0, 0, -28.34] + }, + "post": { + "vector": [0, 0, -28.34] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10.76] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "vector": [-6.77, 38.72, -12.33] + }, + "0.1667": { + "pre": { + "vector": [-17.3164, 41.1079, -35.1114] + }, + "post": { + "vector": [-17.3164, 41.1079, -35.1114] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-27.6005, 58.8053, -33.9605] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-6.77, 63.72, -12.33] + }, + "0.625": { + "vector": [-6.77, 59.35, -12.33] + }, + "0.75": { + "vector": [-6.77, 54.97, -12.33] + }, + "0.875": { + "vector": [-6.77, 49.35, -12.33] + }, + "1.0": { + "vector": [-6.77, 38.72, -12.33] + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, -10] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -0.83] + }, + "post": { + "vector": [0, 0, -0.83] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -53] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -50] + }, + "1.0": { + "vector": [0, 0, -10] + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -12.5] + }, + "0.2083": { + "pre": { + "vector": [0, 0, -13.33] + }, + "post": { + "vector": [0, 0, -13.33] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.87] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 40] + }, + "0.75": { + "vector": [0, 0, 11.25] + }, + "1.0": { + "vector": [0, 0, -12.5] + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 17.5] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 30.83] + }, + "post": { + "vector": [0, 0, 30.83] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, -17.5] + }, + "1.0": { + "vector": [0, 0, 17.5] + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "vector": [-6.77, -63.72, 12.33] + }, + "0.125": { + "vector": [-6.77, -59.35, 12.33] + }, + "0.25": { + "vector": [-6.77, -54.97, 12.33] + }, + "0.375": { + "vector": [-6.77, -49.35, 12.33] + }, + "0.5": { + "vector": [-6.77, -38.72, 12.33] + }, + "0.6667": { + "pre": { + "vector": [-17.3164, -41.1079, 35.1114] + }, + "post": { + "vector": [-17.3164, -41.1079, 35.1114] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.6005, -58.8053, 33.9605] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-6.7675, -63.7224, 12.3301] + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, 50] + }, + "0.5": { + "vector": [0, 0, 10] + }, + "0.6667": { + "pre": { + "vector": [0, 0, 0.83] + }, + "post": { + "vector": [0, 0, 0.83] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 50] + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "vector": [0, 0, -40] + }, + "0.25": { + "vector": [0, 0, -11.25] + }, + "0.5": { + "vector": [0, 0, 12.5] + }, + "0.7083": { + "pre": { + "vector": [0, 0, 13.33] + }, + "post": { + "vector": [0, 0, 13.33] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -42.87] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -40] + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "vector": [0, 0, 17.5] + }, + "0.5": { + "vector": [0, 0, -17.5] + }, + "0.6667": { + "pre": { + "vector": [0, 0, -30.83] + }, + "post": { + "vector": [0, 0, -30.83] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 12.77] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 17.5] + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "vector": [0, 60, 0] + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "vector": [0, -60, 0] + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walktest": { + "loop": true, + "bones": { + "root": { + "position": { + "vector": [0, 0, "-q.anim_time*90*1.1"] + } + } + } + }, + "jump_start": { + "animation_length": 0.5, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [4.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.12, 29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.12, 19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.12, 19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -10, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 62.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -43.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -44.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -42.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -36.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 33.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.12, -29.22, -14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.12, -19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [22.12, -19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 10, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, 29.22, -14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-22.12, 19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.12, 19.22, -56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 10, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.12, -29.22, 14.36] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-22.12, -19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.12, -19.22, 56.86] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -10, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -62.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [57.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_loop": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, -9.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 30, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 30, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, -9.17] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 16.67] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 16.67] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [-2.5, -2.5, -5] + }, + "post": { + "vector": [-2.5, -2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 2.5, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 46.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 50.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -30, 9.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5.94] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -16.67] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -5.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.34] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 50] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.34] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30.31] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -50] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -30.31] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 8.61] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 30, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, 8.61] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "vector": [0, 0, -20.09] + }, + "0.0833": { + "vector": [0, 0, -22.5] + }, + "0.1667": { + "vector": [0, 0, -19.17] + }, + "0.5833": { + "pre": { + "vector": [0, 0, -2.5] + }, + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -20.09] + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 50.83] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 43.06] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 36.88] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 50.83] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -45.16] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -51.53] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45.16] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -30, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 19.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "vector": [0, 0, 22.5] + }, + "1.0": { + "vector": [0, 0, 19.17] + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -43.06] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -36.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -43.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 51.53] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 51.53] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_end": { + "animation_length": 0.625, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-8, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [6.54, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.28, 17.47, -16.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.72, 22.56, 6.64] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29.62] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 14.46, 12.92] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -4.94, -10.51] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 2.79, -27.37] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, 48.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -9.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -20.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, -27.05, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, -31.72, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -30.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0.28, -17.47, 16.24] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.72, -22.56, -6.64] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29.62] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -14.46, -12.92] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 4.94, 10.51] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -2.79, 27.37] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, 30, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-12.5, 30, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -14.69] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [10, -30, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-12.5, -30, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 14.69] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-22.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [9.37, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-22.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [27.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [9.37, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "hanging": { + "loop": true, + "animation_length": 2, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.88, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-6.88, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "vector": [35, 30, 57.5] + } + }, + "backRightKnee": { + "rotation": { + "vector": [0, 0, 12.5] + } + }, + "backRightLeg": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "backRightFoot": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 31.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 31.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "vector": [0, -49, 0] + } + }, + "backLeftThigh": { + "rotation": { + "vector": [35, -30, -57.5] + } + }, + "backLeftKnee": { + "rotation": { + "vector": [0, 0, -12.5] + } + }, + "backLeftLeg": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "backLeftFoot": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontLeftThigh": { + "rotation": { + "vector": [-35, 30, -57.5] + } + }, + "frontLeftKnee": { + "rotation": { + "vector": [0, 0, -12.5] + } + }, + "frontLeftLeg": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "frontLeftFoot": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontRightThigh": { + "rotation": { + "vector": [-35, -30, 57.5] + } + }, + "frontRightKnee": { + "rotation": { + "vector": [0, 0, 12.5] + } + }, + "frontRightLeg": { + "rotation": { + "vector": [0, 0, -45] + } + }, + "frontRightFoot": { + "rotation": { + "vector": [0, 0, 45] + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -31.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -35, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -31.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, 17.5, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "vector": [-42.5, 0, 0] + }, + "2.0": { + "vector": [-50, 0, 0] + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [59.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "vector": [60, 0, 0] + }, + "2.0": { + "vector": [59.37, 0, 0] + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -57.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.5, -17.5, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "vector": [-42.5, 0, 0] + }, + "2.0": { + "vector": [-50, 0, 0] + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [59.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "vector": [60, 0, 0] + }, + "2.0": { + "vector": [59.37, 0, 0] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 01241865..95d60f28 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -1,213 +1,122 @@ { "format_version": "1.8.0", "animations": { - "pose": { - "loop": true, - "bones": { - "Tentacle_1_Left": { - "rotation": { - "vector": [-30.4985, 19.4505, -51.4092] - }, - "position": { - "vector": [-2, 2, 0] - } - }, - "Tentacle_part_1_left": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "vector": [0, 0, 65] - }, - "position": { - "vector": [0, 4, 0] - } - }, - "Tentacle_1_Left2": { - "rotation": { - "vector": [-5.3981, 11.9127, -58.8139] - }, - "position": { - "vector": [0, 1.6, -3.4] - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [0, 4.2, 0] - } - }, - "Tentacle_1_Left3": { - "rotation": { - "vector": [12.2767, -21.7337, -37.5251] - }, - "position": { - "vector": [0, -1, -7] - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "vector": [0, 0, -80] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "vector": [0, 0, 72.5] - }, - "position": { - "vector": [1, 4, 0] - } - }, - "Tentacle_1_Left4": { - "rotation": { - "vector": [38.5673, -39.2521, -57.1302] - }, - "position": { - "vector": [-3, -3, -12] - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "vector": [0, 0, -72.5] - }, - "position": { - "vector": [-2, 2, 0] - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "vector": [0, 0, 75] - }, - "position": { - "vector": [1, 4, 0] - } - }, - "Tentacle_1_Right": { - "rotation": { - "vector": [-30.4985, -19.4505, 51.4092] - }, - "position": { - "vector": [2, 2, 0] - } - }, - "Tentacle_part_1_right": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "vector": [0, 0, -65] - }, - "position": { - "vector": [0, 4, 0] - } - }, - "Tentacle_1_Right2": { - "rotation": { - "vector": [-5.3981, -11.9127, 58.8139] - }, - "position": { - "vector": [0, 1.6, -3.4] - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [0, 4.2, 0] - } - }, - "Tentacle_1_Right3": { - "rotation": { - "vector": [12.2767, 21.7337, 37.5251] - }, - "position": { - "vector": [0, -1, -7] - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "vector": [0, 0, 80] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "vector": [0, 0, -72.5] - }, - "position": { - "vector": [-1, 4, 0] - } - }, - "Tentacle_1_Right4": { - "rotation": { - "vector": [38.5673, 39.2521, 57.1302] - }, - "position": { - "vector": [3, -3, -12] - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "vector": [0, 0, 72.5] - }, - "position": { - "vector": [2, 2, 0] - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "vector": [0, 0, -75] - }, - "position": { - "vector": [-1, 4, 0] - } - } - } - }, "idle": { "loop": true, - "animation_length": 2.5, + "animation_length": 4, "sound_effects": { "0.0": { "effect": "antarchy:kraken_flying_loop|0.45|1.0" } }, "bones": { - "bone": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { "rotation": { "0.0": { "post": { @@ -215,33 +124,19 @@ }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.0833": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + }, + "3.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 7, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { + "4.0": { "post": { "vector": [0, 0, 0] }, @@ -249,787 +144,1376 @@ } } }, - "Tentacle_1_Left": { + "l_hand": { "rotation": { "0.0": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.972, 35.0689, -6.2022] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-37.4694, 63.0682, -47.9037] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-31.9019, 16.8589, -55.9098] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -20.16] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2, 1.9, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -44.3] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 25.1] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [1.4426, 29.9685, 2.8862] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.1228, 29.2189, -14.3587] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [-19.2127, 22.3844, -42.5154] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, 21.74] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, 32.78] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3.0505, -16.4853, -16.207] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5.0124, -9.0942, -22.6429] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.3538, 0.7361, -18.3913] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.7831, -0.0666, 47.4376] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.0877, -0.2452, 40.1682] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { "post": { "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "1.7917": { + "1.25": { "post": { - "vector": [0, 0, 33.47] + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, 2.0532, 6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, -2.0532, -6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, 45.05451, 3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, -2.38933, -19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, -3.35803, 20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, 52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, "2.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, -52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-85, -10, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, -15, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-85, -10, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-2.61271, -47.32765, -14.82844] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, -45.05451, -3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, 2.38933, 19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, 3.35803, -20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { "post": { "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" } - }, - "position": { + } + }, + "center_tentacule_back": { + "rotation": { "0.0": { "post": { - "vector": [1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [1, 1.6, 0] + "vector": [90, 37.5, -90] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [1, 2.6, 0] + "vector": [89.99992, 1.25, -89.99992] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [90, 37.5, -90] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left4": { + "center_tentacule_back2": { "rotation": { "0.0": { "post": { - "vector": [51.756, -12.0106, -86.2494] + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 214, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 254, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 3, + "bones": { + "right_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [12.6649, -51.6428, -21.5544] + "vector": [1, 0.9, 0.8] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [34.0517, -47.4021, -39.7338] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.5": { "post": { - "vector": [51.756, -12.0106, -86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] + "vector": [1, 0.9, 0.8] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.0": { "post": { - "vector": [-3, -3, -12] + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left4": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -65] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 41.81] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.14] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.972, -35.0689, 6.2022] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-37.4694, -63.0682, 47.9037] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-31.9019, -16.8589, 55.9098] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 20.16] + "vector": [0, 0, -45] }, "lerp_mode": "catmullrom" }, @@ -1038,146 +1522,404 @@ "vector": [0, 0, -45] }, "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.2, 1.9, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "l_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 40] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 44.3] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, -25.1] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_arm2": { "rotation": { "0.0": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.5": { "post": { - "vector": [1.4426, -29.9685, -2.8862] + "vector": [0, 0, -32.08] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-7.1228, -29.2189, 14.3587] + "vector": [0, 0, -32.08] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "2.0": { "post": { - "vector": [-19.2127, -22.3844, 42.5154] + "vector": [0, 0, -12.08] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.375": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -19.58] }, "lerp_mode": "catmullrom" }, - "2.5": { + "3.0": { "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -12.08] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 57.5] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-4.67998, 1.06319, -5.55576] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 19.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { "post": { "vector": [0, 0, 15] }, @@ -1185,304 +1927,38 @@ }, "1.0": { "post": { - "vector": [0, 0, -25] + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "2.0": { "post": { - "vector": [0, 0, -21.74] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.375": { "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "3.0": { "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right2": { + "r_hand": { "rotation": { "0.0": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, -32.78] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3.0505, 16.4853, 16.207] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5.0124, 9.0942, 22.6429] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.3538, -0.7361, 18.3913] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.7831, 0.0666, -47.4376] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.0877, 0.2452, -40.1682] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { "post": { "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "1.7917": { - "post": { - "vector": [0, 0, -33.47] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-1, 1.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.6649, 51.6428, 21.5544] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.0517, 47.4021, 39.7338] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, "0.5": { "post": { "vector": [0, 0, 25] @@ -1491,2183 +1967,23 @@ }, "1.0": { "post": { - "vector": [0, 0, -37.5] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "1.7917": { - "post": { - "vector": [0, 0, -41.81] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.14] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Swipe": { - "loop": "hold_on_last_frame", - "animation_length": 1.5, - "bones": { - "bone": { - "rotation": { - "0.0": { + "2.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-34.387, 6.9319, -69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-91.887, 6.9319, -69.6654] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0.4848, -62.5683, 25.0151] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-14.4729, -36.208, 16.5374] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.63, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [8.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [8.33, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [23.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.33, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.0104, -17.5, 0.003] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.01, 143.59, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [42.5, 0, -22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-44.6896, 0, -16.9359] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [45, 0, 19.55] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [34.3081, -4.2439, 40.5865] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [22.2694, -1.4146, 49.4325] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [35, 0, -15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-22.3771, 2.3004, -8.4118] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [31.8803, 6.6782, 11.6893] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [24.056, -2.6619, 33.1066] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [19.3379, -1.1346, 26.2811] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-16.717, 4.2814, -82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-56.717, 4.2814, -82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [20.0257, -49.8387, -16.1244] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-6.4668, -43.5968, 25.4296] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [65, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-31.9581, -7.9792, 5.0872] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [32.5, 0, 2.2] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [22.6478, -10.6998, 38.4965] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [23.8456, -3.5666, 35.4099] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, -28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-42.3853, 2.1984, -28.1145] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [25.2579, 11.253, -8.0809] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [17.3767, -13.6298, 65.8393] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [22.3568, -4.96, 46.4461] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0.61719, 3.98477, 0.70711] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [18.9012, 0.2882, -86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-16.0988, 0.2882, -86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [55.6218, -58.8306, -36.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [54.5769, -73.2357, -21.3745] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2647, -0.0241, -24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [45.2647, -0.0241, -24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-26.5249, 9.8299, -1.1177] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [29.5168, 12.0389, 10.1054] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [23.6314, -1.333, 42.9303] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [24.3473, -1.0661, 42.2036] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [30, 0, -13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-45.3023, 10.583, -40.596] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.2418, 12.9773, -42.7247] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [8.471, 3.6937, 25.096] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [20.2777, 0.7506, 32.2833] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.62802, 4.31086, 0.82571] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [52.0766, -6.9543, -86.6052] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [32.0766, -6.9543, -86.6052] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [155.5716, -28.3508, -115.3908] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [42.5, 0, -19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [33.9673, -15.7385, 22.0006] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [37.0773, 6.0681, 2.5067] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [23.1855, 1.2713, 40.7477] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, -22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-19.5169, 21.1528, 25.6157] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-39.8998, -14.6899, -41.6051] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [11.1091, -2.8063, 28.3183] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-34.387, -6.9319, 69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1.887, -6.9319, 69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-28.8521, 2.4221, 65.9199] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-38.0082, -7.9924, 42.3701] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-27.5, 0, 22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [10.5951, 2.844, -40.0347] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [16.5726, -11.6128, 30.036] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-32.5, 0, 15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [5.8835, 19.3359, -38.2171] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [35.0705, 7.7922, 13.8451] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-16.717, -4.2814, 82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [8.283, -4.2814, 82.5286] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-27.8923, -5.38, 73.7252] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-27.5, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-0.362, -0.7761, -59.8325] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [2.5, 0, -2.2] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-12.5, 0, 28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [15.3135, 23.3225, -18.2818] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [34.7658, 15.6999, 1.9348] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-0.61719, 3.98477, 0.70711] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [18.9012, -0.2882, 86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [46.4012, -0.2882, 86.5243] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [6.4185, 4.437, 77.6781] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2647, 0.0241, 24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-22.2353, 0.0241, 24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-4.1109, -26.0011, -59.426] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-27.0398, -7.6047, -1.0063] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-20, 0, 13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [20.8611, 24.5649, -27.6929] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [45.5761, -6.7071, 28.1123] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-1.62802, 4.31086, 0.82571] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [52.0766, 6.9543, 86.6052] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [92.0766, 6.9543, 86.6052] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [28.3776, 14.786, 80.268] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-32.5, 0, 19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-28.3319, -20.0094, -32.3747] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-37.5, 0, -10.47] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-17.5, 0, 22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [1.7517, 22.0828, -41.7185] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [29.279, 14.6055, 4.1947] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 128.59, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 135, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Death": { - "loop": "hold_on_last_frame", - "animation_length": 3, - "bones": { - "bone": { - "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.3333": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 5.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 11.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 11.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, -35.85, 9] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-18.1105, 30.4684, -22.4887] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-13.1217, 24.4444, -8.3184] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-13.1217, 24.4444, -8.3184] - }, - "lerp_mode": "catmullrom" }, "2.375": { "post": { - "vector": [-10.88, -52.86, -65.95] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "2.75": { - "post": { - "vector": [0.3142, -19.3642, -144.0989] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-15.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [6.87, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + "3.0": { "post": { "vector": [0, 0, 0] }, @@ -3675,6361 +1991,745 @@ } } }, - "cranium_2": { + "r_hand2": { "rotation": { "0.0": { "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-9.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-9.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [13.33, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-11.67, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-11.67, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [38.33, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-15.01, 0, 0] + "vector": [-4.34, -2.05, -6.91] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-15.01, 0, 0] + "vector": [-4.73087, 0.80647, 27.979] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-20.01, 0, 0] + "vector": [-4.73087, 0.80647, 27.979] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "2.0": { "post": { - "vector": [-20.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [57.49, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-65.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [49.35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [49.35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -7.95] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -12.95] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -12.95] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [5.379, -3.7668, 37.9263] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -42.95] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 39.78] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10.22] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -10.22] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 23.11] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -20.22] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [8.6844, -33.6228, -48.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [11.0451, -16.4772, -144.5351] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -12.8] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 29.7] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -37.8] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 44.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -15.61] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -15.61] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 81.89] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -28.11] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [38.5341, -58.3709, -59.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [21.9469, -4.3657, -125.2582] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2452, -0.1027, -7.33] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2593, -0.0585, -17.33] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0.2593, -0.0585, -17.33] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0.2593, -0.0585, 27.67] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0.2655, -0.0125, -27.33] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 36.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -23.26] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -23.26] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 51.74] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -38.26] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [17.1089, -62.8324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [50.2054, -25.7109, -125.5789] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -2.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -14.53] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -14.53] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 20.47] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -47.03] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 69.62] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -20.38] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -20.38] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 27.12] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -32.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-18.1105, -30.4684, 22.4887] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-13.1217, -24.4444, 8.3184] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-13.1217, -24.4444, 8.3184] + "vector": [-4.42508, -1.85893, -4.41586] }, "lerp_mode": "catmullrom" }, "2.375": { "post": { - "vector": [-10.88, 52.86, 65.95] + "vector": [-4.67998, -1.06319, 5.55576] }, "lerp_mode": "catmullrom" }, - "2.75": { + "3.0": { "post": { - "vector": [0.3142, 19.3642, 144.0989] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] + "vector": [-4.42508, -1.85893, -4.41586] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right": { + "r_hand_tip": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -52.05] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 7.95] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 12.95] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "2.0": { "post": { - "vector": [0, 0, 12.95] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, - "2.25": { + "2.375": { "post": { - "vector": [5.379, 3.7668, -37.9263] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, - "2.75": { + "3.0": { "post": { - "vector": [0, 0, 42.95] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "r_tentacule": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -22.28] + "vector": [-26.56505, 52.23876, 39.23152] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -39.78] + "vector": [-37.45372, 62.96598, 59.31794] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.00134, -3.21967, 8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.04258, 58.57824, -52.34365] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 10.22] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 10.22] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -23.11] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 20.22] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] + "vector": [34.04258, 58.57824, -52.34365] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_back_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [-20.47, -21.72, 45.38] + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-6.3156, -28.8772, 13.0398] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-6.3156, -28.8772, 13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-6.3156, -28.8772, 13.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [8.6844, 33.6228, 48.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [11.0451, 16.4772, 144.5351] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "l_back_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -32.2] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 12.8] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -29.7] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 37.8] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -44.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 15.61] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 15.61] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -81.89] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 28.11] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [38.5341, 58.3709, 59.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [21.9469, 4.3657, 125.2582] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2452, 0.1027, 7.33] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2593, 0.0585, 17.33] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0.2593, 0.0585, 17.33] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0.2593, 0.0585, -27.67] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0.2655, 0.0125, 27.33] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -36.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 23.26] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 23.26] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -51.74] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 38.26] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [17.1089, 62.8324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [50.2054, 25.7109, 125.5789] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 14.53] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 14.53] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -20.47] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 47.03] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -69.62] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 20.38] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 20.38] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -27.12] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 32.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Hit": { - "loop": "hold_on_last_frame", - "animation_length": 1.1667, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [7.2195, -1.7113, -1.2114] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [7.2195, -1.7113, -1.2114] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 3.15, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 3.15, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-16.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-16.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-39.42, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [4.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-3.79, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [13.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-4.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [20.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-10.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 0.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, -1.6] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-45.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [34.35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-24.95, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-26.5651, -14.4776, 25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-26.5651, -14.4776, 25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-20, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-20, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-12.4594, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [10.5473, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [10.5473, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-29.4527, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-35, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-35, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-19.2707, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [43.0772, -23.9366, -75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [43.0772, -23.9366, -75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.6953, -12.2418, -54.0288] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-24.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-24.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [50.7096, -12.3788, 12.5062] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [20, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-32.1005, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [62.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [62.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.3229, -26.3671, -66.6121] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [37.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-15, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.5, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.7798, -0.3946, 54.6138] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-16.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-16.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-39.42, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-26.5651, 14.4776, -25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-26.5651, 14.4776, -25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-20, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-20, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-12.4594, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [10.5473, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [10.5473, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-29.4527, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-35, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-35, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-19.2707, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [43.0772, 23.9366, 75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [43.0772, 23.9366, 75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.6953, 12.2418, 54.0288] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-24.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-24.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [50.7096, 12.3788, -12.5062] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [20, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-32.1005, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [62.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [62.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.3229, 26.3671, 66.6121] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [37.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-15, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.5, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.7798, 0.3946, -54.6138] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Attack": { - "loop": "hold_on_last_frame", - "animation_length": 2, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.51, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [2.26, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -0.00052, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0.12879, -0.99167] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, 54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.6145, -42.6621, -111.0226] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [43.8767, -58.8301, -144.2998] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-74.2354, -29.794, -21.0171] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.6196, 12.6219, 115.8661] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 72.2] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 54.39] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 104.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, -54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.6145, 42.6621, 111.0226] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [43.8767, 58.8301, 144.2998] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-86.4636, 33.1995, -2.147] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.6196, -12.6219, -115.8661] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -54.39] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -121.89] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Grab": { - "loop": "hold_on_last_frame", - "animation_length": 2, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [24.9072, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [24.0533, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [24.9072, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.51, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [2.26, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -0.00052, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0.12879, -0.99167] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, 54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [9.9627, 0.8672, 49.6256] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [20.9749, -2.1054, 48.508] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [9.9627, 0.8672, 49.6256] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [22.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-26.0219, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [22.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-20.47, -75.78, -107.88] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-72.8595, -38.6597, -29.8465] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.8] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -43.11] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 74.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [24.9072, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [24.0533, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [24.9072, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, -54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [9.9627, -0.8672, -49.6256] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [20.9749, 2.1054, -48.508] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [9.9627, -0.8672, -49.6256] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [22.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-26.0219, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [22.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-20.47, 75.78, 107.88] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-72.8595, 38.6597, 29.8465] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.8] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 43.11] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -74.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "idle2": { - "loop": true, - "animation_length": 0.0083, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-8.972, 35.0689, -6.2022] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20.16] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -44.3] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [1.4426, 29.9685, 2.8862] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { "post": { "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "3.0": { "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] + "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left2": { + "l_back_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -60] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.3, 1, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1.3, 1, 0] + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left3": { + "l_back_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [3.0505, -16.4853, -16.207] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] + "vector": [0, 0, -20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, -1, -7] + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left3": { + "l_back_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0.3538, 0.7361, -18.3913] + "vector": [0, 0, 30] }, "lerp_mode": "catmullrom" }, - "0.0083": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { + "0.5": { "post": { "vector": [0, 0, -27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 1.6, 0] + "vector": [0, 0, -27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [1, 2.6, 0] + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left4": { + "r_back_tentacule": { "rotation": { "0.0": { "post": { - "vector": [12.6649, -51.6428, -21.5544] + "vector": [20.94102, -49.21053, 30.36119] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [51.756, -12.0106, -86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] + "vector": [34.04258, -58.57824, 52.34365] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [-3, -3, -12] + "vector": [34.04258, -58.57824, 52.34365] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left4": { + "r_back_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -25] + "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] + "vector": [0, 0, 35] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [-2, 2, 0] + "vector": [0, 0, 35] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left4": { + "r_back_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -37.14] + "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right": { + "r_back_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [-8.972, -35.0689, 6.2022] + "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] + "vector": [0, 0, 30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [2, 2, 0] + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right": { + "r_back_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 20.16] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "r_back_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 44.3] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, 27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "center_tentacule": { "rotation": { "0.0": { "post": { - "vector": [1.4426, -29.9685, -2.8862] + "vector": [-85, -10, -90] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [-88.86743, -49.96822, -94.19588] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { "rotation": { "0.0": { "post": { @@ -10037,219 +2737,437 @@ }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, -22.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right2": { + "center_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 60] + "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1.3, 1, 0] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [-1.3, 1, 0] + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right3": { + "l_tentacule": { "rotation": { "0.0": { "post": { - "vector": [3.0505, 16.4853, 16.207] + "vector": [-26.56505, -52.23876, -39.23152] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, -1, -7] + "vector": [-37.45372, -62.96598, -59.31794] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right3": { + "l_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [0.3538, -0.7361, 18.3913] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.375": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right3": { + "l_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 27.5] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 1.6, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [-1, 2.6, 0] + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right4": { + "l_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [12.6649, 51.6428, 21.5544] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [3, -3, -12] + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right4": { + "l_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 25] + "vector": [0.28, 3.36, -20.79] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [1.41335, 3.06141, -0.76044] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.375": { "post": { - "vector": [2, 2, 0] + "vector": [1.00134, 3.21967, -8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, 3.06141, -0.76044] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right4": { + "l_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 37.14] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [0, 0, 42.5] + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 37.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [90, 42.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [90, 50, -90] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [90, 50, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.3, 0, 0] }, "lerp_mode": "catmullrom" } @@ -10257,13 +3175,111 @@ "position": { "0.0": { "post": { - "vector": [-1, 2, 0] + "vector": [0, 218.48, 0] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-1, 2, 0] + "vector": [0, 179.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 120.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 41.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -36.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } @@ -10271,783 +3287,1641 @@ } } }, - "swim": { + "swing_left": { "loop": true, - "animation_length": 1, - "sound_effects": { - "0.0": { - "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.0" - } - }, + "animation_length": 2, "bones": { - "bone": { - "rotation": { - "vector": [42.5, 0, 0] - } - }, - "Tentacle_1_Left": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [17.5366, 21.95, -21.3652] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.375": { "post": { - "vector": [26.7391, 11.3252, -6.8224] + "vector": [45.72113, 14.60559, -31.31465] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.8333": { "post": { - "vector": [27.4006, 8.1389, -2.9124] + "vector": [-63.96509, -9.93654, -27.61842] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [19.1774, 23.3701, -23.595] + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.4167": { "post": { - "vector": [17.5366, 21.95, -21.3652] + "vector": [22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } }, - "position": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "l_arm2": { + "rotation": { "0.0": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.4583": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [22.5, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" } } }, - "cranium": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [-17.5628, -4.768, 1.507] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-17.5628, 4.768, -1.507] + "vector": [27.5, 0, 5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [-17.5628, -4.768, 1.507] + "vector": [-40, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" } } }, - "cranium_2": { + "l_arm4": { "rotation": { "0.0": { "post": { - "vector": [0, -12.5, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [0, 12.5, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, -12.5, 0] + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "cranium_3": { + "l_hand": { "rotation": { "0.0": { "post": { - "vector": [0, -10, 0] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5833": { "post": { - "vector": [0, 10, 0] + "vector": [20, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, -10, 0] + "vector": [-27.5, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" } } }, - "head": { + "l_hand2": { "rotation": { "0.0": { "post": { - "vector": [-35, 0, 0] + "vector": [-4.34, 2.05, 6.91] }, "lerp_mode": "catmullrom" }, - "0.5": { + "2.0": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.0": { "post": { - "vector": [-35, 0, 0] + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swing_right": { + "loop": true, + "animation_length": 2, + "bones": { + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45.72113, -14.60559, 31.31465] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-63.96509, 9.93654, 27.61842] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } }, - "position": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "r_arm2": { + "rotation": { "0.0": { "post": { - "vector": [0, 8.60365, -12.28728] + "vector": [0, 0, -0.42] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.4583": { "post": { - "vector": [0, 9.17341, -11.8885] + "vector": [22.5, 0, -0.42] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, 8.60365, -12.28728] + "vector": [-15, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -0.42] }, "lerp_mode": "catmullrom" } } }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.5, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "grab": { + "animation_length": 3, + "bones": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [65.28208, 28.06275, -9.17543] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [65.28, 28.06, -9.18] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-64.46949, -11.31255, -22.85254] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-64.47, -11.31, -22.85] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [39.18982, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [39.19, 7.98, 24.59] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.59061, 6.6782, 31.88034] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-8.52, 9.18, 46.81] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.81406, 8.27617, 59.61272] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-2.9, 9.12, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-14.61, 14.29, 71.92] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 3, + "bones": { "mouth": { "rotation": { "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { "post": { "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { + "2.5": { "post": { "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" }, - "0.25": { + "3.0": { "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left": { + "jaw": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -32.5] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.5": { "post": { - "vector": [0, 0, -15] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left2": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [55.0366, 21.95, -21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [56.7391, 11.3252, -6.8224] + "vector": [0, 0, -102.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [57.4006, 8.1389, -2.9124] + "vector": [0, 0, -55] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [56.6774, 23.3701, -23.595] + "vector": [0, 0, -102.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [55.0366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [3.48755, 15.39547, -10.20994] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left2": { + "l_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.2917": { "post": { - "vector": [0, 0, 12.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -17.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left2": { + "l_arm2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.375": { "post": { - "vector": [0, 0, 20] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -32.5] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, -15] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left3": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [22.5366, 21.95, -21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.4583": { "post": { - "vector": [34.2391, 11.3252, -6.8224] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [34.9006, 8.1389, -2.9124] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [26.6774, 23.3701, -23.595] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [22.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left3": { + "l_arm4": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.5417": { "post": { - "vector": [0, 0, 20] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -32.5] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, -15] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left3": { + "l_hand": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [37.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [41.7391, 11.3252, -6.8224] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [44.9006, 8.1389, -2.9124] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [41.6774, 23.3701, -23.595] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [37.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [26.7391, -11.3252, 6.8224] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [27.4006, -8.1389, 2.9124] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [19.1774, -23.3701, 23.595] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { + "0.625": { "post": { "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.0417": { "post": { - "vector": [0, 0, 15] + "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.0": { "post": { - "vector": [0, 0, -52.5] + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_hand2": { "rotation": { "0.0": { "post": { - "vector": [55.0366, -21.95, 21.3652] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [56.7391, -11.3252, 6.8224] + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [57.4006, -8.1389, 2.9124] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.7083": { "post": { - "vector": [56.6774, -23.3701, 23.595] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.5": { "post": { - "vector": [55.0366, -21.95, 21.3652] + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -11055,325 +4929,613 @@ "position": { "0.0": { "post": { - "vector": [-3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 17.5] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [0, 0, -37.5] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.0417": { "post": { - "vector": [0, 0, -20] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0833": { "post": { - "vector": [0, 0, 32.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.125": { "post": { - "vector": [0, 0, 15] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.1667": { "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5366, -21.95, 21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.2083": { "post": { - "vector": [34.2391, -11.3252, 6.8224] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.25": { "post": { - "vector": [34.9006, -8.1389, 2.9124] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.2917": { "post": { - "vector": [26.6774, -23.3701, 23.595] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.3333": { "post": { - "vector": [22.5366, -21.95, 21.3652] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.2917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { "position": { "0.0": { "post": { - "vector": [-1.33386, 10.12204, -22.62896] + "vector": [0, 218.48, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "3.0": { "post": { - "vector": [-1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [37.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [41.7391, -11.3252, 6.8224] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [44.9006, -8.1389, 2.9124] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [41.6774, -23.3701, 23.595] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [37.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [0, 218.48, 0] }, "lerp_mode": "catmullrom" } @@ -11382,4 +5544,4 @@ } } } -} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json b/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json new file mode 100644 index 00000000..8f8c3f13 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json @@ -0,0 +1,6934 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, -16.44, 8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, 16.6, -9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackland": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [5, 0, 0] + }, + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5016, -3.2493, -22.6194] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -24.75] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackair": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 3, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-22.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-30.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-36.0482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/nightmare.animation.json b/common/src/main/resources/assets/antarchy/animations/nightmare.animation.json index 83198889..13782188 100644 --- a/common/src/main/resources/assets/antarchy/animations/nightmare.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/nightmare.animation.json @@ -1,55 +1,33 @@ { "format_version": "1.8.0", "animations": { - "Idle": { + "idle": { "loop": true, - "animation_length": 2, + "animation_length": 4, "bones": { "head": { "rotation": { "0.0": { "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [26.51036, -4.3678, 14.36222] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [37.5, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "3.0": { "post": { - "vector": [12.5, 0, 0] + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -59,19 +37,19 @@ "rotation": { "0.0": { "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [15, 0, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -81,19 +59,25 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-15.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.75": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-17, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "2.75": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-13, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -101,19 +85,25 @@ "position": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -1, 6] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 6, 0] + "vector": [0, -3, 6] }, "lerp_mode": "catmullrom" }, - "2.0": { + "3.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 1, 6] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 6] }, "lerp_mode": "catmullrom" } @@ -123,13 +113,51 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, -20, 0] + "vector": [-20, -17.5, -5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { - "vector": [-27.5, -20, 0] + "vector": [-32.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, -17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" } @@ -139,13 +167,25 @@ "rotation": { "0.0": { "post": { - "vector": [27.5, 0, 0] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { - "vector": [27.5, 0, 0] + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -153,26 +193,26 @@ }, "L_foot": { "rotation": { - "vector": [0, 0, 0] + "vector": [-20, 0, 5] } }, "Tail": { "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [52.5, 0, 0] + "vector": [7.5, -15, 0] }, "lerp_mode": "catmullrom" }, "2.0": { "post": { - "vector": [20, 0, 0] + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -15, 0] }, "lerp_mode": "catmullrom" } @@ -182,19 +222,25 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] + "vector": [-7.5, -4.69, 1.87] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.625": { "post": { - "vector": [47.5, 0, 0] + "vector": [-7.5, -12.5, 5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "2.625": { "post": { - "vector": [20, 0, 0] + "vector": [-7.5, 12.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, -4.69, 1.87] }, "lerp_mode": "catmullrom" } @@ -204,19 +250,25 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] + "vector": [7.5, -0.83, 0.42] }, "lerp_mode": "catmullrom" }, - "1.375": { + "0.9167": { "post": { - "vector": [62.5, 0, 0] + "vector": [7.5, -10, 5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "2.9167": { "post": { - "vector": [20, 0, 0] + "vector": [7.5, 10, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, -0.83, 0.42] }, "lerp_mode": "catmullrom" } @@ -226,13 +278,51 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 20, 0] + "vector": [-20, 17.5, 5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { - "vector": [-27.5, 20, 0] + "vector": [-32.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-17.5, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" } @@ -242,13 +332,25 @@ "rotation": { "0.0": { "post": { - "vector": [27.5, 0, 0] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { - "vector": [27.5, 0, 0] + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -256,60 +358,32 @@ }, "R_foot": { "rotation": { - "vector": [0, 0, 0] + "vector": [-20, 0, -5] } }, "L_Wing": { "rotation": { "0.0": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [12.5, 17.5, -5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.25": { "post": { - "vector": [0.46156, -0.55488, -18.37854] + "vector": [12.5, 30, -5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "3.25": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [12.5, 10, -5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "4.0": { "post": { - "vector": [0.74537, -21.98229, 13.2218] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.74537, -21.98229, 13.2218] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [12.5, 17.5, -5] }, "lerp_mode": "catmullrom" } @@ -319,31 +393,25 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [-17.5, -30, 27.5] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.5": { "post": { - "vector": [-6.0329, -14.68845, 34.05029] + "vector": [-17.5, -42.5, 32.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.5": { "post": { - "vector": [-6.0329, -14.68845, 34.05029] + "vector": [-17.5, -17.5, 22.5] }, "lerp_mode": "catmullrom" }, - "1.4583": { + "4.0": { "post": { - "vector": [-7.11718, -4.30139, 21.55449] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [-17.5, -30, 27.5] }, "lerp_mode": "catmullrom" } @@ -353,47 +421,25 @@ "rotation": { "0.0": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] + "vector": [12.5, -17.5, 5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.25": { "post": { - "vector": [0.46156, 0.55488, 18.37854] + "vector": [12.5, -30, 5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "3.25": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [12.5, -10, 5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "4.0": { "post": { - "vector": [0.74537, 21.98229, -13.2218] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [12.5, -17.5, 5] }, "lerp_mode": "catmullrom" } @@ -403,41 +449,81 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [-17.5, 30, -27.5] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.5": { "post": { - "vector": [-6.0329, 14.68845, -34.05029] + "vector": [-17.5, 42.5, -32.5] }, "lerp_mode": "catmullrom" }, - "1.4583": { + "2.5": { "post": { - "vector": [-7.11718, 4.30139, -21.55449] + "vector": [-17.5, 17.5, -22.5] }, "lerp_mode": "catmullrom" }, - "2.0": { + "4.0": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [-17.5, 30, -27.5] }, "lerp_mode": "catmullrom" } } }, - "Nightmare": { + "body": { "position": { "0.0": { "post": { - "vector": [0, -0.5, -12] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { - "vector": [0, -0.5, -12] + "vector": [0, -0.75, 1.75] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0, 0, -0.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" } @@ -447,47 +533,49 @@ }, "walk": { "loop": true, - "animation_length": 1.5, + "animation_length": 2, "bones": { "head": { "rotation": { "0.0": { "post": { - "vector": [22.5, 0, 0] + "vector": [15, 2.5, -5] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.375": { "post": { - "vector": [12.11233, -2.54924, 22.28582] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.75": { "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] + "vector": [15, -2.5, 5] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "1.0": { "post": { - "vector": [25, 0, 0] + "vector": [15, -2.5, 5] }, "lerp_mode": "catmullrom" }, - "1.5": { + "1.375": { "post": { - "vector": [12.5, 0, 0] + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [15, 2.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 2.5, -5] }, "lerp_mode": "catmullrom" } @@ -496,22 +584,55 @@ "neck": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.375": { + "pre": { + "vector": [0, 7.5, 0] + }, "post": { - "vector": [15, 0, 0] + "vector": [0, 7.5, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.6667": { "post": { - "vector": [2.05239, 2.55868, -19.8423] + "vector": [-5, 3.87, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.9167": { "post": { - "vector": [15, 0, 0] + "vector": [8.73, -0.63, 0] }, "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.375": { + "pre": { + "vector": [0, -7.5, 0] + }, + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-5, -3.87, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [8.73, 0.63, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 0, 0] } } }, @@ -519,201 +640,313 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.0417": { + "vector": [-2.5, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0.68, -2.5, 0] + }, "post": { - "vector": [-7.5, 0, 0] + "vector": [0.68, -2.5, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.1667": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-0.99, -4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.44, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "vector": [-2.5, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0.68, 2.5, 0] + }, + "post": { + "vector": [0.68, 2.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.99, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-2.44, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [2.5, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [-4.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { "0.0": { + "vector": [0, 2, 5] + }, + "0.0833": { + "vector": [0, -1, 4.5] + }, + "0.1667": { + "vector": [0, 4, 4.25] + }, + "0.25": { + "vector": [0, 1, 4.75] + }, + "0.375": { + "vector": [0, 2, 6.5] + }, + "0.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, "post": { - "vector": [0, 0, 0] + "vector": [0, 3.83, 9] }, "lerp_mode": "catmullrom" }, - "0.4583": { + "0.75": { "post": { - "vector": [0, -2.97, 7] + "vector": [0, 7, 9] }, "lerp_mode": "catmullrom" }, - "0.7917": { + "0.9167": { "post": { - "vector": [0, -5, 0] + "vector": [0, 7, 7] }, "lerp_mode": "catmullrom" }, + "1.0": { + "vector": [0, 2, 5] + }, + "1.0833": { + "vector": [0, -1, 4.5] + }, + "1.1667": { + "vector": [0, 4, 4.25] + }, "1.25": { + "vector": [0, 1, 4.75] + }, + "1.375": { + "vector": [0, 2, 6.5] + }, + "1.5417": { + "pre": { + "vector": [0, 3.83, 9] + }, "post": { - "vector": [0, -1.46, 7.2] + "vector": [0, 3.83, 9] }, "lerp_mode": "catmullrom" }, - "1.5": { + "1.75": { "post": { - "vector": [0, 0, 0] + "vector": [0, 7, 9] }, "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 7, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, 2, 5] } } }, "L_Tight": { "rotation": { "0.0": { + "vector": [20, -5, 0] + }, + "0.5": { + "pre": { + "vector": [15.94, -5, 0] + }, "post": { - "vector": [22.73, -1.53, -1.87] + "vector": [15.94, -5, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { - "post": { - "vector": [-27.5, -2.5, 0] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [-17.5, -5, 0] }, - "1.3333": { - "post": { - "vector": [27.52563, -1.43364, -2.04831] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [22.73, -1.53, -1.87] - }, - "lerp_mode": "catmullrom" + "2.0": { + "vector": [20, -5, 0] } }, "position": { "0.0": { - "vector": [0, 8.96, 0] + "vector": [0, -3.75, 5] }, - "0.2083": { - "vector": [0, 4, 0] - }, - "0.375": { - "vector": [0, 2.46, -7] + "0.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" }, "0.75": { - "vector": [0, -1, 0] + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" }, - "1.125": { - "vector": [0, -2.16, 5] + "0.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" }, - "1.2917": { - "vector": [0, -2.67, 2] + "1.0": { + "vector": [0, -0.25, -6] + }, + "1.0417": { + "vector": [0, -2.14, -5.54] + }, + "1.0833": { + "vector": [0, 0.96, -5.08] + }, + "1.1667": { + "vector": [0, -0.93, -4.12] + }, + "1.25": { + "vector": [0, -0.12, -3.25] + }, + "1.375": { + "vector": [0, 0.03, -1.87] }, "1.5": { - "vector": [0, 8.96, 0] + "vector": [0, -0.33, -0.5] + }, + "1.625": { + "vector": [0, -0.93, 0.88] + }, + "1.75": { + "vector": [0, -2.04, 2.25] + }, + "1.875": { + "vector": [0, -2.64, 3.63] + }, + "2.0": { + "vector": [0, -3.75, 5] } } }, "L_leg": { "rotation": { "0.0": { + "vector": [22.5, 0, 0] + }, + "0.5": { + "pre": { + "vector": [62.5, 0, 0] + }, "post": { - "vector": [-8.01, -0.27, 1.37] + "vector": [62.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { - "post": { - "vector": [7.51392, -0.26267, 0.75154] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [7.5, 0, 0] }, - "0.75": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [-7.47683, -0.25415, 1.35195] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-8.01, -0.27, 1.37] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.1667": { - "vector": [0, 0, 0] - }, - "0.4167": { - "vector": [0, 0, -3] - }, - "0.75": { - "vector": [0, 0, 0] - }, - "1.5": { - "vector": [0, 0, 0] + "2.0": { + "vector": [22.5, 0, 0] } } }, "L_foot": { "rotation": { "0.0": { + "vector": [-42.5, 0, 0] + }, + "0.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, "post": { - "vector": [0.72, 0.04, -0.08] + "vector": [-37.19, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.0417": { + "0.5833": { "post": { - "vector": [4.99419, 0.03493, -0.24227] + "vector": [-28.85, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.7917": { "post": { - "vector": [29.97207, 0.33518, -1.18002] + "vector": [-20.35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.9167": { "post": { - "vector": [0, 0, 0] + "vector": [-20.35, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0833": { - "post": { - "vector": [-17.48784, 0.09822, 0.63249] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [10, 0, 0] }, - "1.25": { - "post": { - "vector": [-24.29925, 0.21401, 0.89555] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.72, 0.04, -0.08] - }, - "lerp_mode": "catmullrom" + "2.0": { + "vector": [-42.5, 0, 0] } } }, @@ -721,19 +954,19 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] + "vector": [0, -12.5, 0] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "1.0": { "post": { - "vector": [37.5, 0, 0] + "vector": [0, 12.5, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "2.0": { "post": { - "vector": [20, 0, 0] + "vector": [0, -12.5, 0] }, "lerp_mode": "catmullrom" } @@ -743,19 +976,25 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] + "vector": [0, -3.33, 0] }, "lerp_mode": "catmullrom" }, - "0.7917": { + "0.3333": { "post": { - "vector": [42.5, 0, 0] + "vector": [0, -10, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { + "1.3333": { "post": { - "vector": [20, 0, 0] + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.33, 0] }, "lerp_mode": "catmullrom" } @@ -765,19 +1004,25 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0833": { + "0.5": { "post": { - "vector": [65, 0, 0] + "vector": [0, -10, 0] }, "lerp_mode": "catmullrom" }, "1.5": { "post": { - "vector": [20, 0, 0] + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -786,127 +1031,143 @@ "R_Tight": { "rotation": { "0.0": { - "post": { - "vector": [-27.5, 2.5, 0] - }, - "lerp_mode": "catmullrom" + "vector": [-17.5, 5, 0] }, - "0.5833": { - "post": { - "vector": [27.52563, 1.43364, 2.04831] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [20, 5, 0] }, "1.5": { + "pre": { + "vector": [15.94, 5, 0] + }, "post": { - "vector": [-27.5, 2.5, 0] + "vector": [15.94, 5, 0] }, "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [-17.5, 5, 0] } }, "position": { "0.0": { - "vector": [0, -1, 0] + "vector": [0, -0.25, -6] + }, + "0.0417": { + "vector": [0, -2.14, -5.54] + }, + "0.0833": { + "vector": [0, 0.96, -5.08] + }, + "0.1667": { + "vector": [0, -0.93, -4.12] + }, + "0.25": { + "vector": [0, -0.12, -3.25] }, "0.375": { - "vector": [0, -2.16, 5] + "vector": [0, 0.03, -1.87] }, - "0.5417": { - "vector": [0, -2.67, 2] + "0.5": { + "vector": [0, -0.33, -0.5] + }, + "0.625": { + "vector": [0, -0.93, 0.88] }, "0.75": { - "vector": [0, 8.96, 0] + "vector": [0, -2.04, 2.25] }, - "0.9583": { - "vector": [0, 4, 0] + "0.875": { + "vector": [0, -2.64, 3.63] }, - "1.125": { - "vector": [0, 2.46, -7] + "1.0": { + "vector": [0, -3.75, 5] }, - "1.5": { - "vector": [0, -1, 0] + "1.2917": { + "pre": { + "vector": [0, -1.73, 2.79] + }, + "post": { + "vector": [0, -1.73, 2.79] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 4.96, -5.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [0, -0.25, -6] } } }, "R_leg": { "rotation": { "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [7.5, 0, 0] }, - "0.7083": { - "post": { - "vector": [-7.47683, 0.25415, -1.35195] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [7.51392, 0.26267, -0.75154] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [22.5, 0, 0] }, "1.5": { + "pre": { + "vector": [62.5, 0, 0] + }, "post": { - "vector": [27.5, 0, 0] + "vector": [62.5, 0, 0] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] }, - "0.9167": { - "vector": [0, 0, 0] - }, - "1.1667": { - "vector": [0, 0, -3] - }, - "1.5": { - "vector": [0, 0, 0] + "2.0": { + "vector": [7.5, 0, 0] } } }, "R_foot": { "rotation": { "0.0": { + "vector": [10, 0, 0] + }, + "1.0": { + "vector": [-42.5, 0, 0] + }, + "1.2917": { + "pre": { + "vector": [-37.19, 0, 0] + }, "post": { - "vector": [0, 0, 0] + "vector": [-37.19, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "1.5833": { "post": { - "vector": [-17.48784, -0.09822, -0.63249] + "vector": [-28.85, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.7917": { "post": { - "vector": [-24.29925, -0.21401, -0.89555] + "vector": [-20.35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7917": { + "1.9167": { "post": { - "vector": [4.99419, -0.03493, 0.24227] + "vector": [-20.35, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.1667": { - "post": { - "vector": [29.97207, -0.33518, 1.18002] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "2.0": { + "vector": [10, 0, 0] } } }, @@ -914,35 +1175,31 @@ "rotation": { "0.0": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [12.5, 5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 15, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 30, -5] }, "lerp_mode": "catmullrom" }, "1.5": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [10, 15, 5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0.86484, -13.40888, -17.38498] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [12.5, 5, -5] }, "lerp_mode": "catmullrom" } @@ -952,19 +1209,43 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [-1.88, -21.88, 21.26] }, "lerp_mode": "catmullrom" }, - "1.1667": { + "0.2083": { "post": { - "vector": [-8.93842, -7.56235, 18.72187] + "vector": [0, -20, 17.5] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.7083": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -20, 21.67] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, -20, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, -25, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1.88, -21.88, 21.26] }, "lerp_mode": "catmullrom" } @@ -974,35 +1255,31 @@ "rotation": { "0.0": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] + "vector": [12.5, -30, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -15, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -5, 5] }, "lerp_mode": "catmullrom" }, "1.5": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [10, -15, -5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0.86484, 13.40888, 17.38498] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [12.5, -30, 5] }, "lerp_mode": "catmullrom" } @@ -1012,35 +1289,71 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 20, -21.67] }, "lerp_mode": "catmullrom" }, - "1.1667": { + "0.2083": { "post": { - "vector": [-8.93842, 7.56235, -18.72187] + "vector": [0, 20, -17.5] }, "lerp_mode": "catmullrom" }, - "1.5": { + "0.7083": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 20, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-5, 25, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 20, -21.67] }, "lerp_mode": "catmullrom" } } }, - "Nightmare": { - "position": { + "jaw": { + "rotation": { "0.0": { "post": { - "vector": [0, -0.5, -12] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, "1.5": { "post": { - "vector": [0, -0.5, -12] + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1050,186 +1363,9 @@ }, "fly": { "loop": true, - "animation_length": 0.5, + "animation_length": 1, "bones": { "head": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [30.91957, -11.60656, -25.46723] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.25": { - "vector": [31.67477, -7.67669, -1.77087] - }, - "0.5": { - "vector": [0, 0, 0] - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [30.22742, -9.21817, 10.86011] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [82.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_foot": { - "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [117.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.5": { - "vector": [12.5, 0, 0] - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail3": { "rotation": { "0.0": { "post": { @@ -1243,312 +1379,13 @@ }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { + "0.5417": { "post": { "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [82.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_foot": { - "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [117.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-9.14537, 13.83447, -66.78912] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-6.26261, -12.2403, 54.06134] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-9.14537, 13.83447, -66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, 3.17814, -14.63362] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-11.14442, -15.99543, 50.01072] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.32406, 3.17814, -14.63362] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.62155, 6.14718, -24.27788] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10.3696, -11.36311, 31.32523] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.45513, -4.44338, 16.94234] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1.62155, 6.14718, -24.27788] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-9.14537, -13.83447, 66.78912] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-6.26261, 12.2403, -54.06134] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-9.14537, -13.83447, 66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-11.14442, 15.99543, -50.01072] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.62155, -6.14718, 24.27788] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10.3696, 11.36311, -31.32523] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-0.45513, 4.44338, -16.94234] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1.62155, -6.14718, 24.27788] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Nightmare": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 27, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "fly_attack": { - "animation_length": 0.75, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [73.33739, -3.83835, -0.88544] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [73.33739, -3.83835, -0.88544] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-2.91489, -1.67928, -0.38738] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { + "1.0": { "post": { "vector": [0, 0, 0] }, @@ -1560,77 +1397,31 @@ "rotation": { "0.0": { "post": { - "vector": [7.5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.2083": { "post": { - "vector": [-13.32374, -7.77783, 9.16322] + "vector": [10, 0, -2.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.4583": { "post": { - "vector": [7.26308, -7.90227, 9.30983] + "vector": [9.31, -4.68, 2.04] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.6667": { "post": { - "vector": [13.25635, -7.84783, 9.24569] + "vector": [20, -7.5, 5] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "1.0": { "post": { - "vector": [-3.32374, -7.77783, 9.16322] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [36.67626, -7.77783, 9.16322] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-36.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-15, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1640,93 +1431,77 @@ "rotation": { "0.0": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-18.06, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.1667": { + "0.0833": { "post": { - "vector": [-5, 0, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.3333": { "post": { - "vector": [-37.5, 0, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.06, 0, 0] }, "lerp_mode": "catmullrom" } + }, + "position": { + "vector": [0, -1, -3] } }, "L_leg": { "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [82.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.46, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } + "vector": [47.5, 0, 0] } }, "L_foot": { "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [117.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [42.78, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } + "vector": [122.5, 0, 0] } }, "Tail": { "rotation": { "0.0": { - "vector": [12.5, 0, 0] + "vector": [15, 0, 0] }, - "0.4167": { - "vector": [-7.5, 0, 0] + "0.1667": { + "pre": { + "vector": [-30, 0, 0] + }, + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" }, - "0.625": { - "vector": [12.5, 0, 0] + "0.375": { + "vector": [-22.86, 0, 0] }, - "0.75": { - "vector": [12.5, 0, 0] + "0.7083": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [15, 0, 0] } } }, @@ -1734,31 +1509,31 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.1667": { "post": { - "vector": [22.5, 0, 0] + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [-22.16, 0, 0] + "vector": [-30, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.7917": { "post": { - "vector": [0, 0, 0] + "vector": [27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.0": { "post": { - "vector": [0, 0, 0] + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1768,31 +1543,37 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.0833": { "post": { - "vector": [43.75, 0, 0] + "vector": [22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.2083": { "post": { - "vector": [-41.98, 0, 0] + "vector": [-37.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.5417": { "post": { - "vector": [0, 0, 0] + "vector": [-45, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.8333": { "post": { - "vector": [0, 0, 0] + "vector": [5.58, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1802,119 +1583,72 @@ "rotation": { "0.0": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.1667": { + "0.25": { "post": { - "vector": [-5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.75": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" } + }, + "position": { + "vector": [0, -1, -3] } }, "R_leg": { "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [82.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25.46, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } + "vector": [47.5, 0, 0] } }, "R_foot": { "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [117.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [42.78, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } + "vector": [122.5, 0, 0] } }, "L_Wing": { "rotation": { "0.0": { "post": { - "vector": [-9.14537, 13.83447, -66.78912] + "vector": [-22.5, 20, -40] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.1667": { "post": { - "vector": [-6.26261, -12.2403, 54.06134] + "vector": [-30, 40, 32.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.4167": { "post": { - "vector": [-9.14537, 13.83447, -66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, 3.17814, -14.63362] + "vector": [25, 27.5, 32.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.75": { "post": { - "vector": [-11.14442, -15.99543, 50.01072] + "vector": [0, 0, -57.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [-0.32406, 3.17814, -14.63362] + "vector": [-22.5, 20, -40] }, "lerp_mode": "catmullrom" } @@ -1924,25 +1658,31 @@ "rotation": { "0.0": { "post": { - "vector": [-1.62155, 6.14718, -24.27788] + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, -30, -40] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [-10.3696, -11.36311, 31.32523] + "vector": [0, -45, 40] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.5417": { "post": { - "vector": [-0.45513, -4.44338, 16.94234] + "vector": [-2.67, -13.15, 55.66] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [-1.62155, 6.14718, -24.27788] + "vector": [0, 0, -22.5] }, "lerp_mode": "catmullrom" } @@ -1952,47 +1692,31 @@ "rotation": { "0.0": { "post": { - "vector": [-9.14537, -13.83447, 66.78912] + "vector": [-22.5, -20, 40] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.1667": { "post": { - "vector": [-6.26261, 12.2403, -54.06134] + "vector": [-30, -40, -32.5] }, "lerp_mode": "catmullrom" }, - "0.625": { + "0.4167": { "post": { - "vector": [-9.14537, -13.83447, 66.78912] + "vector": [25, -27.5, -32.5] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [-9.14537, -13.83447, 66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] + "vector": [0, 0, 57.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.0": { "post": { - "vector": [-11.14442, 15.99543, -50.01072] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] + "vector": [-22.5, -20, 40] }, "lerp_mode": "catmullrom" } @@ -2002,49 +1726,64 @@ "rotation": { "0.0": { "post": { - "vector": [-1.62155, -6.14718, 24.27788] + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [22.5, 30, 40] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [-10.3696, 11.36311, -31.32523] + "vector": [0, 45, -40] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.5417": { "post": { - "vector": [-0.45513, 4.44338, -16.94234] + "vector": [-2.67, 13.15, -55.66] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [-1.62155, -6.14718, 24.27788] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" } } }, - "Nightmare": { + "body": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [10, 0, 2.5] + }, "post": { - "vector": [0, 0, 0] + "vector": [10, 0, 2.5] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.4167": { "post": { - "vector": [-25, 0, 0] + "vector": [2.5, 5, -2.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.7083": { "post": { - "vector": [0, 0, 0] + "vector": [-7.5, 5, -5] }, "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] } }, "position": { @@ -2054,114 +1793,96 @@ }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.2083": { "post": { - "vector": [0, 27, 39] + "vector": [0, 14, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.4167": { + "post": { + "vector": [0, 11.68, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -7, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } } } }, "attack": { - "animation_length": 0.7083, + "animation_length": 1, "bones": { "head": { "rotation": { "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [45.43287, -10.12741, -3.50843] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [45.43287, -10.12741, -3.50843] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { "post": { "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { "post": { "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" } } }, @@ -2169,43 +1890,43 @@ "rotation": { "0.0": { "post": { - "vector": [15, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.2083": { "post": { - "vector": [-7.42695, 10.50227, 2.12085] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-7.42695, 10.50227, 2.12085] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [0, 0, 0] + "vector": [30, 0, 0] }, "lerp_mode": "catmullrom" }, "0.7083": { "post": { - "vector": [15, 0, 0] + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [10.78, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2215,17 +1936,29 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-15.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { - "vector": [-49.49054, 12.19908, 22.62113] - }, - "0.2917": { - "vector": [-49.49054, 12.19908, 22.62113] + "0.2083": { + "post": { + "vector": [-28, 0, 10] + }, + "lerp_mode": "catmullrom" }, "0.375": { + "post": { + "vector": [-37.01, 0, 16.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "vector": [-33, 0, 15] + }, + "0.6667": { + "vector": [-5, 0, 0] + }, + "0.7083": { "pre": { "vector": [2.5, 0, 0] }, @@ -2234,21 +1967,15 @@ }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.8333": { "post": { - "vector": [2.5, 0, 0] + "vector": [-10.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "1.0": { "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [-27.5, 0, 0] + "vector": [-15.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2256,29 +1983,546 @@ "position": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -1, 6] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, -17.5, -5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, + "Tail": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [7.5, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -4.26, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [-7.5, -21.89, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [0, 0, 0] + "vector": [-7.5, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tail3": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, -6.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [7.5, -20, 0] }, "lerp_mode": "catmullrom" }, "0.7083": { + "post": { + "vector": [7.5, -18.28, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Tight": { + "rotation": { + "0.0": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 17.5, 11.25] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-17.5, 17.5, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-20, 17.5, 5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.25, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "vector": [0, -4, 0] + }, + "0.7083": { + "vector": [0, 0, 0] + }, + "0.7917": { + "vector": [0, -2, 0] + }, + "0.9167": { + "pre": { + "vector": [0, -1, 0] + }, + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_foot": { + "rotation": { + "vector": [-20, 0, -5] + } + }, + "L_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 30, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, 7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, 13.88, -3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, -10, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, -23.37, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -30, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [12.5, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [12.5, -13.88, 3.19] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 10, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.66, 23.37, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack2": { + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { "post": { "vector": [0, 0, 0] }, @@ -2290,65 +2534,111 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, -20, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.2917": { "post": { - "vector": [-27.5, -20, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [-27.5, -20, 0] + "vector": [-32.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.6667": { "post": { - "vector": [-27.5, -20, 0] + "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.8333": { "post": { - "vector": [-27.5, -20, 0] + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" } + }, + "position": { + "vector": [0, -1, -3] } }, "L_leg": { "rotation": { "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [47.5, 0, 0] }, - "0.375": { + "0.2083": { + "pre": { + "vector": [45, 0, 0] + }, "post": { - "vector": [27.5, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [27.5, 0, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.6667": { "post": { - "vector": [27.5, 0, 0] + "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.8333": { "post": { - "vector": [27.5, 0, 0] + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "L_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2357,46 +2647,37 @@ "Tail": { "rotation": { "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [15, 0, 0] }, "0.125": { + "pre": { + "vector": [-27.5, 0, 0] + }, "post": { - "vector": [45, 0, 0] + "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [45, 0, 0] + "vector": [-37.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.5417": { "post": { - "vector": [52.5, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.6667": { "post": { - "vector": [52.5, 0, 0] + "vector": [-52.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [15, 0, 0] } } }, @@ -2404,43 +2685,31 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [45, 0, 0] + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [45, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.5417": { "post": { - "vector": [42.5, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.75": { "post": { - "vector": [42.5, 0, 0] + "vector": [-32.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "1.0": { "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [20, 0, 0] + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2454,37 +2723,25 @@ }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.3333": { "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [34.53376, 2.8411, 2.79232] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [34.53376, 2.8411, 2.79232] + "vector": [-32.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [34.53376, 2.8411, 2.79232] + "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.75": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { "post": { "vector": [20, 0, 0] }, @@ -2496,106 +2753,111 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-100.23633, 18.08026, 3.01914] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.2917": { "post": { - "vector": [-100.23633, 18.08026, 3.01914] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.5417": { "post": { - "vector": [-27.5, 20, 0] + "vector": [-32.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.6667": { "post": { - "vector": [-27.5, 20, 0] + "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.8333": { "post": { - "vector": [-27.5, 20, 0] + "vector": [37.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "1.0": { "post": { - "vector": [-27.5, 20, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.375": { - "vector": [0, 0, -15] - }, - "0.5": { - "vector": [0, 0, -15] - }, - "0.5833": { - "vector": [0, 0, -15] - }, - "0.7083": { - "vector": [0, 0, 0] - } + "vector": [0, -1, -3] } }, "R_leg": { "rotation": { "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [47.5, 0, 0] }, - "0.125": { - "post": { - "vector": [99.0905, -12.17944, -17.7626] + "0.2083": { + "pre": { + "vector": [45, 0, 0] }, - "lerp_mode": "catmullrom" - }, - "0.2917": { "post": { - "vector": [99.0905, -12.17944, -17.7626] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [27.5, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [27.5, 0, 0] + "vector": [-12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.6667": { "post": { - "vector": [27.5, 0, 0] + "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.8333": { "post": { - "vector": [27.5, 0, 0] + "vector": [26.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [47.5, 0, 0] + } + } + }, + "R_foot": { + "rotation": { + "0.0": { + "vector": [122.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [94.12, 0, 0] + }, + "post": { + "vector": [94.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [122.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2605,77 +2867,43 @@ "rotation": { "0.0": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [-22.5, 20, -40] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [-13.82228, 44.83543, -44.99542] + "vector": [40, 37.5, 42.5] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.3333": { "post": { - "vector": [-13.82228, 44.83543, -44.99542] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [-72.5, -22.5, -27.5] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [-72.5, -47.5, -42.5] }, "lerp_mode": "catmullrom" }, "0.7083": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [-17.5, 35, 25] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.8333": { "post": { - "vector": [0, -17.5, 7.5] + "vector": [-17.5, 35, 25] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [0, -17.5, 7.5] + "vector": [-22.5, 20, -40] }, "lerp_mode": "catmullrom" } @@ -2685,43 +2913,55 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [0, 0, -22.5] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.0833": { "post": { - "vector": [14.89149, -9.29798, -43.71777] + "vector": [0, 0, -60] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.2083": { "post": { - "vector": [14.89149, -9.29798, -43.71777] + "vector": [0, 0, 35] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [0, 0, -27.5] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.6667": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [0, 0, -50] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.75": { "post": { - "vector": [-6.15491, -16.41371, 35.88852] + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] }, "lerp_mode": "catmullrom" } @@ -2731,77 +2971,43 @@ "rotation": { "0.0": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] + "vector": [-22.5, -20, 40] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [-4.13909, -5.53882, 43.52165] + "vector": [40, -37.5, -42.5] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.3333": { "post": { - "vector": [-4.13909, -5.53882, 43.52165] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] + "vector": [-72.5, 22.5, 27.5] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] + "vector": [-72.5, 47.5, 42.5] }, "lerp_mode": "catmullrom" }, "0.7083": { "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [-17.5, -35, -25] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.8333": { "post": { - "vector": [0, 17.5, -7.5] + "vector": [-17.5, -35, -25] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [0, 17.5, -7.5] + "vector": [-22.5, -20, 40] }, "lerp_mode": "catmullrom" } @@ -2811,77 +3017,182 @@ "rotation": { "0.0": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.0833": { "post": { - "vector": [14.14884, 8.83506, 43.517] + "vector": [0, 0, 60] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.2083": { "post": { - "vector": [14.14884, 8.83506, 43.517] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 0, 27.5] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.6667": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 0, 50] }, "lerp_mode": "catmullrom" }, - "0.7083": { + "0.75": { "post": { - "vector": [-6.15491, 16.41371, -35.88852] + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" } } }, - "Nightmare": { - "position": { + "body": { + "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-5, 0, 0] + }, "post": { - "vector": [0, -0.5, -12] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.3333": { "post": { - "vector": [0, -0.5, -12] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [0, -0.5, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, -0.5, -12] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.7083": { "post": { - "vector": [0, -0.5, -12] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 25, 14] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 17, 21] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, -5, -41] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 1.75, -23.95] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 4.44, -5.56] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2890,801 +3201,83 @@ } }, "roar": { - "animation_length": 1, + "animation_length": 1.5, "bones": { "head": { "rotation": { "0.0": { "post": { - "vector": [22.5, 0, 0] + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.125": { "post": { - "vector": [-27.5, 0, 0] + "vector": [27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2917": { + "0.3333": { "post": { - "vector": [-27.5, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.375": { - "vector": [0, 0, 0] - }, - "0.4167": { - "vector": [1, 0, 0] - }, - "0.4583": { - "vector": [-1, 0, 0] - }, "0.5": { - "vector": [3, 0, 0] - }, - "0.5417": { - "vector": [1, 0, 0] - }, - "0.5833": { - "vector": [5, 0, 0] - }, - "0.625": { - "vector": [2, 0, 0] - }, - "0.6667": { - "vector": [5, 0, 0] - }, - "0.7083": { - "vector": [2, 0, 0] - }, - "1.0": { - "vector": [0, 0, 0] - } - } - }, - "jaw": { - "rotation": { - "0.0": { "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [62.5, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-60, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-5.17693, 27.57777, -50.51577] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-5.17693, 27.57777, -50.51577] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [6.88003, -16.1299, -15.97603] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [6.88003, -16.1299, -15.97603] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [11.45696, -13.31791, -26.34198] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [11.45696, -13.31791, -26.34198] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-5.17693, -27.57777, 50.51577] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [-5.17693, -27.57777, 50.51577] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [6.88003, 16.1299, 15.97603] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [6.88003, 16.1299, 15.97603] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [11.45696, 13.31791, 26.34198] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [11.45696, 13.31791, 26.34198] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Nightmare": { - "position": { - "0.0": { - "post": { - "vector": [0, -0.5, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -0.5, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, -0.5, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -0.5, -12] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "death": { - "animation_length": 1, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-55, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [7.15656, 2.24944, -17.35932] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "post": { - "vector": [43.931, 4.14085, 0.75952] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { "post": { "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "1.5": { "post": { - "vector": [22.01816, 4.75113, -11.57518] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -3694,24 +3287,51 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [-15.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.1667": { - "vector": [-90, 0, 0] + "0.3333": { + "post": { + "vector": [-25.5, 0, 0] + }, + "lerp_mode": "catmullrom" }, - "0.4167": { - "vector": [-65, 0, 0] + "0.4583": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" }, - "0.5417": { - "vector": [0, 0, 0] + "0.6667": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.71, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-11.46, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.5, 0, 0] + }, + "lerp_mode": "catmullrom" } }, "position": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -1, 6] }, "lerp_mode": "catmullrom" } @@ -3721,25 +3341,15 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, -20, 0] + "vector": [-20, -17.5, -5] }, "lerp_mode": "catmullrom" - }, - "0.1667": { + } + }, + "position": { + "0.0": { "post": { - "vector": [-27.5, -37.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-27.5, -37.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [55.06424, 30.58184, -17.91705] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" } @@ -3749,35 +3359,22 @@ "rotation": { "0.0": { "post": { - "vector": [27.5, 0, 0] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, + "L_foot": { + "rotation": { + "vector": [-20, 0, 5] + } + }, "Tail": { "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [37.5, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-25, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -3787,25 +3384,7 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [36.39498, -17.72091, -24.60981] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 0] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -3815,25 +3394,7 @@ "rotation": { "0.0": { "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [53.55239, -54.46865, -30.64234] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [17.5, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -3843,25 +3404,15 @@ "rotation": { "0.0": { "post": { - "vector": [-27.5, 20, 0] + "vector": [-20, 17.5, 5] }, "lerp_mode": "catmullrom" - }, - "0.1667": { + } + }, + "position": { + "0.0": { "post": { - "vector": [-80, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-80, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [44.19476, -22.13991, 4.11405] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" } @@ -3871,19 +3422,7 @@ "rotation": { "0.0": { "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [62.5, 0, 0] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -3891,202 +3430,162 @@ }, "R_foot": { "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.1667": { - "vector": [40, 0, 0] - }, - "0.4167": { - "vector": [40, 0, 0] - } + "vector": [-20, 0, -5] } }, "L_Wing": { "rotation": { "0.0": { "post": { - "vector": [-2.56152, 6.42053, -28.46504] + "vector": [12.5, 17.5, -5] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.375": { "post": { - "vector": [-2.56152, 6.42053, 16.53496] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [16.24074, -6.60796, -60.94387] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [2.14498, 17.78381, 79.71688] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-5.14352, -8.08642, 3.86612] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [16.63598, -5.01987, 94.75926] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-2.83416, 4.94206, -18.16209] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-2.56152, -6.42053, -16.53496] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [16.24074, 6.60796, 60.94387] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [2.14498, -17.78381, -79.71688] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-5.14352, 8.08642, -3.86612] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [16.63598, 5.01987, -94.75926] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-2.83416, -4.94206, 18.16209] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Nightmare": { - "rotation": { - "vector": [0, 0, 0] - }, - "position": { - "0.0": { - "post": { - "vector": [0, -0.5, -6] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -0.5, -2] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, -10.5, -21] + "vector": [12.5, 37.5, -5] }, "lerp_mode": "catmullrom" }, "0.5833": { "post": { - "vector": [0, -8.5, -21] + "vector": [12.5, -12.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, -17.5, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, 17.5, -5] }, "lerp_mode": "catmullrom" } } - } - } - }, - "animation": { - "animation_length": 0.5, - "bones": { - "head": { + }, + "L_Wing3": { "rotation": { "0.0": { "post": { - "vector": [22.5, 0, 0] + "vector": [-17.5, -30, 27.5] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.4583": { "post": { - "vector": [-22.5, 0, 0] + "vector": [-17.5, -30, 27.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.7083": { "post": { - "vector": [12.5, 0, 0] + "vector": [-12.5, -55, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, -30, 27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [12.5, -37.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [12.5, 12.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [12.5, 17.5, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_Wing3": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [-12.5, 55, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-17.5, 30, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -4096,729 +3595,43 @@ "rotation": { "0.0": { "post": { - "vector": [12.5, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.25": { "post": { - "vector": [12.5, 0, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { - "vector": [0, 0, 0] - } - } - }, - "neck": { - "rotation": { - "0.0": { "post": { - "vector": [15, 0, 0] + "vector": [37.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.2083": { + "0.75": { + "post": { + "vector": [26.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { "post": { "vector": [35, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.5": { "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -7, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-27.5, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_foot": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.2083": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [107.5, 0, 0] - } - } - }, - "Tail": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "vector": [12.5, 0, 0] - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-27.5, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-81.70645, 12.0174, -16.10644] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.2083": { - "vector": [0, -6, 0] - } - } - }, - "R_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [74.49779, -14.33405, 13.84936] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_foot": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.2083": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [107.5, 0, 0] - } - } - }, - "L_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.56152, 6.42053, -28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-1.52852, -0.31071, 11.0296] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-9.14537, 13.83447, -66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, -17.5, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.32406, 3.17814, -14.63362] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, -16.41371, 35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [14.89149, -9.29798, -43.71777] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1.62155, 6.14718, -24.27788] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.56152, -6.42053, 28.46504] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [-1.52852, 0.31071, -11.0296] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-9.14537, -13.83447, 66.78912] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 17.5, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-6.15491, 16.41371, -35.88852] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [14.89149, 9.29798, 43.71777] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1.62155, -6.14718, 24.27788] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Nightmare": { - "position": { - "0.0": { - "vector": [0, -0.5, -12] - }, - "0.2083": { - "vector": [0, -0.5, -12] - }, - "0.5": { - "vector": [0, 19, 0] - } - } - } - } - }, - "fly_damaged": { - "loop": true, - "animation_length": 0.25, - "bones": { - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "jaw": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [50.83739, -3.83835, -0.88544] - }, - "0.25": { - "vector": [31.67477, -7.67669, -1.77087] - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [45.61055, -7.34558, 8.65398] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [30.22742, -9.21817, 10.86011] - }, - "lerp_mode": "catmullrom" - } - } - }, - "torso": { - "rotation": { - "0.0": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-43.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_foot": { - "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail": { - "rotation": { - "0.0": { - "vector": [12.5, 0, 0] - }, - "0.125": { - "vector": [-20, 0, 0] - } - } - }, - "Tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-42.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-26.25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Tight": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [60, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_foot": { - "rotation": { - "0.0": { - "post": { - "vector": [107.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-9.14537, 13.83447, -66.78912] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-6.26261, -12.2403, 54.06134] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, 3.17814, -14.63362] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-11.14442, -15.99543, 50.01072] - }, - "lerp_mode": "catmullrom" - } - } - }, - "L_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.62155, 6.14718, -24.27788] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10.3696, -11.36311, 31.32523] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing": { - "rotation": { - "0.0": { - "post": { - "vector": [-9.14537, -13.83447, 66.78912] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-6.26261, 12.2403, -54.06134] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing2": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.32406, -3.17814, 14.63362] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-11.14442, 15.99543, -50.01072] - }, - "lerp_mode": "catmullrom" - } - } - }, - "R_Wing3": { - "rotation": { - "0.0": { - "post": { - "vector": [-1.62155, -6.14718, 24.27788] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-10.3696, 11.36311, -31.32523] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Nightmare": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-32.5, 0, 0] - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 16.85, 34] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { - "post": { - "vector": [0, 27, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" } diff --git a/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json new file mode 100644 index 00000000..fe841375 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json @@ -0,0 +1,11385 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "Tentacle_1_Left": { + "rotation": { + "vector": [-30.4985, 19.4505, -51.4092] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_part_1_left": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "vector": [0, 0, 65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Left2": { + "rotation": { + "vector": [-5.3981, 11.9127, -58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Left3": { + "rotation": { + "vector": [12.2767, -21.7337, -37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "vector": [0, 0, -80] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Left4": { + "rotation": { + "vector": [38.5673, -39.2521, -57.1302] + }, + "position": { + "vector": [-3, -3, -12] + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "vector": [0, 0, 75] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Right": { + "rotation": { + "vector": [-30.4985, -19.4505, 51.4092] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_part_1_right": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "vector": [0, 0, -65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Right2": { + "rotation": { + "vector": [-5.3981, -11.9127, 58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Right3": { + "rotation": { + "vector": [12.2767, 21.7337, 37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "vector": [0, 0, 80] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-1, 4, 0] + } + }, + "Tentacle_1_Right4": { + "rotation": { + "vector": [38.5673, 39.2521, 57.1302] + }, + "position": { + "vector": [3, -3, -12] + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "vector": [0, 0, -75] + }, + "position": { + "vector": [-1, 4, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_loop|0.45|1.19" + } + }, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, 63.0682, -47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, 16.8589, -55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, 29.2189, -14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, 22.3844, -42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, -9.0942, -22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, -0.0666, 47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, -0.2452, 40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, -47.4021, -39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, -63.0682, 47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, -16.8589, 55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, -29.2189, 14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, -22.3844, 42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, 9.0942, 22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, 0.0666, -47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, 0.2452, -40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, 47.4021, 39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Swipe": { + "loop": "hold_on_last_frame", + "animation_length": 1.5, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-91.887, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.4848, -62.5683, 25.0151] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-14.4729, -36.208, 16.5374] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.63, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [8.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.33, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [23.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.33, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.0104, -17.5, 0.003] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.01, 143.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-44.6896, 0, -16.9359] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45, 0, 19.55] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [34.3081, -4.2439, 40.5865] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.2694, -1.4146, 49.4325] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-22.3771, 2.3004, -8.4118] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [31.8803, 6.6782, 11.6893] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.056, -2.6619, 33.1066] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [19.3379, -1.1346, 26.2811] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-56.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.0257, -49.8387, -16.1244] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-6.4668, -43.5968, 25.4296] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [65, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-31.9581, -7.9792, 5.0872] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [22.6478, -10.6998, 38.4965] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.8456, -3.5666, 35.4099] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.3853, 2.1984, -28.1145] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [25.2579, 11.253, -8.0809] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.3767, -13.6298, 65.8393] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.3568, -4.96, 46.4461] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-16.0988, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [55.6218, -58.8306, -36.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [54.5769, -73.2357, -21.3745] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [45.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-26.5249, 9.8299, -1.1177] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.5168, 12.0389, 10.1054] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [23.6314, -1.333, 42.9303] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [24.3473, -1.0661, 42.2036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [30, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-45.3023, 10.583, -40.596] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.2418, 12.9773, -42.7247] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [8.471, 3.6937, 25.096] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [20.2777, 0.7506, 32.2833] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [155.5716, -28.3508, -115.3908] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [33.9673, -15.7385, 22.0006] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [37.0773, 6.0681, 2.5067] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.1855, 1.2713, 40.7477] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-19.5169, 21.1528, 25.6157] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-39.8998, -14.6899, -41.6051] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [11.1091, -2.8063, 28.3183] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.887, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.8521, 2.4221, 65.9199] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-38.0082, -7.9924, 42.3701] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [10.5951, 2.844, -40.0347] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [16.5726, -11.6128, 30.036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [5.8835, 19.3359, -38.2171] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [35.0705, 7.7922, 13.8451] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.283, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.8923, -5.38, 73.7252] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.362, -0.7761, -59.8325] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [2.5, 0, -2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [15.3135, 23.3225, -18.2818] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [34.7658, 15.6999, 1.9348] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [46.4012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [6.4185, 4.437, 77.6781] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.2353, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-4.1109, -26.0011, -59.426] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.0398, -7.6047, -1.0063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-20, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.8611, 24.5649, -27.6929] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45.5761, -6.7071, 28.1123] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [92.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [28.3776, 14.786, 80.268] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.3319, -20.0094, -32.3747] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.5, 0, -10.47] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.7517, 22.0828, -41.7185] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.279, 14.6055, 4.1947] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 128.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 135, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Death": { + "loop": "hold_on_last_frame", + "animation_length": 3, + "bones": { + "bone": { + "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.3333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -35.85, 9] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, 30.4684, -22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, -52.86, -65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, -19.3642, -144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [6.87, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [38.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [57.49, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-65.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, -3.7668, 37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, -33.6228, -48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, -16.4772, -144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, -58.3709, -59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, -4.3657, -125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, -0.1027, -7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, -0.0585, 27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, -0.0125, -27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, -62.8324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, -25.7109, -125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, -30.4684, 22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, 52.86, 65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, 19.3642, 144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, 3.7668, -37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, 33.6228, 48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, 16.4772, 144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, 58.3709, 59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, 4.3657, 125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, 0.1027, 7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, 0.0585, -27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, 0.0125, 27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, 62.8324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, 25.7109, 125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Hit": { + "loop": "hold_on_last_frame", + "animation_length": 1.1667, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-3.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-4.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-45.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [34.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-24.95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, -12.2418, -54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, -12.3788, 12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, -26.3671, -66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, -0.3946, 54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, 12.2418, 54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, 12.3788, -12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, 26.3671, 66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, 0.3946, -54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Attack": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, -42.6621, -111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, -58.8301, -144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-74.2354, -29.794, -21.0171] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, 12.6219, 115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 72.2] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 104.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, 42.6621, 111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, 58.8301, 144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-86.4636, 33.1995, -2.147] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, -12.6219, -115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -121.89] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Grab": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, -2.1054, 48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, -75.78, -107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, -38.6597, -29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, 2.1054, -48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, 75.78, 107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, 38.6597, 29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle2": { + "loop": true, + "animation_length": 0.0083, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.19" + } + }, + "bones": { + "bone": { + "rotation": { + "vector": [42.5, 0, 0] + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5628, 4.768, -1.507] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 9.17341, -11.8885] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common/src/main/resources/assets/antarchy/animations/pill_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/pill_bug.animation.json new file mode 100644 index 00000000..f116c24e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/pill_bug.animation.json @@ -0,0 +1,1227 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-7.5, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [-7.5, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.25, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [0, -0.25, 0] + }, + "0.25": { + "vector": [0, 0, 0] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.75313, 9.53274, 3.03513] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.75313, -9.53274, -3.03513] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-8.64451, -19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [8.64451, 19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [8.64451, 19.94403, 24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [8.64451, -19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [8.64451, -19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-8.64451, 19.94403, -24.02271] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "wheel_mode": { + "loop": true, + "animation_length": 0.75, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-12.4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.75": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "vector": [0, 0, 0] + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "position": { + "0.0": { + "vector": [0, -14, 0] + }, + "0.3333": { + "vector": [0, -14, 0] + }, + "0.4167": { + "vector": [0, -11, 0] + }, + "0.5": { + "vector": [0, -14, 0] + }, + "0.5417": { + "vector": [0, -13, 0] + }, + "0.5833": { + "vector": [0, -14, 0] + }, + "0.75": { + "vector": [0, -14, 0] + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [1.1, 1.1, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [1, 1, 1] + }, + "0.75": { + "vector": [1, 1, 1] + } + } + } + } + }, + "normal_mode": { + "animation_length": 0.4167, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0833": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, -2, 0] + }, + "0.2917": { + "vector": [0, 0, 0] + } + }, + "scale": { + "vector": [1, 1, 0.7] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-48.30386, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [24.02325, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-24.01852, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.23085, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-48.30386, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [24.02325, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-23.78525, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0.00468, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0833": { + "vector": [0, 0, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + } + }, + "position": { + "0.0833": { + "vector": [0, 6, 0] + }, + "0.2083": { + "vector": [0, 0, 0] + } + }, + "scale": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "right_leg3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "left_leg3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, -45] + }, + "0.2083": { + "vector": [0, 0, 0] + } + } + }, + "wheel": { + "rotation": { + "vector": [0, 0, 0] + }, + "position": { + "0.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "vector": [0, -14, 0] + }, + "0.2083": { + "vector": [0, -14, 0] + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "roll": { + "loop": true, + "animation_length": 1, + "bones": { + "torso": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.89, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 0.7] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [58.1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, 20.8302, -18.56413] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [-43.58865, -20.8302, 18.56413] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "scale": { + "vector": [0, 0, 0] + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.86603, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "wheel": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [360, 0, 0] + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-2, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [2, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, -14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -11, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -14, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 1] + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/scorpion.animation.json b/common/src/main/resources/assets/antarchy/animations/scorpion.animation.json index 6734e566..c49f43a1 100644 --- a/common/src/main/resources/assets/antarchy/animations/scorpion.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/scorpion.animation.json @@ -137,28 +137,6 @@ } } }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [17.5, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "4.0": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "r_leg": { "rotation": { "vector": [0, -22.5, 0] @@ -178,6 +156,28 @@ "rotation": { "vector": [0, -22.5, 0] } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [17.5, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } } } }, @@ -311,34 +311,6 @@ } } }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "r_leg": { "rotation": { "0.0": { @@ -568,6 +540,34 @@ "lerp_mode": "catmullrom" } } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } } } }, @@ -766,40 +766,6 @@ } } }, - "l_claw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, -82.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -82.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "r_leg": { "rotation": { "0.0": { @@ -1031,6 +997,96 @@ "lerp_mode": "catmullrom" } } + }, + "r_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_claw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -82.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_claw_open": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 67.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } } } } diff --git a/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json new file mode 100644 index 00000000..04f7b81c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json @@ -0,0 +1,2625 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2.25, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.6667, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-12.2252, -29.0774, 13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [13.6745, 58.6061, 23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [6, -15.47, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [6, -13.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4, -11.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -12.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6, -14.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6, -14.55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-6, -12.99, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-36.5714, 35.9552, -34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-23.5556, 44.8303, -14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "vector": [12.5, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [12.5, 0, 0] + }, + "0.5833": { + "vector": [0, 0, 0] + } + } + } + } + }, + "spit": { + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 1, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [1, 1, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + }, + "0.4583": { + "vector": [1, 1, 1] + }, + "1.0": { + "vector": [1, 1, 1] + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.01658, -61.28435, 22.32925] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 9, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.25": { + "vector": [1, 0.3, 1] + }, + "0.4583": { + "vector": [1, 1, 1] + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, -0.9366, -25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, 0.9366, 25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-13.01658, 61.28435, -22.32925] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 9, 0] + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-11.86, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json new file mode 100644 index 00000000..df0cdfa8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json @@ -0,0 +1,948 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.66778, -2.51027, -22.28928] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [1.12732, 1.85014, -147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.66778, 2.51027, 22.28928] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [1.12732, -1.85014, 147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.00717, 20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "vector": [9.00717, -20.70481, -24.14867] + } + }, + "left_leg_front": { + "rotation": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -120] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 120] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fart": { + "animation_length": 1.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0.49, -1.99] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-152.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.75, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [-0.01, -0.97, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.00717, 20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "0.25": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "1.25": { + "vector": [9.00717, -20.70481, -24.14867] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "0.25": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "1.25": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "right_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + }, + "1.5": { + "vector": [1, 1, 1] + } + } + }, + "left_eye": { + "scale": { + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [132.55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [11.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common/src/main/resources/assets/antarchy/animations/termite.animation.json b/common/src/main/resources/assets/antarchy/animations/termite.animation.json new file mode 100644 index 00000000..77ba7fc5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/termite.animation.json @@ -0,0 +1,1836 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, 0.10358, 1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, -0.10358, -1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "dance": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -10, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.61003, 22.29711, -3.09472] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.47532, -19.82169, 2.71994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.15251, -17.67415, 62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.74672, 4.98753, 33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.49325, 15.74419, 39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.82269, 35.55522, 45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5.74672, -4.98753, -33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-30.04912, 35.07869, -44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json b/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json index 0f9ee2ff..d0a2525b 100644 --- a/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json @@ -2134,297 +2134,52 @@ } }, "spin_attack": { - "animation_length": 2, + "loop": true, + "animation_length": 0.2917, "bones": { - "Jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [12.40552, -0.42671, -3.86532] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Torso": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "R_arm": { "rotation": { "0.0": { - "post": { - "vector": [3.42896, -5.43394, -46.98263] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-40.03828, -6.42252, -14.31771] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-40.03828, -6.42252, -14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-40.03828, -6.42252, -14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3.42896, -5.43394, -46.98263] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [0, -8.42649, 7.07066] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -8.42649, 7.07066] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -8.42649, 7.07066] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" } } }, "R_arm2": { "rotation": { "0.0": { - "post": { - "vector": [-12.73916, -59.16159, 14.75144] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-7.46814, -29.5764, 7.46814] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.46814, -29.5764, 7.46814] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-7.46814, -29.5764, 7.46814] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-12.73916, -59.16159, 14.75144] - }, - "lerp_mode": "catmullrom" } } }, "Shell": { "rotation": { "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [39.04, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [29.9, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [0, -0.64279, -0.76604] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -0.64279, -0.76604] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -0.64279, -0.76604] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" } } }, @@ -2436,383 +2191,81 @@ }, "lerp_mode": "catmullrom" }, - "0.1667": { - "post": { - "vector": [37.5, 1.20877, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { + "0.125": { "post": { "vector": [39.4, -452.04, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.2083": { "post": { "vector": [12.5, -720, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.2917": { "post": { "vector": [38.06, -725.19, 0] }, "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [12.5, -682.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.5, -682.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [37.5, -345, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [38.33, -95, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [12.5, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [12.5, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, -1.25, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [0, -29.25, 15] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -29.25, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, -29.25, -48] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -29.25, -48] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1.25, -28] - }, - "lerp_mode": "catmullrom" } } }, "L_arm": { "rotation": { "0.0": { - "post": { - "vector": [3.42896, 5.43394, 46.98263] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-40.03828, 6.42252, 14.31771] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-40.03828, 6.42252, 14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-40.03828, 6.42252, 14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3.42896, 5.43394, 46.98263] - }, - "lerp_mode": "catmullrom" } } }, "L_arm2": { "rotation": { "0.0": { - "post": { - "vector": [-12.73916, 59.16159, -14.75144] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-6.91252, -20.07846, -1.38281] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-6.91252, -20.07846, -1.38281] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-6.91252, -20.07846, -1.38281] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-12.73916, 59.16159, -14.75144] - }, - "lerp_mode": "catmullrom" } } }, "R-Leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [6.05456, 12.07085, 4.02709] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } }, "L-Leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-0.7, 11.60171, 6.24351] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [-0.04547, -4.23409, 3.9696] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } }, "Torso_2": { "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } } @@ -3303,6 +2756,605 @@ } } } + }, + "spin_attack_start": { + "animation_length": 0.25, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 1.20877, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spin_attack_end": { + "animation_length": 0.4583, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.40552, -0.42671, -3.86532] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [29.9, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.64279, -0.76604] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0833": { + "pre": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "post": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-0.7, 11.60171, 6.24351] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.04547, -4.23409, 3.9696] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } } } } \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/triffid.animation.json b/common/src/main/resources/assets/antarchy/animations/triffid.animation.json index 4ce900dd..1f68650e 100644 --- a/common/src/main/resources/assets/antarchy/animations/triffid.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/triffid.animation.json @@ -9,11 +9,11 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.9167": { "post": { "vector": [10, 0, 0] }, @@ -21,7 +21,7 @@ }, "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -31,11 +31,11 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.5": { "post": { "vector": [12.5, 0, 0] }, @@ -43,7 +43,7 @@ }, "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -53,25 +53,19 @@ "rotation": { "0.0": { "post": { - "vector": [-2.5, 0, 0] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.6667": { + "2.2083": { "post": { "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.7917": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, "4.0": { "post": { - "vector": [-2.5, 0, 0] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -80,6 +74,12 @@ "head": { "rotation": { "0.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5417": { "post": { "vector": [10, 0, 0] }, @@ -87,7 +87,7 @@ }, "4.0": { "post": { - "vector": [10, 0, 0] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" } @@ -101,7 +101,7 @@ }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.875": { "post": { "vector": [0, 0, 55] }, @@ -1252,6 +1252,12 @@ }, "lerp_mode": "catmullrom" }, + "0.5": { + "post": { + "vector": [0, 0, 94.72] + }, + "lerp_mode": "catmullrom" + }, "0.75": { "post": { "vector": [0, 0, 45] @@ -1554,6 +1560,12 @@ }, "lerp_mode": "catmullrom" }, + "0.5": { + "post": { + "vector": [0, 0, -94.72] + }, + "lerp_mode": "catmullrom" + }, "0.75": { "post": { "vector": [0, 0, -45] diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json b/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json new file mode 100644 index 00000000..c265ce00 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json @@ -0,0 +1,150 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json new file mode 100644 index 00000000..7e867f05 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/amber_moss_block" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json new file mode 100644 index 00000000..e059b29b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/bile.json b/common/src/main/resources/assets/antarchy/blockstates/bile.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/bile.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json b/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json new file mode 100644 index 00000000..1ab1a4b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/bile_vein" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/broodstone.json b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json new file mode 100644 index 00000000..4ae6f1c1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json b/common/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json new file mode 100644 index 00000000..b349b3c7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/brutalfly_cocoon_spawner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/brutalfly_cocoon_spawner" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json b/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json new file mode 100644 index 00000000..651df798 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/chiten_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/chiten_block" + }, + "axis=z": { + "model": "antarchy:block/chiten_block", + "x": 90 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json b/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json new file mode 100644 index 00000000..4cef7a2b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json @@ -0,0 +1,14 @@ +{ + "variants": { + "thickness=base,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_base" }, + "thickness=base,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_base" }, + "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_frustum" }, + "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_frustum" }, + "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_middle" }, + "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_middle" }, + "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip" }, + "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip" }, + "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip_merge" }, + "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip_merge" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json new file mode 100644 index 00000000..8611d9f0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/creeping_horror_egg_1" }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/creeping_horror_egg_2" }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/creeping_horror_egg_3" }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/creeping_horror_egg_4" }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 270 } + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/creepvine.json b/common/src/main/resources/assets/antarchy/blockstates/creepvine.json new file mode 100644 index 00000000..630f81c1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/creepvine.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json new file mode 100644 index 00000000..dce79841 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/lurking_terror_egg_1" }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/lurking_terror_egg_2" }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/lurking_terror_egg_3" }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/lurking_terror_egg_4" }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 270 } + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..32386ef7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/mossy_shellstone_bricks" + }, + "type=bottom": { + "model": "antarchy:block/mossy_shellstone_brick_slab" + }, + "type=top": { + "model": "antarchy:block/mossy_shellstone_brick_slab_top" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..79c0c8b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..00e5aa02 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/myrmite.json b/common/src/main/resources/assets/antarchy/blockstates/myrmite.json new file mode 100644 index 00000000..55bfe4a1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/myrmite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/myrmite" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json b/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json index 70dd28f2..016df757 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json +++ b/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json @@ -1,8 +1,8 @@ { "variants": { "facing=north": {"model": "antarchy:block/termite_nest"}, - "facing=east": {"model": "antarchy:block/termite_nest", "y": 90}, + "facing=east": {"model": "antarchy:block/termite_nest", "y": 90}, "facing=south": {"model": "antarchy:block/termite_nest", "y": 180}, - "facing=west": {"model": "antarchy:block/termite_nest", "y": 270} + "facing=west": {"model": "antarchy:block/termite_nest", "y": 270} } } diff --git a/common/src/main/resources/assets/antarchy/geo/bed_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/bed_bug.geo.json index a33580c6..572fbf2a 100644 --- a/common/src/main/resources/assets/antarchy/geo/bed_bug.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/bed_bug.geo.json @@ -31,8 +31,7 @@ "parent": "neck", "pivot": [0, 4.5, -12], "cubes": [ - {"origin": [-3.5, 4.25, -16], "size": [7, 4, 4], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [0, 49]}, - {"origin": [-2.5, 4.25, -17], "size": [5, 2, 2], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [44, 37]} + {"origin": [-3.5, 4.25, -17], "size": [7, 4, 5], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [0, 50]} ] }, { @@ -64,8 +63,7 @@ "parent": "head", "pivot": [-3, 3, -12], "cubes": [ - {"origin": [-4.5, 3.25, -19], "size": [3, 1, 7], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [22, 49]}, - {"origin": [-1.5, 3.25, -19], "size": [2, 1, 1], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [44, 41]} + {"origin": [-4.5, 3.25, -19], "size": [3, 1, 7], "pivot": [-0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [25, 50]} ] }, { @@ -73,8 +71,7 @@ "parent": "head", "pivot": [3, 3, -12], "cubes": [ - {"origin": [1.5, 3.25, -19], "size": [3, 1, 7], "pivot": [0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [22, 49], "mirror": true}, - {"origin": [-0.5, 3.25, -19], "size": [2, 1, 1], "pivot": [0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [44, 41], "mirror": true} + {"origin": [1.5, 3.25, -19], "size": [3, 1, 7], "pivot": [0.5, 4.5, -10], "rotation": [22.5, 0, 0], "uv": [25, 50], "mirror": true} ] }, { diff --git a/common/src/main/resources/assets/antarchy/geo/cheep.geo.json b/common/src/main/resources/assets/antarchy/geo/cheep.geo.json new file mode 100644 index 00000000..f2b650ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/cheep.geo.json @@ -0,0 +1,75 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [-6, 7, 3.5], + "cubes": [ + {"origin": [-6, 2, -4], "size": [12, 12, 12], "uv": [0, 0]}, + {"origin": [-0.5, 14, -3], "size": [1, 3, 11], "uv": [38, 24]}, + {"origin": [-0.5, 11, 8], "size": [1, 4, 2], "uv": [42, 53]}, + {"origin": [0, 17, -3], "size": [0, 4, 11], "uv": [38, 38]}, + {"origin": [0, 10.4, 8], "size": [0, 9, 4], "pivot": [0, 15.4, 11], "rotation": [5, 0, 0], "uv": [34, 53]}, + {"origin": [-6.2, 9.4, -4.2], "size": [6, 3, 3], "pivot": [-3.7, 10.4, -2.7], "rotation": [0, 0, 5], "uv": [48, 0]}, + {"origin": [0.2, 9.4, -4.2], "size": [6, 3, 3], "pivot": [3.7, 10.4, -2.7], "rotation": [0, 0, -5], "uv": [48, 0], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "bone", + "pivot": [0, 4, -0.5], + "cubes": [ + {"origin": [-6, 2.5, -7], "size": [12, 3, 7], "inflate": 0.01, "uv": [0, 35]} + ] + }, + { + "name": "mouth", + "parent": "bone", + "pivot": [0, 7.5, 0.4], + "cubes": [ + {"origin": [-6, 5.5, -7.1], "size": [12, 4, 7], "inflate": 0.2, "uv": [0, 24]} + ] + }, + { + "name": "right_arm", + "parent": "bone", + "pivot": [-6, 7, 3.5], + "cubes": [ + {"origin": [-7, 2, 0], "size": [2, 5, 7], "uv": [0, 45]}, + {"origin": [-6.5, 0, 0], "size": [1, 2, 7], "uv": [18, 45]}, + {"origin": [-6, -2, 0], "size": [0, 2, 7], "uv": [48, 12]} + ] + }, + { + "name": "left_arm", + "parent": "bone", + "pivot": [6, 7, 3.5], + "cubes": [ + {"origin": [5, 2, 0], "size": [2, 5, 7], "uv": [0, 45], "mirror": true}, + {"origin": [5.5, 0, 0], "size": [1, 2, 7], "uv": [18, 45], "mirror": true}, + {"origin": [6, -2, 0], "size": [0, 2, 7], "uv": [48, 12], "mirror": true} + ] + }, + { + "name": "tail", + "parent": "bone", + "pivot": [0, 6, 8.25], + "cubes": [ + {"origin": [-1, 3, 7.5], "size": [2, 6, 2], "uv": [0, 81]}, + {"origin": [0, 2, 9.5], "size": [0, 8, 5], "uv": [12, 77]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json b/common/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json index 0cf8dbed..aa4ba54b 100644 --- a/common/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/cloud_shark.geo.json @@ -7,8 +7,8 @@ "texture_width": 128, "texture_height": 128, "visible_bounds_width": 6, - "visible_bounds_height": 3.5, - "visible_bounds_offset": [0, 1.25, 0] + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 1.5, 0] }, "bones": [ { @@ -22,7 +22,6 @@ "cubes": [ {"origin": [-6.5, 3, -22], "size": [13, 13, 25], "inflate": 0.01, "uv": [0, 0]}, {"origin": [-1, 16, -12], "size": [2, 5, 9], "inflate": 0.01, "uv": [0, 0]}, - {"origin": [-1, 24, -9], "size": [2, 3, 16], "inflate": 0.1, "uv": [0, 99]}, {"origin": [-1, 21, -9], "size": [2, 7, 6], "inflate": 0.01, "uv": [51, 0]} ] }, @@ -57,36 +56,68 @@ {"origin": [-4.5, 10, -49], "size": [9, 6, 8], "uv": [63, 85]} ] }, - { - "name": "right_wing", - "parent": "head", - "pivot": [-8, 16, -27.5], - "cubes": [ - {"origin": [-22, 16, -33], "size": [14, 0, 11], "uv": [40, 105]} - ] - }, - { - "name": "right_wing2", - "parent": "right_wing", - "pivot": [-22, 16, -27.5], - "cubes": [ - {"origin": [-36, 16, -33], "size": [14, 0, 11], "uv": [89, 51]} - ] - }, { "name": "left_wing", "parent": "head", "pivot": [8, 16, -27.5], "cubes": [ - {"origin": [8, 16, -33], "size": [14, 0, 11], "uv": [40, 105], "mirror": true} + {"origin": [8, 16, -33], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} ] }, { "name": "left_wing2", "parent": "left_wing", - "pivot": [22, 16, -27.5], + "pivot": [24, 16, -27.5], "cubes": [ - {"origin": [22, 16, -33], "size": [14, 0, 11], "uv": [89, 51], "mirror": true} + {"origin": [24, 16, -35], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} + ] + }, + { + "name": "left_wing_back", + "parent": "head", + "pivot": [8, 16, -2.5], + "cubes": [ + {"origin": [8, 16, -8], "size": [16, 0, 15], "uv": [48, 99], "mirror": true} + ] + }, + { + "name": "left_wing_back2", + "parent": "left_wing_back", + "pivot": [24, 16, -2.5], + "cubes": [ + {"origin": [24, 16, -10], "size": [16, 0, 17], "uv": [-17, 105], "mirror": true} + ] + }, + { + "name": "right_wing_back", + "parent": "head", + "pivot": [-8, 16, -2.5], + "cubes": [ + {"origin": [-24, 16, -8], "size": [16, 0, 15], "uv": [48, 99]} + ] + }, + { + "name": "right_wing_back2", + "parent": "right_wing_back", + "pivot": [-24, 16, -2.5], + "cubes": [ + {"origin": [-40, 16, -10], "size": [16, 0, 17], "uv": [-17, 105]} + ] + }, + { + "name": "right_wing", + "parent": "head", + "pivot": [-8, 16, -27.5], + "cubes": [ + {"origin": [-24, 16, -33], "size": [16, 0, 15], "uv": [48, 99]} + ] + }, + { + "name": "right_wing2", + "parent": "right_wing", + "pivot": [-24, 16, -27.5], + "cubes": [ + {"origin": [-40, 16, -35], "size": [16, 0, 17], "uv": [-17, 105]} ] }, { @@ -94,7 +125,10 @@ "parent": "head", "pivot": [0, 17.5, -37], "cubes": [ - {"origin": [-4, 17, -41], "size": [8, 1, 8], "uv": [96, 108]} + {"origin": [-4, 17, -41], "size": [1, 2, 8], "uv": [32, 105]}, + {"origin": [-3, 17, -41], "size": [6, 2, 1], "uv": [42, 105]}, + {"origin": [-3, 17, -34], "size": [6, 2, 1], "uv": [42, 115]}, + {"origin": [3, 17, -41], "size": [1, 2, 8], "uv": [32, 115]} ] }, { @@ -130,38 +164,6 @@ {"origin": [4.5, 4, -17], "size": [12, 3, 10], "inflate": 0.01, "uv": [0, 65], "mirror": true}, {"origin": [16.5, 4, -14], "size": [7, 3, 7], "inflate": 0.01, "uv": [90, 73], "mirror": true} ] - }, - { - "name": "right_wing3", - "parent": "torso", - "pivot": [-9, 16, 1.5], - "cubes": [ - {"origin": [-23, 16, -4], "size": [14, 0, 11], "uv": [40, 105]} - ] - }, - { - "name": "right_wing4", - "parent": "right_wing3", - "pivot": [-23, 16, 1.5], - "cubes": [ - {"origin": [-37, 16, -4], "size": [14, 0, 11], "uv": [89, 51]} - ] - }, - { - "name": "left_wing3", - "parent": "torso", - "pivot": [9, 16, 1.5], - "cubes": [ - {"origin": [9, 16, -4], "size": [14, 0, 11], "uv": [40, 105], "mirror": true} - ] - }, - { - "name": "left_wing4", - "parent": "left_wing3", - "pivot": [23, 16, 1.5], - "cubes": [ - {"origin": [23, 16, -4], "size": [14, 0, 11], "uv": [89, 51], "mirror": true} - ] } ] } diff --git a/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json b/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json new file mode 100644 index 00000000..22d0bcdf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json @@ -0,0 +1,194 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.creepinghorror", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]}, + {"origin": [-4, 2, -11], "size": [1, 2, 5], "pivot": [-3.5, 3, -7], "rotation": [24.14867, 20.70481, 9.00717], "uv": [0, 0]}, + {"origin": [3, 2, -11], "size": [1, 2, 5], "pivot": [3.5, 3, -7], "rotation": [24.14867, -20.70481, -9.00717], "uv": [0, 0], "mirror": true}, + {"origin": [-4, 8, -11], "size": [1, 2, 5], "pivot": [-3.5, 9, -7], "rotation": [-24.14867, 20.70481, -9.00717], "uv": [0, 0]}, + {"origin": [3, 8, -11], "size": [1, 2, 5], "pivot": [3.5, 9, -7], "rotation": [-24.14867, -20.70481, 9.00717], "uv": [0, 0], "mirror": true}, + {"origin": [-4, 2, -7], "size": [8, 8, 2], "uv": [104, 12]}, + {"origin": [-6, 0, -7], "size": [12, 0, 5], "pivot": [0, 0, -7], "rotation": [30, 0, -180], "uv": [100, 84]}, + {"origin": [-6, 0, -5], "size": [12, 0, 6], "pivot": [0, 0, -5], "rotation": [25, 0, -180], "uv": [100, 54]}, + {"origin": [-6, 0, -2], "size": [12, 0, 7], "pivot": [0, 0, -2], "rotation": [15, 0, -180], "uv": [100, 43]}, + {"origin": [-6, 0, 2], "size": [12, 0, 8], "pivot": [0, 0, 2], "rotation": [10, 0, -180], "uv": [92, 35]}, + {"origin": [-6, 0, 7], "size": [12, 0, 9], "pivot": [0, 0, 7], "rotation": [0, 0, 180], "uv": [92, 26]}, + {"origin": [-12, 6, -2], "size": [12, 0, 7], "pivot": [-6, 6, -2], "rotation": [20, 0, -90], "uv": [100, 43], "mirror": true}, + {"origin": [-12, 6, 2], "size": [12, 0, 8], "pivot": [-6, 6, 2], "rotation": [10, 0, -90], "uv": [92, 35], "mirror": true}, + {"origin": [-12, 6, 7], "size": [12, 0, 9], "pivot": [-6, 6, 7], "rotation": [5, 0, -90], "uv": [92, 26], "mirror": true}, + {"origin": [0, 6, 2], "size": [12, 0, 8], "pivot": [6, 6, 2], "rotation": [10, 0, 90], "uv": [92, 35]}, + {"origin": [0, 6, 7], "size": [12, 0, 9], "pivot": [6, 6, 7], "rotation": [5, 0, 90], "uv": [92, 26]}, + {"origin": [0, 6, -2], "size": [12, 0, 7], "pivot": [6, 6, -2], "rotation": [20, 0, 90], "uv": [100, 43]} + ] + }, + { + "name": "bone", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-6, 9.85673, -2.40373], "size": [12, 0, 5], "pivot": [0, 6, -7], "rotation": [50, 0, 0], "uv": [100, 84]}, + {"origin": [-6, 10.24264, -0.75736], "size": [12, 0, 6], "pivot": [0, 6, -5], "rotation": [45, 0, 0], "uv": [100, 54]}, + {"origin": [-6, 11.19615, 1], "size": [12, 0, 7], "pivot": [0, 6, -2], "rotation": [30, 0, 0], "uv": [100, 43]}, + {"origin": [-6, 11.43785, 4.53571], "size": [12, 0, 8], "pivot": [0, 6, 2], "rotation": [25, 0, 0], "uv": [92, 35]}, + {"origin": [-6, 11.79555, 8.55291], "size": [12, 0, 9], "pivot": [0, 6, 7], "rotation": [15, 0, 0], "uv": [92, 26]} + ] + }, + { + "name": "rightjaw", + "parent": "body", + "pivot": [-6, 6, -7], + "cubes": [ + {"origin": [-6, 3, -13], "size": [4, 6, 6], "uv": [104, 0]} + ] + }, + { + "name": "leftjaw", + "parent": "body", + "pivot": [6, 6, -7], + "cubes": [ + {"origin": [2, 3, -13], "size": [4, 6, 6], "uv": [104, 0], "mirror": true} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [52, 46]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 94]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-1.5, 4.5, 35], "size": [3, 3, 14], "uv": [58, 26]}, + {"origin": [-4.5, 6, 39], "size": [9, 0, 20], "uv": [0, 26]} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [100, 60]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [100, 60]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [100, 60], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json b/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json new file mode 100644 index 00000000..3e6f3cf6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json @@ -0,0 +1,253 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 8.5, 16.125] + }, + { + "name": "waist", + "parent": "bone", + "pivot": [0, 8.5, 16.125], + "cubes": [ + {"origin": [-10, 1, 15], "size": [20, 19, 6], "uv": [98, 55]} + ] + }, + { + "name": "tail", + "parent": "waist", + "pivot": [0, 7.83333, 20.83333], + "cubes": [ + {"origin": [-7, 2, 21], "size": [14, 17, 17], "uv": [70, 81]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 6.5, 37.5], + "cubes": [ + {"origin": [-5, 2, 38], "size": [10, 11, 17], "uv": [62, 115]} + ] + }, + { + "name": "tail3", + "parent": "tail2", + "pivot": [0, 5.5, 54.5], + "cubes": [ + {"origin": [-3, 2, 55], "size": [6, 7, 7], "uv": [34, 163]} + ] + }, + { + "name": "body", + "parent": "bone", + "pivot": [0, 11.33767, -10.06778], + "cubes": [ + {"origin": [-13, 0, -19], "size": [26, 21, 34], "uv": [0, 0]}, + {"origin": [-11, 2, -24.6], "size": [22, 21, 13], "pivot": [0, 12.5, -19.6], "rotation": [-12.5, 0, 0], "uv": [0, 81]} + ] + }, + { + "name": "neck", + "parent": "body", + "pivot": [0, 20.33333, -19.1], + "cubes": [ + {"origin": [-8, 10, -26.6], "size": [16, 16, 15], "uv": [0, 115]} + ] + }, + { + "name": "neck2", + "parent": "neck", + "pivot": [0, 25.5, -19.1], + "cubes": [ + {"origin": [-6, 26, -25.6], "size": [12, 8, 13], "uv": [120, 12]} + ] + }, + { + "name": "neck3", + "parent": "neck2", + "pivot": [0, 34, -19.1], + "cubes": [ + {"origin": [-5, 34, -24.6], "size": [10, 6, 11], "uv": [0, 146]} + ] + }, + { + "name": "head", + "parent": "neck3", + "pivot": [0.025, 40.75, -18.1], + "cubes": [ + {"origin": [-6.5, 39, -25.6], "size": [13, 12, 13], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [116, 115]}, + {"origin": [-4.9, 39, -37.6], "size": [10, 3, 16], "uv": [120, 33]}, + {"origin": [-5.5, 42, -30.6], "size": [11, 7, 9], "uv": [100, 156]}, + {"origin": [-5.5, 42, -37.6], "size": [11, 7, 8], "inflate": 0.2, "uv": [150, 65]} + ] + }, + { + "name": "googles", + "parent": "head", + "pivot": [0, 47.45804, -21.34628], + "cubes": [ + {"origin": [-5.5, 46.7, -27.4], "size": [11, 3, 1], "inflate": 0.1, "pivot": [0, 47.6, -24.6], "rotation": [9, 0, 0], "uv": [162, 151]}, + {"origin": [-7, 45.7, -19.3], "size": [14, 3, 7], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [140, 156]}, + {"origin": [-7.5, 44.7, -26.6], "size": [15, 5, 8], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [150, 52]} + ] + }, + { + "name": "saddle", + "parent": "body", + "pivot": [4.66667, 18.5, 1.16667], + "cubes": [ + {"origin": [-13, 21, -10], "size": [26, 3, 23], "uv": [0, 55]}, + {"origin": [-9, 24, -10], "size": [18, 5, 3], "uv": [132, 106]}, + {"origin": [-13, 24, 9], "size": [26, 4, 4], "uv": [132, 80]}, + {"origin": [-14, -1, 7], "size": [28, 10, 2], "uv": [120, 0]}, + {"origin": [-15, 9, 6], "size": [2, 14, 4], "uv": [88, 164]}, + {"origin": [13, 9, 6], "size": [2, 14, 4], "uv": [88, 164], "mirror": true}, + {"origin": [13, 9, -7], "size": [2, 14, 4], "uv": [88, 164], "mirror": true}, + {"origin": [-15, 9, -7], "size": [2, 14, 4], "uv": [88, 164]}, + {"origin": [-14, -1, -6], "size": [28, 10, 2], "uv": [120, 0]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [-10.875, 0.875, 13.375], + "rotation": [0, 45, 0], + "cubes": [ + {"origin": [-14, 0, 9], "size": [5, 3, 9], "uv": [60, 164]} + ] + }, + { + "name": "left_leg2", + "parent": "left_leg", + "pivot": [-14.66667, 0.66667, 13.33333] + }, + { + "name": "left_leg3", + "parent": "left_leg2", + "pivot": [-14.66667, 0.66667, 13.33333], + "cubes": [ + {"origin": [-19, 0, 9], "size": [5, 2, 9], "uv": [140, 166]} + ] + }, + { + "name": "left_leg4", + "parent": "left_leg3", + "pivot": [-19.25, 0.5, 13.25], + "cubes": [ + {"origin": [-27, 0, 9], "size": [8, 1, 9], "uv": [0, 163]}, + {"origin": [-30, 0, 9], "size": [3, 1, 8], "uv": [168, 114]} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [10.875, 0.875, 13.375], + "rotation": [0, -45, 0], + "cubes": [ + {"origin": [9, 0, 9], "size": [5, 3, 9], "uv": [60, 164], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "right_leg", + "pivot": [14.66667, 0.66667, 13.33333] + }, + { + "name": "right_leg3", + "parent": "right_leg2", + "pivot": [14.66667, 0.66667, 13.33333], + "cubes": [ + {"origin": [14, 0, 9], "size": [5, 2, 9], "uv": [140, 166], "mirror": true} + ] + }, + { + "name": "right_leg4", + "parent": "right_leg3", + "pivot": [19.25, 0.5, 13.25], + "cubes": [ + {"origin": [19, 0, 9], "size": [8, 1, 9], "uv": [0, 163], "mirror": true}, + {"origin": [27, 0, 9], "size": [3, 1, 8], "uv": [168, 114], "mirror": true} + ] + }, + { + "name": "left_arm", + "parent": "body", + "pivot": [-12.41667, 1.66667, -9.25], + "cubes": [ + {"origin": [-15, 0, -18], "size": [4, 6, 15], "uv": [62, 143]} + ] + }, + { + "name": "left_arm2", + "parent": "left_arm", + "pivot": [-14.7, 1.4, -9], + "cubes": [ + {"origin": [-25, 0, -17], "size": [10, 5, 13], "uv": [132, 88]} + ] + }, + { + "name": "left_arm3", + "parent": "left_arm2", + "pivot": [-25.125, 1.125, -8.625], + "cubes": [ + {"origin": [-35, 0, -17], "size": [10, 3, 13], "uv": [116, 140]} + ] + }, + { + "name": "left_arm4", + "parent": "left_arm3", + "pivot": [-35.5, 1, -8], + "cubes": [ + {"origin": [-45, 0, -17], "size": [10, 2, 9], "uv": [162, 140]}, + {"origin": [-42, 0, -7], "size": [2, 2, 3], "uv": [100, 143]}, + {"origin": [-40, 0, -8], "size": [5, 2, 4], "uv": [42, 146]} + ] + }, + { + "name": "right_arm", + "parent": "body", + "pivot": [12.41667, 1.66667, -9.25], + "cubes": [ + {"origin": [11, 0, -18], "size": [4, 6, 15], "uv": [62, 143], "mirror": true} + ] + }, + { + "name": "right_arm2", + "parent": "right_arm", + "pivot": [14.7, 1.4, -9], + "cubes": [ + {"origin": [15, 0, -17], "size": [10, 5, 13], "uv": [132, 88], "mirror": true} + ] + }, + { + "name": "right_arm3", + "parent": "right_arm2", + "pivot": [25.125, 1.125, -8.625], + "cubes": [ + {"origin": [25, 0, -17], "size": [10, 3, 13], "uv": [116, 140], "mirror": true} + ] + }, + { + "name": "right_arm4", + "parent": "right_arm3", + "pivot": [35.5, 1, -8], + "cubes": [ + {"origin": [35, 0, -17], "size": [10, 2, 9], "uv": [162, 140], "mirror": true}, + {"origin": [40, 0, -7], "size": [2, 2, 3], "uv": [100, 143], "mirror": true}, + {"origin": [35, 0, -8], "size": [5, 2, 4], "uv": [42, 146], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json b/common/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json index ae4455fb..f66614f9 100644 --- a/common/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/emperor_scorpion.geo.json @@ -5,163 +5,283 @@ "description": { "identifier": "geometry.unknown", "texture_width": 128, - "texture_height": 128, - "visible_bounds_width": 12, + "texture_height": 256, + "visible_bounds_width": 15, "visible_bounds_height": 4.5, "visible_bounds_offset": [0, 1.75, 0] }, "bones": [ { - "name": "scorpion_emperor", - "pivot": [0, 6.85714, 5.25] + "name": "Emperor_scorpion", + "pivot": [0, 8, 3] }, { - "name": "l_leg3", - "parent": "scorpion_emperor", - "pivot": [10, 6.5, 14.5], - "rotation": [0, 0, 15], + "name": "body", + "parent": "Emperor_scorpion", + "pivot": [0, 13.77778, 4.77778] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-16, 14.5, 1.5], "cubes": [ - {"origin": [9.5, 5, 12], "size": [21, 3, 5], "uv": [0, 113], "mirror": true} + {"origin": [-48, 13, -2], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} ] }, { - "name": "r_leg3", - "parent": "scorpion_emperor", - "pivot": [-10, 6.5, 14.5], - "rotation": [0, 0, -15], + "name": "right_leg4", + "parent": "right_leg3", + "pivot": [-48, 16, 1.5], "cubes": [ - {"origin": [-30.5, 5, 12], "size": [21, 3, 5], "uv": [0, 113]} + {"origin": [-80, 13, -2], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, -3], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} ] }, { - "name": "l_leg2", - "parent": "scorpion_emperor", - "pivot": [10, 6.5, 4.5], - "rotation": [0, 0, 15], + "name": "right_leg", + "parent": "body", + "pivot": [-16, 14.5, -5.5], "cubes": [ - {"origin": [9.5, 5, 2], "size": [21, 3, 5], "uv": [0, 113], "mirror": true} + {"origin": [-48, 13, -9], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} ] }, { - "name": "r_leg2", - "parent": "scorpion_emperor", - "pivot": [-10, 6.5, 4.5], - "rotation": [0, 0, -15], + "name": "right_leg2", + "parent": "right_leg", + "pivot": [-48, 16, -5.5], "cubes": [ - {"origin": [-30.5, 5, 2], "size": [21, 3, 5], "uv": [0, 113]} + {"origin": [-80, 13, -9], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, -10], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} ] }, { - "name": "l_leg", - "parent": "scorpion_emperor", - "pivot": [10, 6.5, -4.5], - "rotation": [0, 0, 15], + "name": "left_leg", + "parent": "body", + "pivot": [16, 14.5, -5.5], "cubes": [ - {"origin": [9.5, 5, -7], "size": [21, 3, 5], "uv": [0, 113], "mirror": true} + {"origin": [16, 13, -9], "size": [32, 3, 7], "uv": [44, 214]} ] }, { - "name": "r_leg", - "parent": "scorpion_emperor", - "pivot": [-10, 6.5, -4.5], - "rotation": [0, 0, -15], + "name": "left_leg2", + "parent": "left_leg", + "pivot": [48, 16, -5.5], "cubes": [ - {"origin": [-30.5, 5, -7], "size": [21, 3, 5], "uv": [0, 113]} + {"origin": [48, 13, -9], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, -10], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [16, 14.5, 1.5], + "cubes": [ + {"origin": [16, 13, -2], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg4", + "parent": "left_leg3", + "pivot": [48, 16, 1.5], + "cubes": [ + {"origin": [48, 13, -2], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, -3], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "left_leg_back", + "parent": "body", + "pivot": [16, 14.5, 8.5], + "cubes": [ + {"origin": [16, 13, 5], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg_back2", + "parent": "left_leg_back", + "pivot": [48, 16, 8.5], + "cubes": [ + {"origin": [48, 13, 5], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, 4], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "right_leg_back", + "parent": "body", + "pivot": [-16, 14.5, 8.5], + "cubes": [ + {"origin": [-48, 13, 5], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg_back2", + "parent": "right_leg_back", + "pivot": [-48, 16, 8.5], + "cubes": [ + {"origin": [-80, 13, 5], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, 4], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} + ] + }, + { + "name": "left_leg_back3", + "parent": "body", + "pivot": [16, 14.5, 15.5], + "cubes": [ + {"origin": [16, 13, 12], "size": [32, 3, 7], "uv": [44, 214]} + ] + }, + { + "name": "left_leg_back4", + "parent": "left_leg_back3", + "pivot": [48, 16, 15.5], + "cubes": [ + {"origin": [48, 13, 12], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224]}, + {"origin": [80, 12, 11], "size": [17, 5, 9], "uv": [67, 143]} + ] + }, + { + "name": "right_leg_back3", + "parent": "body", + "pivot": [-16, 14.5, 15.5], + "cubes": [ + {"origin": [-48, 13, 12], "size": [32, 3, 7], "uv": [44, 214], "mirror": true} + ] + }, + { + "name": "right_leg_back4", + "parent": "right_leg_back3", + "pivot": [-48, 16, 15.5], + "cubes": [ + {"origin": [-80, 13, 12], "size": [32, 3, 7], "inflate": 0.1, "uv": [44, 224], "mirror": true}, + {"origin": [-97, 12, 11], "size": [17, 5, 9], "uv": [67, 143], "mirror": true} ] }, { "name": "torso", - "parent": "scorpion_emperor", - "pivot": [0, 9, 7.75], + "parent": "body", + "pivot": [0, 8, 3], "cubes": [ - {"origin": [-10.5, 5, -10], "size": [21, 8, 27], "uv": [0, 0]}, - {"origin": [-8, 5, 17], "size": [16, 8, 11], "uv": [73, 109]}, - {"origin": [-9.5, 12.5, 13], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [-4.5, 12.5, 13], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [0.5, 12.5, 13], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [5.5, 12.5, 13], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [5.5, 12.5, 3], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [0.5, 12.5, 3], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [-4.5, 12.5, 3], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [-9.5, 12.5, 3], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [-9.5, 12.5, -4], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [5.5, 12.5, -4], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [6.5, 12.5, 8], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [1.5, 12.5, 8], "size": [4, 5, 0], "uv": [0, 21], "mirror": true}, - {"origin": [-4.5, 12.5, 8], "size": [4, 5, 0], "uv": [0, 21]}, - {"origin": [-10.5, 12.5, 8], "size": [4, 5, 0], "uv": [0, 21]} + {"origin": [-16, 8, -13], "size": [32, 11, 32], "uv": [0, 100]} + ] + }, + { + "name": "tail_base", + "parent": "torso", + "pivot": [0, 14.5, 18.25], + "cubes": [ + {"origin": [-12, 8, 19], "size": [24, 11, 19], "uv": [0, 143]} ] }, { "name": "tail", - "parent": "torso", - "pivot": [0, 7.00833, 27.99167], + "parent": "tail_base", + "pivot": [0, 15.5, 38], "cubes": [ - {"origin": [-4, 7, 28], "size": [8, 6, 13], "inflate": 0.1, "uv": [0, 92]} + {"origin": [-6.5, 12, 38], "size": [13, 7, 25], "uv": [0, 173]} ] }, { "name": "tail2", "parent": "tail", - "pivot": [0, 7, 41], + "pivot": [0, 15.5, 63], "cubes": [ - {"origin": [-4, 7, 41], "size": [8, 6, 13], "uv": [42, 92]} - ] - }, - { - "name": "tail3", - "parent": "tail2", - "pivot": [0, 7, 54], - "cubes": [ - {"origin": [-6.5, 7, 54], "size": [13, 11, 11], "uv": [62, 62]}, - {"origin": [-2.5, 18, 56], "size": [5, 17, 7], "uv": [84, 84]}, - {"origin": [0, 35, 56], "size": [0, 17, 7], "uv": [52, 104]}, - {"origin": [0, 4, 70], "size": [0, 17, 7], "pivot": [0, 12.5, 73.5], "rotation": [-90, 0, 0], "uv": [52, 104]}, - {"origin": [0, 24, 49], "size": [0, 17, 7], "pivot": [0, 32.5, 52.5], "rotation": [45, 0, 0], "uv": [52, 104]} + {"origin": [-5.5, 12, 97], "size": [11, 22, 11], "uv": [0, 205]}, + {"origin": [0, 34, 100], "size": [0, 15, 8], "uv": [51, 165]}, + {"origin": [-4.5, 12, 63], "size": [9, 7, 34], "uv": [42, 173]} ] }, { "name": "head", "parent": "torso", - "pivot": [0, 9, -8], + "pivot": [0, 13.5, -13], "cubes": [ - {"origin": [-13.5, 4, -25], "size": [27, 10, 17], "uv": [0, 35]}, - {"origin": [-5, 1, -27], "size": [2, 8, 3], "uv": [0, 62]}, - {"origin": [3, 1, -27], "size": [2, 8, 3], "uv": [0, 62], "mirror": true} + {"origin": [-14, 8, -35], "size": [28, 11, 22], "uv": [0, 0]} ] }, { - "name": "r_claw", + "name": "right_mandibule", "parent": "head", - "pivot": [-12.5, 8, -16], + "pivot": [-9.13234, 15.5, -35.71164], "cubes": [ - {"origin": [-18.5, 3, -28], "size": [6, 10, 17], "uv": [69, 0]} + {"origin": [-8, 5, -37], "size": [7, 13, 8], "pivot": [0, 13.5, -46], "rotation": [0, -22.5, 0], "uv": [54, 79]} ] }, { - "name": "r_claw2", - "parent": "r_claw", - "pivot": [-15.25, 8, -11], - "cubes": [ - {"origin": [-26.5, 3, -31], "size": [11, 10, 20], "inflate": 0.1, "uv": [0, 62]}, - {"origin": [-35.5, 8, -31], "size": [9, 0, 19], "uv": [25, 63]} - ] - }, - { - "name": "l_claw", + "name": "left_mandibule", "parent": "head", - "pivot": [12.5, 8, -16], + "pivot": [9.13234, 15.5, -35.71164], "cubes": [ - {"origin": [12.5, 3, -28], "size": [6, 10, 17], "uv": [69, 0], "mirror": true} + {"origin": [1, 5, -37], "size": [7, 13, 8], "pivot": [0, 13.5, -46], "rotation": [0, 22.5, 0], "uv": [0, 81]} ] }, { - "name": "l_claw2", - "parent": "l_claw", - "pivot": [15.25, 8, -11], + "name": "right_arm", + "parent": "head", + "pivot": [-10, 13, -21], "cubes": [ - {"origin": [26.5, 8, -31], "size": [9, 0, 19], "uv": [25, 63], "mirror": true}, - {"origin": [15.5, 3, -31], "size": [11, 10, 20], "inflate": 0.1, "uv": [0, 62], "mirror": true} + {"origin": [-28, 11, -25], "size": [18, 4, 7], "uv": [64, 44]} + ] + }, + { + "name": "right_arm2", + "parent": "right_arm", + "pivot": [-28, 13, -18], + "cubes": [ + {"origin": [-46, 11, -25], "size": [18, 4, 7], "uv": [64, 33]} + ] + }, + { + "name": "right_claw", + "parent": "right_arm2", + "pivot": [-44, 13, -21], + "cubes": [ + {"origin": [-57, 9, -27], "size": [13, 8, 11], "uv": [54, 60]}, + {"origin": [-67, 10, -29], "size": [12, 6, 15], "uv": [0, 60]}, + {"origin": [-91, 10, -22], "size": [24, 6, 8], "uv": [0, 33]}, + {"origin": [-91, 10, -29], "size": [8, 6, 7], "uv": [84, 79]} + ] + }, + { + "name": "right_claw_open", + "parent": "right_claw", + "pivot": [-58.5, 13, -22.5], + "cubes": [ + {"origin": [-83, 10, -30], "size": [25, 6, 7], "inflate": -0.1, "uv": [0, 47]} + ] + }, + { + "name": "left_arm", + "parent": "head", + "pivot": [10, 13, -21], + "cubes": [ + {"origin": [10, 11, -25], "size": [18, 4, 7], "uv": [64, 44], "mirror": true} + ] + }, + { + "name": "left_arm2", + "parent": "left_arm", + "pivot": [28, 13, -18], + "cubes": [ + {"origin": [28, 11, -25], "size": [18, 4, 7], "uv": [64, 33], "mirror": true} + ] + }, + { + "name": "left_claw", + "parent": "left_arm2", + "pivot": [44, 13, -21], + "cubes": [ + {"origin": [44, 9, -27], "size": [13, 8, 11], "uv": [54, 60], "mirror": true}, + {"origin": [55, 10, -29], "size": [12, 6, 15], "uv": [0, 60], "mirror": true}, + {"origin": [67, 10, -22], "size": [24, 6, 8], "uv": [0, 33], "mirror": true}, + {"origin": [83, 10, -29], "size": [8, 6, 7], "uv": [84, 79], "mirror": true} + ] + }, + { + "name": "left_claw_open", + "parent": "left_claw", + "pivot": [58.5, 13, -22.5], + "cubes": [ + {"origin": [58, 10, -30], "size": [25, 6, 7], "inflate": -0.1, "uv": [0, 47], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json b/common/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json index eb31a76b..b7ce482a 100644 --- a/common/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/flying_squirrel.geo.json @@ -38,7 +38,7 @@ "parent": "squirrel", "pivot": [0, 4, 2], "cubes": [ - {"origin": [0, 8.5, -6], "size": [0, 3, 11], "uv": [42, 50]} + {"origin": [0, 8.5, -6], "size": [0, 3, 11], "uv": [23, 30]} ] }, { @@ -46,7 +46,8 @@ "parent": "body", "pivot": [0, 6, -0.5], "cubes": [ - {"origin": [-3, 3.5, -6], "size": [6, 5, 11], "uv": [0, 0]} + {"origin": [-3, 3.5, -6], "size": [6, 5, 11], "uv": [0, 0]}, + {"origin": [-3, 5.5, -6], "size": [6, 3, 11], "inflate": 0.2, "uv": [0, 41]} ] }, { @@ -54,7 +55,8 @@ "parent": "body", "pivot": [0, 7.33333, -5.91667], "cubes": [ - {"origin": [-2, 5.5, -11], "size": [4, 4, 5], "uv": [17, 17]} + {"origin": [-2, 4.5, -11], "size": [4, 5, 5], "uv": [17, 17]}, + {"origin": [-1, 3.75, -11.075], "size": [2, 2, 0], "uv": [25, 1]} ] }, { @@ -62,7 +64,7 @@ "parent": "head", "pivot": [2.5, 6, -8.5], "cubes": [ - {"origin": [2, 5.5, -10], "size": [1, 1, 3], "uv": [19, 19], "mirror": true} + {"origin": [2, 4.5, -9], "size": [1, 2, 2], "uv": [30, 18], "mirror": true} ] }, { @@ -70,7 +72,7 @@ "parent": "head", "pivot": [-2.5, 6, -8.5], "cubes": [ - {"origin": [-3, 5.5, -10], "size": [1, 1, 3], "uv": [19, 19]} + {"origin": [-3, 4.5, -9], "size": [1, 2, 2], "uv": [16, 18]} ] }, { @@ -78,7 +80,7 @@ "parent": "head", "pivot": [1, 9.5, -6.5], "cubes": [ - {"origin": [1, 9.5, -7], "size": [2, 2, 1], "uv": [35, 12]} + {"origin": [1, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13]} ] }, { @@ -86,7 +88,7 @@ "parent": "head", "pivot": [-1, 9.5, -6.5], "cubes": [ - {"origin": [-3, 9.5, -7], "size": [2, 2, 1], "uv": [35, 12], "mirror": true} + {"origin": [-3, 9.5, -7], "size": [2, 2, 0], "uv": [36, 13], "mirror": true} ] }, { @@ -94,9 +96,9 @@ "parent": "body", "pivot": [0, 6, 5], "cubes": [ - {"origin": [-1.5, 5, 5], "size": [3, 11, 3], "uv": [17, 27]}, + {"origin": [-1.5, 5, 5], "size": [3, 11, 3], "uv": [14, 27]}, {"origin": [-1.5, 9, 8], "size": [3, 7, 5], "uv": [0, 17]}, - {"origin": [0, 9, 13], "size": [0, 7, 2], "uv": [60, 18]} + {"origin": [0, 9, 13], "size": [0, 7, 2], "uv": [0, 0]} ] }, { @@ -112,7 +114,7 @@ "parent": "left_arm", "pivot": [3, 5, -1], "cubes": [ - {"origin": [3, 0, -3.5], "size": [0, 5, 5], "uv": [30, 27]} + {"origin": [3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22]} ] }, { @@ -128,7 +130,7 @@ "parent": "right_arm", "pivot": [-3, 5, -1], "cubes": [ - {"origin": [-3, 0, -3.5], "size": [0, 5, 5], "uv": [30, 27], "mirror": true} + {"origin": [-3, 0, -3.5], "size": [0, 5, 5], "inflate": 0.01, "uv": [26, 22], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json b/common/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json new file mode 100644 index 00000000..8dee48f1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/hercules_beetle.geo.json @@ -0,0 +1,212 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 15, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "Hercules_beetle", + "pivot": [0, 11.49286, 5.85714] + }, + { + "name": "body", + "parent": "Hercules_beetle", + "pivot": [0, 11.49286, 5.85714] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 11.25, 0], + "cubes": [ + {"origin": [-20, 11.2, -18], "size": [40, 31, 58], "uv": [0, 160]} + ] + }, + { + "name": "wingcase", + "parent": "torso", + "pivot": [0, 42.7, -19] + }, + { + "name": "left_wingcase", + "parent": "wingcase", + "pivot": [0, 42.7, -19], + "cubes": [ + {"origin": [17, 41.2, -12], "size": [6, 14, 6], "pivot": [18, 50.2, -16], "rotation": [0, 0, 22.5], "uv": [156, 298]}, + {"origin": [0, 18.2, -19], "size": [21, 25, 60], "uv": [196, 160]} + ] + }, + { + "name": "right_wingcase", + "parent": "wingcase", + "pivot": [0, 42.7, -19], + "cubes": [ + {"origin": [-21, 18.2, -19], "size": [21, 25, 60], "uv": [218, 0]}, + {"origin": [-23, 41.2, -12], "size": [6, 14, 6], "pivot": [-18, 50.2, -16], "rotation": [0, 0, -22.5], "uv": [334, 311]} + ] + }, + { + "name": "right_wing", + "parent": "torso", + "pivot": [0, 42.2, -18], + "cubes": [ + {"origin": [-29, 42.275, -18], "size": [29, 0, 80], "pivot": [-3, 0, 0], "rotation": [0, -22.5, 0], "uv": [0, 0]}, + {"origin": [-29, 42.2, -18], "size": [29, 0, 80], "uv": [0, 80], "mirror": true} + ] + }, + { + "name": "left_wing", + "parent": "torso", + "pivot": [0, 42.2, -18], + "cubes": [ + {"origin": [0, 42.275, -18], "size": [29, 0, 80], "pivot": [3, 0, 0], "rotation": [0, 22.5, 0], "uv": [0, 0], "mirror": true}, + {"origin": [0, 42.2, -18], "size": [29, 0, 80], "uv": [0, 80]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 26.2, -12], + "cubes": [ + {"origin": [-18.5, 19.2, -33], "size": [37, 27, 24], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [218, 85]}, + {"origin": [-18.5, 39.2, -33], "size": [37, 7, 14], "inflate": 0.5, "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 15]}, + {"origin": [-19.75, 22.2, -33], "size": [0, 24, 14], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 22]}, + {"origin": [19.75, 22.2, -33], "size": [0, 24, 14], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 22], "mirror": true}, + {"origin": [-18.5, 47.2, -24], "size": [37, 10, 5], "inflate": 0.5, "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [320, 0]}, + {"origin": [-17.5, 11.2, -30], "size": [35, 33, 18], "inflate": 0.05, "uv": [196, 245]} + ] + }, + { + "name": "basket_right", + "parent": "neck", + "pivot": [-24.5, 41.19827, -27.2321], + "cubes": [ + {"origin": [-29, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42]}, + {"origin": [-20, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 54]}, + {"origin": [-29, 37.2, -35], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 48]}, + {"origin": [-29, 37.2, -17], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 84]}, + {"origin": [-29, 37.2, -35], "size": [9, 0, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42]} + ] + }, + { + "name": "basket_left", + "parent": "neck", + "pivot": [24.5, 41.19827, -27.2321], + "cubes": [ + {"origin": [29, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [0, 12, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 54], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 48], "mirror": true}, + {"origin": [20, 37.2, -17], "size": [9, 12, 0], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 84], "mirror": true}, + {"origin": [20, 37.2, -35], "size": [9, 0, 18], "pivot": [0, 32.2, -20.5], "rotation": [7.5, 0, 0], "uv": [380, 42], "mirror": true} + ] + }, + { + "name": "head", + "parent": "neck", + "pivot": [0, 24.7, -27], + "cubes": [ + {"origin": [-13.5, 9.2, -39], "size": [27, 31, 12], "uv": [182, 296]} + ] + }, + { + "name": "upper_mandibule", + "parent": "head", + "pivot": [0, 40.42222, -32.05556], + "cubes": [ + {"origin": [-5.5, 32.2, -72], "size": [11, 16, 33], "uv": [94, 249]}, + {"origin": [-4.5, 32.2, -110], "size": [9, 11, 38], "uv": [0, 249]}, + {"origin": [-4.5, 32.2, -120], "size": [9, 11, 46], "inflate": 0.5, "uv": [140, 161]}, + {"origin": [-4.5, 26.2, -120], "size": [9, 17, 10], "uv": [72, 308]}, + {"origin": [-1.5, 25.2, -82], "size": [3, 7, 6], "uv": [288, 339]}, + {"origin": [-2.5, 48.2, -67], "size": [5, 13, 9], "uv": [110, 328]}, + {"origin": [-1.5, 61.2, -64], "size": [3, 8, 6], "uv": [270, 339]}, + {"origin": [-1, 56.2, -70], "size": [2, 4, 3], "uv": [182, 249]}, + {"origin": [-1, 48.2, -70], "size": [2, 4, 3], "uv": [182, 256]}, + {"origin": [-3.5, 16.2, -118], "size": [7, 10, 8], "uv": [334, 293]} + ] + }, + { + "name": "lower_mandibule", + "parent": "head", + "pivot": [0, 15.28333, -38.91667], + "cubes": [ + {"origin": [-3.5, 10.2, -65], "size": [7, 10, 29], "uv": [0, 298]}, + {"origin": [-15.5, 10.2, -50], "size": [12, 0, 14], "pivot": [-7, 10.2, -50.5], "rotation": [37.5, 0, 0], "uv": [302, 255]}, + {"origin": [3.5, 10.2, -50], "size": [12, 0, 14], "pivot": [7, 10.2, -50.5], "rotation": [37.5, 0, 0], "uv": [302, 269]}, + {"origin": [-3.5, 7.2, -95], "size": [7, 13, 30], "uv": [260, 296]}, + {"origin": [-2.5, 10.2, -105], "size": [5, 10, 10], "uv": [138, 328]}, + {"origin": [-2.5, 20.2, -105], "size": [5, 10, 8], "uv": [334, 331]}, + {"origin": [-1.5, 20.2, -62], "size": [3, 6, 5], "uv": [306, 339]}, + {"origin": [-1.5, 20.2, -52], "size": [3, 6, 5], "uv": [340, 85]} + ] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-12.33333, 12.7, 5.5], + "cubes": [ + {"origin": [-45.5, 11.2, 2], "size": [33, 3, 7], "inflate": 0.1, "uv": [218, 136]}, + {"origin": [-63.5, 11.2, 3], "size": [18, 0, 5], "uv": [302, 283]}, + {"origin": [-71.5, 11.2, 1], "size": [8, 0, 9], "uv": [72, 335]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [12.33333, 12.7, -21.5], + "cubes": [ + {"origin": [12.5, 11.2, -25], "size": [33, 3, 7], "inflate": 0.1, "uv": [218, 146]}, + {"origin": [45.5, 11.2, -24], "size": [18, 0, 5], "uv": [302, 288]}, + {"origin": [63.5, 11.2, -26], "size": [8, 0, 9], "uv": [0, 337]} + ] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-12.33333, 12.7, -21.5], + "cubes": [ + {"origin": [-45.5, 11.2, -25], "size": [33, 3, 7], "inflate": 0.1, "uv": [72, 298]}, + {"origin": [-63.5, 11.2, -24], "size": [18, 0, 5], "uv": [110, 308]}, + {"origin": [-71.5, 11.2, -26], "size": [8, 0, 9], "uv": [34, 337]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [12.33333, 12.7, 5.5], + "cubes": [ + {"origin": [12.5, 11.2, 2], "size": [33, 3, 7], "inflate": 0.1, "uv": [298, 136]}, + {"origin": [45.5, 11.2, 3], "size": [18, 0, 5], "uv": [110, 313]}, + {"origin": [63.5, 11.2, 1], "size": [8, 0, 9], "uv": [168, 339]} + ] + }, + { + "name": "left_leg2", + "parent": "body", + "pivot": [12.33333, 12.7, -9.5], + "cubes": [ + {"origin": [12.5, 11.2, -13], "size": [33, 3, 7], "inflate": 0.1, "uv": [298, 146]}, + {"origin": [45.5, 11.2, -12], "size": [18, 0, 5], "uv": [110, 318]}, + {"origin": [63.5, 11.2, -14], "size": [8, 0, 9], "uv": [202, 339]} + ] + }, + { + "name": "right_leg2", + "parent": "body", + "pivot": [-12.33333, 12.7, -9.5], + "cubes": [ + {"origin": [-45.5, 11.2, -13], "size": [33, 3, 7], "inflate": 0.1, "uv": [302, 245]}, + {"origin": [-63.5, 11.2, -12], "size": [18, 0, 5], "uv": [110, 323]}, + {"origin": [-71.5, 11.2, -14], "size": [8, 0, 9], "uv": [236, 339]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json new file mode 100644 index 00000000..f6a76b20 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json @@ -0,0 +1,287 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.jumpybug", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 10, + "visible_bounds_height": 9.5, + "visible_bounds_offset": [0, 4.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 69, 0] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 61, 0], + "cubes": [ + {"origin": [-10, 65, -18], "size": [20, 32, 36], "uv": [0, 164]}, + {"origin": [-12, 97, -46], "size": [24, 12, 80], "uv": [0, 0]}, + {"origin": [-10, 81, 18], "size": [20, 16, 16], "uv": [224, 152]}, + {"origin": [-8, 97, -78], "size": [16, 12, 32], "uv": [176, 92]}, + {"origin": [-2.5, 85, -78], "size": [5, 12, 8], "uv": [129, 0]}, + {"origin": [0, 73, -78], "size": [0, 18, 15], "uv": [200, -15]}, + {"origin": [0, 91, -78], "size": [0, 6, 60], "uv": [268, -60]}, + {"origin": [0, 65, -74], "size": [0, 6, 56], "uv": [268, -50]}, + {"origin": [-18, 67, -16], "size": [8, 24, 32], "uv": [208, 0]}, + {"origin": [10, 67, -16], "size": [8, 24, 32], "uv": [208, 0], "mirror": true}, + {"origin": [-12, 57, -42], "size": [24, 8, 64], "uv": [0, 92]}, + {"origin": [-8, 57, -74], "size": [16, 8, 32], "uv": [192, 212]} + ] + }, + { + "name": "right_eye", + "parent": "torso", + "pivot": [-18.32132, 90.25, -12.53553], + "cubes": [ + {"origin": [-22.7, 83.25, -17], "size": [5, 14, 14], "pivot": [-16.2, 90.25, -9], "rotation": [0, -45, 0], "uv": [0, 0]} + ] + }, + { + "name": "left_eye", + "parent": "torso", + "pivot": [18.32132, 90.25, -12.53553], + "cubes": [ + {"origin": [17.7, 83.25, -17], "size": [5, 14, 14], "pivot": [16.2, 90.25, -9], "rotation": [0, 45, 0], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "torso", + "pivot": [-18, 78, -16], + "cubes": [ + {"origin": [-22, 76, -28], "size": [8, 4, 12], "uv": [268, 268]} + ] + }, + { + "name": "leftGrip", + "parent": "torso", + "pivot": [18, 78, -16], + "cubes": [ + {"origin": [14, 76, -28], "size": [8, 4, 12], "uv": [268, 268], "mirror": true} + ] + }, + { + "name": "rightAntenna", + "parent": "torso", + "pivot": [-10, 95, 14], + "cubes": [ + {"origin": [-42, 93, 14], "size": [32, 4, 4], "uv": [208, 77]} + ] + }, + { + "name": "leftAntenna", + "parent": "torso", + "pivot": [10, 95, 14], + "cubes": [ + {"origin": [10, 93, 14], "size": [32, 4, 4], "uv": [208, 77], "mirror": true} + ] + }, + { + "name": "rightArm", + "parent": "torso", + "pivot": [-12, 93, -17], + "cubes": [ + {"origin": [-14, 91, -35], "size": [4, 4, 20], "uv": [64, 232]} + ] + }, + { + "name": "rightElbow", + "parent": "rightArm", + "pivot": [-12, 95, -29], + "cubes": [ + {"origin": [-15, 91, -35], "size": [6, 32, 6], "uv": [204, 268]} + ] + }, + { + "name": "rightClaw", + "parent": "rightElbow", + "pivot": [-12, 123, -35], + "cubes": [ + {"origin": [-14, 115, -51], "size": [4, 8, 16], "uv": [164, 268]}, + {"origin": [-12, 115, -83], "size": [0, 8, 32], "uv": [0, 232]} + ] + }, + { + "name": "leftArm", + "parent": "torso", + "pivot": [12, 93, -17], + "cubes": [ + {"origin": [10, 91, -35], "size": [4, 4, 20], "uv": [64, 232], "mirror": true} + ] + }, + { + "name": "leftElbow", + "parent": "leftArm", + "pivot": [12, 95, -29], + "cubes": [ + {"origin": [9, 91, -35], "size": [6, 32, 6], "uv": [204, 268], "mirror": true} + ] + }, + { + "name": "leftClaw", + "parent": "leftElbow", + "pivot": [12, 123, -35], + "cubes": [ + {"origin": [10, 115, -51], "size": [4, 8, 16], "uv": [164, 268], "mirror": true}, + {"origin": [12, 115, -83], "size": [0, 8, 32], "uv": [0, 232], "mirror": true} + ] + }, + { + "name": "backRightThigh", + "parent": "body", + "pivot": [-12, 65, 14], + "cubes": [ + {"origin": [-28, 57, 10], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-28, 65, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-60, 57, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, 10], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-108, 64, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, 14], "size": [16, 4, 0], "uv": [208, 85]} + ] + }, + { + "name": "backLeftThigh", + "parent": "body", + "pivot": [12, 65, 14], + "cubes": [ + {"origin": [12, 57, 10], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [28, 65, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [60, 57, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, 10], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [108, 64, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, 14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontLeftThigh", + "parent": "body", + "pivot": [12, 65, -14], + "cubes": [ + {"origin": [12, 57, -18], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [28, 65, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 56, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [60, 57, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, -18], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [108, 64, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, -14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "body", + "pivot": [-12, 65, -14], + "cubes": [ + {"origin": [-28, 57, -18], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-28, 65, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-60, 57, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, -18], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-108, 64, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, -14], "size": [16, 4, 0], "uv": [208, 85]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json index 5d60c348..eba7b341 100644 --- a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json @@ -4,312 +4,491 @@ { "description": { "identifier": "geometry.unknown", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 8, - "visible_bounds_height": 7, - "visible_bounds_offset": [0, 1.5, 0] + "texture_width": 1024, + "texture_height": 1024, + "visible_bounds_width": 15, + "visible_bounds_height": 34, + "visible_bounds_offset": [0, 0, 0] }, "bones": [ { - "name": "bone", - "pivot": [0, 46.50635, 20.87778] + "name": "Kraken", + "pivot": [0, 51, -8] }, { "name": "head", - "parent": "bone", - "pivot": [0, 48.23333, 11.63333], + "parent": "Kraken", + "pivot": [0, 51, -8], "cubes": [ - {"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]}, - {"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]}, - {"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]}, - {"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]}, - {"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]}, - {"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]}, - {"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true}, - {"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true}, - {"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true}, - {"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]}, - {"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]}, - {"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]} + {"origin": [-46.5, 57, -57], "size": [93, 32, 32], "uv": [286, 184]}, + {"origin": [-33, 51, -49], "size": [66, 35, 77], "uv": [0, 184]} ] }, { "name": "mouth", "parent": "head", - "pivot": [0, 35.1, -6], + "pivot": [0, 51, -23.9], "cubes": [ - {"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]} + {"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]} ] }, { - "name": "cranium", + "name": "jaw", + "parent": "mouth", + "pivot": [0, 51, -22.4], + "cubes": [ + {"origin": [-6.5, 22, -22.4], "size": [13, 31, 16], "inflate": -0.1, "uv": [340, 0]}, + {"origin": [-5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6]}, + {"origin": [5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6], "mirror": true} + ] + }, + { + "name": "head_top", "parent": "head", - "pivot": [0, 47.5, 12], + "pivot": [0, 79.25, -6.25], "cubes": [ - {"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]}, - {"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]}, - {"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true} + {"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]}, + {"origin": [5.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0]}, + {"origin": [-108.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0], "mirror": true}, + {"origin": [-24, 172, -30], "size": [48, 48, 48], "uv": [286, 248]} ] }, { - "name": "cranium_2", - "parent": "cranium", - "pivot": [0, 53.55, 32.5], + "name": "right_eye", + "parent": "head", + "pivot": [-53, 73, -41], "cubes": [ - {"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]} + {"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]} ] }, { - "name": "cranium_3", - "parent": "cranium_2", - "pivot": [0, 49.1, 41.5], + "name": "left_eye", + "parent": "head", + "pivot": [53, 73, -41], "cubes": [ - {"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]} + {"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true} ] }, { - "name": "Tentacles", - "parent": "bone", - "pivot": [0, 45.64286, 8.5] - }, - { - "name": "Tentacles_Left", - "parent": "Tentacles", - "pivot": [6.78571, 45.64286, 25.5] - }, - { - "name": "Tentacle_1_Left", - "parent": "Tentacles_Left", - "pivot": [6.78571, 38.64286, 1.5], + "name": "l_shoulder", + "parent": "head", + "pivot": [31.1875, 61.375, -12.5], "cubes": [ - {"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]} ] }, { - "name": "Tentacle_part_1_left", - "parent": "Tentacle_1_Left", - "pivot": [6.9, 11, 1.5], + "name": "l_arm", + "parent": "l_shoulder", + "pivot": [30.85714, 13.92857, -12.5], "cubes": [ - {"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -34, -26], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_hand_1_left", - "parent": "Tentacle_part_1_left", - "pivot": [5, -21, -1], + "name": "l_arm2", + "parent": "l_arm", + "pivot": [30.66667, -34.00833, -12.5], "cubes": [ - {"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [25, -82, -23], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_1_Left2", - "parent": "Tentacles_Left", - "pivot": [6.78571, 39.64286, 9.5], + "name": "l_arm3", + "parent": "l_arm2", + "pivot": [30.4, -82, -12.5], "cubes": [ - {"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, -130, -23], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacle_part_1_left2", - "parent": "Tentacle_1_Left2", - "pivot": [6.9, 12, 9.5], + "name": "l_arm4", + "parent": "l_arm3", + "pivot": [30, -129.975, -12.5], "cubes": [ - {"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -178, -21], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_hand_1_left2", - "parent": "Tentacle_part_1_left2", - "pivot": [5, -20, 7], + "name": "l_hand", + "parent": "l_arm4", + "pivot": [29.66667, -177.99167, -12.5], "cubes": [ - {"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [25, -203, -19], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_1_Left3", - "parent": "Tentacles_Left", - "pivot": [6.78571, 41.64286, 17.5], + "name": "l_hand2", + "parent": "l_hand", + "pivot": [29.75, -203, -12.5], "cubes": [ - {"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, -244, -33], "size": [11, 41, 41], "uv": [310, 409]} ] }, { - "name": "Tentacle_part_1_left3", - "parent": "Tentacle_1_Left3", - "pivot": [6.9, 14, 17.5], + "name": "l_hand_tip", + "parent": "l_hand2", + "pivot": [29, -244, -12.5], "cubes": [ - {"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -265, -26], "size": [8, 21, 27], "uv": [172, 468]} ] }, { - "name": "Tentacle_hand_1_left3", - "parent": "Tentacle_part_1_left3", - "pivot": [5, -18, 15], + "name": "center_tentacule", + "parent": "head", + "pivot": [0, 58.375, -52.5], + "rotation": [0, 90, 0], "cubes": [ - {"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "uv": [0, 436]} ] }, { - "name": "Tentacle_1_Left4", - "parent": "Tentacles_Left", - "pivot": [6.78571, 43.64286, 25.5], + "name": "center_tentacule2", + "parent": "center_tentacule", + "pivot": [1.48214, 10.92857, -52.5], "cubes": [ - {"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_left4", - "parent": "Tentacle_1_Left4", - "pivot": [6.9, 16, 25.5], + "name": "center_tentacule3", + "parent": "center_tentacule2", + "pivot": [1.29167, -37.00833, -52.5], "cubes": [ - {"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_left4", - "parent": "Tentacle_part_1_left4", - "pivot": [5, -16, 23], + "name": "center_tentacule4", + "parent": "center_tentacule3", + "pivot": [1.025, -85, -52.5], "cubes": [ - {"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacles_Right", - "parent": "Tentacles", - "pivot": [-6.78571, 45.64286, 25.5] - }, - { - "name": "Tentacle_1_Right", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 38.64286, 1.5], + "name": "center_tentacule5", + "parent": "center_tentacule4", + "pivot": [-0.375, -132.975, -52.5], "cubes": [ - {"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_part_1_right", - "parent": "Tentacle_1_Right", - "pivot": [-6.9, 11, 1.5], + "name": "center_tentacule6", + "parent": "center_tentacule5", + "pivot": [-0.70833, -180.99167, -52.5], "cubes": [ - {"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_hand_1_right", - "parent": "Tentacle_part_1_right", - "pivot": [-5, -21, -1], + "name": "center_tentacule_back", + "parent": "head", + "pivot": [0, 58.375, 24.5], + "rotation": [0, -90, 0], "cubes": [ - {"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "uv": [0, 436]} ] }, { - "name": "Tentacle_1_Right2", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 39.64286, 9.5], + "name": "center_tentacule_back2", + "parent": "center_tentacule_back", + "pivot": [1.48214, 10.92857, 24.5], "cubes": [ - {"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_right2", - "parent": "Tentacle_1_Right2", - "pivot": [-6.9, 12, 9.5], + "name": "center_tentacule_back3", + "parent": "center_tentacule_back2", + "pivot": [1.29167, -37.00833, 24.5], "cubes": [ - {"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_right2", - "parent": "Tentacle_part_1_right2", - "pivot": [-5, -20, 7], + "name": "center_tentacule_back4", + "parent": "center_tentacule_back3", + "pivot": [1.025, -85, 24.5], "cubes": [ - {"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacle_1_Right3", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 41.64286, 17.5], + "name": "center_tentacule_back5", + "parent": "center_tentacule_back4", + "pivot": [-0.375, -132.975, 24.5], "cubes": [ - {"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_part_1_right3", - "parent": "Tentacle_1_Right3", - "pivot": [-6.9, 14, 17.5], + "name": "center_tentacule_back6", + "parent": "center_tentacule_back5", + "pivot": [-0.70833, -180.99167, 24.5], "cubes": [ - {"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_hand_1_right3", - "parent": "Tentacle_part_1_right3", - "pivot": [-5, -18, 15], + "name": "l_back_tentacule", + "parent": "head", + "pivot": [22.1875, 58.375, 14.5], + "rotation": [0, -90, 0], "cubes": [ - {"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [16, 11, -2], "size": [17, 47, 33], "uv": [0, 356]} ] }, { - "name": "Tentacle_1_Right4", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 43.64286, 25.5], + "name": "l_back_tentacule2", + "parent": "l_back_tentacule", + "pivot": [21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [16, -37, 1], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_right4", - "parent": "Tentacle_1_Right4", - "pivot": [-6.9, 16, 25.5], + "name": "l_back_tentacule3", + "parent": "l_back_tentacule2", + "pivot": [21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [16, -85, 4], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_right4", - "parent": "Tentacle_part_1_right4", - "pivot": [-5, -16, 23], + "name": "l_back_tentacule4", + "parent": "l_back_tentacule3", + "pivot": [21.4, -85, 14.5], "cubes": [ - {"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [16, -133, 4], "size": [14, 48, 21], "uv": [170, 371]} + ] + }, + { + "name": "l_back_tentacule5", + "parent": "l_back_tentacule4", + "pivot": [21, -132.975, 14.5], + "cubes": [ + {"origin": [16, -181, 6], "size": [12, 48, 17], "uv": [243, 330]} + ] + }, + { + "name": "l_back_tentacule6", + "parent": "l_back_tentacule5", + "pivot": [20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [16, -206, 8], "size": [9, 25, 13], "uv": [242, 398]} + ] + }, + { + "name": "r_back_tentacule", + "parent": "head", + "pivot": [-22.1875, 58.375, 14.5], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [-33, 11, -2], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_back_tentacule2", + "parent": "r_back_tentacule", + "pivot": [-21.85714, 10.92857, 14.5], + "cubes": [ + {"origin": [-30, -37, 1], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_back_tentacule3", + "parent": "r_back_tentacule2", + "pivot": [-21.66667, -37.00833, 14.5], + "cubes": [ + {"origin": [-30, -85, 4], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule4", + "parent": "r_back_tentacule3", + "pivot": [-21.4, -85, 14.5], + "cubes": [ + {"origin": [-30, -133, 4], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule5", + "parent": "r_back_tentacule4", + "pivot": [-21, -132.975, 14.5], + "cubes": [ + {"origin": [-28, -181, 6], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_back_tentacule6", + "parent": "r_back_tentacule5", + "pivot": [-20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [-25, -206, 8], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_tentacule", + "parent": "head", + "pivot": [-28.1875, 58.375, -42.5], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [-39, 11, -59], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_tentacule2", + "parent": "r_tentacule", + "pivot": [-27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [-36, -37, -56], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_tentacule3", + "parent": "r_tentacule2", + "pivot": [-27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [-36, -85, -53], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule4", + "parent": "r_tentacule3", + "pivot": [-27.4, -85, -42.5], + "cubes": [ + {"origin": [-36, -133, -53], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule5", + "parent": "r_tentacule4", + "pivot": [-27, -132.975, -42.5], + "cubes": [ + {"origin": [-34, -181, -51], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_tentacule6", + "parent": "r_tentacule5", + "pivot": [-26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [-31, -206, -49], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "l_tentacule", + "parent": "head", + "pivot": [28.1875, 58.375, -42.5], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [22, 11, -59], "size": [17, 47, 33], "uv": [0, 356]} + ] + }, + { + "name": "l_tentacule2", + "parent": "l_tentacule", + "pivot": [27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [22, -37, -56], "size": [14, 48, 27], "uv": [86, 296]} + ] + }, + { + "name": "l_tentacule3", + "parent": "l_tentacule2", + "pivot": [27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [22, -85, -53], "size": [14, 48, 21], "uv": [100, 371]} + ] + }, + { + "name": "l_tentacule4", + "parent": "l_tentacule3", + "pivot": [27.4, -85, -42.5], + "cubes": [ + {"origin": [22, -133, -53], "size": [14, 48, 21], "uv": [170, 371]} + ] + }, + { + "name": "l_tentacule5", + "parent": "l_tentacule4", + "pivot": [27, -132.975, -42.5], + "cubes": [ + {"origin": [22, -181, -51], "size": [12, 48, 17], "uv": [243, 330]} + ] + }, + { + "name": "l_tentacule6", + "parent": "l_tentacule5", + "pivot": [26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [22, -206, -49], "size": [9, 25, 13], "uv": [242, 398]} + ] + }, + { + "name": "r_shoulder", + "parent": "head", + "pivot": [-31.1875, 61.375, -12.5], + "cubes": [ + {"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_arm", + "parent": "r_shoulder", + "pivot": [-30.85714, 13.92857, -12.5], + "cubes": [ + {"origin": [-39, -34, -26], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_arm2", + "parent": "r_arm", + "pivot": [-30.66667, -34.00833, -12.5], + "cubes": [ + {"origin": [-39, -82, -23], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_arm3", + "parent": "r_arm2", + "pivot": [-30.4, -82, -12.5], + "cubes": [ + {"origin": [-39, -130, -23], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_arm4", + "parent": "r_arm3", + "pivot": [-30, -129.975, -12.5], + "cubes": [ + {"origin": [-37, -178, -21], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_hand", + "parent": "r_arm4", + "pivot": [-29.66667, -177.99167, -12.5], + "cubes": [ + {"origin": [-34, -203, -19], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_hand2", + "parent": "r_hand", + "pivot": [-29.75, -203, -12.5], + "cubes": [ + {"origin": [-36, -244, -33], "size": [11, 41, 41], "uv": [310, 409], "mirror": true} + ] + }, + { + "name": "r_hand_tip", + "parent": "r_hand2", + "pivot": [-29, -244, -12.5], + "cubes": [ + {"origin": [-33, -265, -26], "size": [8, 21, 27], "uv": [172, 468], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json b/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json new file mode 100644 index 00000000..d42c4716 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json @@ -0,0 +1,281 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.lurkingterror", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 8, + "visible_bounds_height": 4.5, + "visible_bounds_offset": [0, 1.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]} + ] + }, + { + "name": "upperRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, 13.5, -21], "size": [4, 3, 14], "pivot": [4, 5.5, -14], "rotation": [0, 0, -90], "uv": [0, 50]}, + {"origin": [5.5, 16.5, -21], "size": [3, 3, 14], "pivot": [4, 8.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [8.5, 15.5, -21], "size": [3, 4, 14], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [64, 47]}, + {"origin": [4.5, 15.5, -21], "size": [4, 4, 2], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [8.5, -1.5, -20], "size": [6, 1, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [64, 65]}, + {"origin": [14.5, -7.5, -20], "size": [1, 6, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [34, 87]} + ] + }, + { + "name": "upperLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, 13.5, -21], "size": [4, 3, 14], "pivot": [-4, 5.5, -14], "rotation": [0, 0, 90], "uv": [0, 50]}, + {"origin": [-8.5, 16.5, -21], "size": [3, 3, 14], "pivot": [-4, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [-11.5, 15.5, -21], "size": [3, 4, 14], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 67]}, + {"origin": [-8.5, 15.5, -21], "size": [4, 4, 2], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [-14.5, -1.5, -20], "size": [6, 1, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [64, 79]}, + {"origin": [-15.5, -7.5, -20], "size": [1, 6, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [88, 0]} + ] + }, + { + "name": "lowerRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, -4.5, -21], "size": [4, 3, 14], "pivot": [4, 6.5, -14], "rotation": [0, 0, 90], "uv": [52, 0]}, + {"origin": [5.5, -7.5, -21], "size": [3, 3, 14], "pivot": [4, 3.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [8.5, -7.5, -21], "size": [3, 4, 14], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 47]}, + {"origin": [4.5, -7.5, -21], "size": [4, 4, 2], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [8.5, -7.5, -20], "size": [6, 1, 13], "pivot": [11, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 79]}, + {"origin": [14.5, -6.5, -20], "size": [1, 6, 13], "pivot": [11, 10.5, -14], "rotation": [0, 0, 90], "uv": [88, 0]} + ] + }, + { + "name": "lowerLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, -4.5, -21], "size": [4, 3, 14], "pivot": [-4, 6.5, -14], "rotation": [0, 0, -90], "uv": [52, 0]}, + {"origin": [-8.5, -7.5, -21], "size": [3, 3, 14], "pivot": [-4, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [-11.5, -7.5, -21], "size": [3, 4, 14], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 67]}, + {"origin": [-8.5, -7.5, -21], "size": [4, 4, 2], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [-14.5, -7.5, -20], "size": [6, 1, 13], "pivot": [-11, 3.5, -14], "rotation": [0, 0, -90], "uv": [64, 65]}, + {"origin": [-15.5, -6.5, -20], "size": [1, 6, 13], "pivot": [-11, 10.5, -14], "rotation": [0, 0, -90], "uv": [34, 87]} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [0, 26]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 26]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-5, 1, 35], "size": [10, 10, 14], "uv": [49, 95]} + ] + }, + { + "name": "leftWing1", + "parent": "body", + "pivot": [-2, 12, -7], + "cubes": [ + {"origin": [-2, 12, -7], "size": [0, 32, 8], "uv": [48, 47]} + ] + }, + { + "name": "leftWing2", + "parent": "body", + "pivot": [-3, 12, 0], + "cubes": [ + {"origin": [-3, 12, 0], "size": [0, 27, 8], "uv": [48, 47]} + ] + }, + { + "name": "rightWing1", + "parent": "body", + "pivot": [2, 12, -7], + "cubes": [ + {"origin": [2, 12, -7], "size": [0, 32, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightWing2", + "parent": "body", + "pivot": [3, 12, 0], + "cubes": [ + {"origin": [3, 12, 0], "size": [0, 27, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "leftmiddleleg", + "parent": "root", + "pivot": [6, 8, 1.5], + "cubes": [ + {"origin": [6, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftmiddleknee", + "parent": "leftmiddleleg", + "pivot": [18, 6, 0.5], + "cubes": [ + {"origin": [15, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftmiddlefoot", + "parent": "leftmiddleknee", + "pivot": [18, 18, 0.5], + "cubes": [ + {"origin": [15, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "rightmiddleleg", + "parent": "root", + "pivot": [-6, 8, 1.5], + "cubes": [ + {"origin": [-18, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightmiddleknee", + "parent": "rightmiddleleg", + "pivot": [-18, 6, 0.5], + "cubes": [ + {"origin": [-18, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightmiddlefoot", + "parent": "rightmiddleknee", + "pivot": [-18, 18, 0.5], + "cubes": [ + {"origin": [-35, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/mantis.geo.json b/common/src/main/resources/assets/antarchy/geo/mantis.geo.json index 11c36789..ad88837b 100644 --- a/common/src/main/resources/assets/antarchy/geo/mantis.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/mantis.geo.json @@ -6,7 +6,7 @@ "identifier": "geometry.mantis", "texture_width": 256, "texture_height": 256, - "visible_bounds_width": 7, + "visible_bounds_width": 8, "visible_bounds_height": 5.5, "visible_bounds_offset": [0, 2.25, 0] }, @@ -36,7 +36,9 @@ "parent": "body", "pivot": [0, 48, 0], "cubes": [ - {"origin": [-4, 48, -2], "size": [8, 8, 4], "uv": [26, 104]} + {"origin": [-4, 48, -2], "size": [8, 8, 4], "uv": [26, 104]}, + {"origin": [-4, 35, -5], "size": [0, 22, 11], "pivot": [-4, 56, 0], "rotation": [-45, 0, 22.5], "uv": [0, 53]}, + {"origin": [4, 35, -5], "size": [0, 22, 11], "pivot": [4, 56, 0], "rotation": [-45, 0, -22.5], "uv": [0, 53], "mirror": true} ] }, { @@ -44,6 +46,7 @@ "parent": "neck", "pivot": [-2, 56, 0], "cubes": [ + {"origin": [-6.5, 59.5, -5], "size": [13, 0, 17], "uv": [75, 65]}, {"origin": [-4, 56, -5], "size": [8, 4, 8], "uv": [84, 92]} ] }, @@ -196,6 +199,7 @@ "parent": "frontRightLeg", "pivot": [-22, 31, 1], "cubes": [ + {"origin": [-28, 27.5, 1.25], "size": [6, 7, 0], "uv": [84, 33]}, {"origin": [-46, 30.5, -1], "size": [24, 1, 2], "uv": [80, 44]} ] }, @@ -220,7 +224,8 @@ "parent": "frontLeftLeg", "pivot": [22, 31, 1], "cubes": [ - {"origin": [22, 30.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true} + {"origin": [22, 30.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true}, + {"origin": [22, 27.5, 1.25], "size": [6, 7, 0], "uv": [84, 33], "mirror": true} ] }, { @@ -244,7 +249,8 @@ "parent": "backRightLeg", "pivot": [-22, 26, 1], "cubes": [ - {"origin": [-46, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44]} + {"origin": [-46, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44]}, + {"origin": [-28, 22.5, 1.25], "size": [6, 7, 0], "uv": [84, 33]} ] }, { @@ -268,7 +274,8 @@ "parent": "backLeftLeg", "pivot": [22, 26, 1], "cubes": [ - {"origin": [22, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true} + {"origin": [22, 25.5, -1], "size": [24, 1, 2], "uv": [80, 44], "mirror": true}, + {"origin": [22, 22.5, 1.25], "size": [6, 7, 0], "uv": [84, 33], "mirror": true} ] }, { diff --git a/common/src/main/resources/assets/antarchy/geo/nightmare.geo.json b/common/src/main/resources/assets/antarchy/geo/nightmare.geo.json index b2b50762..f724110b 100644 --- a/common/src/main/resources/assets/antarchy/geo/nightmare.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/nightmare.geo.json @@ -4,23 +4,28 @@ { "description": { "identifier": "geometry.unknown", - "texture_width": 128, - "texture_height": 512, - "visible_bounds_width": 15, + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 17, "visible_bounds_height": 4.5, "visible_bounds_offset": [0, 1.75, 0] }, "bones": [ { "name": "Nightmare", - "pivot": [0, 19.5, 15] + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "Nightmare", + "pivot": [0, 17.5, 15] }, { "name": "R_Tight", - "parent": "Nightmare", + "parent": "body", "pivot": [-11, 21.25, 18.25], "cubes": [ - {"origin": [-15, 9, 10], "size": [8, 20, 13], "uv": [0, 179], "mirror": true} + {"origin": [-15, 9, 10], "size": [8, 20, 13], "uv": [0, 128], "mirror": true} ] }, { @@ -28,7 +33,7 @@ "parent": "R_Tight", "pivot": [-11, 12, 19.5], "cubes": [ - {"origin": [-14, 2, 16.5], "size": [6, 10, 6], "uv": [58, 135], "mirror": true} + {"origin": [-14, 2, 16.5], "size": [6, 10, 6], "uv": [52, 77], "mirror": true} ] }, { @@ -36,17 +41,17 @@ "parent": "R_leg", "pivot": [-11, 1, 19.5], "cubes": [ - {"origin": [-15, 0, 12.5], "size": [8, 2, 10], "uv": [52, 97], "mirror": true}, - {"origin": [-8.5, 0, 5.5], "size": [0, 4, 7], "uv": [31, 80], "mirror": true}, - {"origin": [-13.5, 0, 5.5], "size": [0, 4, 7], "uv": [31, 80], "mirror": true} + {"origin": [-15, 0, 12.5], "size": [8, 2, 10], "uv": [51, 0], "mirror": true}, + {"origin": [-8.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7], "mirror": true}, + {"origin": [-13.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7], "mirror": true} ] }, { "name": "L_Tight", - "parent": "Nightmare", + "parent": "body", "pivot": [11, 21.25, 18.25], "cubes": [ - {"origin": [7, 9, 10], "size": [8, 20, 13], "uv": [0, 179]} + {"origin": [7, 9, 10], "size": [8, 20, 13], "uv": [0, 128]} ] }, { @@ -54,7 +59,7 @@ "parent": "L_Tight", "pivot": [11, 12, 19.5], "cubes": [ - {"origin": [8, 2, 16.5], "size": [6, 10, 6], "uv": [58, 135]} + {"origin": [8, 2, 16.5], "size": [6, 10, 6], "uv": [52, 77]} ] }, { @@ -62,17 +67,17 @@ "parent": "L_leg", "pivot": [11, 1, 19.5], "cubes": [ - {"origin": [7, 0, 12.5], "size": [8, 2, 10], "uv": [52, 97]}, - {"origin": [8.5, 0, 5.5], "size": [0, 4, 7], "uv": [31, 80]}, - {"origin": [13.5, 0, 5.5], "size": [0, 4, 7], "uv": [31, 80]} + {"origin": [7, 0, 12.5], "size": [8, 2, 10], "uv": [51, 0]}, + {"origin": [8.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7]}, + {"origin": [13.5, 0, 5.5], "size": [0, 4, 7], "uv": [0, -7]} ] }, { "name": "torso", - "parent": "Nightmare", + "parent": "body", "pivot": [0, 19.5, 15], "cubes": [ - {"origin": [-7, 6, -9], "size": [14, 27, 24], "uv": [5, 128]} + {"origin": [-7, 6, -9], "size": [14, 27, 24], "uv": [0, 77]} ] }, { @@ -80,7 +85,7 @@ "parent": "torso", "pivot": [0, 32, 13.08333], "cubes": [ - {"origin": [-5, 24, 13], "size": [10, 13, 22], "uv": [42, 179]} + {"origin": [-5, 24, 13], "size": [10, 13, 22], "uv": [54, 106]} ] }, { @@ -88,7 +93,7 @@ "parent": "Tail", "pivot": [0, 32.75, 35], "cubes": [ - {"origin": [-4, 27, 35], "size": [8, 10, 21], "uv": [70, 93]} + {"origin": [-4, 27, 35], "size": [8, 10, 21], "uv": [68, 28]} ] }, { @@ -96,8 +101,8 @@ "parent": "Tail2", "pivot": [0, 33.5, 56], "cubes": [ - {"origin": [0, 30, 66], "size": [0, 14, 20], "uv": [82, 199]}, - {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 19]} + {"origin": [0, 32, 66], "size": [0, 14, 20], "uv": [88, 40]}, + {"origin": [-3, 30, 56], "size": [6, 7, 21], "uv": [70, 0]} ] }, { @@ -105,50 +110,36 @@ "parent": "torso", "pivot": [0, 22.5, -8], "cubes": [ - {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 93]} + {"origin": [-9, 13, -24], "size": [18, 19, 16], "uv": [0, 42]} ] }, { "name": "head", "parent": "neck", - "pivot": [0, 21.3125, -20.875], + "pivot": [0, 26.3125, -22.875], "cubes": [ - {"origin": [-8, 17, -37], "size": [16, 9, 16], "uv": [0, 0]}, - {"origin": [-6.75, 14.75, -31], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [-6.75, 14.75, -34], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [-6.75, 14.75, -37], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [-4.75, 14.75, -38.5], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [-3.5, 14.75, -40.5], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [-1.5, 14.75, -40.5], "size": [0, 3, 2], "uv": [11, 10]}, - {"origin": [1.5, 14.75, -40.5], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [3.5, 14.75, -40.5], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [6.75, 14.75, -31], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [6.75, 14.75, -34], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [6.75, 14.75, -37], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [4.75, 14.75, -38.5], "size": [0, 3, 2], "uv": [11, 10], "mirror": true}, - {"origin": [8, 21, -34], "size": [9, 4, 13], "uv": [64, 0]}, - {"origin": [15, 21, -37], "size": [5, 5, 16], "uv": [42, 41]}, - {"origin": [-17, 21, -34], "size": [9, 4, 13], "uv": [64, 0], "mirror": true}, - {"origin": [-20, 21, -37], "size": [5, 5, 16], "uv": [42, 41], "mirror": true}, - {"origin": [0, 26, -37], "size": [0, 15, 12], "uv": [4, 66]}, - {"origin": [-5, 17, -41], "size": [10, 9, 4], "uv": [76, 62]}, - {"origin": [-1.5, 15, -45], "size": [3, 11, 4], "uv": [76, 75]} + {"origin": [-5, 13.075, -34], "size": [0, 9, 11], "uv": [42, 130]}, + {"origin": [5, 13.075, -34], "size": [0, 9, 11], "uv": [42, 130], "mirror": true}, + {"origin": [-8, 22, -42], "size": [16, 5, 19], "uv": [0, 0]}, + {"origin": [0, 27, -42], "size": [0, 13, 9], "uv": [0, 75]}, + {"origin": [0, 27, -52], "size": [0, 4, 9], "uv": [0, 70]}, + {"origin": [-15, 24, -36], "size": [9, 4, 12], "uv": [0, 202]}, + {"origin": [6, 24, -36], "size": [9, 4, 12], "uv": [0, 202], "mirror": true}, + {"origin": [-6, 18, -54], "size": [12, 5, 12], "inflate": 0.1, "uv": [68, 179]}, + {"origin": [-6, 21, -54], "size": [12, 6, 12], "uv": [0, 24]}, + {"origin": [-3, 27, -55], "size": [6, 6, 0], "uv": [53, 51]} ] }, { "name": "jaw", "parent": "head", - "pivot": [0, 17, -21], + "pivot": [0, 20, -23], "cubes": [ - {"origin": [-6, 13, -33], "size": [12, 4, 12], "uv": [0, 25]}, - {"origin": [-5, 17, -33], "size": [0, 2, 12], "uv": [26, 30]}, - {"origin": [-3.5, 17, -39], "size": [0, 2, 6], "uv": [32, 36]}, - {"origin": [-3.5, 17, -38.5], "size": [7, 2, 0], "uv": [26, 44], "mirror": true}, - {"origin": [3.5, 17, -39], "size": [0, 2, 6], "uv": [32, 36], "mirror": true}, - {"origin": [5, 17, -33], "size": [0, 2, 12], "uv": [26, 30], "mirror": true}, - {"origin": [-9, 13, -27], "size": [3, 7, 6], "inflate": 0.1, "uv": [48, 0]}, - {"origin": [6, 13, -27], "size": [3, 7, 6], "inflate": 0.1, "uv": [48, 0], "mirror": true}, - {"origin": [-5, 13, -39], "size": [10, 4, 6], "uv": [48, 25]} + {"origin": [-10, 11, -37], "size": [20, 9, 14], "inflate": 0.1, "uv": [0, 179]}, + {"origin": [-5, 16.075, -53], "size": [10, 4, 16], "uv": [48, 141]}, + {"origin": [-4, 20.075, -53], "size": [0, 4, 16], "uv": [30, 186]}, + {"origin": [-4, 20.075, -52], "size": [8, 4, 0], "uv": [30, 206], "mirror": true}, + {"origin": [4, 20.075, -53], "size": [0, 4, 16], "uv": [30, 186], "mirror": true} ] }, { @@ -156,8 +147,7 @@ "parent": "torso", "pivot": [5.83333, 28, -1.66667], "cubes": [ - {"origin": [5, 23, -5], "size": [11, 9, 9], "uv": [82, 133]}, - {"origin": [2, 28, 4], "size": [14, 0, 23], "uv": [77, 158]} + {"origin": [5, 23, -5], "size": [11, 9, 9], "uv": [76, 75]} ] }, { @@ -165,8 +155,11 @@ "parent": "L_Wing", "pivot": [16, 28.25, -2.25], "cubes": [ - {"origin": [16, 26, -5], "size": [43, 4, 7], "uv": [0, 238]}, - {"origin": [16, 28, 2], "size": [43, 0, 25], "uv": [-25, 265]} + {"origin": [16, 26, -5], "size": [43, 4, 7], "uv": [0, 161]}, + {"origin": [55, 30, 2], "size": [4, 0, 50], "uv": [70, 128]}, + {"origin": [55, 28.75, 2], "size": [4, 0, 50], "uv": [70, 128]}, + {"origin": [-3, 29, 2], "size": [10, 0, 41], "uv": [87, 128]}, + {"origin": [7, 29, 2], "size": [52, 0, 44], "uv": [80, 0]} ] }, { @@ -174,8 +167,8 @@ "parent": "L_Wing2", "pivot": [59, 28.5, -3], "cubes": [ - {"origin": [59, 27, -5], "size": [43, 3, 4], "uv": [0, 255]}, - {"origin": [59, 28, -1], "size": [49, 0, 28], "uv": [-28, 292]} + {"origin": [59, 27, -5], "size": [43, 3, 4], "uv": [0, 172]}, + {"origin": [59, 29, -5], "size": [69, 0, 51], "uv": [66, 74]} ] }, { @@ -183,8 +176,7 @@ "parent": "torso", "pivot": [-5.83333, 28, -1.66667], "cubes": [ - {"origin": [-16, 23, -5], "size": [11, 9, 9], "uv": [82, 133], "mirror": true}, - {"origin": [-16, 28, 4], "size": [14, 0, 23], "uv": [77, 158], "mirror": true} + {"origin": [-16, 23, -5], "size": [11, 9, 9], "uv": [76, 75], "mirror": true} ] }, { @@ -192,8 +184,11 @@ "parent": "R_Wing", "pivot": [-16, 28.25, -2.25], "cubes": [ - {"origin": [-59, 26, -5], "size": [43, 4, 7], "uv": [0, 238], "mirror": true}, - {"origin": [-59, 28, 2], "size": [43, 0, 25], "uv": [-25, 265], "mirror": true} + {"origin": [-59, 26, -5], "size": [43, 4, 7], "uv": [0, 161], "mirror": true}, + {"origin": [-59, 30, 2], "size": [4, 0, 50], "uv": [70, 128], "mirror": true}, + {"origin": [-59, 28.75, 2], "size": [4, 0, 50], "uv": [70, 128], "mirror": true}, + {"origin": [-59, 29, 2], "size": [52, 0, 44], "uv": [80, 0], "mirror": true}, + {"origin": [-7, 29, 2], "size": [10, 0, 41], "uv": [87, 128], "mirror": true} ] }, { @@ -201,8 +196,8 @@ "parent": "R_Wing2", "pivot": [-59, 28.5, -3], "cubes": [ - {"origin": [-102, 27, -5], "size": [43, 3, 4], "uv": [0, 255], "mirror": true}, - {"origin": [-108, 28, -1], "size": [49, 0, 28], "uv": [-28, 292], "mirror": true} + {"origin": [-128, 29, -5], "size": [69, 0, 51], "uv": [66, 74], "mirror": true}, + {"origin": [-102, 27, -5], "size": [43, 3, 4], "uv": [0, 172], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json b/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json new file mode 100644 index 00000000..5d60c348 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json @@ -0,0 +1,318 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 7, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 46.50635, 20.87778] + }, + { + "name": "head", + "parent": "bone", + "pivot": [0, 48.23333, 11.63333], + "cubes": [ + {"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]}, + {"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]}, + {"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]}, + {"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]}, + {"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]}, + {"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]}, + {"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true}, + {"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true}, + {"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true}, + {"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]}, + {"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]}, + {"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]} + ] + }, + { + "name": "mouth", + "parent": "head", + "pivot": [0, 35.1, -6], + "cubes": [ + {"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]} + ] + }, + { + "name": "cranium", + "parent": "head", + "pivot": [0, 47.5, 12], + "cubes": [ + {"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]}, + {"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]}, + {"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true} + ] + }, + { + "name": "cranium_2", + "parent": "cranium", + "pivot": [0, 53.55, 32.5], + "cubes": [ + {"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]} + ] + }, + { + "name": "cranium_3", + "parent": "cranium_2", + "pivot": [0, 49.1, 41.5], + "cubes": [ + {"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]} + ] + }, + { + "name": "Tentacles", + "parent": "bone", + "pivot": [0, 45.64286, 8.5] + }, + { + "name": "Tentacles_Left", + "parent": "Tentacles", + "pivot": [6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Left", + "parent": "Tentacles_Left", + "pivot": [6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left", + "parent": "Tentacle_1_Left", + "pivot": [6.9, 11, 1.5], + "cubes": [ + {"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left", + "parent": "Tentacle_part_1_left", + "pivot": [5, -21, -1], + "cubes": [ + {"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left2", + "parent": "Tentacles_Left", + "pivot": [6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left2", + "parent": "Tentacle_1_Left2", + "pivot": [6.9, 12, 9.5], + "cubes": [ + {"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left2", + "parent": "Tentacle_part_1_left2", + "pivot": [5, -20, 7], + "cubes": [ + {"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left3", + "parent": "Tentacles_Left", + "pivot": [6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left3", + "parent": "Tentacle_1_Left3", + "pivot": [6.9, 14, 17.5], + "cubes": [ + {"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left3", + "parent": "Tentacle_part_1_left3", + "pivot": [5, -18, 15], + "cubes": [ + {"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left4", + "parent": "Tentacles_Left", + "pivot": [6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left4", + "parent": "Tentacle_1_Left4", + "pivot": [6.9, 16, 25.5], + "cubes": [ + {"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left4", + "parent": "Tentacle_part_1_left4", + "pivot": [5, -16, 23], + "cubes": [ + {"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacles_Right", + "parent": "Tentacles", + "pivot": [-6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Right", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right", + "parent": "Tentacle_1_Right", + "pivot": [-6.9, 11, 1.5], + "cubes": [ + {"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right", + "parent": "Tentacle_part_1_right", + "pivot": [-5, -21, -1], + "cubes": [ + {"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right2", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right2", + "parent": "Tentacle_1_Right2", + "pivot": [-6.9, 12, 9.5], + "cubes": [ + {"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right2", + "parent": "Tentacle_part_1_right2", + "pivot": [-5, -20, 7], + "cubes": [ + {"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right3", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right3", + "parent": "Tentacle_1_Right3", + "pivot": [-6.9, 14, 17.5], + "cubes": [ + {"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right3", + "parent": "Tentacle_part_1_right3", + "pivot": [-5, -18, 15], + "cubes": [ + {"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right4", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right4", + "parent": "Tentacle_1_Right4", + "pivot": [-6.9, 16, 25.5], + "cubes": [ + {"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right4", + "parent": "Tentacle_part_1_right4", + "pivot": [-5, -16, 23], + "cubes": [ + {"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/pill_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/pill_bug.geo.json new file mode 100644 index 00000000..d5d12503 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/pill_bug.geo.json @@ -0,0 +1,116 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 64, + "texture_height": 128, + "visible_bounds_width": 3, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "pill_bug", + "pivot": [0, 11.875, 0.01563] + }, + { + "name": "body", + "parent": "pill_bug", + "pivot": [0, 2.25, -0.46875] + }, + { + "name": "right_leg", + "parent": "body", + "pivot": [-6, 2, -4.5], + "cubes": [ + {"origin": [-9, 0, -6], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg", + "parent": "body", + "pivot": [6, 2, -4.5], + "cubes": [ + {"origin": [6, 0, -6], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "right_leg2", + "parent": "body", + "pivot": [-6, 2, 1.5], + "cubes": [ + {"origin": [-9, 0, 0], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg2", + "parent": "body", + "pivot": [6, 2, 1.5], + "cubes": [ + {"origin": [6, 0, 0], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "right_leg3", + "parent": "body", + "pivot": [-6, 2, 6.5], + "cubes": [ + {"origin": [-9, 0, 5], "size": [3, 2, 3], "uv": [0, 7]} + ] + }, + { + "name": "left_leg3", + "parent": "body", + "pivot": [6, 2, 6.5], + "cubes": [ + {"origin": [6, 0, 5], "size": [3, 2, 3], "uv": [0, 7], "mirror": true} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 2, -1.75], + "cubes": [ + {"origin": [-6, 2, -9], "size": [12, 6, 19], "uv": [0, 0]}, + {"origin": [-6, 2, -9], "size": [12, 6, 19], "inflate": 0.1, "uv": [0, 55]} + ] + }, + { + "name": "head", + "parent": "torso", + "pivot": [0, 4, -9], + "cubes": [ + {"origin": [-3, 2, -11], "size": [6, 4, 2], "uv": [0, 0]} + ] + }, + { + "name": "right_antenna", + "parent": "head", + "pivot": [-1.5, 4, -10], + "cubes": [ + {"origin": [-7, 4, -23], "size": [6, 0, 13], "uv": [-13, 25]} + ] + }, + { + "name": "left_antenna", + "parent": "head", + "pivot": [1.5, 4, -10], + "cubes": [ + {"origin": [1, 4, -23], "size": [6, 0, 13], "uv": [-13, 25], "mirror": true} + ] + }, + { + "name": "wheel", + "parent": "pill_bug", + "pivot": [0, 21.5, 0.5], + "cubes": [ + {"origin": [-6, 14, -7], "size": [12, 15, 15], "inflate": 0.1, "uv": [4, 80]}, + {"origin": [-6, 14, -7], "size": [12, 15, 15], "uv": [10, 25]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json b/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json index f6a2ec75..0e3340b6 100644 --- a/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json @@ -74,7 +74,7 @@ "parent": "scorpion", "pivot": [0, 0, 4.5], "cubes": [ - {"origin": [-7, 0, -2], "size": [14, 6, 13], "uv": [0, 0]} + {"origin": [-7, 0, -2], "size": [14, 6, 13], "inflate": 0.05, "uv": [0, 0]} ] }, { @@ -99,7 +99,7 @@ "pivot": [1, 1, 24], "cubes": [ {"origin": [-5, 1, 24], "size": [10, 7, 8], "inflate": 0.01, "uv": [28, 35]}, - {"origin": [-0.5, 8, 28], "size": [1, 5, 3], "inflate": 0.01, "uv": [28, 35]} + {"origin": [-0.5, 8, 28], "size": [1, 8, 3], "uv": [28, 50]} ] }, { @@ -107,7 +107,9 @@ "parent": "torso", "pivot": [0, 3, -1], "cubes": [ - {"origin": [-7, 0, -11], "size": [14, 6, 10], "inflate": 0.1, "uv": [0, 19]} + {"origin": [-7, 0, -11], "size": [14, 6, 10], "inflate": 0.1, "uv": [0, 19]}, + {"origin": [-3, -3, -14], "size": [0, 8, 4], "uv": [0, 17]}, + {"origin": [3, -3, -14], "size": [0, 8, 4], "uv": [0, 17], "mirror": true} ] }, { @@ -115,7 +117,16 @@ "parent": "head", "pivot": [-7, 5, -4.75], "cubes": [ - {"origin": [-16, 3, -20], "size": [9, 4, 17], "inflate": 0.1, "uv": [54, 0]} + {"origin": [-11, 3, -11], "size": [4, 4, 8], "uv": [56, 31]}, + {"origin": [-16, 3, -20], "size": [5, 4, 17], "uv": [54, 0]} + ] + }, + { + "name": "r_claw_open", + "parent": "r_claw", + "pivot": [-11, 5, -11], + "cubes": [ + {"origin": [-11, 3, -20], "size": [4, 4, 9], "inflate": -0.01, "uv": [41, 0]} ] }, { @@ -123,7 +134,16 @@ "parent": "head", "pivot": [7, 5, -4.75], "cubes": [ - {"origin": [7, 3, -20], "size": [9, 4, 17], "inflate": 0.1, "uv": [54, 0], "mirror": true} + {"origin": [7, 3, -11], "size": [4, 4, 8], "uv": [56, 31], "mirror": true}, + {"origin": [11, 3, -20], "size": [5, 4, 17], "uv": [54, 0], "mirror": true} + ] + }, + { + "name": "l_claw_open", + "parent": "l_claw", + "pivot": [11, 5, -11], + "cubes": [ + {"origin": [7, 3, -20], "size": [4, 4, 9], "inflate": -0.01, "uv": [41, 0], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json new file mode 100644 index 00000000..ee5d6389 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json @@ -0,0 +1,231 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.spitbug", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 6, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 36, 0], + "cubes": [ + {"origin": [-11.5, 36, -18], "size": [23, 18, 37], "inflate": -0.05, "uv": [0, 103]}, + {"origin": [-9.5, 54, -35], "size": [19, 7, 59], "uv": [0, 0]}, + {"origin": [-7.5, 54, -52], "size": [15, 7, 17], "uv": [112, 28]}, + {"origin": [-6.5, 42, -51.75], "size": [3, 12, 5], "uv": [34, 23]}, + {"origin": [3.5, 42, -51.75], "size": [3, 12, 5], "uv": [34, 23], "mirror": true}, + {"origin": [-7.5, 52, -52], "size": [15, 2, 0], "uv": [0, 24]}, + {"origin": [-7.5, 44, -52], "size": [0, 10, 17], "uv": [5, 29]}, + {"origin": [-9.5, 47, -35], "size": [2, 7, 0], "uv": [37, 16]}, + {"origin": [-9.5, 45, -35], "size": [0, 9, 17], "uv": [0, 18]}, + {"origin": [9.5, 45, -35], "size": [0, 9, 17], "uv": [0, 18], "mirror": true}, + {"origin": [7.5, 47, -35], "size": [2, 7, 0], "uv": [37, 16], "mirror": true}, + {"origin": [7.5, 44, -52], "size": [0, 10, 17], "uv": [5, 29], "mirror": true}, + {"origin": [-11.5, 32.1, -18], "size": [23, 4, 33], "inflate": -0.05, "uv": [0, 66]} + ] + }, + { + "name": "jaw", + "parent": "body", + "pivot": [-3.07143, 33.92857, -16], + "cubes": [ + {"origin": [-8.5, 32, -51], "size": [17, 2, 18], "uv": [97, 0]}, + {"origin": [-11.5, 30, -33], "size": [23, 4, 17], "uv": [79, 66]}, + {"origin": [-11.5, 34, -33], "size": [0, 8, 17], "uv": [0, -17]}, + {"origin": [-11.5, 34, -33], "size": [3, 8, 0], "uv": [0, 8]}, + {"origin": [8.5, 34, -33], "size": [3, 8, 0], "uv": [0, 8], "mirror": true}, + {"origin": [11.5, 34, -33], "size": [0, 8, 17], "uv": [0, -17], "mirror": true}, + {"origin": [-8.5, 34, -51], "size": [0, 8, 18], "uv": [0, -2]}, + {"origin": [-4.5, 32.5, -52.575], "size": [3, 8, 4], "pivot": [-3, 36.5, -50.575], "rotation": [22.5, 0, 0], "uv": [35, 0]}, + {"origin": [1.5, 32.5, -52.575], "size": [3, 8, 4], "pivot": [3, 36.5, -50.575], "rotation": [22.5, 0, 0], "uv": [35, 0], "mirror": true}, + {"origin": [-8.5, 34, -51], "size": [17, 8, 0], "uv": [0, 26]}, + {"origin": [8.5, 34, -51], "size": [0, 8, 18], "uv": [0, -2], "mirror": true} + ] + }, + { + "name": "rightEye", + "parent": "body", + "pivot": [-11, 45.5, -17], + "cubes": [ + {"origin": [-12, 45.5, -19], "size": [3, 3, 3], "uv": [83, 114]} + ] + }, + { + "name": "leftEye", + "parent": "body", + "pivot": [11, 45.5, -17], + "cubes": [ + {"origin": [9, 45.5, -19], "size": [3, 3, 3], "uv": [83, 114], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "body", + "pivot": [-11.5, 54, -16], + "rotation": [0, 0, 90] + }, + { + "name": "leftGrip", + "parent": "body", + "pivot": [11.5, 54, -16], + "rotation": [0, 0, -90] + }, + { + "name": "backRightThigh", + "parent": "root", + "pivot": [-11.5, 37, 10], + "cubes": [ + {"origin": [-20.5, 33, 8], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-20.5, 37, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-34.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, 8], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-53.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [-76.5, 30, 10], "size": [9, 2, 0], "uv": [97, 32]} + ] + }, + { + "name": "backLeftThigh", + "parent": "root", + "pivot": [11.5, 37, 10], + "cubes": [ + {"origin": [11.5, 33, 8], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [20.5, 37, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [34.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, 8], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [53.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [67.5, 30, 10], "size": [9, 2, 0], "uv": [97, 32], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "root", + "pivot": [-11.5, 37, -10], + "cubes": [ + {"origin": [-20.5, 33, -12], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-20.5, 37, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-34.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, -12], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-53.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [-76.5, 30, -10], "size": [9, 2, 0], "uv": [97, 32]} + ] + }, + { + "name": "frontLeftThigh", + "parent": "root", + "pivot": [11.5, 37, -10], + "cubes": [ + {"origin": [11.5, 33, -12], "size": [9, 4, 4], "uv": [83, 120]} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [20.5, 37, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [83, 103]} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [34.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, -12], "size": [19, 4, 4], "uv": [97, 20]} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [53.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [97, 28]}, + {"origin": [67.5, 30, -10], "size": [9, 2, 0], "uv": [97, 32], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json new file mode 100644 index 00000000..07b58cbc --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json @@ -0,0 +1,134 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.Stinkbug", + "texture_width": 64, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 1.14286, -0.57143] + }, + { + "name": "right_leg", + "parent": "root", + "pivot": [-3, 1, 0.5], + "cubes": [ + {"origin": [-7, 1, 0], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg", + "parent": "root", + "pivot": [3, 1, 0.5], + "cubes": [ + {"origin": [3, 1, 0], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_front", + "parent": "root", + "pivot": [-3, 1, -1.5], + "cubes": [ + {"origin": [-7, 1, -2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_front", + "parent": "root", + "pivot": [3, 1, -1.5], + "cubes": [ + {"origin": [3, 1, -2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_back", + "parent": "root", + "pivot": [-3, 1, 2.5], + "cubes": [ + {"origin": [-7, 1, 2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_back", + "parent": "root", + "pivot": [3, 1, 2.5], + "cubes": [ + {"origin": [3, 1, 2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 1, 1], + "cubes": [ + {"origin": [-3, 1, -2], "size": [6, 4, 6], "uv": [0, 0]}, + {"origin": [-3, 1, -2], "size": [6, 4, 6], "inflate": 0.2, "uv": [0, 11]} + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 2.25, -2], + "cubes": [ + {"origin": [-3, 1.25, -6], "size": [6, 2, 4], "uv": [18, 0]} + ] + }, + { + "name": "right_eye", + "parent": "head", + "pivot": [-3, 2.75, -5.5], + "cubes": [ + {"origin": [-3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9]} + ] + }, + { + "name": "left_eye", + "parent": "head", + "pivot": [3, 2.75, -5.5], + "cubes": [ + {"origin": [3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9], "mirror": true} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-2, 2.75, -5], + "cubes": [ + {"origin": [-2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2]} + ] + }, + { + "name": "r_antenna2", + "parent": "r_antenna", + "pivot": [-2, 6.75, -5], + "cubes": [ + {"origin": [-2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8]} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [2, 2.75, -5], + "cubes": [ + {"origin": [2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2], "mirror": true} + ] + }, + { + "name": "l_antenna2", + "parent": "l_antenna", + "pivot": [2, 6.75, -5], + "cubes": [ + {"origin": [2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/termite.geo.json b/common/src/main/resources/assets/antarchy/geo/termite.geo.json new file mode 100644 index 00000000..d6262550 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/termite.geo.json @@ -0,0 +1,197 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.Termite", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "Termite", + "pivot": [0, 1.21429, -1.91667] + }, + { + "name": "r_leg", + "parent": "Termite", + "pivot": [-1.5, 1, -3.5], + "cubes": [ + {"origin": [-7.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 12]} + ] + }, + { + "name": "r_leg2", + "parent": "r_leg", + "pivot": [-7.5, 1, -3.5], + "cubes": [ + {"origin": [-12.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 28]} + ] + }, + { + "name": "l_leg", + "parent": "Termite", + "pivot": [1.5, 1, -3.5], + "cubes": [ + {"origin": [1.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 14]} + ] + }, + { + "name": "l_leg2", + "parent": "l_leg", + "pivot": [7.5, 1, -3.5], + "cubes": [ + {"origin": [7.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 30]} + ] + }, + { + "name": "r_leg5", + "parent": "Termite", + "pivot": [-1.5, 1, -2.5], + "cubes": [ + {"origin": [-7.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 16]} + ] + }, + { + "name": "r_leg6", + "parent": "r_leg5", + "pivot": [-7.5, 1, -2.5], + "cubes": [ + {"origin": [-12.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 24]} + ] + }, + { + "name": "l_leg5", + "parent": "Termite", + "pivot": [1.5, 1, -2.5], + "cubes": [ + {"origin": [1.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 18]} + ] + }, + { + "name": "l_leg6", + "parent": "l_leg5", + "pivot": [7.5, 1, -2.5], + "cubes": [ + {"origin": [7.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 34]} + ] + }, + { + "name": "r_leg3", + "parent": "Termite", + "pivot": [-1.5, 1, -4.5], + "cubes": [ + {"origin": [-7.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 20]} + ] + }, + { + "name": "r_leg4", + "parent": "r_leg3", + "pivot": [-7.5, 1, -4.5], + "cubes": [ + {"origin": [-12.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 32]} + ] + }, + { + "name": "l_leg3", + "parent": "Termite", + "pivot": [1.5, 1, -4.5], + "cubes": [ + {"origin": [1.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 22]} + ] + }, + { + "name": "l_leg4", + "parent": "l_leg3", + "pivot": [7.5, 1, -4.5], + "cubes": [ + {"origin": [7.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 26]} + ] + }, + { + "name": "thorax", + "parent": "Termite", + "pivot": [0, 2.5, -4.41667], + "cubes": [ + {"origin": [-2, 1, -4.5], "size": [4, 3, 4], "uv": [11, 20]} + ] + }, + { + "name": "head", + "parent": "thorax", + "pivot": [-0.27778, 1.83333, -4.27778], + "cubes": [ + {"origin": [-1.5, 1.25, -4.5], "size": [3, 2, 1], "uv": [12, 13]}, + {"origin": [-3, 1, -12.25], "size": [6, 3, 8], "inflate": 0.01, "uv": [20, 4]} + ] + }, + { + "name": "r_mandibule", + "parent": "head", + "pivot": [-1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [-3.5, 1, -18], "size": [2, 1, 6], "uv": [5, 31]}, + {"origin": [-1.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1]}, + {"origin": [-1.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0]}, + {"origin": [-2.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0]} + ] + }, + { + "name": "l_mandibule", + "parent": "head", + "pivot": [1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [1.5, 1, -18], "size": [2, 1, 6], "uv": [15, 28], "mirror": true}, + {"origin": [0.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1], "mirror": true}, + {"origin": [0.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0], "mirror": true}, + {"origin": [1.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0], "mirror": true} + ] + }, + { + "name": "l_eye", + "parent": "head", + "pivot": [3, 2.75, -8.25], + "cubes": [ + {"origin": [3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15]} + ] + }, + { + "name": "r_eye", + "parent": "head", + "pivot": [-3, 2.75, -8.25], + "cubes": [ + {"origin": [-3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15], "mirror": true} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [3, 3, -9.25], + "cubes": [ + {"origin": [3, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0]} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-3, 3, -9.25], + "cubes": [ + {"origin": [-4, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0], "mirror": true} + ] + }, + { + "name": "abdomen", + "parent": "thorax", + "pivot": [0, 2.5, -2.125], + "cubes": [ + {"origin": [-2.5, 1, -1.25], "size": [5, 4, 8], "inflate": 0.05, "uv": [1, 0]}, + {"origin": [-1.5, 1.25, -2.25], "size": [3, 2, 1], "uv": [11, 28]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json b/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json index dedf02c6..7d17099c 100644 --- a/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json @@ -6,9 +6,9 @@ "identifier": "geometry.unknown", "texture_width": 256, "texture_height": 256, - "visible_bounds_width": 6, - "visible_bounds_height": 5.5, - "visible_bounds_offset": [0, 2.25, 0] + "visible_bounds_width": 8, + "visible_bounds_height": 6.5, + "visible_bounds_offset": [0, 2.75, 0] }, "bones": [ { diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index d0ac4bc3..844f4ca0 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -24,19 +24,31 @@ "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", "block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "block.antarchy.amber_moss_block": "Amber Moss Block", + "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", + "block.antarchy.amber_lichen": "Amber Lichen", + "block.antarchy.bile_vein": "Bile Vein", "block.antarchy.duplicator_sapling": "Duplicator Sapling", + "block.antarchy.creepvine": "Creepvine", "block.antarchy.duct_tape": "Duct Tape", "block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", "block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", "block.antarchy.nyxite": "Nyxite", + "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", + "block.antarchy.chiten_block": "Chiten Block", + "block.antarchy.chiten_spike": "Chiten Spike", "block.antarchy.shellstone": "Shellstone", "block.antarchy.polished_shellstone": "Polished Shellstone", "block.antarchy.shellstone_bricks": "Shellstone Bricks", "block.antarchy.chiseled_shellstone": "Chiseled Shellstone", "block.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "block.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "block.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "block.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "block.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", "block.antarchy.shellstone_stairs": "Shellstone Stairs", "block.antarchy.shellstone_slab": "Shellstone Slab", @@ -89,6 +101,8 @@ "block.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", "block.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", "block.antarchy.bed_bug_egg": "Bed Bug Egg", + "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", + "block.antarchy.lurking_terror_egg": "Lurking Terror Egg", "block.antarchy.wasp_nest": "Wasp Nest", "block.antarchy.red_ant_nest": "Red Ant Nest", "block.antarchy.brown_ant_nest": "Brown Ant Nest", @@ -119,6 +133,7 @@ "block.antarchy.uranium_bars": "Uranium Bars", "block.antarchy.titanium_bars": "Titanium Bars", "tooltip.antarchy.signal_saving_bulb": "Toggles on/off. Has light level equal to the signal strength stored on it.", + "block.antarchy.bile": "Bile", "block.antarchy.ichor": "Ichor", "block.antarchy.antiwater": "Antiwater", "entity.antarchy.apple_cow": "Apple Cow", @@ -139,24 +154,37 @@ "entity.antarchy.cloud_shark": "Cloud Shark", "entity.antarchy.kraken": "The Kraken", "entity.antarchy.missile_squid": "Missile Squid", + "entity.antarchy.octopus_bomb": "Octopus Bomb", "entity.antarchy.nightmare": "Nightmare", "entity.antarchy.bed_bug": "Bed Bug", + "entity.antarchy.stink_bug": "Stink Bug", + "entity.antarchy.jumpy_bug": "Jumpy Bug", + "entity.antarchy.spit_bug": "Spit Bug", "entity.antarchy.wasp": "Wasp", "entity.antarchy.bomber": "Bomber", "entity.antarchy.moleworm": "Moleworm", "entity.antarchy.molevore": "Molevore", "entity.antarchy.mantis": "Mantis", + "entity.antarchy.alpha_mantis": "Alpha Mantis", "entity.antarchy.triffid": "Triffid", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Water Bomb", + "entity.antarchy.creeping_horror": "Creeping Horror", + "entity.antarchy.lurking_terror": "Lurking Terror", "subtitles.antarchy.mantis_ambient": "Mantis clicks", "subtitles.antarchy.mantis_hurt": "Mantis screeches", "subtitles.antarchy.mantis_attack": "Mantis snaps", "subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz", "item.antarchy.big_bertha": "Big Bertha", "item.antarchy.wasp_nest": "Wasp Nest", + "item.antarchy.stink_bug": "Stink Bug", + "item.antarchy.creeping_horror_egg": "Creeping Horror Egg", + "item.antarchy.lurking_terror_egg": "Lurking Terror Egg", + "item.antarchy.stink_bug_spawn_egg": "Stink Bug Spawn Egg", "item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg", "item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg", + "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", + "item.antarchy.spit_bug_spawn_egg": "Spit Bug Spawn Egg", "item.antarchy.big_bertha_blade": "Big Bertha Blade", "item.antarchy.big_bertha_handle": "Big Bertha Handle", "item.antarchy.big_bertha_hilt": "Big Bertha Hilt", @@ -195,6 +223,10 @@ "tooltip.antarchy.nightmare_armor_double_damage": "%s%% chance to deal double damage", "tooltip.antarchy.nightmare_armor_set_bonus": "Full Set: Wither & Dread immunity", "tooltip.antarchy.nightmare_sword": "Deals more damage as your health drops.", + "tooltip.antarchy.nightmare_sword_damage": "Deals %s damage", + "tooltip.antarchy.primordial_helmet_water_breathing": "Grants the wearer Water Breathing", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Adds %s attack knockback per piece", + "tooltip.antarchy.primordial_armor_set_bonus": "Full Set: Attacks ignore enemy knockback resistance", "attribute.antarchy.double_damage_chance": "Double Damage Chance", "attribute.antarchy.bloodglass_max_hearts": "Max Bloodglass Hearts", "item.antarchy.molevore_nose": "Molevore Nose", @@ -211,6 +243,9 @@ "item.antarchy.shellstone_bricks": "Shellstone Bricks", "item.antarchy.chiseled_shellstone": "Chiseled Shellstone", "item.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "item.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "item.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "item.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "item.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", "item.antarchy.shellstone_stairs": "Shellstone Stairs", "item.antarchy.shellstone_slab": "Shellstone Slab", @@ -242,6 +277,16 @@ "item.antarchy.hushweed": "Hushweed", "item.antarchy.umbral_moss_block": "Umbral Moss Block", "item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "item.antarchy.amber_moss_block": "Amber Moss Block", + "item.antarchy.amber_moss_carpet": "Amber Moss Carpet", + "item.antarchy.amber_lichen": "Amber Lichen", + "item.antarchy.bile_vein": "Bile Vein", + "item.antarchy.creepvine": "Creepvine", + "item.antarchy.chiten": "Chiten", + "item.antarchy.chiten_block": "Chiten Block", + "item.antarchy.chiten_spike": "Chiten Spike", + "item.antarchy.myrmite": "Myrmite", + "item.antarchy.broodstone": "Broodstone", "item.antarchy.torchflower_bush": "Torchflower Bush", "block.antarchy.torchflower_bush": "Torchflower Bush", "item.antarchy.mud_pie": "Mud Pie", @@ -269,7 +314,11 @@ "tooltip.antarchy.blood_crystal_katana.launch": "Launches you forward on hit.", "tooltip.antarchy.blood_crystal_katana.trail": "Leaves a crimson trail behind you.", "item.antarchy.mantis_claw": "Mantis Claw", + "item.antarchy.king_scale": "King Scale", + "item.antarchy.queen_scale": "Queen Scale", "item.antarchy.jumpy_bug_leg": "Jumpy Bug Leg", + "item.antarchy.jumpy_boots": "Jumpy Boots", + "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", "item.antarchy.brutalfly_wing": "Brutalfly Wing", "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", @@ -303,6 +352,7 @@ "item.antarchy.ultimate_mace": "Ultimate Mace", "item.antarchy.moggles": "Moggles", "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Bile Bucket", "item.antarchy.ichor_bucket": "Ichor Bucket", "item.antarchy.antiwater_bucket": "Antiwater Bucket", "item.antarchy.reverie_bottle": "Bottle of Reverie", @@ -337,8 +387,11 @@ "item.antarchy.cloud_shark_spawn_egg": "Cloud Shark Spawn Egg", "item.antarchy.kraken_spawn_egg": "Uh, no. Don't.", "item.antarchy.missile_squid_spawn_egg": "Missile Squid Spawn Egg", + "item.antarchy.octopus_bomb_spawn_egg": "Octopus Bomb Spawn Egg", "item.antarchy.nightmare_spawn_egg": "Nightmare Spawn Egg", "item.antarchy.toreterror_spawn_egg": "Toreterror Spawn Egg", + "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", + "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", "item.antarchy.water_cannon": "Water Cannon", "item.antarchy.primordial_scute": "Primordial Scute", "item.antarchy.primordial_helmet": "Primordial Helmet", @@ -350,10 +403,12 @@ "item.antarchy.molevore_spawn_egg": "Molevore Spawn Egg", "item.antarchy.reverie_spawn_egg": "Reverie Spawn Egg", "item.antarchy.mantis_spawn_egg": "Mantis Spawn Egg", + "item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg", "biome.antarchy.moleworm_caves": "Moleworm Caves", "biome.antarchy.butterfly_fields": "Butterfly Fields", "biome.antarchy.torchflower_fields": "Torchflower Fields", "biome.antarchy.ouranwood_forest": "Ouranwood Forest", + "biome.antarchy.fungal_ouranwood_forest": "Fungal Ouranwood Forest", "message.antarchy.brown_ant_activated": "The brown ant is ready to open its destination.", "message.antarchy.brown_ant_needs_reagent": "This brown ant needs a reagent before it can open its destination.", "message.antarchy.rainbow_ant_activated": "The rainbow ant hums with a new Infinity destination.", @@ -372,6 +427,7 @@ "message.antarchy.big_bertha.mode.nightmare": "Nightmare", "message.antarchy.big_bertha.mode.kraken": "Kraken", "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", "message.antarchy.ultimate_tool.mode_3x3": "Switched to 3x3 Mining", "message.antarchy.ultimate_tool.mode_default": "Switched to Default Mining", "advancements.antarchy.hey_listen.title": "Hey Listen", @@ -381,6 +437,7 @@ "effect.antarchy.dread": "Dread", "effect.antarchy.paralyzed": "Paralyzed", "effect.antarchy.inverted": "Inverted", + "effect.antarchy.stinky": "Stinky", "effect.antarchy.shrinking": "Shrinking", "effect.antarchy.growth": "Growth", "effect.antarchy.bloodglass_ward": "Bloodglass Ward", @@ -397,6 +454,7 @@ "tooltip.antarchy.big_bertha.mode.nightmare": "Players suffer Dread; hits inflict weakness.", "tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.", "tooltip.antarchy.big_bertha.mode.molevore": "Right-click to spin forward and drill through Molevore blocks.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Right-click to launch into the air and crash down with an AOE shockwave.", "tooltip.antarchy.ultimate_tools_3x3": "Shift-right-click to toggle 3x3 Mining.", "tooltip.antarchy.moggles.reveal": "Gives night vision and points to nearby caves.", "tooltip.antarchy.moggles.underground": "Works only while you have no sky access.", @@ -440,6 +498,8 @@ "advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.", "advancements.antarchy.in_the_upside_down.title": "In the Upside Down", "advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Whoever smelt it, dealt it", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Get Stinky for the first time.", "advancements.antarchy.ultimate_armor.title": "Ultimate Protection", "advancements.antarchy.ultimate_armor.description": "Collect the full set of Ultimate Armor.", "advancements.antarchy.ultimate_bow.title": "Bowhemian Rhapsody", @@ -450,6 +510,10 @@ "advancements.antarchy.now_watch_me_whip.description": "Now watch me nae nae", "advancements.antarchy.kill_molevore.title": "Moley Poley", "advancements.antarchy.kill_molevore.description": "Kill a Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Wetter is Better!", + "advancements.antarchy.water_cannon_craft.description": "Obtain a Water Cannon.", + "advancements.antarchy.kill_toreterror.title": "More like Tore-Terrible Aim!", + "advancements.antarchy.kill_toreterror.description": "Defeat the Toreterror.", "death.attack.bed_bug_bite": "%1$s got bit by the bed bugs", "death.attack.bed_bug_bite.player": "%1$s got bit by the bed bugs while fighting %2$s", "message.antarchy.dread_too_scared_to_sleep": "You are too scared to sleep.", @@ -464,6 +528,12 @@ "death.attack.emperor_scorpion_sting": "%1$s was stung by the Emperor Scorpion", "death.attack.emperor_scorpion_sting.player": "%1$s was stung by the Emperor Scorpion while fighting %2$s", "death.attack.cornea_stalk_prick": "%1$s was pricked to death by a Cornea Stalk", + "death.attack.toreterror_spin": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_spin.player": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_jump": "%1$s was pounded to death by Toreterror", + "death.attack.toreterror_jump.player": "%1$s was pounded to death by Toreterror", + "death.attack.water_soaked": "%1$s was super soaked to death by %2$s", + "death.attack.water_soaked.player": "%1$s was super soaked to death by %2$s", "entity.antarchy.lucid": "Lucid", "item.antarchy.lucid_spawn_egg": "Lucid Spawn Egg", "item.antarchy.lucid_eye": "Lucid Eye", @@ -586,6 +656,23 @@ "subtitles.antarchy.basilisk_hiss": "Basilisk hisses", "subtitles.antarchy.basilisk_hurt": "Basilisk hurts", "subtitles.antarchy.basilisk_death": "Basilisk dies", + "subtitles.antarchy.bomber_walk": "Bomber walks", + "subtitles.antarchy.bomber_knock": "Bomber gets hit", + "subtitles.antarchy.bomber_explode": "Bomber fuse hisses", + "subtitles.antarchy.toreterror_idle": "Toreterror idles", + "subtitles.antarchy.toreterror_hurt": "Toreterror hurts", + "subtitles.antarchy.toreterror_death": "Toreterror dies", + "subtitles.antarchy.toreterror_bomber_fire": "Toreterror launches bombers", + "subtitles.antarchy.toreterror_jump_up": "Toreterror jumps", + "subtitles.antarchy.toreterror_jump_land": "Toreterror lands", + "subtitles.antarchy.creeping_horror_growl": "Creeping Horror growls", + "subtitles.antarchy.creeping_horror_hurt": "Creeping Horror hurts", + "subtitles.antarchy.creeping_horror_bite": "Creeping Horror bites", + "subtitles.antarchy.lurking_terror_snarl": "Lurking Terror snarls", + "subtitles.antarchy.lurking_terror_hurt": "Lurking Terror hurts", + "subtitles.antarchy.lurking_terror_bite": "Lurking Terror bites", + "subtitles.antarchy.lurking_terror_fly_loop": "Lurking Terror flies", + "subtitles.antarchy.stinky_fly": "Stinky flies buzz", "item.minecraft.potion.effect.inversion": "Potion of Inversion", "item.minecraft.potion.effect.long_inversion": "Potion of Inversion", "item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion", @@ -634,6 +721,14 @@ "item.minecraft.lingering_potion.effect.long_dread": "Lingering Potion of Dread", "item.minecraft.tipped_arrow.effect.dread": "Arrow of Dread", "item.minecraft.tipped_arrow.effect.long_dread": "Arrow of Dread", + "item.minecraft.potion.effect.stinky": "Potion of Stink", + "item.minecraft.potion.effect.long_stinky": "Potion of Stink", + "item.minecraft.splash_potion.effect.stinky": "Splash Potion of Stink", + "item.minecraft.splash_potion.effect.long_stinky": "Splash Potion of Stink", + "item.minecraft.lingering_potion.effect.stinky": "Lingering Potion of Stink", + "item.minecraft.lingering_potion.effect.long_stinky": "Lingering Potion of Stink", + "item.minecraft.tipped_arrow.effect.stinky": "Arrow of Stink", + "item.minecraft.tipped_arrow.effect.long_stinky": "Arrow of Stink", "item.minecraft.potion.effect.haste": "Potion of Haste", "item.minecraft.potion.effect.strong_haste": "Potion of Haste II", "item.minecraft.splash_potion.effect.haste": "Splash Potion of Haste", @@ -655,6 +750,10 @@ "advancements.antarchy.ultimate_bow.description": "Obtain an Ultimate Bow.", "advancements.antarchy.kill_molevore.title": "Moley Poley", "advancements.antarchy.kill_molevore.description": "Kill a Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Wetter is Better!", + "advancements.antarchy.water_cannon_craft.description": "Obtain a Water Cannon.", + "advancements.antarchy.kill_toreterror.title": "More like Tore-Terrible Aim!", + "advancements.antarchy.kill_toreterror.description": "Defeat the Toreterror.", "advancements.antarchy.cancel_out.title": "1 - 1 = ?", "advancements.antarchy.cancel_out.description": "Have Growth and Shrinking active at the same time.", "death.attack.bed_bug_bite": "%1$s got bit by the bed bugs", @@ -670,6 +769,21 @@ "death.attack.emperor_scorpion_sting": "%1$s was stung by the Emperor Scorpion", "death.attack.emperor_scorpion_sting.player": "%1$s was stung by the Emperor Scorpion while fighting %2$s", "death.attack.cornea_stalk_prick": "%1$s was pricked to death by a Cornea Stalk", + "death.attack.toreterror_spin": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_spin.player": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_jump": "%1$s was pounded to death by Toreterror", + "death.attack.toreterror_jump.player": "%1$s was pounded to death by Toreterror", + "death.attack.water_soaked": "%1$s was super soaked to death by %2$s", + "death.attack.water_soaked.player": "%1$s was super soaked to death by %2$s", + "entity.antarchy.cheep": "Cheep", + "entity.antarchy.dorrie": "Dorrie", + "entity.antarchy.hercules_beetle": "Hercules Beetle", + "item.antarchy.cheep": "Cheep", + "item.antarchy.cheep_spawn_egg": "Cheep Spawn Egg", + "item.antarchy.dorrie_spawn_egg": "Dorrie Spawn Egg", + "item.antarchy.hercules_beetle_spawn_egg": "Hercules Beetle Spawn Egg", + "key.antarchy.dorrie_charge_jump": "Dorrie: Charge Jump", + "key.antarchy.hercules_beetle_charge": "Hercules Beetle: Charge", "entity.antarchy.reverie": "Reverie", "biome.antarchy.thoraxis": "Thoraxis", "biome.antarchy.nightmare_wastes": "Nightmare Wastes", diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json b/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json new file mode 100644 index 00000000..e6913b4a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/amber_moss/amber_lichen", + "glow_lichen": "antarchy:block/amber_moss/amber_lichen" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json new file mode 100644 index 00000000..f3079b40 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/amber_moss/amber_moss_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json new file mode 100644 index 00000000..3058b1b5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/amber_moss/amber_moss_carpet" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json new file mode 100644 index 00000000..279f1af9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/mossy_carpet_side", + "textures": { + "side": "antarchy:block/amber_moss/amber_moss_carpet" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json new file mode 100644 index 00000000..f4bcd957 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/amber_moss/amber_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/bile_vein.json b/common/src/main/resources/assets/antarchy/models/block/bile_vein.json new file mode 100644 index 00000000..1bbd5a7f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/bile_vein.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bile/bile_vein" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/broodstone.json b/common/src/main/resources/assets/antarchy/models/block/broodstone.json new file mode 100644 index 00000000..b282bd92 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json b/common/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json new file mode 100644 index 00000000..0ca69bbc --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/brutalfly_cocoon_spawner.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/oak_log" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_block.json b/common/src/main/resources/assets/antarchy/models/block/chiten_block.json new file mode 100644 index 00000000..c3d21bb3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/chiten_block", + "side": "antarchy:block/chiten_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json new file mode 100644 index 00000000..5bb4d70a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_base" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json new file mode 100644 index 00000000..c94fcdb5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_frustum" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json new file mode 100644 index 00000000..8cd7d902 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_middle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json new file mode 100644 index 00000000..d8b89d9b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json new file mode 100644 index 00000000..3941f02d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip_merge" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json new file mode 100644 index 00000000..a896ccbb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_base" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json new file mode 100644 index 00000000..e3e84f52 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_frustum" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json new file mode 100644 index 00000000..ba4e46f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_middle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json new file mode 100644 index 00000000..25dda590 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json new file mode 100644 index 00000000..6349e79a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip_merge" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json new file mode 100644 index 00000000..f4187644 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json new file mode 100644 index 00000000..d2f9f14d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json new file mode 100644 index 00000000..ef956bbe --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json new file mode 100644 index 00000000..e5ba6281 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg", + "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creepvine.json b/common/src/main/resources/assets/antarchy/models/block/creepvine.json new file mode 100644 index 00000000..3ee3bc66 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creepvine.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/creepvine", + "vine": "antarchy:block/creepvine" + }, + "elements": [ + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json new file mode 100644 index 00000000..a63af561 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json new file mode 100644 index 00000000..71eec9e4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json new file mode 100644 index 00000000..7e5d23e4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json new file mode 100644 index 00000000..30d35294 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg", + "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..7b951f97 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json new file mode 100644 index 00000000..e3d82f83 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..d550f3fa --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json new file mode 100644 index 00000000..c5bb60d0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json new file mode 100644 index 00000000..f45602bd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json new file mode 100644 index 00000000..72bebf9f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json new file mode 100644 index 00000000..007eebb3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json new file mode 100644 index 00000000..188a08c3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json new file mode 100644 index 00000000..bd46666c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/myrmite.json b/common/src/main/resources/assets/antarchy/models/block/myrmite.json new file mode 100644 index 00000000..1c17e6da --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/myrmite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/myrmite" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json new file mode 100644 index 00000000..20b6a8ae --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json new file mode 100644 index 00000000..cbfa51e2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json new file mode 100644 index 00000000..03be473f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json new file mode 100644 index 00000000..a3863d21 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked", + "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json new file mode 100644 index 00000000..7c3dc843 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json new file mode 100644 index 00000000..5e296fad --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json new file mode 100644 index 00000000..7f1c780e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json new file mode 100644 index 00000000..884cc982 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked", + "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/termite_nest.json b/common/src/main/resources/assets/antarchy/models/block/termite_nest.json index 9b9976b0..1bc0e245 100644 --- a/common/src/main/resources/assets/antarchy/models/block/termite_nest.json +++ b/common/src/main/resources/assets/antarchy/models/block/termite_nest.json @@ -1,8 +1,12 @@ { - "parent": "minecraft:block/orientable", + "parent": "minecraft:block/cube", "textures": { - "front": "antarchy:block/termite_nest_front", - "side": "antarchy:block/termite_nest_side", - "top": "antarchy:block/termite_nest_top" + "particle": "antarchy:block/brown_ant_nest/brown_ant_nest", + "down": "minecraft:block/coarse_dirt", + "up": "antarchy:block/brown_ant_nest/brown_ant_nest_top", + "north": "antarchy:block/brown_ant_nest/brown_ant_nest", + "south": "antarchy:block/brown_ant_nest/brown_ant_nest", + "west": "antarchy:block/brown_ant_nest/brown_ant_nest", + "east": "antarchy:block/brown_ant_nest/brown_ant_nest" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json new file mode 100644 index 00000000..4ccfd5ca --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json new file mode 100644 index 00000000..37334cc9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json new file mode 100644 index 00000000..824df80f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json new file mode 100644 index 00000000..71494d84 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked", + "particle": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json new file mode 100644 index 00000000..248b4d18 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json new file mode 100644 index 00000000..0ac42d62 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json new file mode 100644 index 00000000..40a9f01b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json new file mode 100644 index 00000000..c4e1dca5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked", + "particle": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/alpha_mantis_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json b/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json new file mode 100644 index 00000000..809509a9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/amber_moss/amber_lichen" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json b/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json new file mode 100644 index 00000000..7507fc94 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json new file mode 100644 index 00000000..900da03b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_carpet" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/bile_vein.json b/common/src/main/resources/assets/antarchy/models/item/bile_vein.json new file mode 100644 index 00000000..1a1067eb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/bile_vein.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bile_vein" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/broodstone.json b/common/src/main/resources/assets/antarchy/models/item/broodstone.json new file mode 100644 index 00000000..c212825a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/cheep_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten.json b/common/src/main/resources/assets/antarchy/models/item/chiten.json new file mode 100644 index 00000000..20b2e019 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chiten" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten_block.json b/common/src/main/resources/assets/antarchy/models/item/chiten_block.json new file mode 100644 index 00000000..47e06517 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiten_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json b/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json new file mode 100644 index 00000000..0a70c0e9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chiten_spike" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json new file mode 100644 index 00000000..09dddc04 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creepvine.json b/common/src/main/resources/assets/antarchy/models/item/creepvine.json new file mode 100644 index 00000000..bea911f8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creepvine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/creepvine" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/dorrie_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/hercules_beetle_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json b/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json new file mode 100644 index 00000000..c7c80c03 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/jumpy_boots" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/king_scale.json b/common/src/main/resources/assets/antarchy/models/item/king_scale.json new file mode 100644 index 00000000..b338cb8e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/king_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/king_scale" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json new file mode 100644 index 00000000..42cebd01 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..02deeac5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_slab" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..2a147e6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_stairs" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..a872a73b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_wall_inventory" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/myrmite.json b/common/src/main/resources/assets/antarchy/models/item/myrmite.json new file mode 100644 index 00000000..9da582d2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/myrmite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/myrmite" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/queen_scale.json b/common/src/main/resources/assets/antarchy/models/item/queen_scale.json new file mode 100644 index 00000000..50abbda8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/queen_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/queen_scale" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/spit_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/stink_bug.json b/common/src/main/resources/assets/antarchy/models/item/stink_bug.json new file mode 100644 index 00000000..c2cde591 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stink_bug.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/stink_bug" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json b/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json index 073ce4a9..b41681dd 100644 --- a/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json +++ b/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/uranium/uranium_bars" + "layer0": "antarchy:item/uranium/uranium_bars" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json b/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json index 244473f9..e4c3cca8 100644 --- a/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json +++ b/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json @@ -2,21 +2,21 @@ "parent": "builtin/entity", "display": { "thirdperson_righthand": { - "translation": [0, -2, 5], + "translation": [0, -6, 5], "scale": [0.7, 0.7, 0.7] }, "thirdperson_lefthand": { - "translation": [0, -2, 5], + "translation": [0, -6, 5], "scale": [0.7, 0.7, 0.7] }, "firstperson_righthand": { - "rotation": [10, 0, -5], - "translation": [2, 0, 1], + "rotation": [10, 0, -2], + "translation": [0, 0, 2], "scale": [0.5, 0.5, 0.5] }, "firstperson_lefthand": { - "rotation": [10, 0, -5], - "translation": [2, 0, 1], + "rotation": [10, 0, -2], + "translation": [0, 0, 2], "scale": [0.5, 0.5, 0.5] }, "gui": { diff --git a/common/src/main/resources/assets/antarchy/particles/orange_ash.json b/common/src/main/resources/assets/antarchy/particles/orange_ash.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/orange_ash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/particles/stinky_fly.json b/common/src/main/resources/assets/antarchy/particles/stinky_fly.json new file mode 100644 index 00000000..516d8df2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/stinky_fly.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:stinky_fly" + ] +} diff --git a/common/src/main/resources/assets/antarchy/particles/stinky_gas.json b/common/src/main/resources/assets/antarchy/particles/stinky_gas.json new file mode 100644 index 00000000..67beb202 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/stinky_gas.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:stinky_gas/stinky_gas_01", + "antarchy:stinky_gas/stinky_gas_02", + "antarchy:stinky_gas/stinky_gas_03", + "antarchy:stinky_gas/stinky_gas_04", + "antarchy:stinky_gas/stinky_gas_05", + "antarchy:stinky_gas/stinky_gas_06", + "antarchy:stinky_gas/stinky_gas_07", + "antarchy:stinky_gas/stinky_gas_08" + ] +} diff --git a/common/src/main/resources/assets/antarchy/sounds.json b/common/src/main/resources/assets/antarchy/sounds.json index 2881e343..5316cdc8 100644 --- a/common/src/main/resources/assets/antarchy/sounds.json +++ b/common/src/main/resources/assets/antarchy/sounds.json @@ -418,6 +418,229 @@ } ] }, + "bomber_walk": { + "subtitle": "subtitles.antarchy.bomber_walk", + "sounds": [ + { + "name": "antarchy:mob/bomber/walk1" + }, + { + "name": "antarchy:mob/bomber/walk2" + }, + { + "name": "antarchy:mob/bomber/walk3" + }, + { + "name": "antarchy:mob/bomber/walk4" + } + ] + }, + "bomber_knock": { + "subtitle": "subtitles.antarchy.bomber_knock", + "sounds": [ + { + "name": "antarchy:mob/bomber/knock1" + }, + { + "name": "antarchy:mob/bomber/knock2" + }, + { + "name": "antarchy:mob/bomber/knock3" + }, + { + "name": "antarchy:mob/bomber/knock4" + }, + { + "name": "antarchy:mob/bomber/knock5" + } + ] + }, + "bomber_explode": { + "subtitle": "subtitles.antarchy.bomber_explode", + "sounds": [ + { + "name": "antarchy:mob/bomber/explode1" + }, + { + "name": "antarchy:mob/bomber/explode2" + } + ] + }, + "toreterror_idle": { + "subtitle": "subtitles.antarchy.toreterror_idle", + "sounds": [ + { + "name": "antarchy:mob/toreterror/idle1" + }, + { + "name": "antarchy:mob/toreterror/idle2" + }, + { + "name": "antarchy:mob/toreterror/idle3" + } + ] + }, + "toreterror_hurt": { + "subtitle": "subtitles.antarchy.toreterror_hurt", + "sounds": [ + { + "name": "antarchy:mob/toreterror/hurt1" + }, + { + "name": "antarchy:mob/toreterror/hurt2" + }, + { + "name": "antarchy:mob/toreterror/hurt3" + } + ] + }, + "toreterror_death": { + "subtitle": "subtitles.antarchy.toreterror_death", + "sounds": [ + { + "name": "antarchy:mob/toreterror/death" + } + ] + }, + "toreterror_bomber_fire": { + "subtitle": "subtitles.antarchy.toreterror_bomber_fire", + "sounds": [ + { + "name": "antarchy:mob/toreterror/bomber_fire1" + }, + { + "name": "antarchy:mob/toreterror/bomber_fire2" + } + ] + }, + "toreterror_jump_up": { + "subtitle": "subtitles.antarchy.toreterror_jump_up", + "sounds": [ + { + "name": "antarchy:mob/toreterror/jump_up1" + }, + { + "name": "antarchy:mob/toreterror/jump_up2" + } + ] + }, + "toreterror_jump_land": { + "subtitle": "subtitles.antarchy.toreterror_jump_land", + "sounds": [ + { + "name": "antarchy:mob/toreterror/jump_land1" + }, + { + "name": "antarchy:mob/toreterror/jump_land2" + } + ] + }, + "creeping_horror_growl": { + "subtitle": "subtitles.antarchy.creeping_horror_growl", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_growl1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_growl2" + } + ] + }, + "creeping_horror_hurt": { + "subtitle": "subtitles.antarchy.creeping_horror_hurt", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_hurt1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_hurt2" + } + ] + }, + "creeping_horror_bite": { + "subtitle": "subtitles.antarchy.creeping_horror_bite", + "sounds": [ + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite1" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite2" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite3" + }, + { + "name": "antarchy:mob/creeping_horror/creeping_horror_bite4" + } + ] + }, + "lurking_terror_snarl": { + "subtitle": "subtitles.antarchy.lurking_terror_snarl", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_snarl1" + }, + { + "name": "antarchy:mob/lurking_terror/lurking_terror_snarl2" + } + ] + }, + "lurking_terror_hurt": { + "subtitle": "subtitles.antarchy.lurking_terror_hurt", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_hurt1" + }, + { + "name": "antarchy:mob/lurking_terror/lurking_terror_hurt2" + } + ] + }, + "lurking_terror_bite": { + "subtitle": "subtitles.antarchy.lurking_terror_bite", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_bite1" + } + ] + }, + "lurking_terror_fly_loop": { + "subtitle": "subtitles.antarchy.lurking_terror_fly_loop", + "sounds": [ + { + "name": "antarchy:mob/lurking_terror/lurking_terror_fly_loop" + } + ] + }, + "stinky_fly": { + "subtitle": "subtitles.antarchy.stinky_fly", + "sounds": [ + { + "name": "antarchy:effect/stinky/stinky_flies1" + }, + { + "name": "antarchy:effect/stinky/stinky_flies2" + }, + { + "name": "antarchy:effect/stinky/stinky_flies3" + }, + { + "name": "antarchy:effect/stinky/stinky_flies4" + }, + { + "name": "antarchy:effect/stinky/stinky_flies5" + }, + { + "name": "antarchy:effect/stinky/stinky_flies6" + }, + { + "name": "antarchy:effect/stinky/stinky_flies7" + }, + { + "name": "antarchy:effect/stinky/stinky_flies8" + } + ] + }, "thoraxis_nightmare_wastes_ambient": { "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient", "sounds": [ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg new file mode 100644 index 00000000..7f0e4752 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg new file mode 100644 index 00000000..aedbdfd1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg new file mode 100644 index 00000000..a7eab4a5 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg new file mode 100644 index 00000000..999c8b5f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg new file mode 100644 index 00000000..4d744f46 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies5.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg new file mode 100644 index 00000000..19c373b1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies6.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg new file mode 100644 index 00000000..add34ab4 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies7.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.ogg b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.ogg new file mode 100644 index 00000000..16fad7fd Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/effect/stinky/stinky_flies8.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg new file mode 100644 index 00000000..1e9320a8 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg new file mode 100644 index 00000000..82fa12a4 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg new file mode 100644 index 00000000..4086db9d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg new file mode 100644 index 00000000..dd5fd457 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg new file mode 100644 index 00000000..5174c62b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg new file mode 100644 index 00000000..3837027f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg new file mode 100644 index 00000000..39ab66d1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg new file mode 100644 index 00000000..a8dc5b89 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg new file mode 100644 index 00000000..81bb99b9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg new file mode 100644 index 00000000..fb114262 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg new file mode 100644 index 00000000..31578763 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg new file mode 100644 index 00000000..fd89b048 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg new file mode 100644 index 00000000..1993fb69 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg new file mode 100644 index 00000000..1f44cc93 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg new file mode 100644 index 00000000..3fa77eaa Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_bite4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg new file mode 100644 index 00000000..746f4f3a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg new file mode 100644 index 00000000..a60677ea Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_growl2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/creeping_horror/creeping_horror_hurt2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg new file mode 100644 index 00000000..a72b530e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_bite1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg new file mode 100644 index 00000000..7204c176 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg new file mode 100644 index 00000000..1ad6f0ec Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg new file mode 100644 index 00000000..e1f10239 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_hurt2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg new file mode 100644 index 00000000..669bbdc8 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg new file mode 100644 index 00000000..1305bb04 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_snarl2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg new file mode 100644 index 00000000..7a62426e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg new file mode 100644 index 00000000..102048ad Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/bomber_fire2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg new file mode 100644 index 00000000..0962e82b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/death.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg new file mode 100644 index 00000000..88a539fb Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg new file mode 100644 index 00000000..32da1952 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg new file mode 100644 index 00000000..9b4a58f6 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/hurt3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg new file mode 100644 index 00000000..83e11c5b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg new file mode 100644 index 00000000..c31227ff Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg new file mode 100644 index 00000000..6011bf32 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/idle3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg new file mode 100644 index 00000000..55a6aacc Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg new file mode 100644 index 00000000..dcea190a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_land2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg new file mode 100644 index 00000000..d2ec4575 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg new file mode 100644 index 00000000..17dc6058 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/toreterror/jump_up2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png new file mode 100644 index 00000000..cb7a9d84 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png new file mode 100644 index 00000000..4ec05b6b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png new file mode 100644 index 00000000..4ec05b6b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png new file mode 100644 index 00000000..68f48de7 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta new file mode 100644 index 00000000..1e3d6590 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 3, + "interpolate": true + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png new file mode 100644 index 00000000..1c5d447a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta new file mode 100644 index 00000000..432a3845 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 4, + "interpolate": true + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png new file mode 100644 index 00000000..2a99d09c Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta new file mode 100644 index 00000000..b44a2ee6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta @@ -0,0 +1,16 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true, + "frames": [ + 0, + 1, + 0, + 2, + 0, + 1, + 2, + 1 + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png b/common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png new file mode 100644 index 00000000..19504eca Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_block.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_block.png new file mode 100644 index 00000000..bee3628b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_block.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png new file mode 100644 index 00000000..49c5d6a1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png new file mode 100644 index 00000000..1660e8e0 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png new file mode 100644 index 00000000..cecd80c1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png new file mode 100644 index 00000000..324c5c8a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png new file mode 100644 index 00000000..9c78714d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png new file mode 100644 index 00000000..f9eab88e Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png new file mode 100644 index 00000000..a4894a9d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png new file mode 100644 index 00000000..37c8e4d2 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png new file mode 100644 index 00000000..9b66fa38 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png new file mode 100644 index 00000000..0d9972f2 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png new file mode 100644 index 00000000..905c49c9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png new file mode 100644 index 00000000..0a4765be Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png new file mode 100644 index 00000000..9040f255 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/creepvine.png b/common/src/main/resources/assets/antarchy/textures/block/creepvine.png new file mode 100644 index 00000000..b578b4fa Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/creepvine.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png new file mode 100644 index 00000000..10089a41 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png new file mode 100644 index 00000000..ac965ebb Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png new file mode 100644 index 00000000..10cf9dd9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/myrmite.png b/common/src/main/resources/assets/antarchy/textures/block/myrmite.png new file mode 100644 index 00000000..1a74738a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/myrmite.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/bed_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/bed_bug.png index 99278795..6196ab6e 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/bed_bug.png and b/common/src/main/resources/assets/antarchy/textures/entity/bed_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png b/common/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png new file mode 100644 index 00000000..40b5f5c7 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/cheep/cheep_magenta.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark.png b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark.png index 3ae79bfc..50cbf88f 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark.png and b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png new file mode 100644 index 00000000..45f4ba5a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png new file mode 100644 index 00000000..3b8c88e8 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/cloud_shark/cloud_shark_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png b/common/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png new file mode 100644 index 00000000..60c1aeea Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png b/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png new file mode 100644 index 00000000..05cda900 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png b/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png new file mode 100644 index 00000000..fb471c89 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion.png b/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion.png deleted file mode 100644 index d63bb322..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png b/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png new file mode 100644 index 00000000..c4a6004f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png new file mode 100644 index 00000000..60e5914d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/emperor_scorpion/emperor_scorpion_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png index 06c36183..1b4ac52e 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png and b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png index f4c076b5..8ef321c8 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png and b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_albino.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png index f49f8479..3957ca29 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png and b/common/src/main/resources/assets/antarchy/textures/entity/flying_squirrel/flying_squirrel_brown.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png new file mode 100644 index 00000000..cb882a96 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink.png b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink.png new file mode 100644 index 00000000..4cfd41e9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink_saddle.png b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink_saddle.png new file mode 100644 index 00000000..6c4728bf Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_pink_saddle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png new file mode 100644 index 00000000..7f78b794 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/hercules_beetle/hercules_beetle_saddle.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png new file mode 100644 index 00000000..1f33c503 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken.png index f653c09f..b39b621c 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/kraken.png and b/common/src/main/resources/assets/antarchy/textures/entity/kraken.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png deleted file mode 100644 index e8a7252e..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png deleted file mode 100644 index 54453c9c..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken_purple.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken_purple.png deleted file mode 100644 index e60e229f..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/kraken_purple.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png b/common/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png new file mode 100644 index 00000000..ce78a925 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/mantis.png b/common/src/main/resources/assets/antarchy/textures/entity/mantis.png index 5eef7559..cdde9855 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/mantis.png and b/common/src/main/resources/assets/antarchy/textures/entity/mantis.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png b/common/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png new file mode 100644 index 00000000..fdc492d3 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/mantis_alpha.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/moleworm.png b/common/src/main/resources/assets/antarchy/textures/entity/moleworm.png index ac143b09..f2919742 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/moleworm.png and b/common/src/main/resources/assets/antarchy/textures/entity/moleworm.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/nightmare.png b/common/src/main/resources/assets/antarchy/textures/entity/nightmare.png index 9f4fb0b4..e8030976 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/nightmare.png and b/common/src/main/resources/assets/antarchy/textures/entity/nightmare.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png b/common/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png new file mode 100644 index 00000000..f653c09f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/octopus_bomb.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug.png new file mode 100644 index 00000000..089129fe Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug_saddled.png b/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug_saddled.png new file mode 100644 index 00000000..5adaf35d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/pill_bug/pill_bug_saddled.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion.png index cce310d1..9c93d54c 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/scorpion.png and b/common/src/main/resources/assets/antarchy/textures/entity/scorpion.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png new file mode 100644 index 00000000..658b7180 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png new file mode 100644 index 00000000..a7ee1708 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png new file mode 100644 index 00000000..8737db9b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png new file mode 100644 index 00000000..03dc179d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/spit_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/spit_bug.png new file mode 100644 index 00000000..895cd975 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/spit_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png new file mode 100644 index 00000000..09c3cec9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/termite.png b/common/src/main/resources/assets/antarchy/textures/entity/termite.png new file mode 100644 index 00000000..38fa7035 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/entity/termite.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png b/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png index d6ec135d..179df7c9 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png and b/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/entity/triffid.png b/common/src/main/resources/assets/antarchy/textures/entity/triffid.png index 568f54a7..00ee04a0 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/triffid.png and b/common/src/main/resources/assets/antarchy/textures/entity/triffid.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png b/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png new file mode 100644 index 00000000..39f853fb Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/chiten.png b/common/src/main/resources/assets/antarchy/textures/item/chiten.png new file mode 100644 index 00000000..ff0ea5bf Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/chiten.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/chiten_spike.png b/common/src/main/resources/assets/antarchy/textures/item/chiten_spike.png new file mode 100644 index 00000000..9b66fa38 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/chiten_spike.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png b/common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png new file mode 100644 index 00000000..3f83ab76 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png b/common/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png index e9822725..4fad805f 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png and b/common/src/main/resources/assets/antarchy/textures/item/emperor_scorpion_stinger.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png b/common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png new file mode 100644 index 00000000..8a3fd730 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/king_scale.png b/common/src/main/resources/assets/antarchy/textures/item/king_scale.png new file mode 100644 index 00000000..6ebc208b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/king_scale.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png b/common/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png new file mode 100644 index 00000000..6a372140 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/queen_scale.png b/common/src/main/resources/assets/antarchy/textures/item/queen_scale.png new file mode 100644 index 00000000..24e44c01 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/queen_scale.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png b/common/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png index cc3c9ccc..b81b8611 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png and b/common/src/main/resources/assets/antarchy/textures/item/scorpion_whip.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/stink_bug.png b/common/src/main/resources/assets/antarchy/textures/item/stink_bug.png new file mode 100644 index 00000000..f73695ab Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/stink_bug.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png b/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png new file mode 100644 index 00000000..37378d54 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace_handle.png b/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace_handle.png deleted file mode 100644 index 550d7d69..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace_handle.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png b/common/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png new file mode 100644 index 00000000..8efc22c1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png b/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png new file mode 100644 index 00000000..7436c983 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png b/common/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png new file mode 100644 index 00000000..81496667 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png b/common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png new file mode 100644 index 00000000..f3cdf989 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png new file mode 100644 index 00000000..cad03adc Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png new file mode 100644 index 00000000..75a86faf Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png new file mode 100644 index 00000000..30786e99 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png new file mode 100644 index 00000000..7436c983 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png new file mode 100644 index 00000000..a939c750 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png new file mode 100644 index 00000000..69abb186 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png new file mode 100644 index 00000000..7e0a9852 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png new file mode 100644 index 00000000..fc0a8aaa Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png new file mode 100644 index 00000000..eb668602 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png differ diff --git a/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json b/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json new file mode 100644 index 00000000..8a19a910 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "kill_toreterror": { + "conditions": { + "entity": { + "type": "antarchy:toreterror" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.kill_toreterror.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "id": "antarchy:toreterror_spawn_egg" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.kill_toreterror.title" + } + }, + "requirements": [ + [ + "kill_toreterror" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json b/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json new file mode 100644 index 00000000..eaaa28c9 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "get_water_cannon": { + "conditions": { + "items": [ + { + "items": "antarchy:water_cannon" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.water_cannon_craft.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:water_cannon" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.water_cannon_craft.title" + } + }, + "requirements": [ + [ + "get_water_cannon" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json b/common/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json new file mode 100644 index 00000000..d17316aa --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json @@ -0,0 +1,39 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "become_stinky": { + "conditions": { + "effects": { + "antarchy:stinky": {} + } + }, + "trigger": "minecraft:effects_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.whoever_smelt_it_dealt_it.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "minecraft:potion", + "components": { + "minecraft:potion_contents": { + "potion": "antarchy:stinky" + } + } + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.whoever_smelt_it_dealt_it.title" + } + }, + "requirements": [ + [ + "become_stinky" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json b/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json new file mode 100644 index 00000000..e860a89c --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json @@ -0,0 +1,7 @@ +{ + "message_id": "toreterror_jump", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json b/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json new file mode 100644 index 00000000..4a6afd29 --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json @@ -0,0 +1,7 @@ +{ + "message_id": "toreterror_spin", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/damage_type/water_soaked.json b/common/src/main/resources/data/antarchy/damage_type/water_soaked.json new file mode 100644 index 00000000..56c1f742 --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/water_soaked.json @@ -0,0 +1,7 @@ +{ + "message_id": "water_soaked", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/dimension/cavaryn.json b/common/src/main/resources/data/antarchy/dimension/cavaryn.json deleted file mode 100644 index 9d1dacc3..00000000 --- a/common/src/main/resources/data/antarchy/dimension/cavaryn.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "antarchy:cavaryn", - "generator": { - "type": "minecraft:noise", - "settings": "antarchy:cavaryn", - "biome_source": { - "type": "minecraft:fixed", - "biome": "antarchy:cavaryn" - } - } -} diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 48f60c0d..551c88de 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -7,6 +7,8 @@ "type": "antarchy:elythia_biome_source", "moleworm_caves_max_y": 30, "surface_biome_sample_y": 160, + "ocean_max_y": 62, + "sea_level": 60, "biomes": [ { "biome": "antarchy:moleworm_caves", @@ -224,6 +226,30 @@ "offset": 0.0 } }, + { + "biome": "antarchy:fungal_ouranwood_forest", + "parameters": { + "temperature": 0.55, + "humidity": 0.9, + "continentalness": 0.75, + "erosion": 0.0, + "weirdness": 0.85, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:fungal_ouranwood_forest", + "parameters": { + "temperature": 0.55, + "humidity": 0.9, + "continentalness": 0.75, + "erosion": 0.0, + "weirdness": 0.85, + "depth": 0.0, + "offset": 0.0 + } + }, { "biome": "antarchy:torchflower_fields", "parameters": { @@ -391,6 +417,114 @@ "depth": 0.85, "offset": 0.0 } + }, + { + "biome": "antarchy:elythia_ocean", + "parameters": { + "temperature": 0.65, + "humidity": 0.90, + "continentalness": -0.88, + "erosion": 0.30, + "weirdness": 0.0, + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_ocean", + "parameters": { + "temperature": 0.60, + "humidity": 0.88, + "continentalness": -0.92, + "erosion": 0.25, + "weirdness": -0.40, + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_ocean", + "parameters": { + "temperature": 0.70, + "humidity": 0.92, + "continentalness": -0.85, + "erosion": 0.35, + "weirdness": 0.40, + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_ocean", + "parameters": { + "temperature": 0.65, + "humidity": 0.90, + "continentalness": -0.88, + "erosion": 0.30, + "weirdness": 0.0, + "depth": 0.5, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_ocean", + "parameters": { + "temperature": 0.60, + "humidity": 0.88, + "continentalness": -0.92, + "erosion": 0.25, + "weirdness": -0.40, + "depth": 0.5, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_coral_spikes", + "parameters": { + "temperature": 0.80, + "humidity": 0.85, + "continentalness": -0.88, + "erosion": 0.20, + "weirdness": 0.50, + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_coral_spikes", + "parameters": { + "temperature": 0.75, + "humidity": 0.82, + "continentalness": -0.90, + "erosion": 0.15, + "weirdness": -0.55, + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_coral_spikes", + "parameters": { + "temperature": 0.80, + "humidity": 0.85, + "continentalness": -0.88, + "erosion": 0.20, + "weirdness": 0.50, + "depth": 0.5, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_coral_spikes", + "parameters": { + "temperature": 0.75, + "humidity": 0.82, + "continentalness": -0.90, + "erosion": 0.15, + "weirdness": -0.55, + "depth": 0.5, + "offset": 0.0 + } } ] } diff --git a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json b/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json deleted file mode 100644 index 19af033e..00000000 --- a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ultrawarm": false, - "natural": false, - "coordinate_scale": 1.0, - "bed_works": false, - "respawn_anchor_works": false, - "min_y": 0, - "height": 256, - "logical_height": 240, - "infiniburn": "#minecraft:infiniburn_overworld", - "effects": "minecraft:the_end", - "ambient_light": 0.0, - "piglin_safe": false, - "has_raids": false, - "monster_spawn_light_level": 7, - "monster_spawn_block_light_limit": 0, - "has_skylight": false, - "has_ceiling": true, - "fixed_time": 18000 -} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..1ee537f0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:mossy_shellstone_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:mossy_shellstone_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_slab" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..3c45a676 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_shellstone_brick_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_stairs" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..0c5bee10 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_shellstone_brick_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_wall" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json index 1e1bda3c..6011c694 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/bedroom.json @@ -87,6 +87,41 @@ "type": "minecraft:item", "name": "antarchy:mud_pie", "weight": 2 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 3 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:uranium_nugget", + "weight": 2 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:titanium_nugget", + "weight": 2 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json index a083640a..1946e603 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/generic.json @@ -157,6 +157,41 @@ ], "name": "minecraft:candle", "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 6 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:uranium_nugget", + "weight": 4 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:titanium_nugget", + "weight": 4 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json index 5df6310f..6ba7c98a 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/kitchen.json @@ -187,6 +187,41 @@ ], "name": "antarchy:duct_tape", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 4 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:uranium_nugget", + "weight": 3 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:titanium_nugget", + "weight": 3 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json index f33fe93a..98dfa9a2 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/storage.json @@ -172,6 +172,41 @@ ], "name": "antarchy:duct_tape", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 4 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:uranium_nugget", + "weight": 3 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:titanium_nugget", + "weight": 3 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json index e9309686..56a1f365 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tools.json @@ -166,6 +166,41 @@ ], "name": "antarchy:duct_tape", "weight": 4 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 4 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:uranium_nugget", + "weight": 3 + }, + { + "type": "minecraft:item", + "functions": [ + { + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "antarchy:titanium_nugget", + "weight": 3 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json index 7c389108..599e935a 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/tower.json @@ -221,7 +221,7 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 1, + "weight": 6, "functions": [ { "function": "minecraft:set_count", @@ -236,7 +236,7 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 1, + "weight": 6, "functions": [ { "function": "minecraft:set_count", @@ -247,6 +247,11 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 4 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json index 2eb3aa3d..be90946f 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/fallen_kingdom_castle/treasure.json @@ -92,7 +92,7 @@ } ], "name": "minecraft:diamond", - "weight": 10 + "weight": 12 } ], "rolls": { @@ -116,7 +116,7 @@ } ], "name": "antarchy:uranium_nugget", - "weight": 1 + "weight": 8 }, { "type": "minecraft:item", @@ -131,7 +131,12 @@ } ], "name": "antarchy:titanium_nugget", - "weight": 1 + "weight": 8 + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 6 } ], "rolls": 1.0 diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json b/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json new file mode 100644 index 00000000..bd585f00 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/alpha_mantis.json @@ -0,0 +1,90 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mantis_claw" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3.0, + "max": 4.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 2.0 + } + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:uranium_nugget" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 4.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 2.0 + } + } + ] + }, + { + "rolls": 1.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:titanium_nugget" + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2.0, + "max": 4.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 2.0 + } + } + ] + } + ], + "random_sequence": "antarchy:entities/alpha_mantis" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json b/common/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json index 40a7b375..a7437c82 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/apple_cow.json @@ -70,37 +70,6 @@ ] } ] - }, - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "minecraft:flags": { - "is_baby": false, - "sheared": false - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:apple", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ] } ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/cheep.json b/common/src/main/resources/data/antarchy/loot_table/entities/cheep.json new file mode 100644 index 00000000..9c830ca5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/cheep.json @@ -0,0 +1,5 @@ +{ + "type": "minecraft:entity", + "pools": [], + "random_sequence": "antarchy:entities/cheep" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json b/common/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json index 594bf75b..a7437c82 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/enchanted_golden_apple_cow.json @@ -70,35 +70,6 @@ ] } ] - }, - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "minecraft:flags": { - "is_baby": false - }, - "antarchy:apple_cow": { - "sheared": false - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:enchanted_golden_apple", - "functions": [ - { - "function": "minecraft:set_count", - "count": 1 - } - ] - } - ] } ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json b/common/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json index 27801152..a7437c82 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/golden_apple_cow.json @@ -70,39 +70,6 @@ ] } ] - }, - { - "rolls": 1, - "conditions": [ - { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "minecraft:flags": { - "is_baby": false - }, - "antarchy:apple_cow": { - "sheared": false - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:golden_apple", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 - } - } - ] - } - ] } ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json b/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json new file mode 100644 index 00000000..c66fab67 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:ink_sac" + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json index 54918816..8b8512f1 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json @@ -16,8 +16,10 @@ } }, { - "function": "minecraft:looting_enchant", + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", "count": { + "type": "minecraft:uniform", "min": 0.0, "max": 1.0 } @@ -50,7 +52,13 @@ "name": "antarchy:water_cannon" } ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], "rolls": 1.0 } - ] + ], + "random_sequence": "antarchy:entities/toreterror" } diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json index ae4663c3..5b633287 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json @@ -172,7 +172,7 @@ { "type": "minecraft:item", "name": "antarchy:fallen_king_crown", - "weight": 1, + "weight": 6, "functions": [ { "function": "minecraft:set_count", @@ -187,7 +187,7 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 1, + "weight": 9, "functions": [ { "function": "minecraft:set_count", @@ -202,7 +202,7 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 1, + "weight": 9, "functions": [ { "function": "minecraft:set_count", @@ -213,6 +213,11 @@ } } ] + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 9 } ], "rolls": { diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json index af5228b3..a7db6e93 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json @@ -170,7 +170,7 @@ { "type": "minecraft:item", "name": "antarchy:fallen_king_crown", - "weight": 1, + "weight": 4, "functions": [ { "function": "minecraft:set_count", @@ -185,7 +185,7 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 1, + "weight": 7, "functions": [ { "function": "minecraft:set_count", @@ -200,7 +200,7 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 1, + "weight": 7, "functions": [ { "function": "minecraft:set_count", @@ -212,6 +212,11 @@ } ] }, + { + "type": "minecraft:item", + "name": "minecraft:golden_apple", + "weight": 7 + }, { "type": "minecraft:item", "name": "minecraft:diamond", diff --git a/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json b/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json new file mode 100644 index 00000000..ab820d6c --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "JBJ", + "J J" + ], + "key": { + "J": { + "item": "antarchy:jumpy_bug_leg" + }, + "B": { + "item": "minecraft:netherite_boots" + } + }, + "result": { + "id": "antarchy:jumpy_boots", + "count": 1 + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..322153c4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "id": "antarchy:mossy_shellstone_brick_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..79fac6b2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..506f6756 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "id": "antarchy:mossy_shellstone_brick_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..01cbc7ab --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..e5a83e72 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "id": "antarchy:mossy_shellstone_brick_wall" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..f93c7359 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_wall" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json b/common/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json new file mode 100644 index 00000000..59ee027d --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:umbral_moss_block" + } + }, + "pattern": [ + "#", + "#" + ], + "result": { + "count": 3, + "id": "antarchy:umbral_moss_carpet" + } +} diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt deleted file mode 100644 index 6714afbd..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle2.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle2.nbt deleted file mode 100644 index 2470c226..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle2.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle3.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle3.nbt deleted file mode 100644 index 84c4c852..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle3.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_banner.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_banner.nbt deleted file mode 100644 index cede8714..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_banner.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt deleted file mode 100644 index 12e7dbed..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_flag.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_flag.nbt deleted file mode 100644 index 3f4c4fcc..00000000 Binary files a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_flag.nbt and /dev/null differ diff --git a/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt b/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt new file mode 100644 index 00000000..2a2e871f Binary files /dev/null and b/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt differ diff --git a/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt b/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt new file mode 100644 index 00000000..c02c9e2f Binary files /dev/null and b/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt differ diff --git a/common/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt b/common/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt index 972d9cde..e30dedf0 100644 Binary files a/common/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt and b/common/src/main/resources/data/antarchy/structure/trayaurus_lab/trayaurus_lab_bottom.nbt differ diff --git a/common/src/main/resources/data/antarchy/tags/block/termite_foods.json b/common/src/main/resources/data/antarchy/tags/block/termite_foods.json deleted file mode 100644 index 54c986bb..00000000 --- a/common/src/main/resources/data/antarchy/tags/block/termite_foods.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:planks", - "#minecraft:logs", - "#minecraft:wooden_slabs", - "#minecraft:wooden_stairs", - "#minecraft:wooden_doors", - "#minecraft:wooden_trapdoors", - "#minecraft:wooden_fences", - "#minecraft:wooden_pressure_plates", - "#minecraft:wooden_buttons" - ] -} diff --git a/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json index 943b3b39..dd3155a9 100644 --- a/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json +++ b/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json @@ -1,5 +1,6 @@ { "values": [ + "#minecraft:moss_replaceable", "antarchy:nyxite", "minecraft:blackstone", "antarchy:umbral_moss_block" diff --git a/common/src/main/resources/data/antarchy/tags/blocks/moggle_vision_blacklist.json b/common/src/main/resources/data/antarchy/tags/blocks/moggle_vision_blacklist.json deleted file mode 100644 index 8ca1ff0a..00000000 --- a/common/src/main/resources/data/antarchy/tags/blocks/moggle_vision_blacklist.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "values": [ - "minecraft:bedrock", - "minecraft:obsidian", - "minecraft:crying_obsidian", - "minecraft:reinforced_deepslate", - "minecraft:barrier", - "minecraft:end_portal_frame", - "minecraft:end_portal", - "minecraft:nether_portal", - "minecraft:spawner", - "minecraft:trial_spawner", - "minecraft:vault" - ] -} diff --git a/common/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json b/common/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json new file mode 100644 index 00000000..8d81eb57 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:enderman", + "minecraft:piglin", + "minecraft:piglin", + "minecraft:hoglin", + "minecraft:piglin_brute" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json new file mode 100644 index 00000000..6fd60b67 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:enchantable/crossbow", + "antarchy:squidzooka" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json b/common/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json deleted file mode 100644 index d280b15e..00000000 --- a/common/src/main/resources/data/antarchy/tags/item/termite_breeding_foods.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#minecraft:logs", - "#minecraft:planks", - "#minecraft:wooden_slabs", - "#minecraft:wooden_stairs", - "#minecraft:wooden_fences", - "#minecraft:fence_gates", - "#minecraft:wooden_doors", - "#minecraft:wooden_trapdoors", - "#minecraft:wooden_pressure_plates", - "#minecraft:wooden_buttons", - "minecraft:stick", - "minecraft:bowl", - "minecraft:ladder", - "minecraft:crafting_table", - "minecraft:chest", - "minecraft:barrel" - ] -} diff --git a/common/src/main/resources/data/antarchy/tags/item/termite_foods.json b/common/src/main/resources/data/antarchy/tags/item/termite_foods.json deleted file mode 100644 index 5d341ba2..00000000 --- a/common/src/main/resources/data/antarchy/tags/item/termite_foods.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "replace": false, - "values": [] -} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json new file mode 100644 index 00000000..ff348954 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow", + "antarchy:torchflower_fields", + "antarchy:butterfly_fields", + "antarchy:ouranwood_forest", + "antarchy:sparse_ouranwood_forest" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json new file mode 100644 index 00000000..c264e16c --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json @@ -0,0 +1,32 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_ocean", + "#minecraft:is_deep_ocean", + "#minecraft:is_beach", + { + "id": "#neoforge:is_ocean", + "required": false + }, + { + "id": "#c:ocean", + "required": false + }, + { + "id": "#c:shallow_ocean", + "required": false + }, + { + "id": "#c:deep_ocean", + "required": false + }, + { + "id": "#neoforge:is_beach", + "required": false + }, + { + "id": "#c:beach", + "required": false + } + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json new file mode 100644 index 00000000..b14f7bed --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#antarchy:is_elythia_ocean" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json index b34fcad1..8e11611d 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -8,6 +8,9 @@ "antarchy:torchflower_fields", "antarchy:moleworm_caves", "antarchy:ouranwood_forest", - "antarchy:sparse_ouranwood_forest" + "antarchy:sparse_ouranwood_forest", + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes", + "antarchy:fungal_ouranwood_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json new file mode 100644 index 00000000..e5dadf26 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json new file mode 100644 index 00000000..d3150f98 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/octopus_bomb_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:deep_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_frozen_ocean" + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json new file mode 100644 index 00000000..04cceaf5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -0,0 +1,55 @@ +{ + "has_precipitation": false, + "temperature": 0.45, + "downfall": 0.0, + "effects": { + "fog_color": 655360, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 262144, + "grass_color": 2763554, + "foliage_color": 2763554, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 1200000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.003, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [], + [], + [] + ], + "creature_spawn_probability": 0.06, + "spawners": { + "monster": [ + ], + "creature": [ + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json b/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json index ea553ae8..d5b02036 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/butterfly_fields.json @@ -18,10 +18,6 @@ } }, "spawn_costs": { - "antarchy:brutalfly": { - "energy_budget": 0.3, - "charge": 1.2 - } }, "carvers": { "air": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json deleted file mode 100644 index 163759c3..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "has_precipitation": false, - "temperature": 0.45, - "downfall": 0.0, - "effects": { - "fog_color": 983040, - "water_color": 327680, - "water_fog_color": 0, - "sky_color": 524288, - "grass_color": 4211262, - "foliage_color": 4211262, - "ambient_sound": "minecraft:ambient.cave", - "mood_sound": { - "sound": "minecraft:ambient.cave", - "tick_delay": 6000, - "block_search_extent": 8, - "offset": 2.0 - }, - "particle": { - "probability": 0.002, - "options": { - "type": "minecraft:ash" - } - } - }, - "spawn_costs": {}, - "carvers": { - "air": [], - "liquid": [] - }, - "features": [ - [ - "minecraft:lake_lava_surface" - ], - [], - [ - "minecraft:amethyst_geode" - ], - [ - "minecraft:monster_room", - "minecraft:monster_room_deep" - ], - [], - [], - [ - "minecraft:ore_dirt", - "minecraft:ore_gravel", - "minecraft:ore_granite_upper", - "minecraft:ore_granite_lower", - "minecraft:ore_diorite_upper", - "minecraft:ore_diorite_lower", - "minecraft:ore_andesite_upper", - "minecraft:ore_andesite_lower", - "minecraft:ore_tuff", - "minecraft:ore_coal_upper", - "minecraft:ore_coal_lower", - "minecraft:ore_iron_upper", - "minecraft:ore_iron_middle", - "minecraft:ore_iron_small", - "minecraft:ore_gold", - "minecraft:ore_gold_lower", - "minecraft:ore_redstone", - "minecraft:ore_redstone_lower", - "minecraft:ore_diamond", - "minecraft:ore_diamond_medium", - "minecraft:ore_diamond_large", - "minecraft:ore_diamond_buried", - "minecraft:ore_lapis", - "minecraft:ore_lapis_buried", - "minecraft:ore_copper", - "minecraft:underwater_magma" - ], - [ - "minecraft:large_dripstone", - "minecraft:pointed_dripstone", - "minecraft:glow_lichen" - ], - [ - "minecraft:spring_water", - "minecraft:spring_lava" - ], - [ - "minecraft:brown_mushroom_normal", - "minecraft:red_mushroom_normal" - ], - [] - ], - "creature_spawn_probability": 0.08, - "spawners": { - "monster": [ - { - "type": "minecraft:zombie", - "weight": 95, - "minCount": 2, - "maxCount": 4 - }, - { - "type": "minecraft:skeleton", - "weight": 90, - "minCount": 2, - "maxCount": 4 - }, - { - "type": "minecraft:creeper", - "weight": 80, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:spider", - "weight": 70, - "minCount": 1, - "maxCount": 3 - }, - { - "type": "minecraft:cave_spider", - "weight": 45, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:enderman", - "weight": 12, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:witch", - "weight": 6, - "minCount": 1, - "maxCount": 1 - } - ], - "creature": [], - "ambient": [ - { - "type": "minecraft:bat", - "weight": 10, - "minCount": 4, - "maxCount": 8 - } - ], - "axolotls": [], - "underground_water_creature": [], - "water_creature": [], - "water_ambient": [], - "misc": [] - } -} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json new file mode 100644 index 00000000..2f185cc5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json @@ -0,0 +1,70 @@ +{ + "has_precipitation": false, + "temperature": 0.68, + "downfall": 0.96, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 7000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "minecraft:patch_sugar_cane" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [], + "creature": [], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json new file mode 100644 index 00000000..a677bcc4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -0,0 +1,77 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 1.0, + "effects": { + "fog_color": 6245375, + "water_color": 3461580, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.underwater.loop", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "antarchy:elythia_coral_spike" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [ + { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 }, + { "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 } + ], + "creature": [ + { "type": "minecraft:turtle", "weight": 5, "minCount": 1, "maxCount": 2 } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [ + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + ], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json index e0c271ee..48be0038 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_lush_caves.json @@ -5,7 +5,7 @@ "effects": { "fog_color": 8084735, "water_color": 5021432, - "water_fog_color": 2502722, + "water_fog_color": 736368, "sky_color": 8084735, "foliage_color": 2867501, "grass_color": 4304168, @@ -16,10 +16,9 @@ "type": "minecraft:spore_blossom_air" } }, - "ambient_sound": "minecraft:ambient.cave", "mood_sound": { "sound": "minecraft:ambient.cave", - "tick_delay": 6000, + "tick_delay": 60000, "block_search_extent": 8, "offset": 2.0 } diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json index 728c82f9..124875e2 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_meadow.json @@ -5,7 +5,7 @@ "effects": { "fog_color": 8084735, "water_color": 5021432, - "water_fog_color": 2502722, + "water_fog_color": 736368, "sky_color": 8084735, "foliage_color": 2867501, "grass_color": 4304168, @@ -62,7 +62,8 @@ "antarchy:elythia_large_tuff_boulders", "antarchy:elythia_tuff_boulders", "antarchy:elythia_meadow_flora", - "antarchy:elythia_brown_ant_nests" + "antarchy:elythia_brown_ant_nests", + "minecraft:patch_sugar_cane" ], [] ], @@ -120,12 +121,28 @@ "weight": 20, "minCount": 1, "maxCount": 1 + }, + { + "type": "antarchy:alpha_mantis", + "weight": 1, + "minCount": 1, + "maxCount": 1 } ], "axolotls": [], "underground_water_creature": [], - "water_creature": [], - "water_ambient": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 1 + } + ], + "water_ambient": [ + { "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 }, + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + ], "misc": [] } } diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json new file mode 100644 index 00000000..da24502b --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -0,0 +1,79 @@ +{ + "has_precipitation": false, + "temperature": 0.65, + "downfall": 1.0, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 736368, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.underwater.loop", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "minecraft:sea_pickle", + "minecraft:warm_ocean_vegetation", + "minecraft:kelp_warm" + ], + [] + ], + "creature_spawn_probability": 0.15, + "spawners": { + "monster": [ + { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 } + ], + "creature": [ + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [ + { "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 }], + "water_ambient": [ + { "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 }, + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + ], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json index e403f969..8b8caa79 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_river.json @@ -5,7 +5,7 @@ "effects": { "fog_color": 8084735, "water_color": 5021432, - "water_fog_color": 2502722, + "water_fog_color": 736368, "sky_color": 8084735, "foliage_color": 2867501, "grass_color": 4304168, @@ -54,7 +54,8 @@ ], [], [ - "antarchy:elythia_meadow_flora" + "antarchy:elythia_meadow_flora", + "minecraft:patch_sugar_cane" ], [] ], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json new file mode 100644 index 00000000..56fe8dc0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -0,0 +1,102 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:fallen_ouranwood_tree", + "antarchy:fungal_mushroom" + ], + [] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 2, + "minCount": 1, + "maxCount": 2 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json index a099d855..0a1aa928 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/ouranwood_forest.json @@ -101,8 +101,16 @@ ], "axolotls": [], "underground_water_creature": [], - "water_creature": [], - "water_ambient": [], + "water_creature": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 1 + }], + "water_ambient": [ + { "type": "antarchy:cheep", "weight": 10, "minCount": 3, "maxCount": 6 }, + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 }], "misc": [] } } diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json new file mode 100644 index 00000000..066a22b9 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_coral_spike", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json new file mode 100644 index 00000000..5c93038c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fallen_ouranwood_tree", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json new file mode 100644 index 00000000..5c113be3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fungal_mushroom", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json new file mode 100644 index 00000000..51810441 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 64, + "targets": [ + { + "state": { + "Name": "antarchy:shellstone" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:base_stone_overworld" + } + } + ] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json b/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json deleted file mode 100644 index 02ada1e9..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_custom.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "minecraft:add", - "argument1": { - "type": "minecraft:min", - "argument1": { - "type": "minecraft:cache_2d", - "argument": { - "type": "minecraft:clamp", - "input": { - "type": "minecraft:max", - "argument1": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:weird_scaled_sampler", - "input": { - "type": "minecraft:noise", - "noise": "minecraft:spaghetti_2d_modulator", - "xz_scale": 0.25, - "y_scale": 0.15 - }, - "noise": "antarchy:cavaryn", - "rarity_value_mapper": "type_2" - }, - "argument2": { - "type": "minecraft:mul", - "argument1": 0.123, - "argument2": { - "type": "minecraft:cache_once", - "argument": { - "type": "minecraft:add", - "argument1": -0.86, - "argument2": { - "type": "minecraft:mul", - "argument1": -0.25, - "argument2": { - "type": "minecraft:noise", - "noise": "minecraft:spaghetti_2d_thickness", - "xz_scale": 1.2, - "y_scale": 1.5 - } - } - } - } - } - }, - "argument2": { - "type": "minecraft:cube", - "argument": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:abs", - "argument": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:add", - "argument1": 0, - "argument2": { - "type": "minecraft:mul", - "argument1": 10, - "argument2": { - "type": "minecraft:noise", - "noise": "minecraft:spaghetti_2d_elevation", - "xz_scale": 0.8, - "y_scale": 0.4 - } - } - }, - "argument2": { - "type": "minecraft:y_clamped_gradient", - "from_y": 252, - "to_y": 8, - "from_value": 10, - "to_value": -10 - } - } - }, - "argument2": { - "type": "minecraft:cache_once", - "argument": { - "type": "minecraft:add", - "argument1": -0.86, - "argument2": { - "type": "minecraft:mul", - "argument1": -0.25, - "argument2": { - "type": "minecraft:noise", - "noise": "minecraft:spaghetti_2d_thickness", - "xz_scale": 1.2, - "y_scale": 1.5 - } - } - } - } - } - } - }, - "max": 2.0, - "min": -2.0 - } - }, - "argument2": { - "type": "minecraft:cache_all_in_cell", - "argument": "antarchy:cavaryn_noise_cave" - } - }, - "argument2": -0.05 -} diff --git a/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json b/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json deleted file mode 100644 index 5ce470a6..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/density_function/cavaryn_noise_cave.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:add", - "argument1": { - "type": "minecraft:cache_once", - "argument": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_y": 232, - "to_y": 20, - "from_value": 1.45, - "to_value": 0.12 - }, - "argument2": { - "type": "minecraft:add", - "argument1": { - "type": "minecraft:noise", - "noise": "minecraft:noodle_thickness", - "xz_scale": 1, - "y_scale": 7.5 - }, - "argument2": { - "type": "minecraft:mul", - "argument1": { - "type": "minecraft:weird_scaled_sampler", - "rarity_value_mapper": "type_1", - "noise": "minecraft:patch", - "input": { - "type": "minecraft:interpolated", - "argument": 1 - } - }, - "argument2": { - "type": "minecraft:cube", - "argument": 0.5 - } - } - } - } - }, - "argument2": 0.3 -} diff --git a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json index 8d55f6f5..b7d6ac21 100644 --- a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json +++ b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json @@ -6,8 +6,8 @@ "type": "minecraft:y_clamped_gradient", "from_y": -64, "to_y": 220, - "from_value": 2.1, - "to_value": -1.78 + "from_value": 2.20, + "to_value": -1.90 }, "argument2": { "type": "minecraft:add", @@ -70,7 +70,7 @@ }, "argument2": { "type": "minecraft:mul", - "argument1": 0.02, + "argument1": 0.58, "argument2": "minecraft:overworld/continents" } } diff --git a/common/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json deleted file mode 100644 index 76e945fc..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/noise/cavaryn.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "firstOctave": -7, - "amplitudes": [ - 0.95, - 0.95 - ] -} diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json deleted file mode 100644 index ccb3ed01..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "sea_level": 32, - "disable_mob_generation": false, - "aquifers_enabled": true, - "ore_veins_enabled": true, - "legacy_random_source": false, - "default_block": { - "Name": "minecraft:stone" - }, - "default_fluid": { - "Name": "minecraft:water", - "Properties": { - "level": "0" - } - }, - "noise": { - "min_y": 0, - "height": 256, - "size_horizontal": 1, - "size_vertical": 2 - }, - "noise_router": { - "barrier": { - "type": "minecraft:noise", - "noise": "minecraft:aquifer_barrier", - "xz_scale": 1, - "y_scale": 0.5 - }, - "fluid_level_floodedness": { - "type": "minecraft:noise", - "noise": "minecraft:aquifer_fluid_level_floodedness", - "xz_scale": 1, - "y_scale": 0.67 - }, - "fluid_level_spread": { - "type": "minecraft:noise", - "noise": "minecraft:aquifer_fluid_level_spread", - "xz_scale": 1, - "y_scale": 0.7142857142857143 - }, - "lava": { - "type": "minecraft:noise", - "noise": "minecraft:aquifer_lava", - "xz_scale": 1, - "y_scale": 1 - }, - "temperature": { - "type": "minecraft:shifted_noise", - "noise": "minecraft:temperature", - "xz_scale": 0.25, - "y_scale": 0, - "shift_x": "minecraft:shift_x", - "shift_y": 0, - "shift_z": "minecraft:shift_z" - }, - "vegetation": { - "type": "minecraft:shifted_noise", - "noise": "minecraft:vegetation", - "xz_scale": 0.25, - "y_scale": 0, - "shift_x": "minecraft:shift_x", - "shift_y": 0, - "shift_z": "minecraft:shift_z" - }, - "continents": "minecraft:overworld/continents", - "erosion": "minecraft:overworld/erosion", - "depth": "minecraft:overworld/depth", - "ridges": "minecraft:overworld/ridges", - "initial_density_without_jaggedness": 0, - "final_density": { - "type": "minecraft:max", - "argument1": { - "type": "minecraft:max", - "argument1": { - "type": "minecraft:y_clamped_gradient", - "from_y": 0, - "to_y": 12, - "from_value": 4, - "to_value": -0.5 - }, - "argument2": { - "type": "minecraft:y_clamped_gradient", - "from_y": 244, - "to_y": 255, - "from_value": -0.5, - "to_value": 4 - } - }, - "argument2": { - "type": "minecraft:min", - "argument1": "minecraft:overworld/caves/noodle", - "argument2": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 4, - "max_exclusive": 252, - "when_in_range": "antarchy:cavaryn_custom", - "when_out_of_range": 2 - } - } - }, - "vein_toggle": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 256, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_veininess", - "xz_scale": 1.5, - "y_scale": 1.5 - }, - "when_out_of_range": 0 - } - }, - "vein_ridged": { - "type": "minecraft:add", - "argument1": -0.07999999821186066, - "argument2": { - "type": "minecraft:max", - "argument1": { - "type": "minecraft:abs", - "argument": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 256, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_a", - "xz_scale": 4, - "y_scale": 4 - }, - "when_out_of_range": 0 - } - } - }, - "argument2": { - "type": "minecraft:abs", - "argument": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 256, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_b", - "xz_scale": 4, - "y_scale": 4 - }, - "when_out_of_range": 0 - } - } - } - } - }, - "vein_gap": { - "type": "minecraft:noise", - "noise": "minecraft:ore_gap", - "xz_scale": 1, - "y_scale": 1 - } - }, - "spawn_target": [ - { - "temperature": [ - -1, - 1 - ], - "humidity": [ - -1, - 1 - ], - "continentalness": [ - -1, - 1 - ], - "erosion": [ - -1, - 1 - ], - "weirdness": [ - -1, - 1 - ], - "depth": 0, - "offset": 0 - } - ], - "surface_rule": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "add_stone_depth": false, - "anchor": { - "absolute": 5 - }, - "surface_depth_multiplier": 0 - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:bedrock" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:y_above", - "add_stone_depth": false, - "anchor": { - "below_top": 5 - }, - "surface_depth_multiplier": 0 - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:bedrock" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:not", - "invert": { - "type": "minecraft:y_above", - "add_stone_depth": false, - "anchor": { - "absolute": 40 - }, - "surface_depth_multiplier": 0 - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:deepslate" - } - } - }, - { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:stone" - } - } - ] - } -} diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index efa5bb78..067e562c 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -1,5 +1,5 @@ { - "sea_level": 63, + "sea_level": 60, "disable_mob_generation": false, "aquifers_enabled": true, "ore_veins_enabled": false, @@ -128,11 +128,7 @@ "when_in_range": { "type": "minecraft:min", "argument1": "antarchy:elythia_surface", - "argument2": { - "type": "minecraft:mul", - "argument1": 5.0, - "argument2": "minecraft:overworld/caves/entrances" - } + "argument2": 1000000.0 }, "when_out_of_range": { "type": "minecraft:max", @@ -188,13 +184,9 @@ } } }, - "argument2": "minecraft:overworld/caves/entrances" + "argument2": 1000000.0 }, - "argument2": { - "type": "minecraft:add", - "argument1": "minecraft:overworld/caves/spaghetti_2d", - "argument2": "minecraft:overworld/caves/spaghetti_roughness_function" - } + "argument2": 1000000.0 }, "argument2": { "type": "minecraft:range_choice", @@ -216,7 +208,7 @@ } } }, - "argument2": "minecraft:overworld/caves/noodle" + "argument2": 1000000.0 }, "fluid_level_floodedness": { "type": "minecraft:noise", @@ -430,7 +422,7 @@ }, "then_run": { "type": "minecraft:block", - "result_state": { "Name": "minecraft:gravel" } + "result_state": { "Name": "minecraft:sand" } } } }, @@ -480,6 +472,154 @@ ] } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:elythia_ocean", "antarchy:elythia_coral_spikes"] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:above_preliminary_surface" }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sand" } + } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sand" } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 4, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "antarchy:shellstone" } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "antarchy:shellstone" } + } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "antarchy:shellstone" } + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:elythia_beach"] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sand" } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 3, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sand" } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 6, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sandstone" } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "antarchy:shellstone" } + } + } + ] + } + }, { "type": "minecraft:condition", "if_true": { "type": "minecraft:above_preliminary_surface" }, diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json new file mode 100644 index 00000000..e6757d38 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:elythia_coral_spike", + "placement": [ + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json index b77b27fd..7e25c5aa 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_large_tuff_boulders.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:rarity_filter", - "chance": 24 + "chance": 34 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json index 19494229..004e9bec 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_tuff_boulders.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:rarity_filter", - "chance": 6 + "chance": 9 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json new file mode 100644 index 00000000..de592a7f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:fallen_ouranwood_tree", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 5 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json new file mode 100644 index 00000000..a720f1e1 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:fungal_mushroom", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 4 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json new file mode 100644 index 00000000..11152fbe --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:shellstone_blob", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 60 + }, + "min_inclusive": { + "absolute": 0 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json new file mode 100644 index 00000000..d3c421c2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:shellstone_blob", + "placement": [ + { + "type": "minecraft:rarity_filter", + "chance": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "absolute": 128 + }, + "min_inclusive": { + "absolute": 64 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json new file mode 100644 index 00000000..0af857c1 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json @@ -0,0 +1,15 @@ +{ + "type": "integrated_api:generic_structure", + "start_pool": "antarchy:toreterror_arena/toreterror_arena", + "size": 2, + "valid_biome_radius_check": 2, + "biomes": "#antarchy:has_structure/toreterror_arena_biomes", + "step": "surface_structures", + "terrain_adaptation": "none", + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "start_height": { + "absolute": 1 + }, + "spawn_overrides": {}, + "liquid_settings": "ignore_waterlogging" +} diff --git a/common/src/main/resources/data/antarchy/worldgen/structure_set/toreterror_arena.json b/common/src/main/resources/data/antarchy/worldgen/structure_set/toreterror_arena.json new file mode 100644 index 00000000..b437bb4a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/structure_set/toreterror_arena.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "antarchy:toreterror_arena", + "weight": 1 + } + ], + "placement": { + "salt": 1528736139, + "spacing": 75, + "separation": 68, + "type": "integrated_api:advanced_random_spread" + } +} \ No newline at end of file diff --git a/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json b/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json new file mode 100644 index 00000000..9b0b0f55 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:toreterror_arena/toreterror_arena", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:toreterror_arena/toreterror_arena", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json b/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json new file mode 100644 index 00000000..bdf238c5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json @@ -0,0 +1,15 @@ +{ + "name": "antarchy:toreterror_arena/toreterror_arena_bottom", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "antarchy:toreterror_arena/toreterror_arena_bottom", + "processors": "antarchy:generic_processor", + "projection": "rigid", + "element_type": "integrated_api:integrated_api_single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/c/tags/block/stones.json b/common/src/main/resources/data/c/tags/block/stones.json new file mode 100644 index 00000000..83c265b0 --- /dev/null +++ b/common/src/main/resources/data/c/tags/block/stones.json @@ -0,0 +1,4 @@ +{ + "values": [ + ] +} diff --git a/common/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json b/common/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json new file mode 100644 index 00000000..6618775d --- /dev/null +++ b/common/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "antarchy:toreterror_arena", + "antarchy:fallen_kingdom_castle", + "antarchy:trayaurus_lab" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/antarchy/tags/item/termite_activation_items.json b/common/src/main/resources/data/minecraft/tags/block/climbable.json similarity index 65% rename from common/src/main/resources/data/antarchy/tags/item/termite_activation_items.json rename to common/src/main/resources/data/minecraft/tags/block/climbable.json index 90f5f079..74dab668 100644 --- a/common/src/main/resources/data/antarchy/tags/item/termite_activation_items.json +++ b/common/src/main/resources/data/minecraft/tags/block/climbable.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "minecraft:stick" + "minecraft:vine" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json index 019600cb..f12957c0 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/hoe.json @@ -1,6 +1,8 @@ { "replace": false, "values": [ - "antarchy:ouranwood_leaves" + "antarchy:ouranwood_leaves", + "antarchy:umbral_moss_block", + "antarchy:umbral_moss_carpet" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index a73bb9ab..22851f51 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -41,6 +41,9 @@ "antarchy:shellstone_bricks", "antarchy:chiseled_shellstone", "antarchy:mossy_shellstone_bricks", + "antarchy:mossy_shellstone_brick_stairs", + "antarchy:mossy_shellstone_brick_slab", + "antarchy:mossy_shellstone_brick_wall", "antarchy:cracked_shellstone_bricks", "antarchy:shellstone_stairs", "antarchy:shellstone_slab", diff --git a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index d0a65c64..6f19d46e 100644 --- a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -6,6 +6,9 @@ "antarchy:shellstone_bricks", "antarchy:chiseled_shellstone", "antarchy:mossy_shellstone_bricks", + "antarchy:mossy_shellstone_brick_stairs", + "antarchy:mossy_shellstone_brick_slab", + "antarchy:mossy_shellstone_brick_wall", "antarchy:cracked_shellstone_bricks", "antarchy:shellstone_stairs", "antarchy:shellstone_slab", diff --git a/common/src/main/resources/data/minecraft/tags/block/slabs.json b/common/src/main/resources/data/minecraft/tags/block/slabs.json index f353c9ad..1cb3422a 100644 --- a/common/src/main/resources/data/minecraft/tags/block/slabs.json +++ b/common/src/main/resources/data/minecraft/tags/block/slabs.json @@ -7,6 +7,7 @@ "antarchy:shellstone_slab", "antarchy:polished_shellstone_slab", "antarchy:shellstone_brick_slab", + "antarchy:mossy_shellstone_brick_slab", "antarchy:dream_sandstone_slab", "antarchy:smooth_dream_sandstone_slab", "antarchy:cut_dream_sandstone_slab", diff --git a/common/src/main/resources/data/minecraft/tags/block/stairs.json b/common/src/main/resources/data/minecraft/tags/block/stairs.json index 4a268bb0..431e9e7c 100644 --- a/common/src/main/resources/data/minecraft/tags/block/stairs.json +++ b/common/src/main/resources/data/minecraft/tags/block/stairs.json @@ -7,6 +7,7 @@ "antarchy:shellstone_stairs", "antarchy:polished_shellstone_stairs", "antarchy:shellstone_brick_stairs", + "antarchy:mossy_shellstone_brick_stairs", "antarchy:dream_sandstone_stairs", "antarchy:smooth_dream_sandstone_stairs", "antarchy:cut_titanium_stairs", diff --git a/common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json b/common/src/main/resources/data/minecraft/tags/block/vines.json similarity index 64% rename from common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json rename to common/src/main/resources/data/minecraft/tags/block/vines.json index bf1b47a2..74dab668 100644 --- a/common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json +++ b/common/src/main/resources/data/minecraft/tags/block/vines.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "antarchy:cavaryn" + "minecraft:vine" ] } diff --git a/common/src/main/resources/data/minecraft/tags/block/walls.json b/common/src/main/resources/data/minecraft/tags/block/walls.json index a53d44da..6da83bf9 100644 --- a/common/src/main/resources/data/minecraft/tags/block/walls.json +++ b/common/src/main/resources/data/minecraft/tags/block/walls.json @@ -7,6 +7,7 @@ "antarchy:nyxite_brick_wall", "antarchy:shellstone_wall", "antarchy:polished_shellstone_wall", - "antarchy:shellstone_brick_wall" + "antarchy:shellstone_brick_wall", + "antarchy:mossy_shellstone_brick_wall" ] } diff --git a/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json new file mode 100644 index 00000000..7af39a02 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json @@ -0,0 +1,15 @@ +{ + "values": [ + "antarchy:brown_ant", + "antarchy:red_ant", + "antarchy:rainbow_ant", + "antarchy:caterpillar", + "antarchy:butterfly", + "antarchy:brutalfly", + "antarchy:bed_bug", + "antarchy:mantis", + "antarchy:alpha_mantis", + "antarchy:scorpion", + "antarchy:emperor_scorpion" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/entity_type/zombies.json b/common/src/main/resources/data/minecraft/tags/entity_type/zombies.json deleted file mode 100644 index 5d341ba2..00000000 --- a/common/src/main/resources/data/minecraft/tags/entity_type/zombies.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "replace": false, - "values": [] -} diff --git a/common/src/main/resources/data/minecraft/tags/item/slabs.json b/common/src/main/resources/data/minecraft/tags/item/slabs.json index f353c9ad..1cb3422a 100644 --- a/common/src/main/resources/data/minecraft/tags/item/slabs.json +++ b/common/src/main/resources/data/minecraft/tags/item/slabs.json @@ -7,6 +7,7 @@ "antarchy:shellstone_slab", "antarchy:polished_shellstone_slab", "antarchy:shellstone_brick_slab", + "antarchy:mossy_shellstone_brick_slab", "antarchy:dream_sandstone_slab", "antarchy:smooth_dream_sandstone_slab", "antarchy:cut_dream_sandstone_slab", diff --git a/common/src/main/resources/data/minecraft/tags/item/stairs.json b/common/src/main/resources/data/minecraft/tags/item/stairs.json index 85da72ea..93574606 100644 --- a/common/src/main/resources/data/minecraft/tags/item/stairs.json +++ b/common/src/main/resources/data/minecraft/tags/item/stairs.json @@ -7,6 +7,7 @@ "antarchy:shellstone_stairs", "antarchy:polished_shellstone_stairs", "antarchy:shellstone_brick_stairs", + "antarchy:mossy_shellstone_brick_stairs", "antarchy:dream_sandstone_stairs", "antarchy:smooth_dream_sandstone_stairs", "antarchy:cut_uranium_stairs", diff --git a/common/src/main/resources/data/minecraft/tags/item/vines.json b/common/src/main/resources/data/minecraft/tags/item/vines.json new file mode 100644 index 00000000..74dab668 --- /dev/null +++ b/common/src/main/resources/data/minecraft/tags/item/vines.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:vine" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/item/walls.json b/common/src/main/resources/data/minecraft/tags/item/walls.json index c584b031..2e5809bb 100644 --- a/common/src/main/resources/data/minecraft/tags/item/walls.json +++ b/common/src/main/resources/data/minecraft/tags/item/walls.json @@ -7,6 +7,7 @@ "antarchy:shellstone_wall", "antarchy:polished_shellstone_wall", "antarchy:shellstone_brick_wall", + "antarchy:mossy_shellstone_brick_wall", "antarchy:dream_sandstone_wall" ] } diff --git a/fabric/build.gradle b/fabric/build.gradle index 0738b295..dbc656d2 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -23,22 +23,22 @@ dependencies { modApi "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" modImplementation "software.bernie.geckolib:geckolib-fabric-${project.minecraft_version}:${project.geckolib_version}" compileOnly("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}") - compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") - compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") - compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") - compileOnly("curse.maven:aperture-${project.aperture_curseforge_id}:${project.aperture_curseforge_file_id}") - compileOnly("curse.maven:inventory_pets-${project.inventory_pets_curseforge_id}:${project.inventory_pets_curseforge_file_id}") - compileOnly("curse.maven:cataclysm-${project.cataclysm_curseforge_id}:${project.cataclysm_curseforge_file_id}") - compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") - compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") - compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") +// compileOnly("curse.maven:create-${project.create_curseforge_id_neoforge}:${project.create_curseforge_file_id_neoforge}") +// compileOnly("curse.maven:marvel-${project.marvel_curseforge_id}:${project.marvel_curseforge_file_id}") +// compileOnly("curse.maven:stellaris-${project.stellaris_curseforge_id}:${project.stellaris_curseforge_file_id}") +// compileOnly("curse.maven:aperture-${project.aperture_curseforge_id}:${project.aperture_curseforge_file_id}") +// compileOnly("curse.maven:inventory_pets-${project.inventory_pets_curseforge_id}:${project.inventory_pets_curseforge_file_id}") +// compileOnly("curse.maven:cataclysm-${project.cataclysm_curseforge_id}:${project.cataclysm_curseforge_file_id}") +// compileOnly("curse.maven:iaf-${project.iaf_curseforge_id}:${project.iaf_curseforge_file_id}") +// compileOnly("curse.maven:backpack-${project.backpack_curseforge_id}:${project.backpack_curseforge_file_id}") +// compileOnly("curse.maven:regions_unexplored-${project.regions_unexplored_curseforge_id}:${project.regions_unexplored_curseforge_file_id}") compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge-sources.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/gravity-api-1.0.7-1.20.1.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/soul-fire-d-neoforge-1.21-6.1.0.jar")) - compileOnly(files("$rootDir/infinite_dimensions_jars/prometheus-neoforge-1.21-1.2.5.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/Cloro's Gravity Gun Mod (Release 1.3.1).jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/VanillaBackport-neoforge-1.21.1-1.1.7.6.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/soul-fire-d-neoforge-1.21-6.1.0.jar")) +// compileOnly(files("$rootDir/infinite_dimensions_jars/prometheus-neoforge-1.21-1.2.5.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/cloth-config-15.0.140-fabric.jar")) compileOnly(files("$rootDir/infinite_dimensions_jars/sable-neoforge-1.21.1-2.0.3.jar")) @@ -133,6 +133,18 @@ processResources { exclude "antarchy-common.mixins.json" } + // Fabric needs a refmap on the common mixin config, NeoForge only boots without one. + // Generate a fabric-only copy with the refmap injected so the shared file stays refmap-free. + def commonMixinConfig = project(':common').file('src/main/resources/antarchy-common.mixins.json') + inputs.file commonMixinConfig + + doLast { + def json = new groovy.json.JsonSlurper().parse(commonMixinConfig) + json.put('refmap', 'antarchy.refmap.json') + new File(destinationDir, 'antarchy-common-fabric.mixins.json').text = + groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(json)) + } + filesMatching("fabric.mod.json") { expand( version: project.version, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java index 8df2d942..898fc485 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.config.ConfigResetGuard; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; @@ -35,6 +36,13 @@ public final class AntarchyConfigModuleFabric { } public static void init() { + ConfigResetGuard.wipeIfNeeded( + CONFIG_DIR, + ConfigSection.MOBS.path, + ConfigSection.TOOLS.path, + ConfigSection.MISC.path, + LEGACY_CONFIG_PATH + ); JsonObject legacy = readConfig(LEGACY_CONFIG_PATH); Map loaded = new LinkedHashMap<>(); Map normalized = new LinkedHashMap<>(); @@ -188,6 +196,7 @@ public final class AntarchyConfigModuleFabric { || name.startsWith("nightmareLeggings") || name.startsWith("nightmareBoots") || name.startsWith("nightmareArmorDreadAura") + || name.startsWith("primordialArmor") || name.startsWith("nightmareSword") || name.startsWith("basiliskDagger") || name.startsWith("squidzooka") diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 7ca68aa5..7db898f7 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -3,17 +3,93 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; +import net.fabricmc.fabric.api.biome.v1.BiomeModifications; +import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.fabricmc.api.ModInitializer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; public final class AntarchyFabric implements ModInitializer { + private static final TagKey SHELLSTONE_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "has_shellstone") + ); + private static final ResourceKey SHELLSTONE_UPPER = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "shellstone_upper") + ); + private static final ResourceKey SHELLSTONE_LOWER = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "shellstone_lower") + ); + private static final TagKey MISSILE_SQUID_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "missile_squid_spawn_biomes") + ); + private static final TagKey OCTOPUS_BOMB_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "octopus_bomb_spawn_biomes") + ); + private static final TagKey MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes") + ); + @Override public void onInitialize() { AntarchyFabricNetworking.register(); AntarchyConfigModuleFabric.init(); AntarchyFabricContent.register(); + registerWorldgenFeatures(); AntarchyFabricEvents.register(); BloodglassManager.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; } + + private static final TagKey CAVARYN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "is_cavaryn") + ); + + private static void registerWorldgenFeatures() { + BiomeModifications.addFeature( + BiomeSelectors.tag(SHELLSTONE_BIOMES), + GenerationStep.Decoration.UNDERGROUND_ORES, + SHELLSTONE_UPPER + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(SHELLSTONE_BIOMES), + GenerationStep.Decoration.UNDERGROUND_ORES, + SHELLSTONE_LOWER + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(MISSILE_SQUID_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.MISSILE_SQUID.get(), + 2, 1, 2 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(OCTOPUS_BOMB_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.OCTOPUS_BOMB.get(), + 2, 1, 2 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.MANTIS.get(), + 8, 1, 1 + ); + BiomeModifications.addSpawn( + BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES), + net.minecraft.world.entity.MobCategory.MONSTER, + AntarchyFabricContent.ALPHA_MANTIS.get(), + 1, 1, 1 + ); + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 682ad470..ada0aba6 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -14,10 +14,15 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; @@ -36,6 +41,7 @@ import com.craisinlord.antarchy.content.effect.GrowthMobEffect; import com.craisinlord.antarchy.content.effect.InvertedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; @@ -55,8 +61,11 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; @@ -66,19 +75,25 @@ import com.craisinlord.antarchy.content.item.LucidPearlItem; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.BomberEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; import com.craisinlord.antarchy.content.item.BattleAxeItem; import com.craisinlord.antarchy.content.item.BasiliskDaggerItem; import com.craisinlord.antarchy.content.item.BigBerthaItem; @@ -100,6 +115,7 @@ import com.craisinlord.antarchy.content.item.DiamondMinecartItem; import com.craisinlord.antarchy.content.item.ReverieBottleItem; import com.craisinlord.antarchy.content.item.ScorpionWhipItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.item.SizeRayItem; import com.craisinlord.antarchy.content.item.SquidzookaItem; import com.craisinlord.antarchy.content.item.SimpleToolTier; @@ -111,6 +127,7 @@ import com.craisinlord.antarchy.content.item.NightmareSwordItem; import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; @@ -128,6 +145,9 @@ import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeat import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; @@ -191,6 +211,7 @@ import net.minecraft.world.item.StandingAndWallBlockItem; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleType; @@ -200,9 +221,12 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.AmethystClusterBlock; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.GlowLichenBlock; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.VineBlock; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; @@ -242,6 +266,7 @@ public final class AntarchyFabricContent { private static final DeferredRegister POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID); private static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID); private static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID); + private static final DeferredRegister> MENUS = DeferredRegister.create(Registries.MENU, Antarchy.MODID); private static final Tier ULTIMATE_TIER = new SimpleToolTier( 3072, 10.5F, @@ -369,6 +394,23 @@ public final class AntarchyFabricContent { public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); + public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); + public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); + public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); + public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); + public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); + public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); + public static final DeferredHolder STINKY_FLY_SOUND = registerSoundEvent("stinky_fly"); + public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); + public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); + public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); + public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); + public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); + public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); + public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); @@ -481,13 +523,13 @@ public final class AntarchyFabricContent { () -> new TorchflowerBushBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY) .lightLevel(state -> AntarchySettings.glowingTorchflowers() ? 15 : 0))); public static final DeferredBlock OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign", - () -> new net.minecraft.world.level.block.StandingSignBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); + () -> new net.minecraft.world.level.block.StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN))); public static final DeferredBlock OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign", - () -> new net.minecraft.world.level.block.WallSignBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); + () -> new net.minecraft.world.level.block.WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN))); public static final DeferredBlock OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign", - () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); + () -> new net.minecraft.world.level.block.CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN))); public static final DeferredBlock OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign", - () -> new net.minecraft.world.level.block.WallHangingSignBlock(net.minecraft.world.level.block.state.properties.WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); + () -> new net.minecraft.world.level.block.WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN))); public static final DeferredBlock DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling", () -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); public static final DeferredBlock DUCT_TAPE = BLOCKS.register("duct_tape", @@ -538,6 +580,12 @@ public final class AntarchyFabricContent { () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", () -> new Block(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", @@ -578,6 +626,10 @@ public final class AntarchyFabricContent { () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -588,6 +640,8 @@ public final class AntarchyFabricContent { () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> simpleParticleType()); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -620,11 +674,14 @@ public final class AntarchyFabricContent { () -> new WaspNestBlock(AntarchyFabricContent::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); + public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", + () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); private static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( "bloodglass_max_hearts", @@ -638,6 +695,10 @@ public final class AntarchyFabricContent { () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", @@ -660,6 +721,29 @@ public final class AntarchyFabricContent { () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> lookupFlowingFluid("bile"), + () -> lookupFlowingFluid("flowing_bile"), + () -> lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> lookupFlowingFluid("bile"), + () -> lookupFlowingFluid("flowing_bile"), + () -> lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); + public static final DeferredHolder ICHOR = FLUIDS.register("ichor", () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( () -> lookupFlowingFluid("ichor"), @@ -706,6 +790,11 @@ public final class AntarchyFabricContent { .sized(3.125F, 2.5F) .clientTrackingRange(8) .build("mantis")); + public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", + () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) + .sized(4.0F, 3.25F) + .clientTrackingRange(10) + .build("alpha_mantis")); public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) .sized(1.375F, 0.5625F) @@ -902,8 +991,6 @@ public final class AntarchyFabricContent { () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, TermiteNestFeature> TERMITE_NEST_FEATURE = FEATURES.register("termite_nest", - () -> new TermiteNestFeature(SimpleBlockConfiguration.CODEC)); public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", @@ -974,6 +1061,12 @@ public final class AntarchyFabricContent { () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", () -> ThoraxisBiomeSource.CODEC); @@ -1083,6 +1176,9 @@ public final class AntarchyFabricContent { public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_SHELLSTONE); public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICKS); public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(CRACKED_SHELLSTONE_BRICKS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_STAIRS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_SLAB); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_WALL); public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_STAIRS); public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_SLAB); public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_WALL); @@ -1103,9 +1199,15 @@ public final class AntarchyFabricContent { () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_CAMPFIRE); + public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.register("creeping_horror_egg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.register("lurking_terror_egg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", () -> new BucketItem(ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", @@ -1139,8 +1241,29 @@ public final class AntarchyFabricContent { -2.2F )); public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem STINK_BUG_ITEM = ITEMS.register("stink_bug", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), + java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( + net.minecraft.core.Holder.direct(JUMPY_BOOTS_ARMOR_MATERIAL.get()), + new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) + )); public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); @@ -1436,7 +1559,7 @@ public final class AntarchyFabricContent { .build("cloud_shark")); public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(5.2F, 9.8F) + .sized(11.4F, 39.0F) .clientTrackingRange(12) .build("kraken")); public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", @@ -1444,6 +1567,11 @@ public final class AntarchyFabricContent { .sized(1.62F, 3.18F) .clientTrackingRange(10) .build("missile_squid")); + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) .sized(3.2F, 3.8F) @@ -1472,8 +1600,8 @@ public final class AntarchyFabricContent { .build("basilisk")); public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) - .sized(4.05F, 1.35F) - .clientTrackingRange(10) + .sized(6.0F, 3.0F) + .clientTrackingRange(12) .build("emperor_scorpion")); public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) @@ -1508,7 +1636,7 @@ public final class AntarchyFabricContent { public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", () -> new DeferredSpawnEggItem(CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(BUTTERFLY, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", () -> new DeferredSpawnEggItem(REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", @@ -1520,11 +1648,13 @@ public final class AntarchyFabricContent { public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); + () -> new DeferredSpawnEggItem(MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", () -> new DeferredSpawnEggItem(MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", + () -> new DeferredSpawnEggItem(ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties())); public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", - () -> new DeferredSpawnEggItem(MOLEVORE, 0x3E2E24, 0xB67B4F, new Item.Properties().rarity(Rarity.UNCOMMON))); + () -> new DeferredSpawnEggItem(MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", () -> new DeferredSpawnEggItem(TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", @@ -1545,6 +1675,8 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", () -> new DeferredSpawnEggItem(MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", () -> new DeferredSpawnEggItem(NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", @@ -1556,7 +1688,7 @@ public final class AntarchyFabricContent { public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", () -> new DeferredSpawnEggItem(BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(EMPEROR_SCORPION, 0x1A1A0A, 0x8B2200, new Item.Properties())); + () -> new DeferredSpawnEggItem(EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", @@ -1580,7 +1712,7 @@ public final class AntarchyFabricContent { new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.5F, 3.0F) + .sized(2.0F, 3.0F) .clientTrackingRange(14) .build("toreterror")); public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", @@ -1591,6 +1723,15 @@ public final class AntarchyFabricContent { .build("water_bomb")); public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", () -> new DeferredSpawnEggItem(TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + + public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", + () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.CheepEntity::new, MobCategory.WATER_AMBIENT) + .sized(1.0F, 1.2F) + .clientTrackingRange(8) + .build("cheep")); + public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", + () -> new DeferredSpawnEggItem(CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties())); + public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) @@ -1660,17 +1801,20 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(KRAKEN.get(), KrakenEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(NIGHTMARE.get(), NightmareEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(MANTIS.get(), MantisEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(TRIFFID.get(), TriffidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(LUCID.get(), LucidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(SCORPION.get(), ScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BASILISK.get(), BasiliskEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes( AntarchySettings.redAntHealth(), @@ -1705,9 +1849,12 @@ public final class AntarchyFabricContent { SpawnPlacements.register(BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); SpawnPlacements.register(KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); + SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); + SpawnPlacements.register(CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules); SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); + SpawnPlacements.register(ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules); SpawnPlacements.register(MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); SpawnPlacements.register(BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); SpawnPlacements.register(LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); @@ -1735,6 +1882,8 @@ public final class AntarchyFabricContent { acceptPotionFamily(output, LONG_DREAD); acceptPotionFamily(output, INVERSION); acceptPotionFamily(output, LONG_INVERSION); + acceptPotionFamily(output, STINKY_POTION); + acceptPotionFamily(output, LONG_STINKY); acceptPotionFamily(output, PARALYSIS); acceptPotionFamily(output, LONG_PARALYSIS); acceptPotionFamily(output, HASTE); @@ -1771,38 +1920,51 @@ public final class AntarchyFabricContent { "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - case "antimetal", "polished_antimetal" -> 2; + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; + case "antimetal", "polished_antimetal" -> 3; case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", "cut_dream_sandstone", "smooth_dream_sandstone", "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 3; + "cut_dream_sandstone_slab" -> 4; case "umbral_moss_block", "umbral_moss_carpet" -> 4; - case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed" -> 5; + case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6; case "blood_crystal_block", "budding_blood_crystal", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "blood_crystal_cluster" -> 6; + "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; + case "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", "chiseled_titanium", "uranium_bulb", "titanium_bulb", "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars" -> 7; + "uranium_bars", "titanium_bars" -> 8; + case "bile_vein" -> 9; case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", - "cloud_block" -> 8; - case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 9; + "cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9; + case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", - "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", - "moleworm_spawn_egg", "mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", + "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", + "moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", "honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "spit_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", - "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg" -> 90; + "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", + "hercules_beetle_spawn_egg", + "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; + case "stink_bug", "chiten" -> 22; case "water_cannon" -> 52; case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots" -> 53; + case "jumpy_boots" -> 54; + case "king_scale", "queen_scale" -> 22; default -> 50; }; } @@ -1957,6 +2119,16 @@ public final class AntarchyFabricContent { return defense; } + private static java.util.EnumMap createJumpyBootsDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } + private static java.util.EnumMap createBloodCrystalArmorDefense() { java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 2); @@ -2036,6 +2208,8 @@ public final class AntarchyFabricContent { FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(LUCID_EYE.get()), potionHolder(INVERSION)); builder.registerPotionRecipe(potionHolder(INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_INVERSION)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(STINK_BUG_ITEM.get()), potionHolder(STINKY_POTION)); + builder.registerPotionRecipe(potionHolder(STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_STINKY)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(BASILISK_FANG.get()), potionHolder(PARALYSIS)); builder.registerPotionRecipe(potionHolder(PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(LONG_PARALYSIS)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(MOLEWORM_ITEM.get()), potionHolder(HASTE)); @@ -2047,6 +2221,7 @@ public final class AntarchyFabricContent { builder.registerPotionRecipe(potionHolder(GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_GROWING)); builder.registerPotionRecipe(potionHolder(STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_GROWING)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(JUMPY_BUG_LEG.get()), Potions.LEAPING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); }); @@ -2067,8 +2242,11 @@ public final class AntarchyFabricContent { MOB_EFFECTS.register(); POTIONS.register(); ITEMS.register(); + MENUS.register(); CREATIVE_MODE_TABS.register(); + // Wire common-module accessors after all registrations are complete. + AntarchySoundEvents.bind( SQUIDZOOKA_FIRE, SHRINK_RAY_SOUND, @@ -2180,9 +2358,27 @@ public final class AntarchyFabricContent { MOLEVORE_HURT, MOLEVORE_ATTACK, MOLEVORE_DIG, + BOMBER_WALK, + BOMBER_KNOCK, + BOMBER_EXPLODE, + TORETERROR_IDLE, + TORETERROR_HURT, + TORETERROR_DEATH, + TORETERROR_BOMBER_FIRE, + TORETERROR_JUMP_UP, + TORETERROR_JUMP_LAND, + STINKY_FLY_SOUND, + CREEPING_HORROR_GROWL, + CREEPING_HORROR_HURT, + CREEPING_HORROR_BITE, + LURKING_TERROR_SNARL, + LURKING_TERROR_HURT, + LURKING_TERROR_BITE, + LURKING_TERROR_FLY_LOOP, DUCT_TAPE_USE ); + AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB); AntarchyObjects.bind( EASTER_BUNNY, FLYING_SQUIRREL, @@ -2203,6 +2399,7 @@ public final class AntarchyFabricContent { HUSH_PROJECTILE, TORETERROR, WATER_BOMB, + CHEEP, () -> DUPLICATOR_LOG.get(), () -> DUPLICATOR_SAPLING.get(), () -> DUCT_TAPE.get(), @@ -2215,6 +2412,9 @@ public final class AntarchyFabricContent { () -> CHISELED_SHELLSTONE.get(), () -> MOSSY_SHELLSTONE_BRICKS.get(), () -> CRACKED_SHELLSTONE_BRICKS.get(), + () -> MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> MOSSY_SHELLSTONE_BRICK_WALL.get(), () -> SHELLSTONE_STAIRS.get(), () -> SHELLSTONE_SLAB.get(), () -> SHELLSTONE_WALL.get(), @@ -2243,6 +2443,7 @@ public final class AntarchyFabricContent { () -> mobEffectHolder(DREAD), () -> mobEffectHolder(PARALYZED), () -> mobEffectHolder(INVERTED), + () -> mobEffectHolder(STINKY), () -> OURANWOOD_ACORN_BLOCK.get(), () -> MOSSY_OURANWOOD_LOG.get(), () -> MOSSY_OURANWOOD_WOOD.get(), @@ -2253,10 +2454,13 @@ public final class AntarchyFabricContent { () -> WASP_NEST.get(), () -> HUSHWEED.get(), () -> OURANWOOD_SQUIRREL_NEST.get(), + () -> BRUTALFLY_COCOON_SPAWNER.get(), () -> ANT_NEST_BLOCK_ENTITY.get(), () -> DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> WASP_NEST_BLOCK_ENTITY.get(), () -> HUSHWEED_BLOCK_ENTITY.get(), + () -> STINKY_GAS.get(), + () -> STINKY_FLY.get(), () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), () -> attributeHolder(BLOODGLASS_MAX_HEARTS), () -> mobEffectHolder(BLOODGLASS_WARD) @@ -2269,6 +2473,7 @@ public final class AntarchyFabricContent { LucidEyeProjectileEntity.invertedEffectSupplier = () -> mobEffectHolder(INVERTED); ScorpionWhipTetherSync.setSink(AntarchyFabricNetworking::syncScorpionWhipTether); + HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); BloodCrystalKatanaItem.setTrailCallback(AntarchyFabricNetworking::syncKatanaTrail); com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity); AntarchyFabricEvents.register(); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 5e8aa0f1..b1ef5d2b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -10,6 +10,9 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.antarchy.content.command.CaterpillarCommand; +import com.craisinlord.antarchy.content.command.GravityCommand; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.level.ServerPlayer; @@ -38,6 +41,11 @@ public final class AntarchyFabricEvents { } public static void register() { + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + GravityCommand.register(dispatcher); + CaterpillarCommand.register(dispatcher); + }); + DispenserBlock.registerBehavior(AntarchyFabricContent.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyFabricContent.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); @@ -50,7 +58,11 @@ public final class AntarchyFabricEvents { if (entity instanceof ServerPlayer sp) { BloodglassManager.handleDeath(sp); } - if (!(entity instanceof MissileSquidEntity)) { + if (entity instanceof MissileSquidEntity missileSquid) { + if (missileSquid.isSpawnedByKraken()) { + return; + } + } else if (entity.getType() != net.minecraft.world.entity.EntityType.SQUID) { return; } if (!(entity.level() instanceof ServerLevel serverLevel)) { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java new file mode 100644 index 00000000..86217123 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/OuranwoodWoodTypes.java @@ -0,0 +1,17 @@ +package com.craisinlord.antarchy.fabric; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.fabric.mixin.WoodTypeInvoker; +import net.minecraft.world.level.block.state.properties.BlockSetType; +import net.minecraft.world.level.block.state.properties.WoodType; + +public final class OuranwoodWoodTypes { + public static final WoodType OURANWOOD = register("ouranwood"); + + private OuranwoodWoodTypes() { + } + + private static WoodType register(String name) { + return WoodTypeInvoker.antarchy$register(new WoodType(Antarchy.MODID + ":" + name, BlockSetType.JUNGLE)); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index fbf5069d..5e90c47d 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.renderer.*; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer; @@ -24,6 +25,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.CampfireRenderer; +import net.minecraft.client.renderer.entity.ArmorStandRenderer; import net.minecraft.client.renderer.entity.ThrownItemRenderer; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.resources.ResourceLocation; @@ -75,6 +77,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.ALPHA_MANTIS.get(), AlphaMantisRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false)); @@ -87,6 +90,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); @@ -104,6 +108,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); @@ -121,6 +126,17 @@ public final class AntarchyFabricClientBootstrap { } private static void registerFluids() { + FluidRenderHandlerRegistry.INSTANCE.register( + AntarchyFabricContent.BILE.get(), + AntarchyFabricContent.FLOWING_BILE.get(), + new SimpleFluidRenderHandler( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"), + ResourceLocation.withDefaultNamespace("block/water_overlay"), + 0xFFFFFFFF + ) + ); + FluidRenderHandlerRegistry.INSTANCE.register( AntarchyFabricContent.ICHOR.get(), AntarchyFabricContent.FLOWING_ICHOR.get(), @@ -163,6 +179,8 @@ public final class AntarchyFabricClientBootstrap { private static void registerParticles() { ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance(); registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -172,6 +190,7 @@ public final class AntarchyFabricClientBootstrap { registry.register(AntarchyFabricContent.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); registry.register(AntarchyFabricContent.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); registry.register(AntarchyFabricContent.FIREFLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricContent.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } private static void registerRenderLayers() { @@ -210,6 +229,8 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CLOUD_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putFluids( RenderType.translucent(), + AntarchyFabricContent.BILE.get(), + AntarchyFabricContent.FLOWING_BILE.get(), AntarchyFabricContent.ICHOR.get(), AntarchyFabricContent.FLOWING_ICHOR.get(), AntarchyFabricContent.ANTIWATER.get(), @@ -269,6 +290,10 @@ public final class AntarchyFabricClientBootstrap { } return; } + if (entityType == EntityType.ARMOR_STAND && renderer instanceof ArmorStandRenderer armorStandRenderer) { + registrationHelper.register(new FallenKingCrownArmorStandLayer((net.minecraft.client.renderer.entity.RenderLayerParent) armorStandRenderer)); + return; + } if (software.bernie.geckolib.renderer.GeoEntityRenderer.class.isAssignableFrom(renderer.getClass())) { software.bernie.geckolib.renderer.GeoEntityRenderer geoRenderer = (software.bernie.geckolib.renderer.GeoEntityRenderer) (Object) renderer; @@ -281,30 +306,38 @@ public final class AntarchyFabricClientBootstrap { private static void registerClientCallbacks() { ClientTickEvents.END_CLIENT_TICK.register(client -> { + HerculesBeetleImpactShakeClientState.tick(); if (client.player != null) { ParalyzedClientHandler.clampPlayerInput(client.player); } BrutalflyElytraClientHandler.tick(); + JumpyBootsClientHandler.tick(); DiamondMinecartClientHandler.tick(); ParalyzedClientHandler.tick(); DreadClientHandler.tick(); BloodCrystalKatanaTrailHandler.tick(); ScorpionWhipTetherRenderHandler.tick(); + DorrieJumpClientHandler.tick(); + HerculesBeetleClientHandler.tick(); }); + BigBerthaClientHandler.register(); GravityGunClientHandler.register(); ElythiaFireflyManager.register(); LucidSoundHandler.register(); MogglesClientRenderer.register(); + StinkySoundHandler.register(); ReverieTrailHandler.register(); HudRenderCallback.EVENT.register((guiGraphics, partialTick) -> { DreadHudRenderer.render(guiGraphics); ParalyzedHudRenderer.render(guiGraphics); BrutalflyElytraHudRenderer.render(guiGraphics); + JumpyBootsHudRenderer.render(guiGraphics); BloodglassHudRenderer.render(guiGraphics); TriffidGooHudRenderer.render(guiGraphics); + DorrieJumpHudRenderer.render(guiGraphics); }); WorldRenderEvents.AFTER_TRANSLUCENT.register(context -> { diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java index a9ee00f5..592f64ea 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyKeyBindings.java @@ -17,13 +17,37 @@ public final class AntarchyKeyBindings { CATEGORY ); + public static final KeyMapping DORRIE_CHARGE_JUMP = new KeyMapping( + "key.antarchy.dorrie_charge_jump", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_LEFT_CONTROL, + CATEGORY + ); + + public static final KeyMapping HERCULES_BEETLE_CHARGE = new KeyMapping( + "key.antarchy.hercules_beetle_charge", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_LEFT_CONTROL, + CATEGORY + ); + private AntarchyKeyBindings() {} public static void register() { KeyBindingHelper.registerKeyBinding(BRUTALFLY_FLAP); + KeyBindingHelper.registerKeyBinding(DORRIE_CHARGE_JUMP); + KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_CHARGE); } public static boolean isBrutalflyFlapPressed() { return Minecraft.getInstance().screen == null && BRUTALFLY_FLAP.isDown(); } + + public static boolean isDorrieChargeJumpPressed() { + return Minecraft.getInstance().screen == null && DORRIE_CHARGE_JUMP.isDown(); + } + + public static boolean isHerculesBeetleChargePressed() { + return Minecraft.getInstance().screen == null && HERCULES_BEETLE_CHARGE.isDown(); + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java new file mode 100644 index 00000000..0a3cd5d3 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/BigBerthaClientHandler.java @@ -0,0 +1,39 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; + +public final class BigBerthaClientHandler { + private static boolean lastUseDown; + + private BigBerthaClientHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(BigBerthaClientHandler::tick); + } + + private static void tick(Minecraft mc) { + if (mc.player == null || mc.level == null || mc.screen != null) { + lastUseDown = false; + return; + } + + if (!(mc.player.getMainHandItem().getItem() instanceof BigBerthaItem)) { + lastUseDown = false; + return; + } + + boolean useDown = mc.options.keyUse.isDown(); + if (useDown + && !lastUseDown + && mc.player.isShiftKeyDown() + && mc.player.getCooldowns().isOnCooldown(mc.player.getMainHandItem().getItem())) { + ClientPlayNetworking.send(new BigBerthaModeCyclePayload()); + } + lastUseDown = useDown; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java new file mode 100644 index 00000000..75f9c640 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpClientHandler.java @@ -0,0 +1,55 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; +import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class DorrieJumpClientHandler { + private static boolean wasPressingJump = false; + private static boolean wasPressingCharge = false; + + private DorrieJumpClientHandler() {} + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.screen != null) { + resetAll(); + return; + } + + if (!(player.getVehicle() instanceof DorrieEntity)) { + resetAll(); + return; + } + + // Space bar → upward movement. + boolean pressingJump = mc.options.keyJump.isDown(); + if (pressingJump != wasPressingJump) { + ClientPlayNetworking.send(new DorrieJumpInputPayload(pressingJump)); + wasPressingJump = pressingJump; + } + + // Left ctrl → charge jump. + boolean pressingCharge = AntarchyKeyBindings.isDorrieChargeJumpPressed(); + if (pressingCharge != wasPressingCharge) { + ClientPlayNetworking.send(new DorrieChargeJumpPayload(pressingCharge)); + wasPressingCharge = pressingCharge; + } + } + + private static void resetAll() { + if (wasPressingJump) { + ClientPlayNetworking.send(new DorrieJumpInputPayload(false)); + wasPressingJump = false; + } + if (wasPressingCharge) { + ClientPlayNetworking.send(new DorrieChargeJumpPayload(false)); + wasPressingCharge = false; + } + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpHudRenderer.java new file mode 100644 index 00000000..149de12b --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/DorrieJumpHudRenderer.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class DorrieJumpHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = + ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = + ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private DorrieJumpHudRenderer() {} + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) return; + + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + + int charge = dorrie.getJumpCharge(); + if (charge <= 0) return; + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + float chargeRatio = Mth.clamp(charge / 100.0F, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(0.2F, 0.8F, 1.0F, 0.4F + chargeRatio * 0.6F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java index 1a813793..b436f125 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; @@ -36,8 +37,9 @@ public final class ElythiaFireflyManager { if (dayTime < NIGHT_START || dayTime > NIGHT_END) return; long gameTime = level.getGameTime(); + boolean fireflyBiome = level.getBiome(client.player.blockPosition()).is(AntarchyTags.Biomes.ELYTHIA_FIREFLY_PARTICLE_BIOMES); - if (AntarchySettings.elythiaFireflyParticlesEnabled()) { + if (AntarchySettings.elythiaFireflyParticlesEnabled() && fireflyBiome) { if (gameTime % SPAWN_INTERVAL == 0) { Player player = client.player; int px = (int) player.getX(); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java new file mode 100644 index 00000000..4d36e49e --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownArmorStandLayer.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ArmorStandModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; + +public final class FallenKingCrownArmorStandLayer extends RenderLayer { + private final BlockRenderDispatcher blockRenderer; + + public FallenKingCrownArmorStandLayer(RenderLayerParent renderer) { + super(renderer); + this.blockRenderer = Minecraft.getInstance().getBlockRenderer(); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, ArmorStand armorStand, float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, float headPitch) { + ItemStack headStack = armorStand.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.HEAD); + if (!headStack.is(AntarchyFabricContent.FALLEN_KING_CROWN.get()) || armorStand.isInvisible()) { + return; + } + + poseStack.pushPose(); + this.getParentModel().head.translateAndRotate(poseStack); + poseStack.translate(0.5D, -0.125D, -0.5D); + poseStack.mulPose(Axis.XP.rotationDegrees(180.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); + this.blockRenderer.renderSingleBlock( + AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get().defaultBlockState(), + poseStack, + buffer, + packedLight, + LivingEntityRenderer.getOverlayCoords(armorStand, 0.0F) + ); + poseStack.popPose(); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java index d959833b..15f30e3c 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/GravityGunClientHandler.java @@ -9,7 +9,6 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; -import org.lwjgl.glfw.GLFW; public final class GravityGunClientHandler { private static final double SCROLL_STEP_DISTANCE = 0.75D; @@ -34,8 +33,7 @@ public final class GravityGunClientHandler { return; } - long window = mc.getWindow().getWindow(); - boolean attackDown = org.lwjgl.glfw.GLFW.glfwGetMouseButton(window, GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS; + boolean attackDown = mc.options.keyAttack.isDown(); if (attackDown && !lastAttackDown) { ClientPlayNetworking.send(new GravityGunPrimaryPayload()); } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java new file mode 100644 index 00000000..53a34842 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/HerculesBeetleClientHandler.java @@ -0,0 +1,66 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedAttackPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedChargePayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class HerculesBeetleClientHandler { + private static final int MAX_CHARGE_TICKS = 40; + + private static boolean wasPressingJump; + private static boolean wasPressingAttack; + private static boolean wasCharging; + private static int chargeTicks; + + private HerculesBeetleClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + resetAll(); + return; + } + + if (!(player.getVehicle() instanceof HerculesBeetleEntity)) { + resetAll(); + return; + } + + boolean pressingJump = mc.options.keyJump.isDown(); + if (pressingJump != wasPressingJump) { + ClientPlayNetworking.send(new HerculesBeetleJumpInputPayload(pressingJump)); + wasPressingJump = pressingJump; + } + + boolean pressingAttack = mc.options.keyAttack.isDown(); + if (pressingAttack && !wasPressingAttack) { + ClientPlayNetworking.send(new HerculesBeetleMountedAttackPayload()); + } + wasPressingAttack = pressingAttack; + + boolean charging = AntarchyKeyBindings.isHerculesBeetleChargePressed(); + if (charging) { + chargeTicks = Math.min(chargeTicks + 1, MAX_CHARGE_TICKS); + } else if (wasCharging && chargeTicks > 0) { + ClientPlayNetworking.send(new HerculesBeetleMountedChargePayload(chargeTicks)); + chargeTicks = 0; + } + wasCharging = charging; + } + + private static void resetAll() { + if (wasPressingJump) { + ClientPlayNetworking.send(new HerculesBeetleJumpInputPayload(false)); + wasPressingJump = false; + } + wasPressingAttack = false; + wasCharging = false; + chargeTicks = 0; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java new file mode 100644 index 00000000..1c3a31a9 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java @@ -0,0 +1,95 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class JumpyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private JumpyBootsClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (jumpPressed && wasCharging && chargeTicks > 0) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + if (jumpPressed) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java new file mode 100644 index 00000000..ad747b14 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class JumpyBootsHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private JumpyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + return; + } + if (!JumpyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java new file mode 100644 index 00000000..e279fb2f --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.fabric.AntarchyFabricContent; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.sounds.SoundSource; + +public final class StinkySoundHandler { + private static final int FIRST_SOUND_DELAY = 20; + private static final int MIN_INTERVAL = 60; + private static final int MAX_INTERVAL = 120; + + private static int nextSoundTick = FIRST_SOUND_DELAY; + + private StinkySoundHandler() { + } + + public static void register() { + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (client.level == null || client.player == null || client.isPaused()) { + nextSoundTick = FIRST_SOUND_DELAY; + return; + } + + if (!client.player.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + nextSoundTick = FIRST_SOUND_DELAY; + return; + } + + nextSoundTick--; + if (nextSoundTick > 0) { + return; + } + + client.level.playSound( + null, + client.player.blockPosition(), + AntarchySoundEvents.STINKY_FLY.get(), + SoundSource.AMBIENT, + 0.14F + client.level.random.nextFloat() * 0.06F, + 0.92F + client.level.random.nextFloat() * 0.16F + ); + nextSoundTick = MIN_INTERVAL + client.level.random.nextInt(MAX_INTERVAL - MIN_INTERVAL + 1); + }); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java index 472d9277..c96f551f 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java @@ -77,7 +77,7 @@ public abstract class AntimetalScaffoldingMixin { BlockState below = level.getBlockState(cursor); int distance = 7; if (below.is((ScaffoldingBlock) (Object) this)) { - distance = below.getValue(ScaffoldingBlock.DISTANCE); + distance = below.getValue(ScaffoldingBlock.DISTANCE) + 1; } else if (below.isFaceSturdy(level, cursor, Direction.UP)) { return 0; } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java index 4ed20662..25421931 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java @@ -16,7 +16,7 @@ public abstract class ElytraStartFlyingMixin { @Shadow public abstract void startFallFlying(); - @Inject(method = "tryToStartFallFlying", at = @At("RETURN"), cancellable = true) + @Inject(method = "tryToStartFallFlying()Z", at = @At("RETURN"), cancellable = true) private void antarchy$allowCustomElytra(CallbackInfoReturnable cir) { if (cir.getReturnValue()) return; Player player = (Player) (Object) this; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java new file mode 100644 index 00000000..da5683cf --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(LivingEntity.class) +public abstract class JumpyBootsFallDamageMixin { + @ModifyVariable(method = "causeFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private float antarchy$reduceJumpyBootsFallDamage(float fallDistance) { + LivingEntity self = (LivingEntity) (Object) this; + if (!JumpyBootsItem.isWearingJumpyBoots(self)) return fallDistance; + long protectionUntil = JumpyBootsFabricHelper.getProtectionUntil(self); + if (self.level().getGameTime() < protectionUntil) { + return fallDistance * 0.25F; + } + return fallDistance; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/WoodTypeInvoker.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/WoodTypeInvoker.java new file mode 100644 index 00000000..9b7ff6c3 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/WoodTypeInvoker.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import net.minecraft.world.level.block.state.properties.WoodType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(WoodType.class) +public interface WoodTypeInvoker { + @Invoker("register") + static WoodType antarchy$register(WoodType woodType) { + throw new AssertionError(); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java index a9b355b7..06585ef6 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.fabric.mixin.client; -import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.shaders.FogShape; import net.minecraft.client.Camera; @@ -16,34 +16,34 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(FogRenderer.class) public abstract class AntiwaterFogMixin { -// @Inject(method = "setupColor", at = @At("TAIL")) -// private static void antarchy$overrideAntiwaterColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) { -// if (!antarchy$isInAntiwater(camera)) { -// return; -// } -// -// RenderSystem.clearColor(0.52F, 0.06F, 0.06F, 0.0F); -// } -// -// @Inject(method = "setupFog", at = @At("TAIL")) -// private static void antarchy$overrideAntiwaterFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) { -// if (!antarchy$isInAntiwater(camera)) { -// return; -// } -// -// RenderSystem.setShaderFogStart(0.5F); -// RenderSystem.setShaderFogEnd(Math.min(renderDistance, 12.0F)); -// RenderSystem.setShaderFogShape(FogShape.CYLINDER); -// } -// -// private static boolean antarchy$isInAntiwater(Camera camera) { -// Entity entity = camera.getEntity(); -// if (entity == null || entity.level() == null) { -// return false; -// } -// -// BlockPos pos = BlockPos.containing(camera.getPosition()); -// FluidState fluidState = entity.level().getFluidState(pos); -// return PotentNyxiteBlock.isAntiwater(fluidState); -// } + @Inject(method = "setupColor", at = @At("TAIL")) + private static void antarchy$overrideBileColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) { + if (!antarchy$isInBile(camera)) { + return; + } + + RenderSystem.clearColor(0.38F, 0.42F, 0.10F, 0.0F); + } + + @Inject(method = "setupFog", at = @At("TAIL")) + private static void antarchy$overrideBileFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) { + if (!antarchy$isInBile(camera)) { + return; + } + + RenderSystem.setShaderFogStart(0.25F); + RenderSystem.setShaderFogEnd(Math.min(renderDistance, 4.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } + + private static boolean antarchy$isInBile(Camera camera) { + Entity entity = camera.getEntity(); + if (entity == null || entity.level() == null) { + return false; + } + + BlockPos pos = BlockPos.containing(camera.getPosition()); + FluidState fluidState = entity.level().getFluidState(pos); + return BileLiquidBlock.isBile(fluidState); + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java new file mode 100644 index 00000000..212cc276 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java @@ -0,0 +1,50 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.content.client.CameraShakeClientState; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.util.Mth; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import net.minecraft.client.renderer.GameRenderer; + +@Mixin(GameRenderer.class) +public abstract class CameraShakeMixin { + private static final int TORETERROR_SHAKE_TICKS = 25; + + @Shadow @Final private Minecraft minecraft; + + @Inject(method = "bobView", at = @At("TAIL")) + private void applyCameraShake(PoseStack poseStack, float partialTick, CallbackInfo ci) { + if (minecraft.level == null || minecraft.player == null) { + CameraShakeClientState.clear(); + return; + } + + float shakeStrength = CameraShakeClientState.getStrength(minecraft.gameRenderer.getMainCamera().getPosition()); + + int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); + if (beetleShakeTicks > 0) { + shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + + int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; + if (bigBerthaShakeTicks > 0) { + shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + + if (shakeStrength <= 0.0F) return; + + float time = (float) (minecraft.player.tickCount + partialTick); + poseStack.mulPose(Axis.YP.rotationDegrees(Mth.sin(time * 1.5F) * shakeStrength * 2.5F)); + poseStack.mulPose(Axis.XP.rotationDegrees(Mth.cos(time * 1.8F) * shakeStrength * 2.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.sin(time * 2.2F) * shakeStrength * 1.5F)); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/NightmareCameraShakeMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/NightmareCameraShakeMixin.java deleted file mode 100644 index a70f5e60..00000000 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/NightmareCameraShakeMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -//TODO FIX ON FABRIC SIDE -@Mixin(GameRenderer.class) -public abstract class NightmareCameraShakeMixin { -// private static final double MAX_SHAKE_RANGE = 32.0D; -// -// @Shadow @Final private Minecraft minecraft; -// -// @Redirect( -// method = "renderLevel", -// at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;bobView(Lcom/mojang/blaze3d/vertex/PoseStack;F)V") -// ) -// private void applyNightmareCameraShake(GameRenderer instance, PoseStack poseStack, float partialTick) { -// instance.bobView(poseStack, partialTick); -// if (minecraft.level == null || minecraft.player == null) { -// return; -// } -// -// Vec3 cameraPos = minecraft.gameRenderer.getMainCamera().getPosition(); -// float shakeStrength = 0.0F; -// -// for (NightmareEntity nightmare : minecraft.level.getEntitiesOfClass( -// NightmareEntity.class, -// minecraft.player.getBoundingBox().inflate(MAX_SHAKE_RANGE), -// e -> e.isAlive() && e.isRoaring() -// )) { -// double distance = Math.sqrt(cameraPos.distanceToSqr(nightmare.position().add(0.0D, nightmare.getBbHeight() * 0.5D, 0.0D))); -// if (distance > MAX_SHAKE_RANGE) { -// continue; -// } -// shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 1.35D); -// } -// -// if (shakeStrength <= 0.0F) { -// return; -// } -// -// float time = (float) (minecraft.player.tickCount + partialTick); -// float yawOffset = Mth.sin(time * 1.85F) * shakeStrength * 1.8F; -// float pitchOffset = Mth.cos(time * 2.15F) * shakeStrength * 1.45F; -// float rollOffset = Mth.sin(time * 2.65F) * shakeStrength * 1.05F; -// -// poseStack.mulPose(Axis.YP.rotationDegrees(yawOffset)); -// poseStack.mulPose(Axis.XP.rotationDegrees(pitchOffset)); -// poseStack.mulPose(Axis.ZP.rotationDegrees(rollOffset)); -// } -} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index 2bb3e573..13f6b682 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -34,5 +34,7 @@ public final class AntarchyFabricClientNetworking { payload.anchorY(), payload.anchorZ() ))); + ClientPlayNetworking.registerGlobalReceiver(HerculesBeetleImpactShakePayload.TYPE, (payload, context) -> + context.client().execute(() -> AntarchyFabricNetworking.triggerHerculesBeetleImpactShake(payload.durationTicks()))); } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 4a75a3d3..d4b2c753 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -1,14 +1,23 @@ package com.craisinlord.antarchy.fabric.network; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.GravityGunItem; import com.craisinlord.antarchy.content.network.*; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; @@ -41,11 +50,19 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playS2C().register(ScorpionWhipTetherPayload.TYPE, ScorpionWhipTetherPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(ThoraxisWeatherPayload.TYPE, ThoraxisWeatherPayload.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(HerculesBeetleImpactShakePayload.TYPE, HerculesBeetleImpactShakePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(BigBerthaModeCyclePayload.TYPE, BigBerthaModeCyclePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(JumpyBootsLaunchPayload.TYPE, JumpyBootsLaunchPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(DorrieJumpInputPayload.TYPE, DorrieJumpInputPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.TYPE, com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(HerculesBeetleJumpInputPayload.TYPE, HerculesBeetleJumpInputPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedAttackPayload.TYPE, HerculesBeetleMountedAttackPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedChargePayload.TYPE, HerculesBeetleMountedChargePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(MultipartAttackPayload.TYPE, MultipartAttackPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(MultipartInteractPayload.TYPE, MultipartInteractPayload.STREAM_CODEC); } @@ -55,10 +72,24 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleGravityGunPrimary(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(GravityGunScrollPayload.TYPE, (payload, context) -> context.server().execute(() -> handleGravityGunScroll(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(BigBerthaModeCyclePayload.TYPE, (payload, context) -> + context.server().execute(() -> handleBigBerthaModeCycle(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(DiamondMinecartInputPayload.TYPE, (payload, context) -> context.server().execute(() -> handleDiamondMinecartInput(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BrutalflyElytraFlapPayload.TYPE, (payload, context) -> context.server().execute(() -> handleBrutalflyFlap(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(JumpyBootsLaunchPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleJumpyBootsLaunch(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(DorrieJumpInputPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleDorrieJumpInput(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleDorrieChargeJumpInput(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(HerculesBeetleJumpInputPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleHerculesBeetleJumpInput(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(HerculesBeetleMountedAttackPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleHerculesBeetleMountedAttack(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(HerculesBeetleMountedChargePayload.TYPE, (payload, context) -> + context.server().execute(() -> handleHerculesBeetleMountedCharge(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(MultipartAttackPayload.TYPE, (payload, context) -> context.server().execute(() -> handleMultipartAttack(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(MultipartInteractPayload.TYPE, (payload, context) -> @@ -162,6 +193,13 @@ public final class AntarchyFabricNetworking { GravityGunItem.adjustHeldDistance(player.getMainHandItem(), payload.distanceDelta()); } + private static void handleBigBerthaModeCycle(ServerPlayer player, BigBerthaModeCyclePayload payload) { + if (!(player.getMainHandItem().getItem() instanceof BigBerthaItem bigBerthaItem)) { + return; + } + bigBerthaItem.tryCycleModeWhileCoolingDown(player.serverLevel(), player, player.getMainHandItem()); + } + private static void handleDiamondMinecartInput(ServerPlayer player, DiamondMinecartInputPayload payload) { if (player.getVehicle() instanceof DiamondMinecartEntity cart) { cart.onInputReceived(payload.inputFlags()); @@ -262,4 +300,77 @@ public final class AntarchyFabricNetworking { InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); } + + private static void handleJumpyBootsLaunch(ServerPlayer player, JumpyBootsLaunchPayload payload) { + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + if (player.isSpectator() || player.isPassenger()) return; + + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (player.getCooldowns().isOnCooldown(boots.getItem())) return; + + int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); + if (clampedCharge <= 0) return; + + float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); + Vec3 current = player.getDeltaMovement(); + double newX = current.x; + double newZ = current.z; + + if (payload.sprinting()) { + Vec3 look = player.getLookAngle(); + newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + } + + player.setDeltaMovement(newX, verticalBoost, newZ); + player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); + player.hasImpulse = true; + player.hurtMarked = true; + player.resetFallDistance(); + player.connection.send(new ClientboundSetEntityMotionPacket(player)); + + player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, + 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + + JumpyBootsFabricHelper.setProtectionUntil(player, + player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); + + player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); + } + + private static void handleDorrieJumpInput(ServerPlayer player, DorrieJumpInputPayload payload) { + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + dorrie.setPressingJump(payload.pressing()); + } + + private static void handleDorrieChargeJumpInput(ServerPlayer player, com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload payload) { + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + if (payload.pressing()) { + dorrie.startJumpCharge(); + } else { + dorrie.releaseJump(); + } + } + + private static void handleHerculesBeetleJumpInput(ServerPlayer player, HerculesBeetleJumpInputPayload payload) { + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.setRiderJumpPressed(payload.pressing()); + } + } + + private static void handleHerculesBeetleMountedAttack(ServerPlayer player, HerculesBeetleMountedAttackPayload payload) { + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.handleMountedRegularAttack(player); + } + } + + private static void handleHerculesBeetleMountedCharge(ServerPlayer player, HerculesBeetleMountedChargePayload payload) { + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.handleMountedCharge(player, payload.chargeTicks()); + } + } + + public static void triggerHerculesBeetleImpactShake(int durationTicks) { + HerculesBeetleImpactShakeClientState.trigger(durationTicks); + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java new file mode 100644 index 00000000..5386ac41 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.fabric.util; + +import net.minecraft.world.entity.LivingEntity; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class JumpyBootsFabricHelper { + private static final Map PROTECTION_TIMES = new ConcurrentHashMap<>(); + + public static long getProtectionUntil(LivingEntity entity) { + return PROTECTION_TIMES.getOrDefault(entity.getUUID(), 0L); + } + + public static void setProtectionUntil(LivingEntity entity, long gameTime) { + PROTECTION_TIMES.put(entity.getUUID(), gameTime); + } +} diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index e29b9be5..c4066f37 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -14,11 +14,13 @@ "BloodglassEffectMixin", "BloodglassRespawnMixin", "DreamCampfireBlockEntityMixin", + "JumpyBootsFallDamageMixin", + "WoodTypeInvoker", "infinity.RandomSpringMixin", "infinity.PortalCreatorMixin" ], "client": [ - "client.NightmareCameraShakeMixin", + "client.CameraShakeMixin", "client.DuctTapeInputMixin", "client.AntiwaterFogMixin", "client.GravityGunMouseScrollMixin", diff --git a/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json new file mode 100644 index 00000000..30a26675 --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bile_bucket" + } +} diff --git a/fabric/src/main/resources/data/minecraft/tags/fluid/water.json b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json new file mode 100644 index 00000000..6d00bd9c --- /dev/null +++ b/fabric/src/main/resources/data/minecraft/tags/fluid/water.json @@ -0,0 +1,6 @@ +{ + "values": [ + "antarchy:ichor", + "antarchy:flowing_ichor" + ] +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 858e5d75..a17a1eae 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -24,7 +24,7 @@ ] }, "mixins": [ - "antarchy-common.mixins.json", + "antarchy-common-fabric.mixins.json", "antarchy-fabric.mixins.json" ], "depends": { diff --git a/gradle.properties b/gradle.properties index fdb030b7..f8bee8a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -84,4 +84,6 @@ regions_unexplored_curseforge_file_id=7826194 # #infinite_dimensions_curseforge_id=981829 -#infinite_dimensions_curseforge_file_id=7739053 \ No newline at end of file +#infinite_dimensions_curseforge_file_id=7739053 +# Gradle 8.8 cannot run on newer JDKs (e.g. 25); pin the build JVM to 21 +org.gradle.java.home=C:/Program Files/Java/jdk-21.0.10 diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 3ed697be..25589dc8 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -1,6 +1,12 @@ package com.craisinlord.antarchy.neoforge; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.config.ConfigResetGuard; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; +import java.nio.file.Path; +import net.neoforged.fml.loading.FMLPaths; +import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.fml.ModContainer; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.config.ModConfigEvent; @@ -9,9 +15,17 @@ public final class AntarchyConfigModuleNeoforge { private AntarchyConfigModuleNeoforge() {} public static void init(ModContainer modContainer) { + Path configDir = FMLPaths.CONFIGDIR.get().resolve("antarchy"); + ConfigResetGuard.wipeIfNeeded( + configDir, + configDir.resolve("antarchy_mobs.toml"), + configDir.resolve("antarchy_tools.toml"), + configDir.resolve("antarchy_misc.toml") + ); modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMobsConfig.SPEC, "antarchy/antarchy_mobs.toml"); modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyToolsConfig.SPEC, "antarchy/antarchy_tools.toml"); modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMiscConfig.SPEC, "antarchy/antarchy_misc.toml"); + HerculesBeetleImpactShakeSync.setSink((player, ticks) -> PacketDistributor.sendToPlayer(player, new HerculesBeetleImpactShakePayload(ticks))); AntarchyNeoforge.modEventBusTempHolder.addListener(AntarchyConfigModuleNeoforge::onConfigChange); } @@ -74,6 +88,11 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setBomberExplosionDamage(AntarchyMobsConfig.bomberExplosionDamage()); AntarchySettings.setBomberExplosionRadius(AntarchyMobsConfig.bomberExplosionRadius()); + AntarchySettings.setJumpyBugHealth(AntarchyMobsConfig.jumpyBugHealth()); + AntarchySettings.setJumpyBugPounceDamage(AntarchyMobsConfig.jumpyBugPounceDamage()); + AntarchySettings.setJumpyBugLatchDamage(AntarchyMobsConfig.jumpyBugLatchDamage()); + AntarchySettings.setJumpyBugCamouflageAlpha(AntarchyMobsConfig.jumpyBugCamouflageAlpha()); + AntarchySettings.setKrakenHealth(AntarchyMobsConfig.krakenHealth()); AntarchySettings.setKrakenAttackDamage(AntarchyMobsConfig.krakenAttackDamage()); AntarchySettings.setKrakenProjectileDamageTakenMultiplier(AntarchyMobsConfig.krakenProjectileDamageTakenMultiplier()); @@ -90,6 +109,13 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setMantisFlyingSpeed(AntarchyMobsConfig.mantisFlyingSpeed()); AntarchySettings.setMantisIgnoreLightLevel(AntarchyMobsConfig.mantisIgnoreLightLevel()); + AntarchySettings.setAlphaMantisHealth(AntarchyMobsConfig.alphaMantisHealth()); + AntarchySettings.setAlphaMantisAttackDamage(AntarchyMobsConfig.alphaMantisAttackDamage()); + AntarchySettings.setAlphaMantisMovementSpeed(AntarchyMobsConfig.alphaMantisMovementSpeed()); + AntarchySettings.setAlphaMantisFlyingSpeed(AntarchyMobsConfig.alphaMantisFlyingSpeed()); + AntarchySettings.setAlphaMantisSummonIntervalTicks(AntarchyMobsConfig.alphaMantisSummonIntervalTicks()); + AntarchySettings.setAlphaMantisMaxMinions(AntarchyMobsConfig.alphaMantisMaxMinions()); + AntarchySettings.setTriffidHealth(AntarchyMobsConfig.triffidHealth()); AntarchySettings.setTriffidAttackDamage(AntarchyMobsConfig.triffidAttackDamage()); AntarchySettings.setTriffidGrabDamage(AntarchyMobsConfig.triffidGrabDamage()); @@ -150,11 +176,23 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setToreterrorSpinDamage(AntarchyMobsConfig.toreterrorSpinDamage()); AntarchySettings.setToreterrorSpinKnockback(AntarchyMobsConfig.toreterrorSpinKnockback()); AntarchySettings.setToreterrorRangedWaterBombChance(AntarchyMobsConfig.toreterrorRangedWaterBombChance()); + AntarchySettings.setToreterrorProjectileDamageMultiplier(AntarchyMobsConfig.toreterrorProjectileDamageMultiplier()); AntarchySettings.setWaterBombDamage(AntarchyMobsConfig.waterBombDamage()); AntarchySettings.setWaterBombLifetimeTicks(AntarchyMobsConfig.waterBombLifetimeTicks()); AntarchySettings.setWaterBombGravity(AntarchyMobsConfig.waterBombGravity()); AntarchySettings.setWaterBombKnockback(AntarchyMobsConfig.waterBombKnockback()); AntarchySettings.setWaterCannonCooldownSeconds(AntarchyMobsConfig.waterCannonCooldownSeconds()); + + AntarchySettings.setCreepingHorrorHealth(AntarchyMobsConfig.creepingHorrorHealth()); + AntarchySettings.setCreepingHorrorAttackDamage(AntarchyMobsConfig.creepingHorrorAttackDamage()); + AntarchySettings.setLurkingTerrorHealth(AntarchyMobsConfig.lurkingTerrorHealth()); + AntarchySettings.setLurkingTerrorAttackDamage(AntarchyMobsConfig.lurkingTerrorAttackDamage()); + AntarchySettings.setCheepHealth(AntarchyMobsConfig.cheepHealth()); + AntarchySettings.setCheepAttackDamage(AntarchyMobsConfig.cheepAttackDamage()); + AntarchySettings.setDorrieHealth(AntarchyMobsConfig.dorrieHealth()); + AntarchySettings.setHerculesBeetleHealth(AntarchyMobsConfig.herculesBeetleHealth()); + AntarchySettings.setHerculesBeetleAttackDamage(AntarchyMobsConfig.herculesBeetleAttackDamage()); + AntarchySettings.setHerculesBeetleChargeDamage(AntarchyMobsConfig.herculesBeetleChargeDamage()); } private static void bakeToolsConfig() { @@ -237,6 +275,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setNightmareBootsArmorToughness(AntarchyToolsConfig.nightmareBootsArmorToughness()); AntarchySettings.setNightmareArmorKnockbackResistance(AntarchyToolsConfig.nightmareArmorKnockbackResistance()); AntarchySettings.setNightmareArmorDreadAuraRangePerPiece(AntarchyToolsConfig.nightmareArmorDreadAuraRangePerPiece()); + AntarchySettings.setPrimordialArmorKnockbackPerPiece(AntarchyToolsConfig.primordialArmorKnockbackPerPiece()); AntarchySettings.setNightmareSwordBaseDamage(AntarchyToolsConfig.nightmareSwordBaseDamage()); AntarchySettings.setNightmareSwordAttackSpeed(AntarchyToolsConfig.nightmareSwordAttackSpeed()); AntarchySettings.setNightmareSwordScalingFactor(AntarchyToolsConfig.nightmareSwordScalingFactor()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java index 133ecc2d..c8d6ddf0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java @@ -89,7 +89,7 @@ public final class AntarchyMiscConfig { b.push("infinityDimensions"); DISABLE_INFINITY_BOOK_PORTAL_CREATION = b .comment("If true, book and quills cannot be thrown into nether portals to create random dimensions.") - .define("disableInfinityBookPortalCreation", false); + .define("disableInfinityBookPortalCreation", true); RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS = b .comment( "Whether rainbow ants open randomly generated Infinity dimensions.", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index 5f292cf0..20186b82 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -57,6 +57,14 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue BOMBER_EXPLOSION_RADIUS; + // Jumpy Bug + + private static final ModConfigSpec.DoubleValue JUMPY_BUG_HEALTH; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_POUNCE_DAMAGE; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_LATCH_DAMAGE; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_CAMOUFLAGE_ALPHA; + + // Kraken private static final ModConfigSpec.DoubleValue KRAKEN_HEALTH; @@ -82,6 +90,16 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.BooleanValue MANTIS_IGNORE_LIGHT_LEVEL; + // Alpha Mantis + + private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_HEALTH; + private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_ATTACK_DAMAGE; + private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_MOVEMENT_SPEED; + private static final ModConfigSpec.DoubleValue ALPHA_MANTIS_FLYING_SPEED; + private static final ModConfigSpec.IntValue ALPHA_MANTIS_SUMMON_INTERVAL_TICKS; + private static final ModConfigSpec.IntValue ALPHA_MANTIS_MAX_MINIONS; + + // Triffid private static final ModConfigSpec.DoubleValue TRIFFID_HEALTH; @@ -154,6 +172,7 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue TORETERROR_SPIN_DAMAGE; private static final ModConfigSpec.DoubleValue TORETERROR_SPIN_KNOCKBACK; private static final ModConfigSpec.DoubleValue TORETERROR_RANGED_WATER_BOMB_CHANCE; + private static final ModConfigSpec.DoubleValue TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER; private static final ModConfigSpec.DoubleValue WATER_BOMB_DAMAGE; private static final ModConfigSpec.IntValue WATER_BOMB_LIFETIME_TICKS; private static final ModConfigSpec.DoubleValue WATER_BOMB_GRAVITY; @@ -161,6 +180,36 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue WATER_CANNON_COOLDOWN_SECONDS; + // Creeping Horror + + private static final ModConfigSpec.DoubleValue CREEPING_HORROR_HEALTH; + private static final ModConfigSpec.DoubleValue CREEPING_HORROR_ATTACK_DAMAGE; + + + // Lurking Terror + + private static final ModConfigSpec.DoubleValue LURKING_TERROR_HEALTH; + private static final ModConfigSpec.DoubleValue LURKING_TERROR_ATTACK_DAMAGE; + + + // Cheep + + private static final ModConfigSpec.DoubleValue CHEEP_HEALTH; + private static final ModConfigSpec.DoubleValue CHEEP_ATTACK_DAMAGE; + + + // Dorrie + + private static final ModConfigSpec.DoubleValue DORRIE_HEALTH; + + + // Hercules Beetle + + private static final ModConfigSpec.DoubleValue HERCULES_BEETLE_HEALTH; + private static final ModConfigSpec.DoubleValue HERCULES_BEETLE_ATTACK_DAMAGE; + private static final ModConfigSpec.DoubleValue HERCULES_BEETLE_CHARGE_DAMAGE; + + // Lucid private static final ModConfigSpec.DoubleValue LUCID_ATTACK_RANGE; @@ -288,6 +337,16 @@ public final class AntarchyMobsConfig { b.pop(); + // Jumpy Bug + + b.push("jumpyBug"); + JUMPY_BUG_HEALTH = b.comment("Base max health.").defineInRange("health", 12.0D, 1.0D, 32768.0D); + JUMPY_BUG_POUNCE_DAMAGE = b.comment("Damage dealt on a successful pounce latch.").defineInRange("pounceDamage", 2.0D, 0.0D, 1024.0D); + JUMPY_BUG_LATCH_DAMAGE = b.comment("Damage dealt per bite while latched.").defineInRange("latchDamage", 1.0D, 0.0D, 1024.0D); + JUMPY_BUG_CAMOUFLAGE_ALPHA = b.comment("Renderer alpha while camouflaged.").defineInRange("camouflageAlpha", 0.18D, 0.01D, 1.0D); + b.pop(); + + // Kraken b.push("kraken"); @@ -319,6 +378,18 @@ public final class AntarchyMobsConfig { b.pop(); + // Alpha Mantis + + b.push("alphaMantis"); + ALPHA_MANTIS_HEALTH = b.comment("Base max health.") .defineInRange("health", 500.0D, 1.0D, 32768.0D); + ALPHA_MANTIS_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 18.0D, 0.0D, 1024.0D); + ALPHA_MANTIS_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.42D, 0.0D, 10.0D); + ALPHA_MANTIS_FLYING_SPEED = b.comment("Base flying speed.") .defineInRange("flyingSpeed", 0.77D, 0.0D, 10.0D); + ALPHA_MANTIS_SUMMON_INTERVAL_TICKS = b.comment("Ticks between mantis minion summons while in combat.") .defineInRange("summonIntervalTicks", 300, 20, 72000); + ALPHA_MANTIS_MAX_MINIONS = b.comment("Maximum summoned mantises alive near the alpha at once.") .defineInRange("maxMinions", 4, 0, 32); + b.pop(); + + // Triffid b.push("triffid"); @@ -432,6 +503,31 @@ public final class AntarchyMobsConfig { b.pop(); // dread + b.push("creepingHorror"); + CREEPING_HORROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + CREEPING_HORROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("lurkingTerror"); + LURKING_TERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + LURKING_TERROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("cheep"); + CHEEP_HEALTH = b.comment("Base max health.").defineInRange("health", 8.0D, 1.0D, 32768.0D); + CHEEP_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("dorrie"); + DORRIE_HEALTH = b.comment("Base max health.").defineInRange("health", 60.0D, 1.0D, 32768.0D); + b.pop(); + + b.push("herculesBeetle"); + HERCULES_BEETLE_HEALTH = b.comment("Base max health.").defineInRange("health", 500.0D, 1.0D, 32768.0D); + HERCULES_BEETLE_ATTACK_DAMAGE = b.comment("Base melee damage for ground and flying attacks.").defineInRange("attackDamage", 30.0D, 0.0D, 1024.0D); + HERCULES_BEETLE_CHARGE_DAMAGE = b.comment("AOE impact damage dealt when a charge collides.").defineInRange("chargeDamage", 40.0D, 0.0D, 1024.0D); + b.pop(); + b.push("toreterror"); TORETERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 300.0D, 1.0D, 32768.0D); TORETERROR_JUMP_ATTACK_DAMAGE = b.comment("Damage dealt by the jump shockwave.").defineInRange("jumpAttackDamage", 14.0D, 0.0D, 1024.0D); @@ -439,6 +535,7 @@ public final class AntarchyMobsConfig { TORETERROR_SPIN_DAMAGE = b.comment("Damage per spin-attack tick.").defineInRange("spinDamage", 8.0D, 0.0D, 1024.0D); TORETERROR_SPIN_KNOCKBACK = b.comment("Knockback strength of the spin attack.").defineInRange("spinKnockback", 1.5D, 0.0D, 10.0D); TORETERROR_RANGED_WATER_BOMB_CHANCE = b.comment("Chance (0.0-1.0) the ranged attack fires a Water Bomb instead of Bombers.").defineInRange("rangedWaterBombChance", 0.5D, 0.0D, 1.0D); + TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER = b.comment("Damage multiplier applied to projectile hits on the Toreterror (0.5 = half damage).").defineInRange("projectileDamageMultiplier", 0.5D, 0.0D, 1.0D); WATER_BOMB_DAMAGE = b.comment("Damage dealt by a Water Bomb hit.").defineInRange("waterBombDamage", 6.0D, 0.0D, 1024.0D); WATER_BOMB_LIFETIME_TICKS = b.comment("Ticks before a Water Bomb despawns.").defineInRange("waterBombLifetimeTicks", 120, 1, 6000); WATER_BOMB_GRAVITY = b.comment("Gravity applied to Water Bombs (higher = steeper arc).").defineInRange("waterBombGravity", 0.12D, 0.0D, 2.0D); @@ -494,6 +591,11 @@ public final class AntarchyMobsConfig { static double bomberExplosionDamage() { return BOMBER_EXPLOSION_DAMAGE.get(); } static double bomberExplosionRadius() { return BOMBER_EXPLOSION_RADIUS.get(); } + static double jumpyBugHealth() { return JUMPY_BUG_HEALTH.get(); } + static double jumpyBugPounceDamage() { return JUMPY_BUG_POUNCE_DAMAGE.get(); } + static double jumpyBugLatchDamage() { return JUMPY_BUG_LATCH_DAMAGE.get(); } + static double jumpyBugCamouflageAlpha() { return JUMPY_BUG_CAMOUFLAGE_ALPHA.get(); } + static double krakenHealth() { return KRAKEN_HEALTH.get(); } static double krakenAttackDamage() { return KRAKEN_ATTACK_DAMAGE.get(); } static double krakenProjectileDamageTakenMultiplier() { return KRAKEN_PROJECTILE_DAMAGE_TAKEN_MULTIPLIER.get(); } @@ -509,6 +611,12 @@ public final class AntarchyMobsConfig { static double mantisMovementSpeed() { return MANTIS_MOVEMENT_SPEED.get(); } static double mantisFlyingSpeed() { return MANTIS_FLYING_SPEED.get(); } static boolean mantisIgnoreLightLevel() { return MANTIS_IGNORE_LIGHT_LEVEL.get(); } + static double alphaMantisHealth() { return ALPHA_MANTIS_HEALTH.get(); } + static double alphaMantisAttackDamage() { return ALPHA_MANTIS_ATTACK_DAMAGE.get(); } + static double alphaMantisMovementSpeed() { return ALPHA_MANTIS_MOVEMENT_SPEED.get(); } + static double alphaMantisFlyingSpeed() { return ALPHA_MANTIS_FLYING_SPEED.get(); } + static int alphaMantisSummonIntervalTicks() { return ALPHA_MANTIS_SUMMON_INTERVAL_TICKS.get(); } + static int alphaMantisMaxMinions() { return ALPHA_MANTIS_MAX_MINIONS.get(); } static double triffidHealth() { return TRIFFID_HEALTH.get(); } static double triffidAttackDamage() { return TRIFFID_ATTACK_DAMAGE.get(); } @@ -564,6 +672,7 @@ public final class AntarchyMobsConfig { static double toreterrorSpinDamage() { return TORETERROR_SPIN_DAMAGE.get(); } static double toreterrorSpinKnockback() { return TORETERROR_SPIN_KNOCKBACK.get(); } static double toreterrorRangedWaterBombChance() { return TORETERROR_RANGED_WATER_BOMB_CHANCE.get(); } + static double toreterrorProjectileDamageMultiplier() { return TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER.get(); } static double waterBombDamage() { return WATER_BOMB_DAMAGE.get(); } static int waterBombLifetimeTicks() { return WATER_BOMB_LIFETIME_TICKS.get(); } static double waterBombGravity() { return WATER_BOMB_GRAVITY.get(); } @@ -576,4 +685,15 @@ public final class AntarchyMobsConfig { static boolean dreadHallucinationMobsEnabled() { return DREAD_HALLUCINATION_MOBS_ENABLED.get(); } static double dreadHallucinationMobMinInterval() { return DREAD_HALLUCINATION_MOB_MIN_INTERVAL.get(); } static double dreadHallucinationMobMaxInterval() { return DREAD_HALLUCINATION_MOB_MAX_INTERVAL.get(); } + + static double creepingHorrorHealth() { return CREEPING_HORROR_HEALTH.get(); } + static double creepingHorrorAttackDamage() { return CREEPING_HORROR_ATTACK_DAMAGE.get(); } + static double lurkingTerrorHealth() { return LURKING_TERROR_HEALTH.get(); } + static double lurkingTerrorAttackDamage() { return LURKING_TERROR_ATTACK_DAMAGE.get(); } + static double cheepHealth() { return CHEEP_HEALTH.get(); } + static double cheepAttackDamage() { return CHEEP_ATTACK_DAMAGE.get(); } + static double dorrieHealth() { return DORRIE_HEALTH.get(); } + static double herculesBeetleHealth() { return HERCULES_BEETLE_HEALTH.get(); } + static double herculesBeetleAttackDamage() { return HERCULES_BEETLE_ATTACK_DAMAGE.get(); } + static double herculesBeetleChargeDamage() { return HERCULES_BEETLE_CHARGE_DAMAGE.get(); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java index fdea9f54..d66a0714 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java @@ -25,6 +25,16 @@ public final class AntarchyNeoForgeFluidTypes { .density(1000) .viscosity(1000))); + public static final DeferredHolder BILE_TYPE = FLUID_TYPES.register("bile", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.bile") + .fallDistanceModifier(0.0F) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1100) + .viscosity(1200))); + public static final DeferredHolder ICHOR_TYPE = FLUID_TYPES.register("ichor", () -> new FluidType(FluidType.Properties.create() .descriptionId("block.antarchy.ichor") diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 8e04b344..06aea8b2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -134,6 +134,23 @@ public class AntarchyNeoforge { AntarchyNeoforgeSounds.MOLEVORE_HURT, AntarchyNeoforgeSounds.MOLEVORE_ATTACK, AntarchyNeoforgeSounds.MOLEVORE_DIG, + AntarchyNeoforgeSounds.BOMBER_WALK, + AntarchyNeoforgeSounds.BOMBER_KNOCK, + AntarchyNeoforgeSounds.BOMBER_EXPLODE, + AntarchyNeoforgeSounds.TORETERROR_IDLE, + AntarchyNeoforgeSounds.TORETERROR_HURT, + AntarchyNeoforgeSounds.TORETERROR_DEATH, + AntarchyNeoforgeSounds.TORETERROR_BOMBER_FIRE, + AntarchyNeoforgeSounds.TORETERROR_JUMP_UP, + AntarchyNeoforgeSounds.TORETERROR_JUMP_LAND, + AntarchyNeoforgeSounds.STINKY_FLY, + AntarchyNeoforgeSounds.CREEPING_HORROR_GROWL, + AntarchyNeoforgeSounds.CREEPING_HORROR_HURT, + AntarchyNeoforgeSounds.CREEPING_HORROR_BITE, + AntarchyNeoforgeSounds.LURKING_TERROR_SNARL, + AntarchyNeoforgeSounds.LURKING_TERROR_HURT, + AntarchyNeoforgeSounds.LURKING_TERROR_BITE, + AntarchyNeoforgeSounds.LURKING_TERROR_FLY_LOOP, AntarchyNeoforgeSounds.DUCT_TAPE_USE ); bindCommonObjects(); @@ -183,6 +200,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeEntites.HUSH_PROJECTILE, AntarchyNeoforgeEntites.TORETERROR, AntarchyNeoforgeEntites.WATER_BOMB, + AntarchyNeoforgeEntites.CHEEP, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -195,6 +213,9 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.CHISELED_SHELLSTONE.get(), () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICKS.get(), () -> AntarchyNeoforgeBlocks.CRACKED_SHELLSTONE_BRICKS.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_WALL.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_STAIRS.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_SLAB.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_WALL.get(), @@ -223,6 +244,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeMisc.DREAD, () -> AntarchyNeoforgeMisc.PARALYZED, () -> AntarchyNeoforgeMisc.INVERTED, + () -> AntarchyNeoforgeMisc.STINKY, () -> AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), @@ -233,14 +255,18 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.WASP_NEST.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED.get(), () -> AntarchyNeoforgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), + () -> AntarchyNeoforgeBlocks.BRUTALFLY_COCOON_SPAWNER.get(), () -> AntarchyNeoforgeBlocks.ANT_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED_BLOCK_ENTITY.get(), + () -> AntarchyNeoforgeMisc.STINKY_GAS.get(), + () -> AntarchyNeoforgeMisc.STINKY_FLY.get(), () -> AntarchyNeoforgeMisc.DOUBLE_DAMAGE_CHANCE, () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD ); + AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); } private static boolean isModLoaded(String modId) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java new file mode 100644 index 00000000..bda2c95a --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.neoforge; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.command.CaterpillarCommand; +import com.craisinlord.antarchy.content.command.GravityCommand; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.RegisterCommandsEvent; + +@EventBusSubscriber(modid = Antarchy.MODID) +public final class AntarchyNeoforgeEvents { + private AntarchyNeoforgeEvents() { + } + + @SubscribeEvent + public static void onRegisterCommands(RegisterCommandsEvent event) { + GravityCommand.register(event.getDispatcher()); + CaterpillarCommand.register(event.getDispatcher()); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index f1d75ea4..5fe047eb 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -111,6 +111,7 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue NIGHTMARE_BOOTS_ARMOR_TOUGHNESS; private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE; private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE; + private static final ModConfigSpec.DoubleValue PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_BASE_DAMAGE; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_ATTACK_SPEED; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_SCALING_FACTOR; @@ -326,6 +327,7 @@ public final class AntarchyToolsConfig { "Full set (4 pieces) gives 5.0 blocks by default." ) .defineInRange("dreadAuraRangePerPiece", 1.25D, 0.0D, 64.0D); + PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE = b.comment("Attack knockback added by each Primordial Armor piece.") .defineInRange("primordialArmorKnockbackPerPiece", 0.5D, 0.0D, 16.0D); b.pop(); b.push("nightmareSword"); @@ -334,14 +336,14 @@ public final class AntarchyToolsConfig { "Base attack damage. Also the minimum damage at full health.", "Formula: damage = baseDamage * (1 + missingHealthFraction * scalingFactor)" ) - .defineInRange("baseDamage", 30.0D, 0.0D, 1024.0D); + .defineInRange("baseDamage", 15.0D, 0.0D, 1024.0D); NIGHTMARE_SWORD_ATTACK_SPEED = b.comment("Attack speed of the Nightmare Sword.").defineInRange("attackSpeed", -2.4D, -10.0D, 10.0D); NIGHTMARE_SWORD_SCALING_FACTOR = b .comment( "How much damage scales with missing health.", "At 1.0 and 0 HP remaining: damage doubles. At full health: always baseDamage." ) - .defineInRange("scalingFactor", 1.0D, 0.0D, 100.0D); + .defineInRange("scalingFactor", 1.5D, 0.0D, 100.0D); b.pop(); b.push("fallenKingCrown"); @@ -532,6 +534,7 @@ public final class AntarchyToolsConfig { static double nightmareBootsArmorToughness() { return NIGHTMARE_BOOTS_ARMOR_TOUGHNESS.get(); } static double nightmareArmorKnockbackResistance() { return NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE.get(); } static double nightmareArmorDreadAuraRangePerPiece() { return NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE.get(); } + static double primordialArmorKnockbackPerPiece() { return PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE.get(); } static double nightmareSwordBaseDamage() { return NIGHTMARE_SWORD_BASE_DAMAGE.get(); } static double nightmareSwordAttackSpeed() { return NIGHTMARE_SWORD_ATTACK_SPEED.get(); } static double nightmareSwordScalingFactor() { return NIGHTMARE_SWORD_SCALING_FACTOR.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java index d98270f3..a73ff650 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyKeyBindings.java @@ -21,10 +21,28 @@ public final class AntarchyKeyBindings { CATEGORY ); + public static final KeyMapping DORRIE_CHARGE_JUMP = new KeyMapping( + "key.antarchy.dorrie_charge_jump", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.KEY_LCONTROL, + CATEGORY + ); + + public static final KeyMapping HERCULES_BEETLE_CHARGE = new KeyMapping( + "key.antarchy.hercules_beetle_charge", + KeyConflictContext.IN_GAME, + InputConstants.Type.KEYSYM, + InputConstants.KEY_LCONTROL, + CATEGORY + ); + private AntarchyKeyBindings() {} @SubscribeEvent public static void onRegisterKeyMappings(RegisterKeyMappingsEvent event) { event.register(BRUTALFLY_FLAP); + event.register(DORRIE_CHARGE_JUMP); + event.register(HERCULES_BEETLE_CHARGE); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index d17e35eb..98105116 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -4,6 +4,8 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.*; +import com.craisinlord.antarchy.content.client.renderer.CreepingHorrorRenderer; +import com.craisinlord.antarchy.content.client.renderer.LurkingTerrorRenderer; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeEntites; @@ -13,6 +15,7 @@ import com.mojang.blaze3d.shaders.FogShape; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ArmorStandModel; import net.minecraft.client.model.ChestBoatModel; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.HumanoidModel; @@ -31,6 +34,7 @@ import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.CampfireRenderer; +import net.minecraft.client.renderer.entity.ArmorStandRenderer; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.resources.ResourceLocation; @@ -70,6 +74,8 @@ public final class AntarchyNeoForgeClient { private static final ResourceLocation UNDERWATER_OVERLAY = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png"); private static final ResourceLocation ANTIWATER_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"); private static final ResourceLocation ANTIWATER_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"); + private static final ResourceLocation BILE_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"); + private static final ResourceLocation BILE_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"); private AntarchyNeoForgeClient() { } @@ -87,6 +93,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEWORM.get(), context -> withParalyzedGeoLayer(new MolewormRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), context -> withParalyzedGeoLayer(new AlphaMantisRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false)); @@ -99,6 +106,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); @@ -116,6 +124,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), context -> withParalyzedGeoLayer(new EmperorScorpionRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.CHEEP.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.CheepRenderer(context))); } @SubscribeEvent @@ -130,6 +139,11 @@ public final class AntarchyNeoForgeClient { renderer.addLayer(new FallenKingCrownLayer(renderer)); } } + LivingEntityRenderer armorStandRenderer = + (LivingEntityRenderer) event.getRenderer(EntityType.ARMOR_STAND); + if (armorStandRenderer != null) { + armorStandRenderer.addLayer(new FallenKingCrownArmorStandLayer(armorStandRenderer)); + } BuiltInRegistries.ENTITY_TYPE.forEach(entityType -> addParalyzedLayerToEntity(event, entityType)); } @@ -189,6 +203,8 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void registerParticleProviders(RegisterParticleProvidersEvent event) { event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -198,6 +214,7 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); event.registerSpecial(AntarchyNeoforgeMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); event.registerSpriteSet(AntarchyNeoforgeMisc.FIREFLY.get(), FireflyParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } @SubscribeEvent @@ -222,6 +239,14 @@ public final class AntarchyNeoForgeClient { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "triffid_goo"), (guiGraphics, partialTick) -> TriffidGooHudRenderer.render(guiGraphics) ); + event.registerAboveAll( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"), + (guiGraphics, partialTick) -> JumpyBootsHudRenderer.render(guiGraphics) + ); + event.registerAboveAll( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dorrie_jump"), + (guiGraphics, partialTick) -> DorrieJumpHudRenderer.render(guiGraphics) + ); } @SubscribeEvent @@ -271,6 +296,50 @@ public final class AntarchyNeoForgeClient { } }, AntarchyNeoForgeFluidTypes.ICHOR_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return BILE_STILL; + } + + @Override + public ResourceLocation getFlowingTexture() { + return BILE_FLOW; + } + + @Override + public ResourceLocation getOverlayTexture() { + return WATER_OVERLAY; + } + + @Override + public ResourceLocation getRenderOverlayTexture(Minecraft mc) { + return UNDERWATER_OVERLAY; + } + + @Override + public int getTintColor() { + return 0xFFFFFFFF; + } + + @Override + public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) { + return 0xFFFFFFFF; + } + + @Override + public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { + return new Vector3f(0.38F, 0.42F, 0.10F); + } + + @Override + public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) { + RenderSystem.setShaderFogStart(0.25F); + RenderSystem.setShaderFogEnd(Math.min(farDistance, 4.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } + }, AntarchyNeoForgeFluidTypes.BILE_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/BigBerthaClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/BigBerthaClientHandler.java new file mode 100644 index 00000000..cea5c426 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/BigBerthaClientHandler.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class BigBerthaClientHandler { + private static boolean lastUseDown; + + private BigBerthaClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null || mc.level == null || mc.screen != null) { + lastUseDown = false; + return; + } + + if (!(mc.player.getMainHandItem().getItem() instanceof BigBerthaItem)) { + lastUseDown = false; + return; + } + + boolean useDown = mc.options.keyUse.isDown(); + if (useDown + && !lastUseDown + && mc.player.isShiftKeyDown() + && mc.player.getCooldowns().isOnCooldown(mc.player.getMainHandItem().getItem())) { + PacketDistributor.sendToServer(new BigBerthaModeCyclePayload()); + } + lastUseDown = useDown; + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java new file mode 100644 index 00000000..12daca96 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java @@ -0,0 +1,48 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.CameraShakeClientState; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import net.minecraft.client.Minecraft; +import net.minecraft.util.Mth; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ViewportEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class CameraShakeHandler { + private static final int TORETERROR_SHAKE_TICKS = 25; + + private CameraShakeHandler() { + } + + @SubscribeEvent + public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null || mc.player == null) { + CameraShakeClientState.clear(); + return; + } + + float shakeStrength = CameraShakeClientState.getStrength(event.getCamera().getPosition()); + + int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); + if (beetleShakeTicks > 0) { + shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + + int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; + if (bigBerthaShakeTicks > 0) { + shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + + if (shakeStrength <= 0.0F) return; + + float time = (float) (mc.player.tickCount + event.getPartialTick()); + event.setYaw(event.getYaw() + Mth.sin(time * 1.5F) * shakeStrength * 2.5F); + event.setPitch(event.getPitch() + Mth.cos(time * 1.8F) * shakeStrength * 2.0F); + event.setRoll(event.getRoll() + Mth.sin(time * 2.2F) * shakeStrength * 1.5F); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpClientHandler.java new file mode 100644 index 00000000..66f95787 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpClientHandler.java @@ -0,0 +1,60 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; +import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class DorrieJumpClientHandler { + private static boolean wasPressingJump = false; + private static boolean wasPressingCharge = false; + + private DorrieJumpClientHandler() {} + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.screen != null) { + resetAll(); + return; + } + + if (!(player.getVehicle() instanceof DorrieEntity)) { + resetAll(); + return; + } + + boolean pressingJump = mc.options.keyJump.isDown(); + if (pressingJump != wasPressingJump) { + PacketDistributor.sendToServer(new DorrieJumpInputPayload(pressingJump)); + wasPressingJump = pressingJump; + } + + boolean pressingCharge = AntarchyKeyBindings.DORRIE_CHARGE_JUMP.isDown(); + if (pressingCharge != wasPressingCharge) { + PacketDistributor.sendToServer(new DorrieChargeJumpPayload(pressingCharge)); + wasPressingCharge = pressingCharge; + } + } + + private static void resetAll() { + if (wasPressingJump) { + PacketDistributor.sendToServer(new DorrieJumpInputPayload(false)); + wasPressingJump = false; + } + if (wasPressingCharge) { + PacketDistributor.sendToServer(new DorrieChargeJumpPayload(false)); + wasPressingCharge = false; + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpHudRenderer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpHudRenderer.java new file mode 100644 index 00000000..15badad5 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/DorrieJumpHudRenderer.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; + +public final class DorrieJumpHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = + ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = + ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private DorrieJumpHudRenderer() {} + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) return; + + Entity vehicle = player.getVehicle(); + if (!(vehicle instanceof DorrieEntity dorrie)) return; + + int charge = dorrie.getJumpCharge(); + if (charge <= 0) return; + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + float chargeRatio = Mth.clamp(charge / 100.0F, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(0.2F, 0.8F, 1.0F, 0.4F + chargeRatio * 0.6F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java index f0fc69f1..2fa8339b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc; @@ -42,8 +43,9 @@ public final class ElythiaFireflyManager { if (dayTime < NIGHT_START || dayTime > NIGHT_END) return; long gameTime = level.getGameTime(); + boolean fireflyBiome = level.getBiome(mc.player.blockPosition()).is(AntarchyTags.Biomes.ELYTHIA_FIREFLY_PARTICLE_BIOMES); - if (AntarchySettings.elythiaFireflyParticlesEnabled()) { + if (AntarchySettings.elythiaFireflyParticlesEnabled() && fireflyBiome) { if (gameTime % SPAWN_INTERVAL == 0) { Player player = mc.player; int px = (int) player.getX(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/FallenKingCrownArmorStandLayer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/FallenKingCrownArmorStandLayer.java new file mode 100644 index 00000000..ab2dfdd8 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/FallenKingCrownArmorStandLayer.java @@ -0,0 +1,46 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ArmorStandModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; + +public final class FallenKingCrownArmorStandLayer extends RenderLayer { + private final BlockRenderDispatcher blockRenderer; + + public FallenKingCrownArmorStandLayer(RenderLayerParent renderer) { + super(renderer); + this.blockRenderer = Minecraft.getInstance().getBlockRenderer(); + } + + @Override + public void render(PoseStack poseStack, MultiBufferSource buffer, int packedLight, ArmorStand armorStand, float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, float headPitch) { + ItemStack headStack = armorStand.getItemBySlot(EquipmentSlot.HEAD); + if (!headStack.is(com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeItems.FALLEN_KING_CROWN.get()) || armorStand.isInvisible()) { + return; + } + + poseStack.pushPose(); + this.getParentModel().head.translateAndRotate(poseStack); + poseStack.translate(0.5D, -0.125D, -0.5D); + poseStack.mulPose(Axis.XP.rotationDegrees(180.0F)); + poseStack.mulPose(Axis.YP.rotationDegrees(180.0F)); + this.blockRenderer.renderSingleBlock( + AntarchyNeoforgeBlocks.FALLEN_KING_CROWN.get().defaultBlockState(), + poseStack, + buffer, + packedLight, + LivingEntityRenderer.getOverlayCoords(armorStand, 0.0F) + ); + poseStack.popPose(); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/GravityGunClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/GravityGunClientHandler.java index a00d22c2..c54e5ebe 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/GravityGunClientHandler.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/GravityGunClientHandler.java @@ -8,37 +8,39 @@ import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; -import org.lwjgl.glfw.GLFW; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.network.PacketDistributor; @EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class GravityGunClientHandler { private static final double SCROLL_STEP_DISTANCE = 0.75D; + private static boolean lastAttackDown; private GravityGunClientHandler() { } @SubscribeEvent - public static void onMouseButton(InputEvent.MouseButton.Pre event) { + public static void onClientTick(ClientTickEvent.Post event) { Minecraft mc = Minecraft.getInstance(); if (mc.player == null || mc.level == null || mc.screen != null || !AntarchySettings.gravityGunEnabled()) { - return; - } - - if (event.getButton() != GLFW.GLFW_MOUSE_BUTTON_LEFT || event.getAction() != GLFW.GLFW_PRESS) { + lastAttackDown = false; return; } if (!(mc.player.getMainHandItem().getItem() instanceof GravityGunItem)) { + lastAttackDown = false; return; } - PacketDistributor.sendToServer(new GravityGunPrimaryPayload()); - event.setCanceled(true); + boolean attackDown = mc.options.keyAttack.isDown(); + if (attackDown && !lastAttackDown) { + PacketDistributor.sendToServer(new GravityGunPrimaryPayload()); + } + lastAttackDown = attackDown; } @SubscribeEvent diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java new file mode 100644 index 00000000..99d9b773 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java @@ -0,0 +1,76 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedAttackPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedChargePayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class HerculesBeetleClientHandler { + private static final int MAX_CHARGE_TICKS = 40; + + private static boolean wasPressingJump; + private static boolean wasPressingAttack; + private static boolean wasCharging; + private static int chargeTicks; + + private HerculesBeetleClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + HerculesBeetleImpactShakeClientState.tick(); + + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + if (player == null || mc.screen != null) { + resetAll(); + return; + } + + if (!(player.getVehicle() instanceof HerculesBeetleEntity)) { + resetAll(); + return; + } + + boolean pressingJump = mc.options.keyJump.isDown(); + if (pressingJump != wasPressingJump) { + PacketDistributor.sendToServer(new HerculesBeetleJumpInputPayload(pressingJump)); + wasPressingJump = pressingJump; + } + + boolean pressingAttack = mc.options.keyAttack.isDown(); + if (pressingAttack && !wasPressingAttack) { + PacketDistributor.sendToServer(new HerculesBeetleMountedAttackPayload()); + } + wasPressingAttack = pressingAttack; + + boolean charging = AntarchyKeyBindings.HERCULES_BEETLE_CHARGE.isDown(); + if (charging) { + chargeTicks = Math.min(chargeTicks + 1, MAX_CHARGE_TICKS); + } else if (wasCharging && chargeTicks > 0) { + PacketDistributor.sendToServer(new HerculesBeetleMountedChargePayload(chargeTicks)); + chargeTicks = 0; + } + wasCharging = charging; + } + + private static void resetAll() { + if (wasPressingJump) { + PacketDistributor.sendToServer(new HerculesBeetleJumpInputPayload(false)); + wasPressingJump = false; + } + wasPressingAttack = false; + wasCharging = false; + chargeTicks = 0; + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java new file mode 100644 index 00000000..be7d4a50 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java @@ -0,0 +1,115 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.client.event.RenderGuiLayerEvent; +import net.neoforged.neoforge.client.gui.VanillaGuiLayers; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class JumpyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private JumpyBootsClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (jumpPressed && wasCharging && chargeTicks > 0) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + if (jumpPressed) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + @SubscribeEvent + public static void onRenderGuiLayer(RenderGuiLayerEvent.Pre event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null || !JumpyBootsItem.isWearingJumpyBoots(mc.player) || !isCharging()) { + return; + } + if (event.getName().equals(VanillaGuiLayers.EXPERIENCE_BAR) || event.getName().equals(VanillaGuiLayers.EXPERIENCE_LEVEL)) { + event.setCanceled(true); + } + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java new file mode 100644 index 00000000..6dd6a0b5 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class JumpyBootsHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private JumpyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + return; + } + if (!JumpyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java index 6bbb1544..8ec82108 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java @@ -46,7 +46,6 @@ public final class MogglesClientRenderer { Vec3 dir = end.subtract(eye).normalize(); - // Place up to 5 particles spaced evenly between 1.5 m ahead and the target. int steps = Math.min(5, (int) (totalDist / 1.5)); double spacing = (totalDist - 1.5) / Math.max(steps, 1); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/NightmareCameraShakeHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/NightmareCameraShakeHandler.java deleted file mode 100644 index beae8706..00000000 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/NightmareCameraShakeHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.ViewportEvent; - -@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class NightmareCameraShakeHandler { - private static final double MAX_SHAKE_RANGE = 32.0D; - - private NightmareCameraShakeHandler() { - } - - @SubscribeEvent - public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || minecraft.player == null) { - return; - } - - Vec3 cameraPos = event.getCamera().getPosition(); - float shakeStrength = 0.0F; - - for (NightmareEntity nightmare : minecraft.level.getEntitiesOfClass( - NightmareEntity.class, - minecraft.player.getBoundingBox().inflate(MAX_SHAKE_RANGE), - nightmare -> nightmare.isAlive() && nightmare.isRoaring() - )) { - double distance = Math.sqrt(cameraPos.distanceToSqr(nightmare.position().add(0.0D, nightmare.getBbHeight() * 0.5D, 0.0D))); - if (distance > MAX_SHAKE_RANGE) { - continue; - } - - shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 1.35D); - } - - if (shakeStrength <= 0.0F) { - return; - } - - float time = (float) (minecraft.player.tickCount + event.getPartialTick()); - event.setYaw(event.getYaw() + Mth.sin(time * 1.85F) * shakeStrength * 1.8F); - event.setPitch(event.getPitch() + Mth.cos(time * 2.15F) * shakeStrength * 1.45F); - event.setRoll(event.getRoll() + Mth.sin(time * 2.65F) * shakeStrength * 1.05F); - } -} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java new file mode 100644 index 00000000..6df0b334 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java @@ -0,0 +1,52 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.sounds.SoundSource; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME) +public final class StinkySoundHandler { + private static final int FIRST_SOUND_DELAY = 20; + private static final int MIN_INTERVAL = 60; + private static final int MAX_INTERVAL = 120; + + private static int nextSoundTick = FIRST_SOUND_DELAY; + + private StinkySoundHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null || mc.player == null || mc.isPaused()) { + nextSoundTick = FIRST_SOUND_DELAY; + return; + } + + if (!mc.player.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + nextSoundTick = FIRST_SOUND_DELAY; + return; + } + + nextSoundTick--; + if (nextSoundTick > 0) { + return; + } + + mc.level.playSound( + null, + mc.player.blockPosition(), + AntarchySoundEvents.STINKY_FLY.get(), + SoundSource.AMBIENT, + 0.14F + mc.level.random.nextFloat() * 0.06F, + 0.92F + mc.level.random.nextFloat() * 0.16F + ); + nextSoundTick = MIN_INTERVAL + mc.level.random.nextInt(MAX_INTERVAL - MIN_INTERVAL + 1); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java index 6d418f8c..214396bc 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java @@ -2,7 +2,9 @@ package com.craisinlord.antarchy.neoforge.network; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.antarchy.content.item.BigBerthaItem; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.network.BigBerthaModeCyclePayload; import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; import com.craisinlord.antarchy.content.network.GravityStatePayload; @@ -29,6 +31,10 @@ public final class AntarchyGravityNetworking { GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC, AntarchyGravityNetworking::handleGravityGunScroll + ).playToServer( + BigBerthaModeCyclePayload.TYPE, + BigBerthaModeCyclePayload.STREAM_CODEC, + AntarchyGravityNetworking::handleBigBerthaModeCycle ).playToServer( com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.TYPE, com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.STREAM_CODEC, @@ -105,6 +111,20 @@ public final class AntarchyGravityNetworking { }); } + private static void handleBigBerthaModeCycle(BigBerthaModeCyclePayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer serverPlayer)) { + return; + } + + if (!(serverPlayer.getMainHandItem().getItem() instanceof BigBerthaItem bigBerthaItem)) { + return; + } + + bigBerthaItem.tryCycleModeWhileCoolingDown(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem()); + }); + } + private static void handleGravityGunPrimary(GravityGunPrimaryPayload payload, IPayloadContext context) { context.enqueueWork(() -> { if (!(context.player() instanceof ServerPlayer serverPlayer)) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/DorrieJumpNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/DorrieJumpNetworking.java new file mode 100644 index 00000000..a9778f11 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/DorrieJumpNetworking.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.neoforge.network; + +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.network.DorrieChargeJumpPayload; +import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; +import net.minecraft.server.level.ServerPlayer; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +public final class DorrieJumpNetworking { + private DorrieJumpNetworking() {} + + public static void register(PayloadRegistrar registrar) { + registrar.playToServer( + DorrieJumpInputPayload.TYPE, + DorrieJumpInputPayload.STREAM_CODEC, + DorrieJumpNetworking::handleJumpInput + ); + registrar.playToServer( + DorrieChargeJumpPayload.TYPE, + DorrieChargeJumpPayload.STREAM_CODEC, + DorrieJumpNetworking::handleChargeInput + ); + } + + private static void handleJumpInput(DorrieJumpInputPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + dorrie.setPressingJump(payload.pressing()); + }); + } + + private static void handleChargeInput(DorrieChargeJumpPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!(player.getVehicle() instanceof DorrieEntity dorrie)) return; + if (payload.pressing()) { + dorrie.startJumpCharge(); + } else { + dorrie.releaseJump(); + } + }); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/HerculesBeetleNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/HerculesBeetleNetworking.java new file mode 100644 index 00000000..867cca1e --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/HerculesBeetleNetworking.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.neoforge.network; + +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleJumpInputPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedAttackPayload; +import com.craisinlord.antarchy.content.network.HerculesBeetleMountedChargePayload; +import net.minecraft.server.level.ServerPlayer; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +public final class HerculesBeetleNetworking { + private HerculesBeetleNetworking() { + } + + public static void register(PayloadRegistrar registrar) { + registrar.playToServer( + HerculesBeetleJumpInputPayload.TYPE, + HerculesBeetleJumpInputPayload.STREAM_CODEC, + HerculesBeetleNetworking::handleJumpInput + ).playToServer( + HerculesBeetleMountedAttackPayload.TYPE, + HerculesBeetleMountedAttackPayload.STREAM_CODEC, + HerculesBeetleNetworking::handleMountedAttack + ).playToServer( + HerculesBeetleMountedChargePayload.TYPE, + HerculesBeetleMountedChargePayload.STREAM_CODEC, + HerculesBeetleNetworking::handleMountedCharge + ).playToClient( + HerculesBeetleImpactShakePayload.TYPE, + HerculesBeetleImpactShakePayload.STREAM_CODEC, + HerculesBeetleNetworking::handleImpactShake + ); + } + + private static void handleJumpInput(HerculesBeetleJumpInputPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.setRiderJumpPressed(payload.pressing()); + } + }); + } + + private static void handleMountedAttack(HerculesBeetleMountedAttackPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.handleMountedRegularAttack(player); + } + }); + } + + private static void handleMountedCharge(HerculesBeetleMountedChargePayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) { + return; + } + if (player.getVehicle() instanceof HerculesBeetleEntity beetle) { + beetle.handleMountedCharge(player, payload.chargeTicks()); + } + }); + } + + private static void handleImpactShake(HerculesBeetleImpactShakePayload payload, IPayloadContext context) { + context.enqueueWork(() -> HerculesBeetleImpactShakeClientState.trigger(payload.durationTicks())); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java new file mode 100644 index 00000000..27e48599 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java @@ -0,0 +1,82 @@ +package com.craisinlord.antarchy.neoforge.network; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.entity.living.LivingFallEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +@EventBusSubscriber(modid = Antarchy.MODID) +public final class JumpyBootsNetworking { + private JumpyBootsNetworking() { + } + + public static void register(PayloadRegistrar registrar) { + registrar.playToServer( + JumpyBootsLaunchPayload.TYPE, + JumpyBootsLaunchPayload.STREAM_CODEC, + JumpyBootsNetworking::handleLaunch + ); + } + + private static void handleLaunch(JumpyBootsLaunchPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + if (player.isSpectator() || player.isPassenger()) return; + + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (player.getCooldowns().isOnCooldown(boots.getItem())) return; + + int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); + if (clampedCharge <= 0) return; + + float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); + Vec3 current = player.getDeltaMovement(); + + double newY = verticalBoost; + double newX = current.x; + double newZ = current.z; + + if (payload.sprinting()) { + Vec3 look = player.getLookAngle(); + newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + } + + player.setDeltaMovement(newX, newY, newZ); + player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); + player.hasImpulse = true; + player.hurtMarked = true; + player.resetFallDistance(); + player.connection.send(new ClientboundSetEntityMotionPacket(player)); + + player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + + player.getPersistentData().putLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY, player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); + + player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); + }); + } + + @SubscribeEvent + public static void onLivingFall(LivingFallEvent event) { + if (!(event.getEntity() instanceof ServerPlayer player)) return; + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + long protectionUntil = player.getPersistentData().getLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY); + if (player.level().getGameTime() < protectionUntil) { + event.setDamageMultiplier(event.getDamageMultiplier() * 0.25F); + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 3df66a73..25409080 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -74,7 +74,6 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onInvertedEffectExpired); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateBowDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleUltimateCrossbowDamage); - NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNightmareSwordDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNightmareArmorDoubleDamage); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipAttackEntity); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleScorpionWhipLeftClickBlock); @@ -115,7 +114,11 @@ public final class AntarchyNeoForgeEvents { } public static void onMissileSquidDeath(LivingDeathEvent event) { - if (!(event.getEntity() instanceof MissileSquidEntity)) return; + if (event.getEntity() instanceof MissileSquidEntity missileSquid) { + if (missileSquid.isSpawnedByKraken()) return; + } else if (event.getEntity().getType() != EntityType.SQUID) { + return; + } if (!(event.getEntity().level() instanceof ServerLevel serverLevel)) return; BlockPos deathPos = event.getEntity().blockPosition(); @@ -671,19 +674,6 @@ public final class AntarchyNeoForgeEvents { } - static void handleNightmareSwordDamage(LivingIncomingDamageEvent event) { - net.minecraft.world.damagesource.DamageSource source = event.getSource(); - if (!(source.getEntity() instanceof Player attacker)) return; - if (!(attacker.getMainHandItem().getItem() instanceof NightmareSwordItem)) return; - - float maxHealth = attacker.getMaxHealth(); - if (maxHealth <= 0) return; - float missingFraction = (maxHealth - attacker.getHealth()) / maxHealth; - float baseDamage = (float) AntarchySettings.nightmareSwordBaseDamage(); - float scalingFactor = (float) AntarchySettings.nightmareSwordScalingFactor(); - - event.setAmount(baseDamage + missingFraction * scalingFactor * baseDamage); - } static void handleNightmareArmorDoubleDamage(LivingIncomingDamageEvent event) { net.minecraft.world.damagesource.DamageSource source = event.getSource(); @@ -977,11 +967,14 @@ public final class AntarchyNeoForgeEvents { static void registerBrewingRecipes(RegisterBrewingRecipesEvent event) { event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.LUCID_EYE.get(), AntarchyNeoforgeMisc.INVERSION); event.getBuilder().addMix(AntarchyNeoforgeMisc.INVERSION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_INVERSION); + event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.STINK_BUG.get(), AntarchyNeoforgeMisc.STINKY_POTION); + event.getBuilder().addMix(AntarchyNeoforgeMisc.STINKY_POTION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_STINKY); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.BASILISK_FANG.get(), AntarchyNeoforgeMisc.PARALYSIS); event.getBuilder().addMix(AntarchyNeoforgeMisc.PARALYSIS, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_PARALYSIS); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.MOLEWORM_ITEM.get(), AntarchyNeoforgeMisc.HASTE); event.getBuilder().addMix(AntarchyNeoforgeMisc.HASTE, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.STRONG_HASTE); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.CLOUD_SHARK_FIN.get(), Potions.SLOW_FALLING); + event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.JUMPY_BUG_LEG.get(), Potions.LEAPING); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.CORNEA_EAR.get(), Potions.NIGHT_VISION); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.URANIUM_NUGGET.get(), AntarchyNeoforgeMisc.SHRINKING); event.getBuilder().addMix(AntarchyNeoforgeMisc.SHRINKING, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.STRONG_SHRINKING); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index e3f2f2de..abcaec3a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -4,11 +4,14 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; @@ -136,6 +139,12 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", () -> new Block(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new SlabBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new WallBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", () -> new StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", @@ -198,8 +207,12 @@ public final class AntarchyNeoforgeBlocks { () -> new WaspNestBlock(AntarchyNeoforgeItems::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); + public static final DeferredBlock BRUTALFLY_COCOON_SPAWNER = BLOCKS.register("brutalfly_cocoon_spawner", + () -> new com.craisinlord.antarchy.content.block.BrutalflyCocoonSpawnerBlock(BlockBehaviour.Properties.of().noCollission().instabreak().noLootTable())); public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", () -> new LiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 989331ea..19459f7d 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -59,6 +59,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MOLEWORM_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MANTIS_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.ALPHA_MANTIS_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MOLEVORE_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.APPLE_COW_SPAWN_EGG.get()); @@ -70,6 +71,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MISSILE_SQUID_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.OCTOPUS_BOMB_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.NIGHTMARE_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.BED_BUG_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.LUCID_SPAWN_EGG.get()); @@ -92,6 +94,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.BED_BUG_EGG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CREEPING_HORROR_EGG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LURKING_TERROR_EGG_ITEM.get()); event.accept(AntarchyNeoforgeItems.WASP_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.RED_ANT_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROWN_ANT_NEST_ITEM.get()); @@ -135,6 +139,9 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_SHARD.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_APPLE.get()); event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get()); + event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); + event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); + event.accept(AntarchyNeoforgeItems.STINK_BUG.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_WING.get()); event.accept(AntarchyNeoforgeItems.PRIMORDIAL_SCUTE.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO.get()); @@ -183,6 +190,9 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.SHELLSTONE_BRICK_WALL_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHISELED_SHELLSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICKS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_SLAB_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_WALL_ITEM.get()); event.accept(AntarchyNeoforgeItems.CRACKED_SHELLSTONE_BRICKS_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_STAIRS_ITEM.get()); @@ -200,11 +210,11 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.PALE_NYXITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_SPIKE_ITEM.get()); event.accept(AntarchyNeoforgeItems.POTENT_NYXITE_ITEM.get()); - event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); - event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.ANTIMETAL_ITEM.get()); event.accept(AntarchyNeoforgeItems.POLISHED_ANTIMETAL_ITEM.get()); event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get()); + event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get()); @@ -282,11 +292,14 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.SCORPION_WHIP.get()); event.accept(AntarchyNeoforgeItems.FALLEN_KING_CROWN.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_ELYTRA.get()); + event.accept(AntarchyNeoforgeItems.JUMPY_BOOTS.get()); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.EXTREME_SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.PARALYSIS)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.LONG_PARALYSIS)); + event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STINKY_POTION)); + event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.LONG_STINKY)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.HASTE)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_HASTE)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.GROWING)); @@ -315,73 +328,83 @@ public class AntarchyNeoforgeCreativeModeTabs { "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - // 2 - Antimetal blocks - case "antimetal", "polished_antimetal" -> 2; + // 2 - Shellstone blocks + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - // 3 - Dream sand and blocks + // 3 - Antimetal blocks + case "antimetal", "polished_antimetal" -> 3; + + // 4 - Dream sand and blocks case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", "cut_dream_sandstone", "smooth_dream_sandstone", "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 3; + "cut_dream_sandstone_slab" -> 4; - // 4 - Umbral moss + // 5 - Umbral moss case "umbral_moss_block", "umbral_moss_carpet" -> 4; - // 5 - All ores + metal storage/decorative blocks + // 6 - All ores + metal storage/decorative blocks case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", "chiseled_titanium", "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 5; + "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; - // 6 - Raw ores + // 7 - Raw ores case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", - "raw_uranium_block", "raw_titanium_block" -> 6; + "raw_uranium_block", "raw_titanium_block" -> 7; - // 7 - Blood crystal blocks (not the shard ingredient) + // 8 - Blood crystal blocks (not the shard ingredient) case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster" -> 7; + "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", + "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; - // 8 - Ouranwood leaves - case "ouranwood_leaves" -> 8; + // 9 - Ouranwood leaves + case "ouranwood_leaves" -> 9; - // 9 - Saplings / seeds - case "duplicator_sapling", "ouranwood_acorn" -> 9; + // 10 - Saplings / seeds + case "duplicator_sapling", "ouranwood_acorn" -> 10; - // 10 - Plants and flowers - case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", + // 11 - Plants and flowers + case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "amber_lichen", "bile_vein", "creepvine", "triffid_goo_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 10; + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; - // 11 - Dream lighting - case "dream_torch", "dream_lantern", "dream_campfire" -> 11; + // 12 - Dream lighting + case "dream_torch", "dream_lantern", "dream_campfire" -> 12; - // 12 - Antimetal scaffolding - case "antimetal_scaffolding" -> 12; + // 13 - Antimetal scaffolding + case "antimetal_scaffolding" -> 13; - // 13 - Infested blocks - case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg" -> 13; + // 14 - Infested blocks + case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", + "creeping_horror_egg", "lurking_terror_egg" -> 14; - // 14 - Tools + // 15 - Tools case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", - "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 14; + "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 15; - // 15 - Liquid buckets - case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 15; + // 16 - Liquid buckets + case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; - // 16 - Misc wearables / gadgets - case "moggles", "brutalfly_elytra", "fallen_king_crown" -> 16; + // 17 - Misc wearables / gadgets + case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; - // 17 - Weapons + // 18 - Weapons case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", - "ultimate_sword", "ultimate_mace" -> 17; + "ultimate_sword", "ultimate_mace" -> 18; - // 18 - Armor sets + // 19 - Armor sets case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots", "blood_crystal_helmet", "blood_crystal_chestplate", @@ -389,34 +412,35 @@ public class AntarchyNeoforgeCreativeModeTabs { "nightmare_helmet", "nightmare_chestplate", "nightmare_leggings", "nightmare_boots", "ultimate_helmet", "ultimate_chestplate", - "ultimate_leggings", "ultimate_boots" -> 18; + "ultimate_leggings", "ultimate_boots" -> 19; - // 19 - Ranged weapons - case "ultimate_bow", "ultimate_crossbow" -> 19; + // 20 - Ranged weapons + case "ultimate_bow", "ultimate_crossbow" -> 20; - // 20 - Foods + // 21 - Foods case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", - "blood_crystal_apple" -> 20; + "blood_crystal_apple" -> 21; - // 21 - Crafting ingredients + // 22 - Crafting ingredients case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", "moleworm", "uranium_nugget", "titanium_nugget", "uranium_ingot", "titanium_ingot", "lucid_eye", "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", - "primordial_scute", "triffid_goo", "vortex_eye" -> 21; + "primordial_scute", "triffid_goo", "vortex_eye", + "king_scale", "queen_scale", "chiten", "stink_bug" -> 22; - // 22 - Arrows (reserved for future arrow types) + // 23 - Arrows (reserved for future arrow types) - // 23 - Potions - case "reverie_bottle" -> 23; + // 24 - Potions + case "reverie_bottle" -> 24; - // 24 - Spawn eggs + // 25 - Spawn eggs default -> { if (!path.endsWith("_spawn_egg")) { org.slf4j.LoggerFactory.getLogger("Antarchy/CreativeTab").warn("Unmatched creative tab item: '{}'", path); } - yield path.endsWith("_spawn_egg") ? 24 : 99; + yield path.endsWith("_spawn_egg") ? 25 : 99; } }; } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 29f9b395..37e6fc8b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -15,8 +15,12 @@ import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.craisinlord.antarchy.content.entity.AlphaMantisEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; @@ -24,6 +28,9 @@ import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.SpitBugEntity; +import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; @@ -31,6 +38,7 @@ import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; @@ -40,6 +48,10 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.CheepEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.DorrieEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import net.minecraft.core.registries.Registries; @@ -80,6 +92,11 @@ public final class AntarchyNeoforgeEntites { .sized(3.125F, 2.5F) .clientTrackingRange(8) .build("mantis")); + public static final DeferredHolder, EntityType> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis", + () -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER) + .sized(4.0F, 3.25F) + .clientTrackingRange(10) + .build("alpha_mantis")); public static final DeferredHolder, EntityType> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat", () -> EntityType.Builder.of(OuranwoodBoatEntity::new, MobCategory.MISC) .sized(1.375F, 0.5625F) @@ -185,7 +202,7 @@ public final class AntarchyNeoforgeEntites { .build("cloud_shark")); public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(5.2F, 9.8F) + .sized(11.4F, 39.0F) .clientTrackingRange(12) .build("kraken")); public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", @@ -193,6 +210,11 @@ public final class AntarchyNeoforgeEntites { .sized(1.62F, 3.18F) .clientTrackingRange(10) .build("missile_squid")); + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) .sized(3.2F, 3.8F) @@ -221,8 +243,8 @@ public final class AntarchyNeoforgeEntites { .build("basilisk")); public static final DeferredHolder, EntityType> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion", () -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER) - .sized(4.05F, 1.35F) - .clientTrackingRange(10) + .sized(6.0F, 3.0F) + .clientTrackingRange(12) .build("emperor_scorpion")); public static final DeferredHolder, EntityType> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile", () -> EntityType.Builder.of(LucidEyeProjectileEntity::new, MobCategory.MISC) @@ -244,7 +266,7 @@ public final class AntarchyNeoforgeEntites { .build("brutalfly_orb")); public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.5F, 3.0F) + .sized(2.0F, 3.0F) .clientTrackingRange(14) .build("toreterror")); public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", @@ -253,6 +275,11 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("water_bomb")); + public static final DeferredHolder, EntityType> CHEEP = ENTITY_TYPES.register("cheep", + () -> EntityType.Builder.of(CheepEntity::new, MobCategory.WATER_AMBIENT) + .sized(1.0F, 1.2F) + .clientTrackingRange(8) + .build("cheep")); public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", () -> EntityType.Builder.of( UpwardFallingBlockEntity::new, MobCategory.MISC) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 2bb79a56..f3b1cb68 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.*; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; @@ -42,11 +44,13 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BOMBER.get(), BomberEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MANTIS.get(), MantisEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), AlphaMantisEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.TRIFFID.get(), TriffidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.LUCID.get(), LucidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.SCORPION.get(), ScorpionEntity.createAttributes().build()); @@ -63,6 +67,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), rainbowAntAttributes); event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build()); } private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 83df6320..3595d363 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -14,6 +14,7 @@ import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.content.item.ultimate.*; import com.craisinlord.antarchy.content.item.NightmareArmorItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.item.NightmareSwordItem; import com.craisinlord.antarchy.content.item.LucidEyeItem; @@ -117,6 +118,16 @@ public final class AntarchyNeoforgeItems { 3.0F, 0.1F )); + private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(Items.NETHERITE_BOOTS), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); private static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", () -> new ArmorMaterial( createFallenKingCrownDefense(), @@ -235,6 +246,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_SHELLSTONE); public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICKS); public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CRACKED_SHELLSTONE_BRICKS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_SLAB); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_WALL); public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_STAIRS); public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_SLAB); public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_WALL); @@ -258,6 +272,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(AntarchyNeoforgeMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", () -> new BucketItem(AntarchyNeoforgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", @@ -291,8 +307,16 @@ public final class AntarchyNeoforgeItems { -2.2F )); public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem STINK_BUG = ITEMS.register("stink_bug", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new JumpyBootsItem(JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); @@ -461,7 +485,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BUTTERFLY, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", @@ -473,11 +497,13 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0xB8B8B8, 0x8A623A, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties())); + public static final DeferredItem ALPHA_MANTIS_SPAWN_EGG = ITEMS.register("alpha_mantis_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.ALPHA_MANTIS, 0x8FDD6C, 0x2F5D22, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEVORE, 0x3E2E24, 0xB67B4F, new Item.Properties().rarity(Rarity.UNCOMMON))); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEVORE, 0x4A4A4A, 0x6B4A2B, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg", @@ -498,6 +524,8 @@ public final class AntarchyNeoforgeItems { () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", @@ -509,7 +537,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties())); public static final DeferredItem EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EMPEROR_SCORPION, 0x1A1A0A, 0x8B2200, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EMPEROR_SCORPION, 0x3A3242, 0xD8CDB4, new Item.Properties())); public static final DeferredItem LUCID_EYE = ITEMS.register("lucid_eye", () -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON))); public static final DeferredItem LUCID_PEARL = ITEMS.register("lucid_pearl", @@ -529,6 +557,12 @@ public final class AntarchyNeoforgeItems { () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + public static final DeferredItem CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CHEEP, 0xAA22FF, 0x22FF44, new Item.Properties())); + public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.register("creeping_horror_egg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.register("lurking_terror_egg", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); private AntarchyNeoforgeItems() {} @@ -629,4 +663,14 @@ public final class AntarchyNeoforgeItems { defense.put(ArmorItem.Type.BODY, 2); return defense; } + + private static EnumMap createJumpyBootsDefense() { + EnumMap defense = new EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 8eb54663..75ee6cf2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -8,10 +8,18 @@ import com.craisinlord.antarchy.content.effect.GrowthMobEffect; import com.craisinlord.antarchy.content.effect.InvertedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; @@ -22,8 +30,6 @@ import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.registries.Registries; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -35,7 +41,6 @@ import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; import net.minecraft.world.level.material.Fluid; -import net.minecraft.tags.TagKey; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.SoundActions; import net.neoforged.neoforge.fluids.BaseFlowingFluid; @@ -59,7 +64,6 @@ public final class AntarchyNeoforgeMisc { private static final DeferredRegister> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID); private static final DeferredRegister ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID); - // Attributes public static final DeferredHolder DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register( "double_damage_chance", () -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true) @@ -73,6 +77,7 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); @@ -82,6 +87,10 @@ public final class AntarchyNeoforgeMisc { () -> new Potion(new MobEffectInstance(INVERTED, 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", () -> new Potion("inversion", new MobEffectInstance(INVERTED, 2400))); + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(STINKY, 1200))); + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(STINKY, 2400))); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", () -> new Potion(new MobEffectInstance(PARALYZED, 200))); public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", @@ -104,6 +113,15 @@ public final class AntarchyNeoforgeMisc { () -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT, 600, 2))); // Fluid types + public static final DeferredHolder BILE_TYPE = FLUID_TYPES.register("bile", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.bile") + .fallDistanceModifier(0.0F) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1100) + .viscosity(1200))); public static final DeferredHolder ICHOR_TYPE = FLUID_TYPES.register("ichor", () -> new FluidType(FluidType.Properties.create() .descriptionId("block.antarchy.ichor") @@ -125,6 +143,10 @@ public final class AntarchyNeoforgeMisc { .viscosity(1000))); // Fluids + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new BaseFlowingFluid.Source(bileProperties())); + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new BaseFlowingFluid.Flowing(bileProperties())); public static final DeferredHolder ICHOR = FLUIDS.register("ichor", () -> new BaseFlowingFluid.Source(ichorProperties())); public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", @@ -137,6 +159,10 @@ public final class AntarchyNeoforgeMisc { // Particle types public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -147,6 +173,8 @@ public final class AntarchyNeoforgeMisc { () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> new SimpleParticleType(true)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -163,8 +191,6 @@ public final class AntarchyNeoforgeMisc { () -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC)); public static final DeferredHolder, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest", () -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC)); - public static final DeferredHolder, TermiteNestFeature> TERMITE_NEST_FEATURE = FEATURES.register("termite_nest", - () -> new TermiteNestFeature(SimpleBlockConfiguration.CODEC)); public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree", () -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC)); public static final DeferredHolder, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree", @@ -205,6 +231,12 @@ public final class AntarchyNeoforgeMisc { () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", @@ -257,6 +289,7 @@ public final class AntarchyNeoforgeMisc { ATTRIBUTES.register(modEventBus); } + static BaseFlowingFluid.Properties ichorProperties() { return new BaseFlowingFluid.Properties(ICHOR_TYPE, ICHOR, FLOWING_ICHOR) .bucket(() -> AntarchyNeoforgeItems.ICHOR_BUCKET.get()) @@ -266,6 +299,15 @@ public final class AntarchyNeoforgeMisc { .tickRate(5); } + static BaseFlowingFluid.Properties bileProperties() { + return new BaseFlowingFluid.Properties(BILE_TYPE, BILE, FLOWING_BILE) + .bucket(() -> AntarchyNeoforgeItems.BILE_BUCKET.get()) + .block(() -> AntarchyNeoforgeBlocks.BILE_BLOCK.get()) + .slopeFindDistance(4) + .levelDecreasePerBlock(1) + .tickRate(5); + } + static BaseFlowingFluid.Properties antiwaterProperties() { return new BaseFlowingFluid.Properties(ANTIWATER_TYPE, ANTIWATER, FLOWING_ANTIWATER) .bucket(() -> AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java index 84da8558..c98e10cc 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking; +import com.craisinlord.antarchy.neoforge.network.DorrieJumpNetworking; +import com.craisinlord.antarchy.neoforge.network.HerculesBeetleNetworking; +import com.craisinlord.antarchy.neoforge.network.JumpyBootsNetworking; import com.craisinlord.antarchy.neoforge.network.MultipartNetworking; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; @@ -18,6 +21,9 @@ public class AntarchyNeoforgePayloadHandlers { var registrar = event.registrar("1"); AntarchyGravityNetworking.register(registrar); BrutalflyElytraNetworking.register(registrar); + JumpyBootsNetworking.register(registrar); + DorrieJumpNetworking.register(registrar); + HerculesBeetleNetworking.register(registrar); registrar.playToClient( com.craisinlord.antarchy.content.network.BloodglassStatePayload.TYPE, com.craisinlord.antarchy.content.network.BloodglassStatePayload.STREAM_CODEC, diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index fa8bc34f..a98d76a8 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -121,6 +121,23 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); + public static final DeferredHolder TORETERROR_IDLE = registerSoundEvent("toreterror_idle"); + public static final DeferredHolder TORETERROR_HURT = registerSoundEvent("toreterror_hurt"); + public static final DeferredHolder TORETERROR_DEATH = registerSoundEvent("toreterror_death"); + public static final DeferredHolder TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire"); + public static final DeferredHolder TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up"); + public static final DeferredHolder TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land"); + public static final DeferredHolder STINKY_FLY = registerSoundEvent("stinky_fly"); + public static final DeferredHolder CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl"); + public static final DeferredHolder CREEPING_HORROR_HURT = registerSoundEvent("creeping_horror_hurt"); + public static final DeferredHolder CREEPING_HORROR_BITE = registerSoundEvent("creeping_horror_bite"); + public static final DeferredHolder LURKING_TERROR_SNARL = registerSoundEvent("lurking_terror_snarl"); + public static final DeferredHolder LURKING_TERROR_HURT = registerSoundEvent("lurking_terror_hurt"); + public static final DeferredHolder LURKING_TERROR_BITE = registerSoundEvent("lurking_terror_bite"); + public static final DeferredHolder LURKING_TERROR_FLY_LOOP = registerSoundEvent("lurking_terror_fly_loop"); public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 7711e1e1..7912d5f2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.content.entity.*; +import net.minecraft.world.entity.animal.AbstractFish; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; @@ -35,14 +36,17 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.ALPHA_MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AlphaMantisEntity::checkAlphaMantisSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, AbstractFish::checkSurfaceWaterAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json new file mode 100644 index 00000000..e3943e08 --- /dev/null +++ b/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge:fluid_container", + "fluid": "antarchy:bile" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json new file mode 100644 index 00000000..961e3cd9 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/mantis_spawns.json @@ -0,0 +1,18 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:mantis_overworld_spawn_biomes", + "spawners": [ + { + "type": "antarchy:mantis", + "weight": 8, + "minCount": 1, + "maxCount": 1 + }, + { + "type": "antarchy:alpha_mantis", + "weight": 1, + "minCount": 1, + "maxCount": 1 + } + ] +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json new file mode 100644 index 00000000..063d82a6 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/octopus_bomb_spawns.json @@ -0,0 +1,12 @@ +{ + "type": "neoforge:add_spawns", + "biomes": "#antarchy:octopus_bomb_spawn_biomes", + "spawners": [ + { + "type": "antarchy:octopus_bomb", + "weight": 2, + "minCount": 1, + "maxCount": 2 + } + ] +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json new file mode 100644 index 00000000..4f737bfc --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json @@ -0,0 +1,9 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:has_shellstone", + "features": [ + "antarchy:shellstone_upper", + "antarchy:shellstone_lower" + ], + "step": "underground_ores" +}