Compare commits

...
Author SHA1 Message Date
Polymeta d11ef0411a swiper no swap
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-08 15:32:35 +01:00
Polymeta c41b0cdca2 Merge branch 'negative-config-values' into 'main'
Allow negative numbers in config GUI

See merge request cable-mc/cobblemon!1588
2025-04-08 12:01:45 +00:00
lionandPolymeta 88f743ee48 Allow negative numbers in config GUI 2025-04-08 12:01:44 +00:00
Polymeta 15b9afacf8 remove client logic from common code MoLang functions
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-08 12:59:36 +01:00
Polymeta babcf7430b don't error when heldItem nbt is not present
Closes #1505

Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-08 11:38:05 +01:00
Polymeta 3439ca2011 [skip-ci] fix tag docs formatting
Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-08 10:55:48 +01:00
Polymeta 6539f3dea1 Merge branch 'josh/3d-wearable-items' into 'main'
Start of wearable item implementation.

See merge request cable-mc/cobblemon!1579
2025-04-08 09:16:24 +00:00
Landon fcde1eb171 Merge branch 'hitbox-and-hit' into 'main'
Position hitbox on client to be accurate to the locator and make looking at...

See merge request cable-mc/cobblemon!1589
2025-04-08 03:26:26 +00:00
Josh a30a5644df Okay, this is it this time for real 2025-04-07 23:03:30 -04:00
JPAK a5672a38b9 Switch to using delegates to position riders. 2025-04-07 21:37:42 -05:00
JPAK 3b14ea319b Position hitbox on client to be accurate to the locator and make looking at stuff align to the camera. 2025-04-07 21:12:01 -05:00
Josh a090c90831 Merge branch 'main' into josh/3d-wearable-items 2025-04-07 20:55:41 -04:00
Josh 5dcc9ba46d Edit CHANGELOG.md 2025-04-07 21:21:05 +00:00
Josh f8e4ea70df Removed debug models. 2025-04-07 17:09:15 -04:00
Josh 5dc1c749f3 Replaced WearableItemModel enum with WearableItem class. Instances of this class should have a corresponding 3D model in models/item/wearable/ 2025-04-07 16:35:46 -04:00
Polymeta 3accfa29b7 Merge branch 'josh/joint-transform-command' into 'main'
Changed command "changejointscale" into "transformmodelpart". Allows you to easily add model transformations in-game.

See merge request cable-mc/cobblemon!1587
2025-04-07 17:18:56 +00:00
Josh 1af1569f63 Updated CHANGELOG.md 2025-04-07 11:13:27 -04:00
Polymeta dbd2f5d340 Merge branch 'implement_pokemon' into 'main'
Implemented many pokemon

See merge request cable-mc/cobblemon!1585
2025-04-07 09:35:47 +00:00
Frank The FarmerandPolymeta 86bf413f00 Implemented many pokemon 2025-04-07 09:35:46 +00:00
Landon f13e7d03a1 Merge branch 'camera-changes-third-person' into 'main'
Riding Third Person Camera

See merge request cable-mc/cobblemon!1582
2025-04-07 02:51:07 +00:00
JordanandLandon 4a025ac65e Riding Third Person Camera 2025-04-07 02:51:07 +00:00
Josh 8a0c98c9ab Renamed command to transformmodelpart 2025-04-06 18:58:13 -04:00
Josh 36c5fe2419 Properly display name of model part. 2025-04-06 18:52:15 -04:00
Josh 0c79d102cf Changed changejointscale command into transformpartcommand with can cahnge the position rotation and scale of any joint on a model. 2025-04-06 18:31:39 -04:00
Polymeta b14b25ae19 Merge branch 'SaferSendouts' into 'main'
Safer sendouts

See merge request cable-mc/cobblemon!1458
2025-04-06 20:58:09 +00:00
Josh bd8f644b9a Add scaling as an option when creating transformedParts 2025-04-06 10:56:10 -04:00
Josh 7c84cdb05d transformedParts must add to the model part rather than replacing it with set() 2025-04-06 10:54:00 -04:00
Landon 125975e25f Merge branch 'item-with-components-swap' into 'main'
Fixed not being able to swap held item of the same type, but have different components.

See merge request cable-mc/cobblemon!1580
2025-04-06 05:42:42 +00:00
Landon baf766298a Merge branch 'riding-ground-render-revert' into 'main'
revert broken ground rendering code. Correctly set stale yrot value on return...

See merge request cable-mc/cobblemon!1583
2025-04-06 05:11:30 +00:00
Jackson BowesandLandon 83580e7e8b revert broken ground rendering code. Correctly set stale yrot value on return... 2025-04-06 05:11:30 +00:00
Test 90335ccb2d hide mark scroll when unused 2025-04-05 17:26:09 -04:00
Josh 9679929694 Merge branch 'main' into 'item-with-components-swap'
# Conflicts:
#   common/src/main/kotlin/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.kt
2025-04-05 02:01:27 +00:00
Landon fd6fb5db47 Merge branch 'riding-friction-change' into 'main'
Decouple minecraft friction logic for better feeling controllers. Limit speed...

See merge request cable-mc/cobblemon!1581
2025-04-05 00:21:27 +00:00
Jackson BowesandLandon a80ada8590 Decouple minecraft friction logic for better feeling controllers. Limit speed... 2025-04-05 00:21:27 +00:00
Josh 5af96e75eb Fixed message when swapping items.
Used `displayName` rather than `hoverName` for more dynamic text in message.
2025-04-04 13:35:09 -04:00
Josh 023a01befd Can now swap pokemon's held items if the components are different. 2025-04-04 13:03:49 -04:00
JazzMcNade cc2022ed59 Merge branch 'main' into SaferSendouts 2025-04-03 20:30:24 -05:00
Josh 298fdf45d5 Adjusted default position and scale values for wearables. Any additional transformations for a specific pokemon should be done in its posers. 2025-04-03 20:47:09 -04:00
Josh 1dab5b8c7c Added debug models to help with aligning wearable items on pokemon. 2025-04-03 17:03:26 -04:00
Josh a2fef9f1be Moved WearableItemModel functions out of HeldItemRenderer.kt 2025-03-30 21:24:13 -04:00
Josh 3d4df2c098 Fixed item rendering not falling back to the item locator if other locators are not present. 2025-03-30 21:11:05 -04:00
Josh 7557cab03d Fixed item visibility button not showing the right icon when opening summary or switching pokemon. 2025-03-30 20:55:28 -04:00
Josh f1018b1da9 Simplified HeldItemRenderer to use only one render function that renders an Item on a PosableModel. And fixed the item lighting in the summary menu. 2025-03-30 20:03:07 -04:00
Josh 5af4e3bddb Added placeholder models for wearable items and logic to register the models. 2025-03-30 02:03:44 -04:00
Josh 1f519cae50 Fixed rotation of items rending in PokemonOnShoulderRenderer and ModelWidget 2025-03-29 20:01:04 -04:00
JazzMcNade 91864b13d0 Moved GetSendOutPosition into ActiveBattlePokemon.kt 2025-03-06 01:45:58 -06:00
JazzMcNade adc8e9921a Updated Changelog 2025-03-04 21:54:23 -06:00
JazzMcNade 5e5473acae Muted timing console logging 2025-03-04 21:50:28 -06:00
JazzMcNade 3509944f1a Comment, fixed indentation 2025-03-03 20:53:42 -06:00
JazzMcNade 8a5489f805 Merge branch 'main' into SaferSendouts 2025-03-03 20:44:26 -06:00
JazzMcNade 3b7d56ff45 Merge branch 'main' into SaferSendouts 2025-02-16 20:53:08 -06:00
JazzMcNade 50c567d264 Clean up, scale look radius with size 2025-01-04 18:35:14 -06:00
JazzMcNade d4964e41d3 Clean up, fixed fluid handling 2025-01-03 22:04:23 -06:00
JazzMcNade 41b1c169c3 Merge branch 'main' into SaferSendouts 2025-01-03 20:49:13 -06:00
JazzMcNade 49e2001004 clean up 2025-01-03 20:48:28 -06:00
JazzMcNade 66393f9293 Merge branch 'main' into SaferSendouts 2025-01-02 21:11:07 -06:00
JazzMcNade 7b3b6146a1 Single raycast to avoid spawning in walls, setPositionSafely can no longer path into a wall 2024-12-30 20:44:32 -06:00
JazzMcNade e1452244c2 Merge branch 'main' into SaferSendouts 2024-12-30 12:50:24 -06:00
JazzMcNade 5358414a0c Merge branch 'main' into SaferSendouts 2024-12-24 15:27:25 -06:00
JazzMcNade d691373919 Capped collision box size. Added trace to help prevent attempts to send outs going into walls 2024-12-15 20:14:30 -06:00
JazzMcNade 038f13e6fa Merge branch 'main' into SaferSendouts 2024-12-15 00:52:31 -06:00
JazzMcNade dd288a3b0c SetPositionSafely now implements BFS WIP 2024-12-08 21:39:17 -06:00
461 changed files with 56779 additions and 13028 deletions
+83
View File
@@ -13,6 +13,82 @@
- Added `visibility/hidden`, `visibility/hat` and `visibility/face` tags to control where and how certain items are rendered.
- Added Pokémon markings, toggleable within the summary.
- Added `/boxcount` command to change PC boxes amount
- Added cosmetics for Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandle line, Treecko line, Braixen, Delphox, and Dragonite.
### Pokémon Added
#### Gen 2
- Dunsparce
#### Gen 3
- Spoink
- Grumpig
- Snorunt
- Glalie
#### Gen 4
- Bronzor
- Bronzong
- Croagunk
- Froslass
#### Gen 5
- Pansage
- Simisage
- Pansear
- Simisear
- Panpour
- Simipour
- Munna
- Musharna
- Blitzle
- Zebstrika
- Trubbish
- Garbodor
#### Gen 6
- Noibat
- Noivern
#### Gen 7
- Drampa
#### Gen 8
- Silicobra
- Sandaconda
#### Gen 9
- Smoliv
- Dolliv
- Arboliva
- Orthworm
- Dudunsparce
### Animation updates for the following Pokémon
- Garchomp
- Torpius
- Nosepass
- Probopass
### Model updates for the following Pokémon
- Gyarados
- Dragonite
- Eevee
- Vaporeon
- Jolteon
- Flareon
- Espeon
- Umbreon
- Leafeon
- Glaceon
- Sylveon
- Honchkrow
- Garchomp
- Pidgeot
- Nosepass
- Probopass
- Added `/transformmodelpart (position|rotation|scale) <modelPart> <transform: x y z>` command that can add transformations to a pokemon's model part.
- The player executing the command must be facing the target pokemon entity. Transformations are not persistent and will revert when resources are reloaded.
### Changes
- Renamed `chargeGainedPerTick` config to `secondsToChargeHealingMachine`.
@@ -21,6 +97,8 @@
- When using the `cobblemon` or `generation_9` capture calculators a critical capture with a single shake will always play for successful captures when you've already registered the Pokémon as caught in your Pokédex.
- Improved the performance of saving Pokédex and player data.
- Pokémon hitbox now scales with entity attribute `generic.scale`.
- Removed Shulker aspect and replaced it with cosmetic_item-shulker_shell.
- Shulker shell Forretress is now a cosmetic rather than a special evo and thus all shulker Forretress will revert back to normal until a shulker shell is put in their cosmetic slot.
### Fixes
- Fixed Particles sometimes facing the wrong direction (looking at you, Swords Dance)
@@ -43,11 +121,13 @@
- Fixed field name in evolution requirements for Spewpa Pokeball.
- Fixed LevelUpCriterion logic to correctly check that the Pokémon is a preEvo.
- Fixed `hide_additional_tooltip` vanilla flag not properly hiding tooltips on pokerod and bait items
- Removed a number of scenarios in which a Pokémon battle may send out a Pokémon into collision geometry.
- Fixed NPCs using Pokémon outside of their pool when a Pokémon name had a typo.
- Fixed an issue with datapacked species features not being applied properly when relogging.
- Fixed Pokémon marked as silent still playing shiny sounds and effects.
- Fixed an issue with newer versions of Fabric API where underground Pokémon were spawning in The End.
- Fixed spawning not working well when you're at high points surrounded by lower altitude spawning areas, such as flying.
- Fixed swapping held items with wild Pokémon under certain circumstances causing duplicate items
### Developer
- A finished battle now has winners and losers set inside of `PokemonBattle` instead of them always being empty.
@@ -65,6 +145,7 @@
- Updated NPCEntity beam positioning to properly account for the baseScale property.
- Updated NPCEntity pokeball throw positioning to properly account for the baseScale property.
- Fixed `[Pokemon].copyFrom` error causing forms, IVs, and EVs to not be applied properly when using `[Pokemon].loadFromJSON` or `[Pokemon].loadFromNBT`
- Added new item class, `WearableItem`. Instances of this class should have a corresponding 3D model. These models render when the items display context is `HEAD`.
### MoLang & Datapacks
- The following usages for item predicates can now use item conditions like advancements do, you can learn about them in the [Minecraft wiki](https://minecraft.wiki/w/Advancement_definition#minecraft:filled_bucket)
@@ -78,6 +159,8 @@
- Added Molang functions for rendering items `render_item(item_id, locator_name)` and `clear_items()`.
- Fixed location spawn filter components causing crashes
- Added `pokemon` as an available Molang function for the `battleActor` functions.
- Fixed `heldItem` property inside spawn files not working and causing crashes
- Fixed `spawn_bedrock_particles` MoLang causing crashes when used in a server environment
## [1.6.1 (January 26th, 2025)](#1-6-1)
@@ -15,10 +15,12 @@ import com.cobblemon.mod.common.api.events.CobblemonEvents;
import com.cobblemon.mod.common.api.events.item.LeftoversCreatedEvent;
import com.cobblemon.mod.common.api.orientation.OrientationController;
import com.cobblemon.mod.common.api.pokemon.PokemonSpecies;
import com.cobblemon.mod.common.api.riding.Rideable;
import com.cobblemon.mod.common.api.riding.Seat;
import com.cobblemon.mod.common.api.storage.party.PartyStore;
import com.cobblemon.mod.common.api.storage.party.PlayerPartyStore;
import com.cobblemon.mod.common.api.tags.CobblemonItemTags;
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate;
import com.cobblemon.mod.common.client.render.MatrixWrapper;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.cobblemon.mod.common.pokedex.scanner.PokedexEntityData;
import com.cobblemon.mod.common.pokedex.scanner.ScannableEntity;
@@ -38,16 +40,18 @@ import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix3f;
import org.joml.Vector3f;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -82,7 +86,8 @@ public abstract class PlayerMixin extends LivingEntity implements ScannableEntit
@Shadow @Final private static Map<Pose, EntityDimensions> POSES;
@Shadow @Final public static EntityDimensions STANDING_DIMENSIONS;
@Unique private OrientationController cobblemon$orientationController = new OrientationController(this);
@Unique
private final OrientationController cobblemon$orientationController = new OrientationController(this);
protected PlayerMixin(EntityType<? extends LivingEntity> p_20966_, Level p_20967_) {
super(p_20966_, p_20967_);
@@ -120,7 +125,7 @@ public abstract class PlayerMixin extends LivingEntity implements ScannableEntit
if (this.getVehicle() instanceof PokemonEntity) {
return STANDING_DIMENSIONS;
}
return (EntityDimensions)POSES.getOrDefault(pose, STANDING_DIMENSIONS);
return POSES.getOrDefault(pose, STANDING_DIMENSIONS);
}
@Inject(
@@ -279,4 +284,41 @@ public abstract class PlayerMixin extends LivingEntity implements ScannableEntit
public OrientationController getOrientationController() {
return cobblemon$orientationController;
}
@Override
public HitResult pick(double hitDistance, float partialTicks, boolean hitFluids) {
Entity vehicle = this.getVehicle();
if (vehicle instanceof PokemonEntity pokemonEntity) {
int seatIndex = pokemonEntity.getPassengers().indexOf(this);
Seat seat = pokemonEntity.getSeats().get(seatIndex);
PokemonClientDelegate delegate = (PokemonClientDelegate) pokemonEntity.getDelegate();
MatrixWrapper locator = delegate.getLocatorStates().get(seat.getLocator());
if (locator == null) {
super.pick(hitDistance, partialTicks, hitFluids);
}
Vec3 locatorOffset = new Vec3(locator.getMatrix().getTranslation(new Vector3f()));
OrientationController controller = this.getOrientationController();
float currEyeHeight = this.getEyeHeight();
Matrix3f orientation = controller.isActive() && controller.getOrientation() != null ? controller.getOrientation() : new Matrix3f();
Vec3 rotatedEyeHeight = new Vec3(orientation.transform(new Vector3f(0f, currEyeHeight - (this.getBbHeight() / 2), 0f)));
Vec3 eyePosition = locatorOffset.add(pokemonEntity.position()).add(rotatedEyeHeight);
Vec3 viewVector = this.getViewVector(partialTicks);
Vec3 viewDistanceVector = eyePosition.add(viewVector.x * hitDistance, viewVector.y * hitDistance, viewVector.z * hitDistance);
return this.level()
.clip(
new ClipContext(
eyePosition, viewDistanceVector, ClipContext.Block.OUTLINE, hitFluids ? net.minecraft.world.level.ClipContext.Fluid.ANY : net.minecraft.world.level.ClipContext.Fluid.NONE, this
)
);
}
return super.pick(hitDistance, partialTicks, hitFluids);
}
}
@@ -8,19 +8,27 @@
package com.cobblemon.mod.common.mixin.client;
import com.cobblemon.mod.common.Cobblemon;
import com.cobblemon.mod.common.OrientationControllable;
import com.cobblemon.mod.common.api.orientation.OrientationController;
import com.cobblemon.mod.common.api.riding.Rideable;
import com.cobblemon.mod.common.api.riding.Seat;
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate;
import com.cobblemon.mod.common.client.render.MatrixWrapper;
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState;
import com.cobblemon.mod.common.client.render.models.blockbench.PosableModel;
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import org.joml.Matrix3f;
import org.joml.Quaternionf;
@@ -32,12 +40,11 @@ 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.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Map;
@Mixin(Camera.class)
public abstract class CameraMixin {
@Shadow @Final private static float DEFAULT_CAMERA_DISTANCE;
@Shadow private Entity entity;
@Shadow @Final private Quaternionf rotation;
@Shadow @Final private Vector3f forwards;
@@ -46,12 +53,13 @@ public abstract class CameraMixin {
@Shadow private float xRot;
@Shadow private float yRot;
@Shadow private Vec3 position;
@Shadow private float eyeHeight;
@Shadow private float eyeHeightOld;
@Shadow protected abstract void setPosition(Vec3 pos);
@Shadow
private BlockGetter level;
@Unique private float returnTimer = 0;
@Unique private float rollAngleStart = 0;
@Unique Minecraft minecraft = Minecraft.getInstance();
@@ -96,7 +104,7 @@ public abstract class CameraMixin {
//If you want to move this to a delagate you need an AW for position
@WrapOperation(method = "setup", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setPosition(DDD)V"))
public void positionCamera(Camera instance, double x, double y, double z, Operation<Void> original){
public void positionCamera(Camera instance, double x, double y, double z, Operation<Void> original, @Local(ordinal = 1, argsOnly = true) boolean thirdPersonReverse) {
Entity entity = instance.getEntity();
Entity vehicle = entity.getVehicle();
@@ -109,14 +117,6 @@ public abstract class CameraMixin {
int seatIndex = pokemon.getPassengers().indexOf(entity);
Seat seat = pokemon.getSeats().get(seatIndex);
PokemonClientDelegate delegate = (PokemonClientDelegate) pokemon.getDelegate();
MatrixWrapper locator = delegate.getLocatorStates().get(seat.getLocator());
if(locator == null){
original.call(instance, x, y, z);
return;
}
Vec3 locatorOffset = new Vec3(locator.getMatrix().getTranslation(new Vector3f()));
Vec3 entityPos = new Vec3(
Mth.lerp(instance.getPartialTickTime(), pokemon.xOld, pokemon.getX()),
@@ -125,13 +125,54 @@ public abstract class CameraMixin {
);
OrientationControllable rollable = (OrientationControllable) entity;
float currEyeHeight = Mth.lerp(instance.getPartialTickTime(), eyeHeightOld, eyeHeight);
var controller = rollable.getOrientationController();
Matrix3f orientation = controller.isActive() && controller.getOrientation() != null ? controller.getOrientation() : new Matrix3f();
Vec3 rotatedEyeHeight = new Vec3(orientation.transform(new Vector3f(0f, currEyeHeight, 0f)));
OrientationController controller = rollable.getOrientationController();
var position = locatorOffset.add(entityPos).add(rotatedEyeHeight);
setPosition(position);
if (!instance.isDetached() || Cobblemon.config.getThirdPartyViewBobbing()) {
PokemonClientDelegate delegate = (PokemonClientDelegate) pokemon.getDelegate();
MatrixWrapper locator = delegate.getLocatorStates().get(seat.getLocator());
if (locator == null) {
original.call(instance, x, y, z);
return;
}
Vec3 locatorOffset = new Vec3(locator.getMatrix().getTranslation(new Vector3f()));
float currEyeHeight = Mth.lerp(instance.getPartialTickTime(), eyeHeightOld, eyeHeight);
Matrix3f orientation = controller.isActive() && controller.getOrientation() != null ? controller.getOrientation() : new Matrix3f();
Vec3 rotatedEyeHeight = new Vec3(orientation.transform(new Vector3f(0f, currEyeHeight - (entity.getBbHeight() / 2), 0f)));
Vec3 position = locatorOffset.add(entityPos).add(rotatedEyeHeight);
setPosition(position);
} else {
Vector3f pos = entityPos.add(new Vec3(0, pokemon.getBbHeight() / 2, 0)).toVector3f();
PosableModel model = VaryingModelRepository.INSTANCE.getPoser(pokemon.getPokemon().getSpecies().getResourceIdentifier(), new FloatingState());
Map<String, Vec3> cameraOffsets = model.getSeatToCameraOffset();
Vec3 cameraOffset;
if (thirdPersonReverse && cameraOffsets.containsKey(seat.getLocator() + "_reverse")) {
cameraOffset = cameraOffsets.get(seat.getLocator() + "_reverse");
} else if (cameraOffsets.containsKey(seat.getLocator())) {
cameraOffset = cameraOffsets.get(seat.getLocator());
} else {
cameraOffset = new Vec3(0f, 2f, 4f);
}
Vector3f offset = cameraOffset.toVector3f();
if (thirdPersonReverse) offset.z *= -1;
float xRot = (float) (-1 * Math.toRadians(instance.getXRot()));
Matrix3f orientation = controller.isActive() && controller.getOrientation() != null ? controller.getOrientation() : new Matrix3f().rotateY((float) Math.toRadians(180f - instance.getYRot())).rotateX(xRot);
Vector3f rotatedOffset = orientation.transform(offset);
float offsetDistance = rotatedOffset.length();
Vector3f offsetDirection = rotatedOffset.mul(1 / offsetDistance);
float maxZoom = cobblemon$getMaxZoom(offsetDistance, offsetDirection, pos);
setPosition(new Vec3(offsetDirection.mul(maxZoom).add(pos)));
}
} else {
original.call(instance, x, y, z);
}
@@ -152,4 +193,36 @@ public abstract class CameraMixin {
this.up.set(controller.getUpVector());
this.left.set(controller.getLeftVector());
}
@WrapOperation(method = "setup", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;move(FFF)V", ordinal = 0))
public void stopMoveIfRolling(Camera instance, float zoom, float dy, float dx, Operation<Void> original) {
Entity entity = instance.getEntity();
Entity vehicle = entity.getVehicle();
if (!(vehicle instanceof PokemonEntity) || Cobblemon.config.getThirdPartyViewBobbing()) {
original.call(instance, zoom, dy, dx);
}
}
//Modified vanilla code
@Unique
private float cobblemon$getMaxZoom(float maxZoom, Vector3f directionVector, Vector3f positionVector) {
Vec3 pos = new Vec3(positionVector);
for (int i = 0; i < 8; i++) {
float g = (float) ((i & 1) * 2 - 1);
float h = (float) ((i >> 1 & 1) * 2 - 1);
float j = (float) ((i >> 2 & 1) * 2 - 1);
Vec3 vec3 = pos.add(g * 0.1F, h * 0.1F, j * 0.1F);
Vec3 vec32 = vec3.add(new Vec3(directionVector).scale(maxZoom));
HitResult hitResult = this.level.clip(new ClipContext(vec3, vec32, ClipContext.Block.VISUAL, ClipContext.Fluid.NONE, this.entity));
if (hitResult.getType() != HitResult.Type.MISS) {
float k = (float) hitResult.getLocation().distanceToSqr(pos);
if (k < Mth.square(maxZoom)) {
maxZoom = Mth.sqrt(k);
}
}
}
return maxZoom;
}
}
@@ -12,6 +12,7 @@ import com.cobblemon.mod.common.Cobblemon;
import com.cobblemon.mod.common.ModAPI;
import com.cobblemon.mod.common.item.PokeBallItem;
import com.cobblemon.mod.common.item.PokedexItem;
import com.cobblemon.mod.common.item.WearableItem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.ItemModelShaper;
@@ -54,17 +55,18 @@ public abstract class ItemRendererMixin {
)
private void cobblemon$overrideItemModel(ItemStack stack, ItemDisplayContext renderMode, boolean leftHanded, PoseStack matrices, MultiBufferSource multiBufferSource, int light, int overlay, BakedModel model, CallbackInfo ci) {
boolean shouldBe2d = renderMode == ItemDisplayContext.GUI || renderMode == ItemDisplayContext.FIXED;
ResourceLocation resourceLocation = null;
if (shouldBe2d) {
ResourceLocation resourceLocation = null;
if (stack.getItem() instanceof PokeBallItem pokeBallItem) resourceLocation = pokeBallItem.getPokeBall().getModel2d();
else if (stack.getItem() instanceof PokedexItem pokedexItem) resourceLocation = pokedexItem.getType().getItemSpritePath();
}
if (renderMode != ItemDisplayContext.HEAD && stack.getItem() instanceof WearableItem wearableItem) resourceLocation = wearableItem.getModel2d();
if (resourceLocation != null) {
BakedModel replacementModel = this.itemModelShaper.getModelManager().getModel(new ModelResourceLocation(resourceLocation, "inventory"));
if (!cobblemon$isSameModel(model, replacementModel)) {
ci.cancel();
render(stack, renderMode, leftHanded, matrices, multiBufferSource, light, overlay, replacementModel);
}
if (resourceLocation != null) {
BakedModel replacementModel = this.itemModelShaper.getModelManager().getModel(new ModelResourceLocation(resourceLocation, "inventory"));
if (!cobblemon$isSameModel(model, replacementModel)) {
ci.cancel();
render(stack, renderMode, leftHanded, matrices, multiBufferSource, light, overlay, replacementModel);
}
}
}
@@ -78,6 +80,7 @@ public abstract class ItemRendererMixin {
boolean canOpenScreen = entity != null && ((entity.getOffhandItem() == stack && !(entity.getMainHandItem().getItem() instanceof PokedexItem)) || entity.getMainHandItem() == stack);
resourceLocation = pokedexItem.getType().getItemModelPath(isScanModel ? "scanning" : (canOpenScreen ? null : "off"));
}
else if (stack.getItem() instanceof WearableItem wearableItem) resourceLocation = wearableItem.getModel3d();
if (resourceLocation != null) {
BakedModel model = this.itemModelShaper.getModelManager().getModel(new ModelResourceLocation(resourceLocation, MODEL_PATH));
@@ -563,6 +563,8 @@ object Cobblemon {
this.implementation.registerCommandArgument(cobblemonResource("npc_class"), NPCClassArgumentType::class, SingletonArgumentInfo.contextFree(NPCClassArgumentType::npcClass))
this.implementation.registerCommandArgument(cobblemonResource("wallpaper"), UnlockablePCBoxWallpaperArgumentType::class, SingletonArgumentInfo.contextFree(UnlockablePCBoxWallpaperArgumentType::wallpaper))
this.implementation.registerCommandArgument(cobblemonResource("mark"), MarkArgumentType::class, SingletonArgumentInfo.contextFree(MarkArgumentType::mark))
this.implementation.registerCommandArgument(cobblemonResource("transform_type"), TransformTypeArgumentType::class, SingletonArgumentInfo.contextFree(TransformTypeArgumentType::transformType))
this.implementation.registerCommandArgument(cobblemonResource("model_part"), ModelPartArgumentType::class, SingletonArgumentInfo.contextFree(ModelPartArgumentType::modelPart))
}
}
@@ -23,7 +23,7 @@ object CobblemonCommands {
ChangeEyeHeight.register(dispatcher)
ChangeScaleAndSize.register(dispatcher)
ChangeWalkSpeed.register(dispatcher)
ChangeJointScaleCommand.register(dispatcher)
TransformModelPartCommand.register(dispatcher)
TestCommand.register(dispatcher)
ReloadShowdownCommand.register(dispatcher)
ClickTextCommand.register(dispatcher)
@@ -281,7 +281,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
// Evolution items
@JvmField val LINK_CABLE = create("link_cable", LinkCableItem())
@JvmField val DRAGON_SCALE = noSettingsItem("dragon_scale")
@JvmField val KINGS_ROCK = noSettingsItem("kings_rock")
@JvmField val METAL_COAT = noSettingsItem("metal_coat")
@JvmField val UPGRADE = noSettingsItem("upgrade")
@JvmField val DUBIOUS_DISC = noSettingsItem("dubious_disc")
@@ -660,6 +659,19 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val WATER_STONE = noSettingsItem("water_stone")
val wearables = mutableListOf<WearableItem>()
//Wearable items (these items should have a corresponding 3D model)
@JvmField val BLACK_GLASSES = wearableItem("black_glasses")
@JvmField val CHOICE_BAND = wearableItem("choice_band")
@JvmField val CHOICE_SPECS = wearableItem("choice_specs")
@JvmField val EXP_SHARE = wearableItem("exp_share")
@JvmField val FOCUS_BAND = wearableItem("focus_band")
@JvmField val KINGS_ROCK = wearableItem("kings_rock")
@JvmField val MUSCLE_BAND = wearableItem("muscle_band")
@JvmField val ROCKY_HELMET = wearableItem("rocky_helmet")
@JvmField val SAFETY_GOGGLES = wearableItem("safety_goggles")
@JvmField val WISE_GLASSES = wearableItem("wise_glasses")
// Held Items
@JvmField
val ABILITY_SHIELD = heldItem("ability_shield")
@@ -676,8 +688,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val BLACK_BELT = heldItem("black_belt")
@JvmField
val BLACK_GLASSES = heldItem("black_glasses")
@JvmField
val BLACK_SLUDGE = heldItem("black_sludge")
@JvmField
val BLUNDER_POLICY = heldItem("blunder_policy")
@@ -686,12 +696,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val CHARCOAL = heldItem("charcoal_stick", remappedName = "charcoal")
@JvmField
val CHOICE_BAND = heldItem("choice_band")
@JvmField
val CHOICE_SCARF = heldItem("choice_scarf")
@JvmField
val CHOICE_SPECS = heldItem("choice_specs")
@JvmField
val CLEANSE_TAG = heldItem("cleanse_tag")
// @JvmField
// val CLEAR_AMULET = heldItem("clear_amulet")
@@ -712,8 +718,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val EVIOLITE = heldItem("eviolite")
@JvmField
val EXP_SHARE = heldItem("exp_share")
@JvmField
val EXPERT_BELT = heldItem("expert_belt")
@JvmField
val FAIRY_FEATHER = heldItem("fairy_feather")
@@ -722,8 +726,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val FLOAT_STONE = heldItem("float_stone")
@JvmField
val FOCUS_BAND = heldItem("focus_band")
@JvmField
val FOCUS_SASH = heldItem("focus_sash")
@JvmField
val GRASSY_SEED = heldItem("grassy_seed")
@@ -758,8 +760,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val MIRACLE_SEED = heldItem("miracle_seed")
@JvmField
val MUSCLE_BAND = heldItem("muscle_band")
@JvmField
val MYSTIC_WATER = heldItem("mystic_water")
@JvmField
val NEVER_MELT_ICE = heldItem("never_melt_ice")
@@ -790,12 +790,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val RING_TARGET = heldItem("ring_target")
@JvmField
val ROCKY_HELMET = heldItem("rocky_helmet")
@JvmField
val ROOM_SERVICE = heldItem("room_service")
@JvmField
val SAFETY_GOGGLES = heldItem("safety_goggles")
@JvmField
val SCOPE_LENS = heldItem("scope_lens")
@JvmField
val SHARP_BEAK = heldItem("sharp_beak")
@@ -832,8 +828,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField
val WIDE_LENS = heldItem("wide_lens")
@JvmField
val WISE_GLASSES = heldItem("wise_glasses")
@JvmField
val ZOOM_LENS = heldItem("zoom_lens")
@JvmField
val MENTAL_HERB = compostableHeldItem("mental_herb", null, 1F)
@@ -1263,6 +1257,16 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
return item
}
private fun wearableItem(name: String, heldItemRemappedName: String? = null): CobblemonItem = create(
name,
WearableItem(name).also {
wearables.add(it)
if (heldItemRemappedName != null) {
CobblemonHeldItemManager.registerRemap(it, heldItemRemappedName)
}
}
)
private fun heldItem(name: String, remappedName: String? = null): CobblemonItem = create(
name,
CobblemonItem(Item.Properties()).also {
@@ -21,4 +21,5 @@ interface PokemonSideDelegate : EntitySideDelegate<PokemonEntity> {
fun updatePostDeath() {}
fun handleStatus(status: Byte) {}
fun spawnShinyParticle(player: Player) {}
fun positionRider(passenger: Entity, positionUpdater: MoveFunction)
}
@@ -42,8 +42,6 @@ import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.battles.actor.PlayerBattleActor
import com.cobblemon.mod.common.battles.actor.PokemonBattleActor
import com.cobblemon.mod.common.client.particle.BedrockParticleOptionsRepository
import com.cobblemon.mod.common.client.particle.ParticleStorm
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.WaveFunctions
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.entity.npc.NPCBattleActor
@@ -63,7 +61,6 @@ import com.cobblemon.mod.common.pokemon.evolution.variants.LevelUpEvolution
import com.cobblemon.mod.common.pokemon.evolution.variants.TradeEvolution
import com.cobblemon.mod.common.util.*
import com.mojang.datafixers.util.Either
import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.commands.arguments.EntityAnchorArgument
import net.minecraft.core.BlockPos
import net.minecraft.core.Holder
@@ -289,16 +286,11 @@ object MoLangFunctions {
} as? ServerPlayer
val pos = Vec3(x, y, z)
if (world !is ClientLevel) {
val packet = SpawnSnowstormParticlePacket(particle, pos)
if (player != null) {
packet.sendToPlayer(player)
} else {
packet.sendToPlayersAround(x, y, z, 64.0, world.dimension())
}
val packet = SpawnSnowstormParticlePacket(particle, pos)
if (player != null) {
packet.sendToPlayer(player)
} else {
val effect = BedrockParticleOptionsRepository.getEffect(particle) ?: return@put DoubleValue.ZERO
ParticleStorm.createAtPosition(world, effect, pos).spawn()
packet.sendToPlayersAround(x, y, z, 64.0, world.dimension())
}
}
map.put("get_entities_around") { params ->
@@ -20,7 +20,7 @@ object CobblemonPermissions {
@JvmStatic
val CHANGE_WALK_SPEED = this.create("${COMMAND_PREFIX}changewalkspeed", PermissionLevel.ALL_COMMANDS)
@JvmStatic
val CHANGE_JOINT_SCALE = this.create("${COMMAND_PREFIX}changejointscale", PermissionLevel.ALL_COMMANDS)
val TRANSFORM_MODEL_PART = this.create("${COMMAND_PREFIX}transformmodelpart", PermissionLevel.ALL_COMMANDS)
@JvmStatic
val CHECKSPAWNS = this.create("${COMMAND_PREFIX}checkspawns", PermissionLevel.CHEAT_COMMANDS_AND_COMMAND_BLOCKS)
@JvmStatic
@@ -35,7 +35,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
override val key: ResourceLocation = KEY
val poseProvider = PoseProvider<BirdAirSettings, BirdAirState>(PoseType.HOVER)
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVel.get().z > 0.1 })
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVel.get().z > 0.2 })
override fun isActive(settings: BirdAirSettings, state: BirdAirState, vehicle: PokemonEntity): Boolean {
return true
@@ -96,7 +96,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
upForce -= 0.3
}
val altitudeLimit = vehicle.runtime.resolveDouble(settings.altitudeExpr)
val altitudeLimit = vehicle.runtime.resolveDouble(settings.jumpExpr)
//Only limit altitude if altitude is not infinite
if (!vehicle.runtime.resolveBoolean(settings.infiniteAltitude)) {
@@ -113,9 +113,9 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
*/
fun calculateRideSpaceVel(settings: BirdAirSettings, state: BirdAirState, vehicle: PokemonEntity, driver: Player) {
//retrieve stats
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val glideTopSpeed = vehicle.runtime.resolveDouble(settings.glideTopSpeedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val glideTopSpeed = vehicle.runtime.resolveDouble(settings.glidespeedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelerationExpr)
val staminaStat = vehicle.runtime.resolveDouble(settings.staminaExpr)
var glideSpeedChange = 0.0
@@ -237,11 +237,9 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
}
//air resistance
newVelocity = Vec3(
newVelocity.x,
newVelocity.y,
lerp( newVelocity.z,0.0, topSpeed / ( 20.0 * 30.0))
)
if( abs(newVelocity.z) > 0) {
newVelocity = newVelocity.subtract(0.0, 0.0, min(0.003 * newVelocity.z.sign, newVelocity.z))
}
state.rideVel.set(newVelocity)
}
@@ -257,8 +255,8 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
//TODO: Tie into handling
val handling = vehicle.runtime.resolveDouble(settings.handlingExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val rotationChangeRate = 10.0
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val rotationChangeRate = 10.0
var yawForce = rotationChangeRate * sin(Math.toRadians(controller.roll.toDouble()))
//for a bit of correction on the rolls limit it to a quarter the amount
@@ -287,14 +285,16 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
val controller = (driver as OrientationControllable).orientationController
val handling = vehicle.runtime.resolveDouble(settings.handlingExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
//Smooth out mouse input.
val smoothingSpeed = 4
val smoothingSpeed = 4.0
val invertRoll = if (Cobblemon.config.invertRoll) -1 else 1
val invertPitch = if (Cobblemon.config.invertPitch) -1 else 1
val xInput = mouseXSmoother.getNewDeltaValue(mouseX * 0.1 * invertRoll, deltaTime * smoothingSpeed);
val yInput = mouseYSmoother.getNewDeltaValue(mouseY * 0.1 * invertPitch, deltaTime * smoothingSpeed);
val mouseXc = (mouseX).coerceIn(-60.0, 60.0)
val mouseYc = (mouseY).coerceIn(-60.0, 60.0)
val xInput = mouseXSmoother.getNewDeltaValue(mouseXc * 0.1 * invertRoll, deltaTime * smoothingSpeed);
val yInput = mouseYSmoother.getNewDeltaValue(mouseYc * 0.1 * invertPitch, deltaTime * smoothingSpeed);
//limit rolling based on handling and current speed.
//modulated by speed so that when flapping idle in air you are ont wobbling around to look around
@@ -374,8 +374,8 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
vehicle: PokemonEntity,
driver: Player
): Float {
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val glideTopSpeed = vehicle.runtime.resolveDouble(settings.glideTopSpeedExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val glideTopSpeed = vehicle.runtime.resolveDouble(settings.glidespeedExpr)
//Must I ensure that topspeed is greater than minimum?
val normalizedGlideSpeed = normalizeVal(state.rideVel.get().length(), topSpeed, glideTopSpeed)
@@ -440,52 +440,41 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
class BirdAirSettings : RidingBehaviourSettings {
override val key = BirdAirBehaviour.KEY
//max y level for the ride
var altitudeExpr: Expression = "q.get_ride_stats('JUMP', 'AIR', 200.0, 128.0)".asExpression()
private set
var infiniteAltitude: Expression = "false".asExpression()
private set
var infiniteStamina: Expression = "false".asExpression()
private set
//max y level for the ride
var jumpExpr: Expression = "q.get_ride_stats('JUMP', 'AIR', 200.0, 128.0)".asExpression()
var handlingExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 135.0, 45.0)".asExpression()
private set
var topSpeedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 1.0, 0.35)".asExpression()
private set
var glideTopSpeedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 2.0, 1.0)".asExpression()
private set
// Max accel is a whole 1.0 in 3 seconds. The conversion in the function below is to convert seconds to ticks
var accelExpr: Expression = "q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 3.0)), (1.0 / (20.0 * 8.0)))".asExpression()
private set
//Seconds self propelled flight (glide is not self propelled in this case)
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 1.0, 0.35)".asExpression()
var accelerationExpr: Expression = "q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 3.0)), (1.0 / (20.0 * 8.0)))".asExpression()
var staminaExpr: Expression = "q.get_ride_stats('STAMINA', 'AIR', 120.0, 20.0)".asExpression()
var glidespeedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 2.0, 1.0)".asExpression()
private set
override fun encode(buffer: RegistryFriendlyByteBuf) {
buffer.writeExpression(altitudeExpr)
buffer.writeExpression(infiniteAltitude)
buffer.writeExpression(infiniteStamina)
buffer.writeExpression(glidespeedExpr)
buffer.writeExpression(jumpExpr)
buffer.writeExpression(handlingExpr)
buffer.writeExpression(topSpeedExpr)
buffer.writeExpression(glideTopSpeedExpr)
buffer.writeExpression(accelExpr)
buffer.writeExpression(speedExpr)
buffer.writeExpression(accelerationExpr)
buffer.writeExpression(staminaExpr)
}
override fun decode(buffer: RegistryFriendlyByteBuf) {
altitudeExpr = buffer.readExpression()
infiniteAltitude = buffer.readExpression()
infiniteStamina = buffer.readExpression()
glidespeedExpr = buffer.readExpression()
jumpExpr = buffer.readExpression()
handlingExpr = buffer.readExpression()
topSpeedExpr = buffer.readExpression()
glideTopSpeedExpr = buffer.readExpression()
accelExpr = buffer.readExpression()
speedExpr = buffer.readExpression()
accelerationExpr = buffer.readExpression()
staminaExpr = buffer.readExpression()
}
}
@@ -46,7 +46,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
override fun speed(settings: JetAirSettings, state: JetAirState, vehicle: PokemonEntity, driver: Player): Float {
//retrieve stats
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val staminaStat = vehicle.runtime.resolveDouble(settings.staminaExpr)
//retrieve minSpeed
@@ -137,8 +137,8 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
vehicle: PokemonEntity,
driver: Player
) {
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelerationExpr)
val altitudeLimit = vehicle.runtime.resolveDouble(settings.jumpExpr)
val minSpeed = vehicle.runtime.resolveDouble(settings.minSpeed)
val speed = state.rideVel.get().length()
@@ -281,7 +281,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
vehicle: PokemonEntity,
driver: Player
): Float {
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val minSpeed = vehicle.runtime.resolveDouble(settings.minSpeed)
//Must I ensure that topspeed is greater than minimum?
@@ -345,27 +345,9 @@ class JetAirSettings : RidingBehaviourSettings {
var minSpeed: Expression = "1.2".asExpression()
private set
var handlingExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 140.0, 20.0)".asExpression()
private set
var handlingYawExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 25.0, 8.0)".asExpression()
private set
var topSpeedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 2.5, 1.0)".asExpression()
private set
// Max accel is a whole 1.0 in 1 second. The conversion in the function below is to convert seconds to ticks
var accelExpr: Expression =
"q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 1.0)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
// Between 60 seconds and 10 seconds at the lowest when at full speed.
var staminaExpr: Expression = "q.get_ride_stats('STAMINA', 'AIR', 60.0, 10.0)".asExpression()
private set
var jumpExpr: Expression = "q.get_ride_stats('JUMP', 'AIR', 300.0, 128.0)".asExpression()
private set
// Make configurable by json
var infiniteStamina: Expression = "false".asExpression()
private set
@@ -373,30 +355,41 @@ class JetAirSettings : RidingBehaviourSettings {
var infiniteAltitude: Expression = "false".asExpression()
private set
var jumpExpr: Expression = "q.get_ride_stats('JUMP', 'AIR', 300.0, 128.0)".asExpression()
private set
var handlingExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 140.0, 20.0)".asExpression()
private set
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 2.5, 1.0)".asExpression()
private set
var accelerationExpr: Expression = "q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 1.0)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
var staminaExpr: Expression = "q.get_ride_stats('STAMINA', 'AIR', 60.0, 10.0)".asExpression()
private set
override fun encode(buffer: RegistryFriendlyByteBuf) {
buffer.writeExpression(gravity)
buffer.writeExpression(minSpeed)
buffer.writeExpression(handlingExpr)
buffer.writeExpression(handlingYawExpr)
buffer.writeExpression(topSpeedExpr)
buffer.writeExpression(accelExpr)
buffer.writeExpression(staminaExpr)
buffer.writeExpression(jumpExpr)
buffer.writeExpression(infiniteStamina)
buffer.writeExpression(infiniteAltitude)
buffer.writeExpression(jumpExpr)
buffer.writeExpression(handlingExpr)
buffer.writeExpression(speedExpr)
buffer.writeExpression(accelerationExpr)
buffer.writeExpression(staminaExpr)
}
override fun decode(buffer: RegistryFriendlyByteBuf) {
gravity = buffer.readExpression()
minSpeed = buffer.readExpression()
handlingExpr = buffer.readExpression()
handlingYawExpr = buffer.readExpression()
topSpeedExpr = buffer.readExpression()
accelExpr = buffer.readExpression()
staminaExpr = buffer.readExpression()
jumpExpr = buffer.readExpression()
infiniteStamina = buffer.readExpression()
infiniteAltitude = buffer.readExpression()
jumpExpr = buffer.readExpression()
handlingExpr = buffer.readExpression()
speedExpr = buffer.readExpression()
accelerationExpr = buffer.readExpression()
staminaExpr = buffer.readExpression()
}
}
@@ -8,9 +8,13 @@
package com.cobblemon.mod.common.battles
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
import com.cobblemon.mod.common.api.battles.model.actor.EntityBackedBattleActor
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.level.ClipContext
import net.minecraft.world.phys.HitResult
import net.minecraft.world.phys.Vec3
class ActiveBattlePokemon(val actor: BattleActor, var battlePokemon: BattlePokemon? = null): Targetable {
val battle = actor.battle
@@ -28,4 +32,115 @@ class ActiveBattlePokemon(val actor: BattleActor, var battlePokemon: BattlePokem
override fun hasPokemon() = battlePokemon != null
fun isGone() = battlePokemon?.gone ?: true
fun isAlive() = (battlePokemon?.health ?: 0) > 0
fun getSendOutPosition(): Vec3? {
val pnx = getPNX()
val actorEntityPosList = actor.getSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val actorEntityPos = if (actorEntityPosList.size == 1)
actorEntityPosList[0]
else if (actorEntityPosList.size > 1)
actorEntityPosList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / actorEntityPosList.size)) }
else
null
val opposingActorEntityList = actor.getSide().getOppositeSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val opposingEntityPos = if (opposingActorEntityList.size == 1)
opposingActorEntityList[0]
else if (opposingActorEntityList.size > 1) {
// If multiple actors per side, avg their position
opposingActorEntityList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / opposingActorEntityList.size)) }
}
else null
var actorOffset = actorEntityPos?.let { opposingEntityPos?.subtract(it) }
var result = actorEntityPos
if (actorOffset != null) {
var widthSum = 4.0 // Leave a constant to allow double/triples alignment to be consistent
var pokemonWidth = battlePokemon?.originalPokemon?.form?.hitbox?.width ?: 0F
val pokemonBaseScale = battlePokemon?.originalPokemon?.form?.baseScale ?: 0F
pokemonWidth *= pokemonBaseScale
if (battle.format.battleType.pokemonPerSide == 1) {
battlePokemon?.let { battlePokemon ->
// sum of the hitbox widths of both pokemon
val opposingActivePokemon = (getOppositeOpponent() as ActiveBattlePokemon)
val opposingPokemonWidth = opposingActivePokemon.battlePokemon?.let {
it.originalPokemon.form.hitbox.width * it.originalPokemon.form.baseScale
} ?: pokemonWidth
widthSum = (pokemonWidth + opposingPokemonWidth) / 2.0 // Only care about the front half of each hitbox
}
}
val minDistance = 4.0 + widthSum
val actorDistance = actorOffset.length()
if (actorDistance < minDistance) {
val temp = actorOffset.scale(minDistance / actorDistance) ?: actorOffset
result = actorEntityPos?.subtract(temp.subtract(actorOffset))
actorOffset = temp
}
// orthogonalVector is the sideways displacement from the battle actors
var orthogonalVector = Vec3(actorOffset.x, 0.0, actorOffset.z).normalize()
orthogonalVector = orthogonalVector.cross(Vec3(0.0, 1.0, 0.0))
if (battle.format.battleType.pokemonPerSide == 1) { // Singles
result = result?.add(actorOffset.scale(if (battle.isPvW) 0.4 else 0.3))
battlePokemon?.let { battlePokemon ->
val hitbox = battlePokemon.originalPokemon.form.hitbox
val scale = battlePokemon.originalPokemon.form.baseScale
orthogonalVector = orthogonalVector.scale(-0.3 - hitbox.width * scale )
}
} else if (battle.format.battleType.pokemonPerSide == 2) { // Doubles/Multi
if (battle.actors.first() != battle.actors.last()) {
val offsetB = if (pnx[2] == 'a') orthogonalVector.scale(-1.0) else orthogonalVector
result = result?.add(actorOffset.scale(0.33))
orthogonalVector = offsetB.scale(2.5)
}
} else if (battle.format.battleType.pokemonPerSide == 3) { // Triples
if (battle.actors.first() != battle.actors.last()) {
result = when (pnx[2]) {
'a' -> {
orthogonalVector = orthogonalVector.scale(-3.5)
result?.add(actorOffset.scale(0.15))
}
'b' -> {
orthogonalVector = Vec3.ZERO
result?.add(actorOffset.scale(0.3))
}
'c' -> {
orthogonalVector = orthogonalVector.scale(3.5)
result?.add(actorOffset.scale(0.15))
}
else -> result
}
}
}
val fallbackPos = result
result = result?.add(orthogonalVector)
if (actor is EntityBackedBattleActor<*> && result != null) {
val entity = actor.entity ?: return result
// Do a single raycast to estimate if we're trying to throw a pokemon into a wall.
// If the collision is too close to the actor, try to find a more reasonable position.
// The motivation here is to give setPositionSafely something more reasonable to work with.
val collisionResult = entity.level().clip(
ClipContext(
actorEntityPos!!.add(Vec3(0.0,entity.eyeHeight.toDouble(),0.0)), // start position
Vec3(result.x, entity.y + entity.eyeHeight.toDouble(), result.z), // end position
ClipContext.Block.OUTLINE,
ClipContext.Fluid.NONE,
entity
)
)
if (collisionResult.type == HitResult.Type.BLOCK) {
// Collided with terrain
result = if (collisionResult.location.distanceToSqr(actorEntityPos) < pokemonWidth) {
// Fallback to in between the two actors, dropping the orthogonal vector
// Ideally this keeps a pokemon in between the actors in a narrow tunnel
fallbackPos
} else {
Vec3(collisionResult.location.x, result.y, collisionResult.location.z)
}
}
}
}
return result
}
}
@@ -22,6 +22,8 @@ import com.cobblemon.mod.common.battles.interpreter.instructions.*
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
import com.cobblemon.mod.common.util.battleLang
import com.cobblemon.mod.common.util.runOnServer
import net.minecraft.world.level.ClipContext
import net.minecraft.world.phys.HitResult
import net.minecraft.world.phys.Vec3
import java.util.UUID
import kotlin.collections.Iterator
@@ -34,6 +36,7 @@ import kotlin.collections.mutableMapOf
import kotlin.collections.set
import kotlin.collections.toMutableList
import kotlin.collections.toTypedArray
import kotlin.time.measureTime
@Suppress("KotlinPlaceholderCountMatchesArgumentCount", "UNUSED_PARAMETER")
object ShowdownInterpreter {
@@ -138,85 +141,6 @@ object ShowdownInterpreter {
// Note '-cureteam' is a legacy thing that is only used in generation 2 and 4 mods for heal bell and aromatherapy respectively as such we can just ignore that
}
/**
*
* Figures out the sendout position for a pokemon in a battle
*
*
*/
fun getSendoutPosition(battle: PokemonBattle, activePokemon: ActiveBattlePokemon, battleActor: BattleActor): Vec3? {
val pnx = activePokemon.getPNX()
val actorEntityPosList = battleActor.getSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val actorEntityPos = if (actorEntityPosList.size == 1)
actorEntityPosList[0]
else if (actorEntityPosList.size > 1)
actorEntityPosList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / actorEntityPosList.size)) }
else
null
val opposingActorEntityList = battleActor.getSide().getOppositeSide().actors.mapNotNull { if (it is EntityBackedBattleActor<*>) it.initialPos else null }
val opposingEntityPos = if (opposingActorEntityList.size == 1)
opposingActorEntityList[0]
else if (opposingActorEntityList.size > 1) {
// If multiple actors per side, avg their position
opposingActorEntityList.fold(Vec3(0.0, 0.0, 0.0)) { acc, vec3 -> acc.add(vec3.scale(1.0 / opposingActorEntityList.size)) }
}
else null
var actorOffset = actorEntityPos?.let { opposingEntityPos?.subtract(it) }
var result = actorEntityPos
if (actorOffset != null) {
var widthSum = 4.0 // Leave a constant to allow double/triples alignment to be consistent
if (battle.format.battleType.pokemonPerSide == 1) {
activePokemon.battlePokemon?.let { battlePokemon ->
// sum of the hitbox widths of both pokemon
val opposingActivePokemon = (activePokemon.getOppositeOpponent() as ActiveBattlePokemon)
val pokemonWidth = battlePokemon.originalPokemon.form.hitbox.width * battlePokemon.originalPokemon.form.baseScale
val opposingPokemonWidth = opposingActivePokemon.battlePokemon?.let {
it.originalPokemon.form.hitbox.width * it.originalPokemon.form.baseScale
} ?: pokemonWidth
widthSum = (pokemonWidth + opposingPokemonWidth) / 2.0 // Only care about the front half of each hitbox
}
}
val minDistance = 4.0 + widthSum
val actorDistance = actorOffset.length()
if (actorDistance < minDistance) {
val temp = actorOffset.scale(minDistance / actorDistance) ?: actorOffset
result = actorEntityPos?.subtract(temp.subtract(actorOffset))
actorOffset = temp
}
var vector = Vec3(actorOffset.x, 0.0, actorOffset.z).normalize()
vector = vector.cross(Vec3(0.0, 1.0, 0.0))
if (battle.format.battleType.pokemonPerSide == 1) { // Singles
result = result?.add(actorOffset.scale(if (battle.isPvW) 0.4 else 0.3))
activePokemon.battlePokemon?.let { battlePokemon ->
val hitbox = battlePokemon.originalPokemon.form.hitbox
val scale = battlePokemon.originalPokemon.form.baseScale
activePokemon.getAdjacentOpponents()
result = result?.add(vector.scale(-0.3 - hitbox.width * scale ))
}
} else if (battle.format.battleType.pokemonPerSide == 2) { // Doubles/Multi
if (battle.actors.first() !== battle.actors.last()) {
val offsetB = if (pnx[2] == 'a') vector.scale(-1.0) else vector
result = result?.add(actorOffset.scale(0.33))?.add(offsetB.scale(2.5))
}
} else if (battle.format.battleType.pokemonPerSide == 3) { // Triples
if (battle.actors.first() !== battle.actors.last()) {
result = when (pnx[2]) {
'a' -> result?.add(actorOffset.scale(0.15))?.add(vector.scale(-3.5))
'b' -> result?.add(actorOffset.scale(0.3))
'c' -> result?.add(actorOffset.scale(0.15))?.add(vector.scale(3.5))
else -> result
}
}
}
}
return result
}
fun interpretMessage(battleId: UUID, message: String) {
// Check key map and use function if matching
@@ -13,7 +13,6 @@ import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import com.cobblemon.mod.common.battles.ShowdownInterpreter
import com.cobblemon.mod.common.battles.dispatch.InstructionSet
import com.cobblemon.mod.common.battles.dispatch.InterpreterInstruction
import com.cobblemon.mod.common.entity.pokemon.effects.IllusionEffect
import com.cobblemon.mod.common.net.messages.client.battle.BattleSwapPokemonPacket
import com.cobblemon.mod.common.util.battleLang
import com.cobblemon.mod.common.util.setPositionSafely
@@ -42,12 +41,12 @@ class SwapInstruction(val message: BattleMessage, val instructionSet: Instructio
// Swap references of the 2 pokemon
actor.activePokemon.swap((pnxA[2] - 'a'), (pnxB[2] - 'a'))
val posA = ShowdownInterpreter.getSendoutPosition(battle, activePokemonA, battlePokemonA.actor) ?: activePokemonA.position?.second
val posA = activePokemonA.getSendOutPosition() ?: activePokemonA.position?.second
if (posA != null && battlePokemonA.entity != null) {
battlePokemonA.entity?.setPositionSafely(battlePokemonA.entity!!.getAjustedSendoutPosition(posA))
}
val posB = ShowdownInterpreter.getSendoutPosition(battle, activePokemonB, battlePokemonA.actor) ?: activePokemonB.position?.second
val posB = activePokemonB.getSendOutPosition() ?: activePokemonB.position?.second
val battlePokemonB = activePokemonB.battlePokemon
if (posB != null && battlePokemonB?.entity != null) {
activePokemonB.battlePokemon?.entity?.setPositionSafely(battlePokemonB.entity!!.getAjustedSendoutPosition(posB))
@@ -70,7 +70,7 @@ class SwitchInstruction(val instructionSet: InstructionSet, val battleActor: Bat
else if (pokemonEntity == null && entity != null) {
activePokemon.battlePokemon = pokemon
activePokemon.illusion = illusion
val targetPos = ShowdownInterpreter.getSendoutPosition(battle, activePokemon, battleActor)
val targetPos = activePokemon.getSendOutPosition()
if (targetPos != null) {
val battleSendoutCount = activePokemon.getActorShowdownId()[1].digitToInt() - 1 + actor.stillSendingOutCount
actor.stillSendingOutCount++
@@ -180,7 +180,7 @@ class SwitchInstruction(val instructionSet: InstructionSet, val battleActor: Bat
}
} else {
// For Singles, we modify the sendout position based on the pokemon's hitbox size
val pos = (if (battle.format.battleType.pokemonPerSide == 1) ShowdownInterpreter.getSendoutPosition(battle, activePokemon, actor)
val pos = (if (battle.format.battleType.pokemonPerSide == 1) activePokemon.getSendOutPosition()
else activePokemon.position?.second) ?: entity.position()
// Send out at previous Pokémon's location if it is known, otherwise actor location
val world = entity.level() as ServerLevel
@@ -43,8 +43,10 @@ import net.minecraft.sounds.SoundEvent
import net.minecraft.sounds.SoundSource
import net.minecraft.world.InteractionHand
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.Entity.MoveFunction
import net.minecraft.world.entity.player.Player
import net.minecraft.world.phys.Vec3
import org.joml.Vector3f
class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
companion object {
@@ -451,4 +453,30 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
}
cryAnimation = animation
}
override fun positionRider(passenger: Entity, positionUpdater: MoveFunction) {
val index =
this.getEntity().passengers.indexOf(passenger).takeIf { it >= 0 && it < this.getEntity().seats.size }
?: return
val seat = this.getEntity().seats[index]
val locator = this.locatorStates[seat.locator]
if (locator == null) return
val offset = locator.matrix.getTranslation(Vector3f())
.sub(
Vector3f(
0f,
passenger.eyeHeight - (passenger.bbHeight / 2),
0f
)
) // This is close but not exact
positionUpdater.accept(
passenger,
this.getEntity().x + offset.x,
this.getEntity().y + offset.y,
this.getEntity().z + offset.z
)
}
}
@@ -98,13 +98,13 @@ class CobblemonConfigIntVariable(
override fun getConfigValueAsString(): String = (config.getter.call(parent.parent.clonedConfig) as Int?).toString()
init {
editBox.setFilter { value -> value.toIntOrNull() != null || value.isBlank() }
editBox.setFilter { value -> value.toIntOrNull() != null || value.isBlank() || value == "-" }
editBox.setResponder { value ->
if (value.isBlank()) {
return@setResponder
}
val intValue = value.toInt()
val intValue = value.toIntOrNull() ?: return@setResponder
setConfigValue(intValue, false)
if (intConstraintAnnotation != null) {
@@ -129,7 +129,7 @@ class CobblemonConfigFloatVariable(
override fun getConfigValueAsString(): String = (config.getter.call(parent.parent.clonedConfig) as Float?).toString()
init {
editBox.setFilter { value -> value.toFloatOrNull() != null || value.isBlank() }
editBox.setFilter { value -> value.toFloatOrNull() != null || value.isBlank() || value == "." || value == "-" }
editBox.setResponder { value ->
if (value.toFloatOrNull() != null) {
setConfigValue(value.toFloat(), false)
@@ -145,7 +145,7 @@ class CobblemonConfigDoubleVariable(
override fun getConfigValueAsString(): String = (config.getter.call(parent.parent.clonedConfig) as Double?).toString()
init {
editBox.setFilter { value -> value.toDoubleOrNull() != null || value.isBlank() }
editBox.setFilter { value -> value.toDoubleOrNull() != null || value.isBlank() || value == "." || value == "-" }
editBox.setResponder { value ->
if (value.toDoubleOrNull() != null) {
setConfigValue(value.toDouble(), false)
@@ -125,6 +125,7 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
private lateinit var markingsWidget: MarkingsWidget
private val summaryTabs = mutableListOf<SummaryTab>()
private var showCosmeticItem = false
private lateinit var heldItemVisibilityButton: SummaryButton
private var mainScreenIndex = INFO
var sideScreenIndex = PARTY
private val party = ArrayList(party)
@@ -181,7 +182,7 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
)
//Item Visibility Button
val HeldItemVisibilityButton = SummaryButton(
heldItemVisibilityButton = SummaryButton(
buttonX = x + 3F,
buttonY = y + 104F,
buttonWidth = 32,
@@ -191,7 +192,7 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
activeResource = itemHiddenResource,
clickAction = {
selectedPokemon.heldItemVisible = !selectedPokemon.heldItemVisible
(it as SummaryButton).buttonActive = !selectedPokemon.heldItemVisible
heldItemVisibilityButton.buttonActive = !selectedPokemon.heldItemVisible
modelWidget.heldItem = if (selectedPokemon.heldItemVisible) selectedPokemon.heldItem else null
// Send item visibility update to server
sendToServer(SetItemHiddenPacket(selectedPokemon.uuid, selectedPokemon.heldItemVisible))
@@ -199,8 +200,8 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
renderRequirement = { !selectedPokemon.heldItemNoCopy().isEmpty && !showCosmeticItem },
clickRequirement = { !selectedPokemon.heldItemNoCopy().isEmpty && !showCosmeticItem }
)
addRenderableWidget(HeldItemVisibilityButton)
heldItemVisibilityButton.buttonActive = !selectedPokemon.heldItemVisible
addRenderableWidget(heldItemVisibilityButton)
// Held/Cosmetic Item Button
addRenderableWidget(
@@ -331,6 +332,7 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
if (::modelWidget.isInitialized) {
modelWidget.pokemon = selectedPokemon.asRenderablePokemon()
modelWidget.heldItem = if (selectedPokemon.heldItemVisible) selectedPokemon.heldItem else null
heldItemVisibilityButton.buttonActive = !selectedPokemon.heldItemVisible
}
if (::nicknameEntryWidget.isInitialized) nicknameEntryWidget.setSelectedPokemon(selectedPokemon)
@@ -18,7 +18,6 @@ import com.cobblemon.mod.common.util.math.fromEulerXYZDegrees
import net.minecraft.client.gui.GuiGraphics
import net.minecraft.network.chat.Component
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
import org.joml.Quaternionf
import org.joml.Vector3f
@@ -114,12 +113,13 @@ class ModelWidget(
)
heldItemRenderer.renderOnModel(
state.currentModel!!,
heldItem?: ItemStack.EMPTY,
state.currentModel!!,
state,
matrices,
context.bufferSource(),
Vec3(0.0,-90.0,-90.0)
light = 0xF000F0,
true
)
matrices.popPose()
@@ -36,11 +36,13 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
fun createEntries(marks: List<Mark?>) {
marks.chunked(6).forEachIndexed { index, listChunk ->
addEntry(ScrollSlotRow(listChunk, setSelectedMark, setHoveredMark))
addEntry(ScrollSlotRow(this, listChunk, setSelectedMark, setHoveredMark))
}
}
override fun getScrollbarPosition(): Int = pX + width - 3
override fun getRowLeft(): Int = if (children().size > 5) (left + 1) else left
override fun getScrollbarPosition(): Int = rowLeft + width - 3
override fun renderScrollbar(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) {
// Do not render scrollbar if all rows are already visible
@@ -57,8 +59,8 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
yTop = this.y
}
context.fill(xLeft, this.y, xRight, this.bottom, FastColor.ARGB32.color(255, 47, 47, 47)) // background
context.fill(xLeft,yTop, xRight, yTop + yBottom, FastColor.ARGB32.color(255, 198, 198, 198)) // base
context.fill(xLeft, this.y, xRight, this.bottom, FastColor.ARGB32.color(255, 75, 75, 75)) // background
context.fill(xLeft,yTop, xRight, yTop + yBottom, FastColor.ARGB32.color(255, 141, 141, 141)) // base
}
}
@@ -72,7 +74,7 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
override fun getEntry(index: Int): ScrollSlotRow = children()[index] as ScrollSlotRow
override fun renderListItems(context: GuiGraphics, mouseX: Int, mouseY: Int, delta: Float) {
val rowX = this.rowLeft
val rowX = rowLeft
var anyHovered = false
for (index in 0 until this.itemCount) {
@@ -96,6 +98,7 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
}
class ScrollSlotRow(
val parent: MarksScrollingWidget,
val markList: List<Mark?>,
val setSelectedMark : () -> Unit,
val setHoveredMark: (Mark?) -> Unit
@@ -109,10 +112,11 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
fun renderRow(context: GuiGraphics, y: Int, x: Int, mouseX: Int, mouseY: Int): Boolean {
var anyHovered = false
val horizontalSpacing = if (isScrollVisible()) SLOT_SPACING else (SLOT_SPACING + 1)
markList.forEachIndexed { index, mark ->
val matrices = context.pose()
val startPosX = x + ((SLOT_SPACING + SLOT_SIZE) * index)
val startPosX = x + ((horizontalSpacing + SLOT_SIZE) * index)
val startPosY = y + SLOT_SPACING
val slotHovered = mark != null && getHoveredSlotIndex(mouseX, mouseY) == index
@@ -156,9 +160,12 @@ class MarksScrollingWidget(val pX: Int, val pY: Int, val setSelectedMark: () ->
return true
}
private fun isScrollVisible(): Boolean = parent.children().size > 5
private fun getHoveredSlotIndex(mouseX: Int, mouseY: Int): Int {
val horizontalSpacing = if (isScrollVisible()) SLOT_SPACING else (SLOT_SPACING + 1)
markList.forEachIndexed { index, _ ->
val startPosX = x + ((SLOT_SPACING + SLOT_SIZE) * index)
val startPosX = x + ((horizontalSpacing + SLOT_SIZE) * index)
val startPosY = y + SLOT_SPACING + 1
if (mouseX in startPosX..(startPosX + SLOT_SIZE)
@@ -42,7 +42,7 @@ class MarksWidget(
var hoveredMark: Mark? = null
val marksScrollList = MarksScrollingWidget(
pX = pX + 10,
pX = pX + 9,
pY = pY + 45,
setSelectedMark = {
if (hoveredMark != null) {
@@ -11,9 +11,12 @@ package com.cobblemon.mod.common.client.render.item
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.api.tags.CobblemonItemTags.WEARABLE_FACE_ITEMS
import com.cobblemon.mod.common.api.tags.CobblemonItemTags.WEARABLE_HAT_ITEMS
import com.cobblemon.mod.common.client.render.MatrixWrapper
import com.cobblemon.mod.common.client.entity.NPCClientDelegate
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
import com.cobblemon.mod.common.client.render.models.blockbench.PosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.math.Axis
import net.minecraft.client.Minecraft
@@ -24,7 +27,7 @@ import net.minecraft.client.renderer.texture.OverlayTexture
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemDisplayContext
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
import org.joml.Vector3f
class HeldItemRenderer {
private val itemRenderer: ItemRenderer = Minecraft.getInstance().itemRenderer
@@ -34,133 +37,91 @@ class HeldItemRenderer {
const val ITEM_FACE = "item_face"
const val ITEM_HAT = "item_hat"
const val ITEM = "item"
}
fun render(
entity: LivingEntity?,
model: PosableModel,
item: ItemStack,
locators: Map<String, MatrixWrapper>,
poseStack: PoseStack,
buffer: MultiBufferSource,
light: Int,
seed: Int,
rotation: Vec3
) {
if (item.isEmpty) return
displayContext = ItemDisplayContext.FIXED
poseStack.pushPose()
when {
//item_face locator
(locators.containsKey(ITEM_FACE) && item.`is`(WEARABLE_FACE_ITEMS)) -> {
displayContext = model.getLocatorDisplayContext(ITEM_FACE) ?: ItemDisplayContext.HEAD
poseStack.mulPose(locators[ITEM_FACE]!!.matrix)
poseStack.translate(0f, 0f, .28f)
poseStack.scale(0.7f, 0.7f, 0.7f)
}
//item_hat locator
(locators.containsKey(ITEM_HAT) && item.`is`(WEARABLE_HAT_ITEMS)) -> {
displayContext = model.getLocatorDisplayContext(ITEM_HAT) ?: ItemDisplayContext.HEAD
poseStack.mulPose(locators[ITEM_HAT]!!.matrix)
poseStack.translate(0f, -0.26f, 0f)
poseStack.scale(.68f, .68f, .68f)
}
//item locator
(locators.containsKey(ITEM)) -> {
displayContext = model.getLocatorDisplayContext(ITEM) ?: ItemDisplayContext.FIXED
poseStack.mulPose(locators[ITEM]!!.matrix)
applyContextTransformation(poseStack, rotation)
}
// Don't render any item
else -> {
poseStack.popPose()
return
}
}
itemRenderer.renderStatic(entity, item, displayContext, (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND), poseStack, buffer, null, light, OverlayTexture.NO_OVERLAY, seed)
poseStack.popPose()
}
private fun renderAnimationItem(
model: PosableModel,
state: PosableState,
locators: Map<String, MatrixWrapper>,
poseStack: PoseStack,
buffer: MultiBufferSource,
light: Int,
entity: LivingEntity?,
rotation: Vec3
) {
state.itemRenderingLocations.forEach { (locatorName, item) ->
poseStack.pushPose()
if (locators.containsKey(locatorName)) {
displayContext = model.getLocatorDisplayContext(locatorName)?: ItemDisplayContext.FIXED
poseStack.mulPose(locators[locatorName]!!.matrix)
applyContextTransformation(poseStack, rotation)
}
itemRenderer.renderStatic(entity, item, displayContext, (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND), poseStack, buffer, null, light, OverlayTexture.NO_OVERLAY, 0)
poseStack.popPose()
private fun PoseStack.setOriginAndScale(x:Float,y:Float,z:Float,scale:Float=1f) {
this.translate(x*.0625*scale, y*.0625*scale, z*.0625*scale)
this.scale(scale, scale, scale)
}
}
fun renderOnModel(
model: PosableModel,
item: ItemStack,
model: PosableModel,
state: PosableState,
poseStack: PoseStack,
buffer: MultiBufferSource,
rotation: Vec3 = Vec3(0.0,0.0,0.0),
light: Int = LightTexture.pack(11, 7),
frontLight: Boolean = false,
entity: LivingEntity? = null
) {
val locators: Map<String, MatrixWrapper> = state.locatorStates
if (state.itemRenderingLocations.isNotEmpty()) {
renderAnimationItem(model, state, locators, poseStack, buffer, light, null, rotation)
}
else if (!item.`is`(CobblemonItemTags.HIDDEN_ITEMS)) {
render(null, model, item, locators, poseStack, buffer, light, 0, rotation)
}
if (!item.`is`(CobblemonItemTags.HIDDEN_ITEMS)) renderAtLocator(item, model, state, entity, poseStack, buffer, light, 0, frontLight)
state.animationItems.forEach { (targetLocator, item) -> renderAtLocator(item, model, state, entity, poseStack, buffer, light, 0, frontLight, targetLocator) }
}
fun renderOnEntity(
entity: LivingEntity,
private fun renderAtLocator(
item: ItemStack,
model: PosableModel,
state: PosableState,
entity: LivingEntity?,
poseStack: PoseStack,
buffer: MultiBufferSource,
light: Int,
rotation: Vec3 = Vec3(0.0,0.0,0.0)
seed: Int,
frontLight: Boolean = false,
targetLocator: String =
if (item.`is`(WEARABLE_FACE_ITEMS) && state.locatorStates.containsKey(ITEM_FACE)) ITEM_FACE
else if (item.`is`(WEARABLE_HAT_ITEMS) && state.locatorStates.containsKey(ITEM_HAT)) ITEM_HAT
else ITEM
) {
val locators: Map<String, MatrixWrapper> = state.locatorStates
if (state.itemRenderingLocations.isNotEmpty()) {
renderAnimationItem(model, state, locators, poseStack, buffer, light, entity, rotation)
}
else {
render(entity, model, item, locators, poseStack, buffer, light, 0, rotation)
}
}
if (item.isEmpty) return
private fun applyContextTransformation(poseStack: PoseStack, rotation: Vec3) {
when (displayContext) {
ItemDisplayContext.FIXED -> {
poseStack.mulPose(Axis.XP.rotationDegrees(90.0f))
poseStack.scale(.5f, .5f, .5f )
poseStack.translate(0f, 0.01666f, 0f)
if (state.locatorStates.containsKey(targetLocator)) {
poseStack.pushPose()
RenderSystem.applyModelViewMatrix()
displayContext = model.getLocatorDisplayContext(targetLocator)?:
if ((item.`is`(WEARABLE_FACE_ITEMS) && targetLocator==ITEM_FACE) || (item.`is`(WEARABLE_HAT_ITEMS) && targetLocator== ITEM_HAT)) ItemDisplayContext.HEAD
else ItemDisplayContext.FIXED
poseStack.mulPose(state.locatorStates[targetLocator]!!.matrix)
when (displayContext) {
ItemDisplayContext.FIXED -> {
poseStack.setOriginAndScale(0f,.5f,0f, .5f)
poseStack.mulPose(Axis.XP.rotationDegrees(90.0f))
}
ItemDisplayContext.THIRD_PERSON_RIGHT_HAND, ItemDisplayContext.THIRD_PERSON_LEFT_HAND -> {
//For Minecraft player models
if (state is NPCClientDelegate) {
poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F))
}
//for T-Posing Models
else if (state is PokemonClientDelegate || state is FloatingState) {
poseStack.mulPose(Axis.YP.rotationDegrees(-90.0F))
poseStack.mulPose(Axis.ZP.rotationDegrees(90.0F))
}
poseStack.translate(0.025f * if (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND) 1 else -1 , 0.0f, 0.0f)
}
ItemDisplayContext.HEAD -> {
if (state is NPCClientDelegate) {
if (item.`is`(WEARABLE_FACE_ITEMS)) poseStack.setOriginAndScale(0f,-2f,7.25f, 0.62f)
else if (item.`is`(WEARABLE_HAT_ITEMS)) poseStack.setOriginAndScale(0f,-10.25f,0f, 0.62f)
}
else {
if (item.`is`(WEARABLE_FACE_ITEMS)) poseStack.setOriginAndScale(0f,1f,(7.25f)-.5f, 0.62f)
else if (item.`is`(WEARABLE_HAT_ITEMS)) poseStack.setOriginAndScale(0f,(-7.25f)+.5f,0f, 0.62f)
}
}
else -> {}
}
ItemDisplayContext.THIRD_PERSON_RIGHT_HAND, ItemDisplayContext.THIRD_PERSON_LEFT_HAND -> {
poseStack.mulPose(Axis.XP.rotationDegrees((rotation.x).toFloat()))
poseStack.mulPose(Axis.YP.rotationDegrees((rotation.y).toFloat()))
poseStack.mulPose(Axis.ZP.rotationDegrees((rotation.z).toFloat()))
poseStack.translate(0.025f * if (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND) 1 else -1 , 0.0f, 0.0f)
//Render front lighting for UI Models
if (frontLight) {
RenderSystem.setShaderLights(Vector3f(0F,0F,1F), Vector3f(0F,0F,1F))
}
ItemDisplayContext.HEAD -> {
poseStack.mulPose(Axis.XP.rotationDegrees(90.0f))
poseStack.scale(.6f, .6f, .6f)
poseStack.translate(0f, -0.6f, 0f)
}
else -> {}
itemRenderer.renderStatic(entity, item, displayContext, (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND), poseStack, buffer, null, light, OverlayTexture.NO_OVERLAY, seed)
poseStack.popPose()
}
}
}
@@ -37,7 +37,6 @@ import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
class PokemonOnShoulderRenderer<T : Player>(renderLayerParent: RenderLayerParent<T, PlayerModel<T>>) : RenderLayer<T, PlayerModel<T>>(renderLayerParent) {
@@ -162,12 +161,12 @@ class PokemonOnShoulderRenderer<T : Player>(renderLayerParent: RenderLayerParent
}
heldItemRenderer.renderOnModel(
model,
shoulderData.shownItem,
model,
state,
matrixStack,
buffer,
Vec3(0.0,-90.0,-90.0)
packedLight
)
model.setDefault()
@@ -78,8 +78,15 @@ class JsonPose(model: PosableModel, json: JsonObject) {
it[2].asDouble
)
} ?: Vec3.ZERO
val scale = it.get("scale")?.asJsonArray?.let {
Vec3(
it[0].asDouble,
it[1].asDouble,
it[2].asDouble
)
} ?: Vec3(1.0,1.0,1.0)
val isVisible = it.get("isVisible")?.asString?.asExpressionLike()
return@map part.withPosition(position.x, position.y, position.z).withRotationDegrees(rotation.x, rotation.y, rotation.z).also { if (isVisible != null) it.withVisibility(isVisible) }
return@map part.withPosition(position.x, position.y, position.z).withRotationDegrees(rotation.x, rotation.y, rotation.z).withScale(scale.x, scale.y, scale.z).also { if (isVisible != null) it.withVisibility(isVisible) }
}?.toTypedArray() ?: arrayOf()
val idleAnimations = (json.get("animations")?.asJsonArray ?: JsonArray()).asJsonArray.mapNotNull {
@@ -40,7 +40,6 @@ import com.cobblemon.mod.common.entity.npc.NPCEntity
import com.cobblemon.mod.common.entity.pokeball.EmptyPokeBallEntity
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.asExpressionLike
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.plus
import com.cobblemon.mod.common.util.toRGBA
import com.mojang.blaze3d.systems.RenderSystem
@@ -49,9 +48,7 @@ import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.blaze3d.vertex.VertexConsumer
import com.mojang.blaze3d.vertex.VertexFormat
import com.mojang.math.Axis
import net.minecraft.client.Minecraft
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.player.RemotePlayer
import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.client.renderer.RenderStateShard
import net.minecraft.client.renderer.RenderType
@@ -59,7 +56,6 @@ import net.minecraft.client.renderer.texture.DynamicTexture
import net.minecraft.resources.ResourceLocation
import net.minecraft.util.Mth
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemDisplayContext
import net.minecraft.world.phys.Vec3
import org.joml.Matrix4f
@@ -96,6 +92,9 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
open var profileScale = 1F
/** Used for third person riding camera */
open var seatToCameraOffset = mutableMapOf<String, Vec3>()
/**
* These are open-ended properties that can be used to store miscellaneous properties about the model.
*
@@ -532,7 +531,7 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
/** Puts the model back to its original location and rotations. */
fun setDefault() {
defaultPositions.forEach { it.set() }
transformedParts.forEach { it.set() }
transformedParts.forEach { it.apply() }
}
/**
@@ -46,7 +46,6 @@ import net.minecraft.sounds.SoundSource
import net.minecraft.world.entity.Entity
import net.minecraft.world.item.ItemStack
import net.minecraft.world.phys.Vec3
import org.joml.Matrix4f
import java.util.*
import java.util.concurrent.ConcurrentLinkedQueue
@@ -128,9 +127,8 @@ abstract class PosableState : Schedulable {
/** This gets called 500 million times so use a mutable value for runtime */
private val reusableAnimTime = DoubleValue(0.0)
val itemRenderingLocations = mutableMapOf<String, ItemStack>()
// var itemRenderingLocation = ""
// var animationItem : ItemStack? = null
/** A list of items to be rendered on a PosableModel during an animation */
val animationItems = mutableMapOf<String, ItemStack>()
/** All of the MoLang functions that can be applied to something with this state. */
val functions = QueryStruct(hashMapOf())
@@ -167,13 +165,13 @@ abstract class PosableState : Schedulable {
val renderLocation = if (params.contains(1)) params.getString(1) else "item"
if (!item.isEmpty && locatorStates.containsKey(renderLocation)) {
itemRenderingLocations.put(renderLocation, item)
animationItems.put(renderLocation, item)
} else {
if (itemRenderingLocations.containsKey(renderLocation)) itemRenderingLocations.remove(renderLocation)
if (animationItems.containsKey(renderLocation)) animationItems.remove(renderLocation)
return@addFunction Unit
}
}
.addFunction("clear_items") { itemRenderingLocations.clear() }
.addFunction("clear_items") { animationItems.clear() }
.addFunction("play_animation") { params ->
val animationParameter = params.get<MoValue>(0)
val animation = if (animationParameter is ObjectValue<*>) {
@@ -1,98 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation.Companion.X_AXIS
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class EeveeModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("eevee")
val body = getPart("body")
override val head = getPart("head")
override val hindRightLeg = getPart("leg_back_right")
override val hindLeftLeg = getPart("leg_back_left")
override val foreRightLeg = getPart("leg_front_right")
override val foreLeftLeg= getPart("leg_front_left")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.4, -0.54, 0.0)
override var profileScale = 0.8F
override var profileTranslation = Vec3(0.0, 0.55, 0.0)
lateinit var stand: Pose
lateinit var walk: Pose
lateinit var shoulderLeft: Pose
lateinit var shoulderRight: Pose
override val cryAnimation = CryProvider { bedrockStateful("eevee", "cry") }
val shoulderOffset = 4
override fun registerPoses() {
val blink = quirk { bedrockStateful("eevee", "blink") }
stand = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("eevee", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("eevee", "ground_walk")
)
)
shoulderLeft = registerPose(
poseType = PoseType.SHOULDER_LEFT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("eevee", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(X_AXIS, shoulderOffset)
)
)
shoulderRight = registerPose(
poseType = PoseType.SHOULDER_RIGHT,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("eevee", "ground_idle")
),
transformedParts = arrayOf(
rootPart.createTransformation().addPosition(X_AXIS, -shoulderOffset)
)
)
}
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class FlareonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("flareon")
override val head = getPart("head")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.6, -0.45, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.36, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("flareon", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("flareon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("flareon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("flareon", "faint") else null
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class JolteonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("jolteon")
override val head = getPart("head")
override var portraitScale = 2.3F
override var portraitTranslation = Vec3(-0.55, -0.6, 0.0)
override var profileScale = 1.0F
override var profileTranslation = Vec3(0.0, 0.2, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("jolteon", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("jolteon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("jolteon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("jolteon", "faint") else null
}
@@ -1,129 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class PidgeotModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
override val rootPart = root.registerChildWithAllChildren("pidgeot")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override val head = getPart("neck")
private val wingOpenRight = getPart("wing_open_right")
private val wingOpenLeft = getPart("wing_open_left")
private val wingClosedRight = getPart("wing_closed_right")
private val wingClosedLeft = getPart("wing_closed_left")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.6, 0.15, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.4, 0.0)
// lateinit var sleep: CobblemonPose
lateinit var stand: CobblemonPose
lateinit var walk: CobblemonPose
lateinit var hover: CobblemonPose
lateinit var fly: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("pidgeot", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("pidgeot", "blink")}
val flyQuirk1 = quirk { bedrockStateful("pidgeot", "air_fly_quirk") }
val flyQuirk2 = quirk { bedrockStateful("pidgeot", "air_fly_quirk2") }
// sleep = registerPose(
// poseName = "sleeping",
// transformedParts = arrayOf(
// wingClosedLeft.createTransformation().withVisibility(visibility = true),
// wingClosedRight.createTransformation().withVisibility(visibility = true),
// wingOpenLeft.createTransformation().withVisibility(visibility = false),
// wingOpenRight.createTransformation().withVisibility(visibility = false)
// ),
// poseType = PoseType.SLEEP,
// animations = arrayOf(bedrock("pidgeot", "sleep"))
// )
stand = registerPose(
poseName = "stand",
transformedParts = arrayOf(
wingClosedLeft.createTransformation().withVisibility(visibility = true),
wingClosedRight.createTransformation().withVisibility(visibility = true),
wingOpenLeft.createTransformation().withVisibility(visibility = false),
wingOpenRight.createTransformation().withVisibility(visibility = false)
),
poseTypes = PoseType.STATIONARY_POSES - PoseType.HOVER - PoseType.FLOAT + UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("pidgeot", "ground_idle_PLACEHOLDER"),
)
)
walk = registerPose(
poseName = "walk",
transformedParts = arrayOf(
wingClosedLeft.createTransformation().withVisibility(visibility = true),
wingClosedRight.createTransformation().withVisibility(visibility = true),
wingOpenLeft.createTransformation().withVisibility(visibility = false),
wingOpenRight.createTransformation().withVisibility(visibility = false)
),
poseTypes = PoseType.MOVING_POSES - PoseType.FLY - PoseType.SWIM,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("pidgeot", "ground_idle_PLACEHOLDER"),
BipedWalkAnimation(this)
)
)
hover = registerPose(
poseName = "floating",
transformedParts = arrayOf(
wingClosedLeft.createTransformation().withVisibility(visibility = false),
wingClosedRight.createTransformation().withVisibility(visibility = false),
wingOpenLeft.createTransformation().withVisibility(visibility = true),
wingOpenRight.createTransformation().withVisibility(visibility = true)
),
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("pidgeot", "air_idle")
)
)
fly = registerPose(
poseName = "flying",
transformedParts = arrayOf(
wingClosedLeft.createTransformation().withVisibility(visibility = false),
wingClosedRight.createTransformation().withVisibility(visibility = false),
wingOpenLeft.createTransformation().withVisibility(visibility = true),
wingOpenRight.createTransformation().withVisibility(visibility = true)
),
poseTypes = setOf(PoseType.FLY, PoseType.SWIM),
quirks = arrayOf(blink, flyQuirk1, flyQuirk2),
animations = arrayOf(
singleBoneLook(),
bedrock("pidgeot", "air_fly")
)
)
}
}
@@ -1,84 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class VaporeonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("vaporeon")
override val head = getPart("head")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.6, -0.58, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var swimIdle: Pose
lateinit var swimMove: Pose
override val cryAnimation = CryProvider { bedrockStateful("vaporeon", "cry") }
override fun registerPoses() {
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES - PoseType.FLOAT,
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("vaporeon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = setOf(PoseType.WALK),
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("vaporeon", "ground_run")
)
)
swimIdle = registerPose(
poseName = "float",
poseTypes = setOf(PoseType.FLOAT),
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("vaporeon", "water_idle")
)
)
swimMove = registerPose(
poseName = "swim",
poseTypes = setOf(PoseType.SWIM),
transformTicks = 10,
animations = arrayOf(
singleBoneLook(),
bedrock("vaporeon", "water_swim")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("vaporeon", "faint") else null
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class EspeonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("espeon")
override val head = getPart("head")
override var portraitScale = 2.15F
override var portraitTranslation = Vec3(-0.55, -0.43, 0.0)
override var profileScale = 0.81F
override var profileTranslation = Vec3(0.07, 0.59, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("espeon", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("espeon", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("espeon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("espeon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("espeon", "faint") else null
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class UmbreonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("umbreon")
override val head = getPart("head")
override var portraitScale = 2.2F
override var portraitTranslation = Vec3(-0.6, -0.45, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("umbreon", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("umbreon", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("umbreon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("umbreon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("umbreon", "faint") else null
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class NosepassModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
override val rootPart = root.registerChildWithAllChildren("nosepass")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override var portraitScale = 1.5F
override var portraitTranslation = Vec3(-0.1, -0.1, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.65, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("nosepass", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
animations = arrayOf(
bedrock("nosepass", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
animations = arrayOf(
bedrock("nosepass", "ground_walk"),
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isNotPosedIn(sleep)) bedrockStateful("nosepass", "faint") else null
}
@@ -1,66 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen3
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class TropiusModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("tropius")
override val head = getPart("neck")
override val foreLeftLeg= getPart("leg_front_left")
override val foreRightLeg = getPart("leg_front_right")
override val hindLeftLeg = getPart("leg_back_left")
override val hindRightLeg = getPart("leg_back_right")
override var portraitScale = 1.31F
override var portraitTranslation = Vec3(-1.23, 5.01, 0.0)
override var profileScale = 0.28F
override var profileTranslation = Vec3(0.0, 1.26, 0.0)
lateinit var standing: CobblemonPose
lateinit var walk: CobblemonPose
override val cryAnimation = CryProvider { bedrockStateful("tropius", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("tropius", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("tropius", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("tropius", "ground_idle"),
QuadrupedWalkAnimation(this, periodMultiplier = 0.7F, amplitudeMultiplier = 0.7F)
)
)
}
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class GlaceonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("glaceon")
override val head = getPart("head")
override var portraitScale = 2.4F
override var portraitTranslation = Vec3(-0.7, -0.75, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("glaceon", "cry") }
override fun registerPoses() {
// val blink = quirk { bedrockStateful("glaceon", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("glaceon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("glaceon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("glaceon", "faint") else null
}
@@ -1,106 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.animation.WingFlapIdleAnimation
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.util.math.geometry.toRadians
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class HonchkrowModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BiWingedFrame {
override val rootPart = root.registerChildWithAllChildren("honchkrow")
override val head = getPart("head")
override val leftLeg = getPart("leg_left")
override val rightLeg = getPart("leg_right")
override val leftWing = getPart("wing_left")
override val rightWing = getPart("wing_right")
override var portraitScale = 3.4F
override var portraitTranslation = Vec3(-0.35, -1.2, 0.0)
override var profileScale = 1.2F
override var profileTranslation = Vec3(0.0, -0.05, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var sleep: Pose
lateinit var hover: Pose
lateinit var fly: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("honchkrow", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(
bedrock("honchkrow", "sleep")
)
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
quirks = arrayOf(blink), animations = arrayOf(
singleBoneLook(),
bedrock("honchkrow", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
quirks = arrayOf(blink), animations = arrayOf(
singleBoneLook(),
bedrock("honchkrow", "ground_idle"),
BipedWalkAnimation(this, amplitudeMultiplier = 0.8F, periodMultiplier = 0.7F)
// bedrock("honchkrow", "ground_walk")
)
)
hover = registerPose(
poseName = "hover",
poseType = PoseType.HOVER,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("honchkrow", "air_idle"),
WingFlapIdleAnimation(this,
flapFunction = sineFunction(verticalShift = -10F.toRadians(), period = 0.9F, amplitude = 0.6F),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Z_AXIS
)
)
)
fly = registerPose(
poseName = "fly",
poseType = PoseType.FLY,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("honchkrow", "air_fly"),
WingFlapIdleAnimation(this,
flapFunction = sineFunction(verticalShift = -14F.toRadians(), period = 0.9F, amplitude = 0.9F),
timeVariable = { state, _, _ -> state.animationSeconds },
axis = ModelPartTransformation.Z_AXIS
)
)
)
}
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class LeafeonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("leafeon")
override val head = getPart("head")
override var portraitScale = 2.3F
override var portraitTranslation = Vec3(-0.7, -0.7, 0.0)
override var profileScale = 0.9F
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("leafeon", "cry") }
override fun registerPoses() {
// val blink = quirk { bedrockStateful("leafeon", "blink")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("leafeon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
// quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("leafeon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("leafeon", "faint") else null
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class ProbopassModel(root: ModelPart) : PokemonPosableModel(root) {
override val rootPart = root.registerChildWithAllChildren("probopass")
override var portraitScale = 1F
override var portraitTranslation = Vec3(0.0, 0.425, 0.0)
override var profileScale = 0.75F
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
lateinit var sleep: Pose
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("probopass", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("probopass", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("probopass", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
quirks = arrayOf(blink),
animations = arrayOf(
bedrock("probopass", "ground_walk"),
)
)
}
override fun getFaintAnimation(state: PosableState) = if (state.isNotPosedIn(sleep)) bedrockStateful("probopass", "faint") else null
}
@@ -1,65 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class SylveonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("sylveon")
override val head = getPart("head")
override var portraitScale = 2.4F
override var portraitTranslation = Vec3(-0.55, -0.45, 0.0)
override var profileScale = 0.85F
override var profileTranslation = Vec3(0.0, 0.43, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override val cryAnimation = CryProvider { bedrockStateful("sylveon", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("sylveon", "blink") }
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("sylveon", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(),
bedrock("sylveon", "ground_run")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("sylveon", "faint") else null
}
@@ -46,7 +46,7 @@ class ModelPartTransformation(val modelPart: ModelPart) {
var visibility: ExpressionLike? = null
/** Applies the transformation to the model part. */
fun apply(state: PosableState, intensity: Float) {
fun apply(state: PosableState? = null, intensity: Float = 1f) {
modelPart.x += position[0] * intensity
modelPart.y += position[1] * intensity
modelPart.z += position[2] * intensity
@@ -56,7 +56,7 @@ class ModelPartTransformation(val modelPart: ModelPart) {
modelPart.xScale *= ((1 - scale[0]).absoluteValue * intensity) * (scale[0] - 1).sign + 1
modelPart.yScale *= ((1 - scale[1]).absoluteValue * intensity) * (scale[1] - 1).sign + 1
modelPart.zScale *= ((1 - scale[2]).absoluteValue * intensity) * (scale[2] - 1).sign + 1
visibility?.let { modelPart.visible = state.runtime.resolveBoolean(it) }
visibility?.let { modelPart.visible = state?.runtime?.resolveBoolean(it)?: defaultRuntime.resolveBoolean(it) }
}
fun set() {
@@ -229,10 +229,8 @@ object VaryingModelRepository {
inbuilt("raticate", ::RaticateModel)
inbuilt("rattata_alolan", ::RattataAlolanModel)
inbuilt("raticate_alolan", ::RaticateAlolanModel)
inbuilt("eevee", ::EeveeModel)
inbuilt("pidgey", ::PidgeyModel)
inbuilt("pidgeotto", ::PidgeottoModel)
inbuilt("pidgeot", ::PidgeotModel)
inbuilt("diglett", ::DiglettModel)
inbuilt("dugtrio", ::DugtrioModel)
inbuilt("zubat", ::ZubatModel)
@@ -274,7 +272,6 @@ object VaryingModelRepository {
inbuilt("farfetchd", ::FarfetchdModel)
inbuilt("farfetchd_galarian", ::FarfetchdGalarianModel)
inbuilt("fearow", ::FearowModel)
inbuilt("flareon", ::FlareonModel)
inbuilt("gengar", ::GengarModel)
inbuilt("geodude", ::GeodudeModel)
inbuilt("golbat", ::GolbatModel)
@@ -286,7 +283,6 @@ object VaryingModelRepository {
inbuilt("hitmonchan", ::HitmonchanModel)
inbuilt("hitmonlee", ::HitmonleeModel)
inbuilt("hypno", ::HypnoModel)
inbuilt("jolteon", ::JolteonModel)
inbuilt("jynx", ::JynxModel)
inbuilt("kabuto", ::KabutoModel)
inbuilt("kabutops", ::KabutopsModel)
@@ -333,7 +329,6 @@ object VaryingModelRepository {
inbuilt("tangela", ::TangelaModel)
inbuilt("tentacool", ::TentacoolModel)
inbuilt("tentacruel", ::TentacruelModel)
inbuilt("vaporeon", ::VaporeonModel)
inbuilt("venomoth", ::VenomothModel)
inbuilt("venonat", ::VenonatModel)
inbuilt("vulpix", ::VulpixModel)
@@ -344,15 +339,10 @@ object VaryingModelRepository {
inbuilt("smoochum", ::SmoochumModel)
inbuilt("hitmontop", ::HitmontopModel)
inbuilt("electivire", ::ElectivireModel)
inbuilt("glaceon", ::GlaceonModel)
inbuilt("leafeon", ::LeafeonModel)
inbuilt("lickilicky", ::LickilickyModel)
inbuilt("mimejr", ::MimejrModel)
inbuilt("scizor", ::ScizorModel)
inbuilt("tangrowth", ::TangrowthModel)
inbuilt("sylveon", ::SylveonModel)
inbuilt("umbreon", ::UmbreonModel)
inbuilt("espeon", ::EspeonModel)
inbuilt("blissey", ::BlisseyModel)
inbuilt("piloswine", ::PiloswineModel)
inbuilt("quagsire", ::QuagsireModel)
@@ -398,7 +388,6 @@ object VaryingModelRepository {
inbuilt("wailmer", ::WailmerModel)
inbuilt("wailord", ::WailordModel)
inbuilt("murkrow", ::MurkrowModel)
inbuilt("honchkrow", ::HonchkrowModel)
inbuilt("nacli", :: NacliModel)
inbuilt("naclstack", :: NaclstackModel)
inbuilt("garganacl", ::GarganaclModel)
@@ -485,8 +474,6 @@ object VaryingModelRepository {
inbuilt("magcargo", ::MagcargoModel)
inbuilt("slugma_shiny", ::SlugmaShinyModel)
inbuilt("magcargo_shiny", ::MagcargoShinyModel)
inbuilt("nosepass", ::NosepassModel)
inbuilt("probopass", ::ProbopassModel)
inbuilt("chinchou", ::ChinchouModel)
inbuilt("clamperl", ::ClamperlModel)
inbuilt("huntail", ::HuntailModel)
@@ -716,7 +703,6 @@ object VaryingModelRepository {
inbuilt("overqwil", ::OverqwilModel)
inbuilt("sneasel_hisuian", ::SneaselHisuianModel)
inbuilt("sneasler", ::SneaslerModel)
inbuilt("tropius", ::TropiusModel)
inbuilt("petilil", ::PetililModel)
inbuilt("lilligant", ::LilligantModel)
inbuilt("petilil_hisui_bias", ::PetililHisuiBiasModel)
@@ -20,7 +20,6 @@ import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.client.renderer.entity.EntityRendererProvider.Context
import net.minecraft.client.renderer.entity.LivingEntityRenderer
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.phys.Vec3
import kotlin.math.min
class NPCRenderer(context: Context) : LivingEntityRenderer<NPCEntity, PosableEntityModel<NPCEntity>>(context, PosableNPCModel(), 0.5f) {
@@ -60,17 +59,17 @@ class NPCRenderer(context: Context) : LivingEntityRenderer<NPCEntity, PosableEnt
model.blue = 1F
model.resetLayerContext()
if (entity.deathTime < 1){
if (entity.deathTime < 1) {
//Render Held Item
heldItemRenderer.renderOnEntity(
entity,
heldItemRenderer.renderOnModel(
entity.mainHandItem,
model,
clientDelegate,
poseMatrix,
buffer,
packedLight,
Vec3(-90.0,0.0,0.0)
false,
entity
)
}
@@ -14,15 +14,12 @@ import com.cobblemon.mod.common.api.riding.Rideable
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
import com.cobblemon.mod.common.client.render.models.blockbench.bedrock.animation.BedrockAnimationRepository
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.cobblemonResource
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.math.Axis
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.player.AbstractClientPlayer
import net.minecraft.client.player.RemotePlayer
import net.minecraft.util.Mth
import net.minecraft.world.phys.Vec3
import org.joml.Matrix3f
import org.joml.Matrix4f
import org.joml.Vector3f
@@ -47,15 +44,8 @@ object MountedPlayerRenderer {
val center = Vector3f(0f, entity.bbHeight/2, 0f)
val locatorOffsetToCenter = locatorOffset.sub(center, Vector3f())
val transformationMatrix = Matrix4f()
//if (player is Rollable && player.shouldRoll()){
//transformationMatrix.rotate(Axis.YP.rotationDegrees(-yBodyRot))
//transformationMatrix.mulLocal(player.orientation)
//}
val rotatedOffset = transformationMatrix.transformPosition(locatorOffsetToCenter, Vector3f()).add(center).sub(Vector3f(0f, player.bbHeight/2, 0f))
matrix.translate(rotatedOffset)
val offset = locatorOffsetToCenter.add(center, Vector3f()).sub(Vector3f(0f, player.bbHeight / 2, 0f))
matrix.translate(offset)
//Undo seat position
val playerPos = Vec3(
@@ -159,15 +159,15 @@ class PokemonRenderer(
// Minecraft.getInstance().bufferBuilders.entityVertexConsumers.draw()
//Render Held Item
heldItemRenderer.renderOnEntity(
entity,
heldItemRenderer.renderOnModel(
entity.shownItem,
model.posableModel,
modelNow,
clientDelegate,
poseMatrix,
buffer,
packedLight,
Vec3(0.0,-90.0,90.0)
false,
entity
)
}
@@ -1,79 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.command
import com.cobblemon.mod.common.api.permission.CobblemonPermissions
import com.cobblemon.mod.common.api.text.red
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.permission
import com.cobblemon.mod.common.util.traceFirstEntityCollision
import com.mojang.brigadier.Command
import com.mojang.brigadier.CommandDispatcher
import com.mojang.brigadier.arguments.FloatArgumentType
import com.mojang.brigadier.arguments.StringArgumentType
import com.mojang.brigadier.context.CommandContext
import net.minecraft.commands.CommandSourceStack
import net.minecraft.commands.Commands
object ChangeJointScaleCommand {
fun register(dispatcher : CommandDispatcher<CommandSourceStack>) {
val command = Commands.literal("changejointscale")
.permission(CobblemonPermissions.CHANGE_JOINT_SCALE)
.then(
Commands.argument("joint", StringArgumentType.string())
.then(
Commands.argument("x", FloatArgumentType.floatArg())
.then(Commands.argument("y", FloatArgumentType.floatArg())
.then(
Commands.argument("z", FloatArgumentType.floatArg())
.executes(::execute)
)
)
)
.executes(::execute))
dispatcher.register(command)
}
private fun execute(context: CommandContext<CommandSourceStack>) : Int {
val jointName = StringArgumentType.getString(context, "joint")
val x = FloatArgumentType.getFloat(context, "x")
val y = FloatArgumentType.getFloat(context, "y")
val z = FloatArgumentType.getFloat(context, "z")
val player = context.source.playerOrException
val targetEntity = player.traceFirstEntityCollision(entityClass = PokemonEntity::class.java)
if (targetEntity == null) {
player.sendSystemMessage("No pokemon".red())
return 0
}
val state = FloatingState()
state.currentAspects = targetEntity.aspects
val model = VaryingModelRepository.getPoser(name = targetEntity.exposedSpecies.resourceIdentifier, state = state)
val part = model.relevantPartsByName[jointName]
?: run {
player.sendSystemMessage("No joint named $jointName".red())
return 0
}
val existing = model.transformedParts.find { it.modelPart == part }
if (existing == null) {
model.transformedParts = model.transformedParts + part.createTransformation().withScale(x, y, z)
} else {
existing.withScale(x, y, z)
}
player.sendSystemMessage("Changed scale of $jointName to $x, $y, $z".text())
return Command.SINGLE_SUCCESS
}
}
@@ -0,0 +1,72 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.command
import com.cobblemon.mod.common.api.permission.CobblemonPermissions
import com.cobblemon.mod.common.api.text.text
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
import com.cobblemon.mod.common.command.argument.ModelPartArgumentType
import com.cobblemon.mod.common.command.argument.TransformTypeArgumentType
import com.cobblemon.mod.common.command.argument.TransformTypeArgumentType.Companion.TransformType
import com.cobblemon.mod.common.util.permission
import com.mojang.brigadier.Command
import com.mojang.brigadier.CommandDispatcher
import com.mojang.brigadier.arguments.FloatArgumentType
import com.mojang.brigadier.context.CommandContext
import net.minecraft.commands.CommandSourceStack
import net.minecraft.commands.Commands
object TransformModelPartCommand {
fun register(dispatcher : CommandDispatcher<CommandSourceStack>) {
val command = Commands.literal("transformmodelpart")
.permission(CobblemonPermissions.TRANSFORM_MODEL_PART)
.then(Commands.argument("transform", TransformTypeArgumentType.transformType())
.then(Commands.argument("part", ModelPartArgumentType.modelPart())
.then(Commands.argument("x", FloatArgumentType.floatArg())
.then(Commands.argument("y", FloatArgumentType.floatArg())
.then(Commands.argument("z", FloatArgumentType.floatArg())
.executes(::execute)
)
)
)
.executes(::execute))
.executes(::execute))
dispatcher.register(command)
}
private fun execute(context: CommandContext<CommandSourceStack>) : Int {
val transformType = TransformTypeArgumentType.getTransform(context, "transform")
val targetModelPart = ModelPartArgumentType.getModelPart(context, "part")?: return 0
val x = FloatArgumentType.getFloat(context, "x")
val y = FloatArgumentType.getFloat(context, "y")
val z = FloatArgumentType.getFloat(context, "z")
val model = ModelPartArgumentType.getModel(context)?: return 0
val existing = model.transformedParts.find { it.modelPart == targetModelPart }
when (transformType) {
TransformType.POSITION -> {
if (existing != null) existing.withPosition(x, y, z)
else model.transformedParts += targetModelPart.createTransformation().withPosition(x, y, z)
}
TransformType.ROTATION -> {
if (existing != null) existing.withRotation(x, y, z)
else model.transformedParts += targetModelPart.createTransformation().withRotation(x, y, z)
}
TransformType.SCALE -> {
if (existing != null) existing.withScale(x, y, z)
else model.transformedParts += targetModelPart.createTransformation().withScale(x, y, z)
}
}
context.source.playerOrException.sendSystemMessage("Changed ${transformType.name.lowercase()} of ${context.getArgument("part", String::class.java )} to $x, $y, $z".text())
return Command.SINGLE_SUCCESS
}
}
@@ -0,0 +1,75 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.command.argument
import com.cobblemon.mod.common.api.text.red
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
import com.cobblemon.mod.common.client.render.models.blockbench.PosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.mojang.brigadier.StringReader
import com.mojang.brigadier.arguments.ArgumentType
import com.mojang.brigadier.context.CommandContext
import com.mojang.brigadier.suggestion.Suggestions
import com.mojang.brigadier.suggestion.SuggestionsBuilder
import net.minecraft.client.Minecraft
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.commands.CommandSourceStack
import net.minecraft.commands.SharedSuggestionProvider
import net.minecraft.world.phys.EntityHitResult
import net.minecraft.world.phys.HitResult.Type
import java.util.concurrent.CompletableFuture
class ModelPartArgumentType(): ArgumentType<String> {
override fun parse(reader: StringReader): String {
return reader.readString()
}
override fun <S : Any> listSuggestions(
context: CommandContext<S>,
builder: SuggestionsBuilder
): CompletableFuture<Suggestions> {
return SharedSuggestionProvider.suggest(getModelParts(context).keys.toList(),builder)
}
companion object {
fun modelPart() = ModelPartArgumentType()
fun <S: Any> getModel(context: CommandContext<S> ): PosableModel? {
if (context.source is SharedSuggestionProvider) {
val targetEntity = (Minecraft.getInstance().hitResult as? EntityHitResult)
?.takeIf { it.type == Type.ENTITY }
?.entity
//Could probably work for NPCs too with some changes
if (targetEntity is PokemonEntity) {
val state = FloatingState()
state.currentAspects = targetEntity.aspects
return VaryingModelRepository.getPoser(name = targetEntity.exposedSpecies.resourceIdentifier, state = state)
}
}
return null
}
private fun <S: Any> getModelParts(context: CommandContext<S>): MutableMap<String, ModelPart> {
val modelParts = getModel(context)?.relevantPartsByName?:mutableMapOf()
return modelParts
}
fun getModelPart(context: CommandContext<CommandSourceStack>, name: String): ModelPart? {
val partName = context.getArgument(name, String::class.java )
val part = getModelParts(context)[partName]
?: run {
context.source.playerOrException.sendSystemMessage("No joint named $partName".red())
return null
}
return part
}
}
}
@@ -0,0 +1,49 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.command.argument
import com.mojang.brigadier.StringReader
import com.mojang.brigadier.arguments.ArgumentType
import com.mojang.brigadier.context.CommandContext
import com.mojang.brigadier.exceptions.CommandSyntaxException
import com.mojang.brigadier.suggestion.SuggestionsBuilder
import net.minecraft.commands.CommandSourceStack
import net.minecraft.commands.SharedSuggestionProvider
class TransformTypeArgumentType: ArgumentType<TransformTypeArgumentType.Companion.TransformType>
{
override fun parse(reader: StringReader): TransformType {
try {
reader.readString()?.let { return TransformType.valueOf(it.uppercase()) }
}
catch (_: Exception) { }
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherParseException().create(reader)
}
override fun getExamples() = EXAMPLES
override fun <S : Any> listSuggestions(context: CommandContext<S>, builder: SuggestionsBuilder) = SharedSuggestionProvider.suggest(EXAMPLES, builder)
companion object {
enum class TransformType {
POSITION,
ROTATION,
SCALE
}
fun transformType() = TransformTypeArgumentType()
fun getTransform(context: CommandContext<CommandSourceStack>, name: String): TransformType {
return context.getArgument(name, TransformType::class.java )
}
private val EXAMPLES = TransformType.entries.map { it.name.lowercase() }
}
}
@@ -17,9 +17,9 @@ import com.cobblemon.mod.common.pokeball.catching.calculators.CobblemonCaptureCa
import com.cobblemon.mod.common.util.adapters.CaptureCalculatorAdapter
import com.cobblemon.mod.common.util.adapters.IntRangeAdapter
import com.google.gson.GsonBuilder
import com.google.gson.annotations.SerializedName
import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.isAccessible
import com.google.gson.annotations.SerializedName
class CobblemonConfig {
companion object {
@@ -259,6 +259,9 @@ class CobblemonConfig {
@CobblemonConfigField(Category.Interface, lang = "party_portrait_animations")
var partyPortraitAnimations = PortraitStyle.NEVER_ANIMATE
@CobblemonConfigField(Category.Riding, lang = "third_person_view_bobbing")
var thirdPartyViewBobbing = false
@CobblemonConfigField(Category.Riding, lang = "invert_roll")
var invertRoll = false
@@ -12,7 +12,6 @@ import com.bedrockk.molang.runtime.MoLangRuntime
import com.bedrockk.molang.runtime.value.DoubleValue
import com.cobblemon.mod.common.*
import com.cobblemon.mod.common.CobblemonNetwork.sendPacket
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.api.drop.DropTable
import com.cobblemon.mod.common.api.entity.Despawner
import com.cobblemon.mod.common.api.entity.PokemonSender
@@ -40,9 +39,14 @@ import com.cobblemon.mod.common.api.pokemon.feature.StringSpeciesFeature
import com.cobblemon.mod.common.api.pokemon.status.Statuses
import com.cobblemon.mod.common.api.reactive.ObservableSubscription
import com.cobblemon.mod.common.api.reactive.SimpleObservable
import com.cobblemon.mod.common.api.riding.*
import com.cobblemon.mod.common.api.riding.behaviour.*
import com.cobblemon.mod.common.api.riding.behaviour.types.*
import com.cobblemon.mod.common.api.riding.Rideable
import com.cobblemon.mod.common.api.riding.RidingProperties
import com.cobblemon.mod.common.api.riding.RidingStyle
import com.cobblemon.mod.common.api.riding.Seat
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviour
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourSettings
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviours
import com.cobblemon.mod.common.api.riding.events.SelectDriverEvent
import com.cobblemon.mod.common.api.riding.stats.RidingStat
import com.cobblemon.mod.common.api.scheduling.Schedulable
@@ -88,14 +92,8 @@ import com.cobblemon.mod.common.pokemon.evolution.variants.ItemInteractionEvolut
import com.cobblemon.mod.common.pokemon.feature.StashHandler
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
import com.cobblemon.mod.common.util.*
import com.cobblemon.mod.common.util.math.geometry.toRadians
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import com.mojang.serialization.Codec
import java.util.EnumSet
import java.util.Optional
import java.util.UUID
import java.util.concurrent.CompletableFuture
import kotlin.math.PI
import net.minecraft.core.BlockPos
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.core.registries.Registries
@@ -146,8 +144,9 @@ import net.minecraft.world.level.material.FluidState
import net.minecraft.world.level.pathfinder.PathType
import net.minecraft.world.phys.AABB
import net.minecraft.world.phys.Vec3
import org.joml.Matrix3f
import org.joml.Vector3f
import java.util.*
import java.util.concurrent.CompletableFuture
import kotlin.math.PI
@Suppress("unused")
open class PokemonEntity(
@@ -252,7 +251,6 @@ open class PokemonEntity(
var enablePoseTypeRecalculation = true
// override var ridingController: RideController? = null
var previousRidingState: RidingBehaviourState? = null
var ridingState: RidingBehaviourState? = null
@@ -408,11 +406,7 @@ open class PokemonEntity(
SPECIES -> refreshDimensions()
POSE_TYPE -> {
val value = entityData.get(data) as PoseType
if ((value == PoseType.FLY || value == PoseType.HOVER) && passengers.isEmpty()) {
setNoGravity(true)
} else {
setNoGravity(false)
}
isNoGravity = (value == PoseType.FLY || value == PoseType.HOVER) && passengers.isEmpty()
}
BATTLE_ID -> {
@@ -485,7 +479,7 @@ open class PokemonEntity(
isPokemonFlying = flyDist - flyDistO > 0.005F
isPokemonWalking = walkDist - walkDistO > 0.005F
val isMoving = entityData.get(MOVING)
entityData.get(MOVING)
super.tick()
flyDistO = flyDist
@@ -1217,7 +1211,7 @@ open class PokemonEntity(
val possibleReturn = if (isCosmetic) this.pokemon.cosmeticItem.copy() else this.pokemon.heldItemNoCopy()
val giving = stack.copy().apply { count = 1 }
if (ItemStack.isSameItem(giving, possibleReturn)) {
if (ItemStack.isSameItemSameComponents(giving, possibleReturn)) {
val message = if (isCosmetic) {
lang("cosmetic_item.already_wearing", this.pokemon.getDisplayName(), stack.hoverName)
} else {
@@ -1234,28 +1228,12 @@ open class PokemonEntity(
}
val text = when {
isCosmetic && giving.isEmpty -> lang(
"cosmetic_item.take",
returned.hoverName,
this.pokemon.getDisplayName()
)
isCosmetic && returned.isEmpty -> lang(
"cosmetic_item.give",
this.pokemon.getDisplayName(),
giving.hoverName
)
!isCosmetic && giving.isEmpty -> lang("held_item.take", returned.hoverName, this.pokemon.getDisplayName())
!isCosmetic && returned.isEmpty -> lang("held_item.give", this.pokemon.getDisplayName(), giving.hoverName)
isCosmetic -> lang(
"cosmetic_item.replace",
returned.hoverName,
this.pokemon.getDisplayName(),
returned.hoverName
)
else -> lang("held_item.replace", returned.hoverName, this.pokemon.getDisplayName(), returned.hoverName)
isCosmetic && giving.isEmpty -> lang("cosmetic_item.take", returned.displayName, this.pokemon.getDisplayName())
isCosmetic && returned.isEmpty -> lang("cosmetic_item.give", this.pokemon.getDisplayName(), giving.displayName)
!isCosmetic && giving.isEmpty -> lang("held_item.take", returned.displayName, this.pokemon.getDisplayName())
!isCosmetic && returned.isEmpty -> lang("held_item.give", this.pokemon.getDisplayName(), giving.displayName)
isCosmetic -> lang("cosmetic_item.replace", returned.displayName, this.pokemon.getDisplayName(), giving.displayName)
else -> lang("held_item.replace", returned.displayName, this.pokemon.getDisplayName(), giving.displayName)
}
player.sendSystemMessage(text)
@@ -1466,7 +1444,7 @@ open class PokemonEntity(
// Copy and paste of how vanilla checks it, unfortunately no util method you can only add then wait for the result
fun hasRoomToMount(player: Player): Boolean {
return (player.shoulderEntityLeft.isEmpty || player.shoulderEntityRight.isEmpty)
&& !player.isPassenger()
&& !player.isPassenger
&& player.onGround()
&& !player.isInWater
&& !player.isInPowderSnow
@@ -1529,13 +1507,14 @@ open class PokemonEntity(
behaviour.velocity(settings, state, this, this.controllingPassenger as Player, deltaMovement)
}
//Handle ridden pokemon differently to allow vector lerp instead of simple addition.
val v = Entity.getInputVector(velocity, 1.0f, this.getYRot());
val v = getInputVector(velocity, 1.0f, this.yRot)
//changing this will give the ride more or less inertia/handling/drift
val inertia = ifRidingAvailableSupply(fallback = 0.5) { behaviour, settings, state ->
behaviour.inertia(settings, state,this)
}
// TODO: jackowes look over this so I don't accidentally break anything
// TODO: Talk to landon about why this was needed
this.deltaMovement = this.deltaMovement.lerp(v, inertia)
var pos = this.deltaMovement.scale(this.speed.toDouble())
if (super.onGround() && this.deltaMovement.y == 0.0) {
@@ -1563,14 +1542,35 @@ open class PokemonEntity(
if (beamMode != 3) { // Don't let Pokémon move during recall
//Prevent current travel logic when riding a pokemon.
/*
val riders = this.passengers.filterIsInstance<LivingEntity>()
if ( riders.isEmpty() ) {
if ( riders.isEmpty() || this.controllingPassenger == null) {
super.travel(movementInput)
}
*/
else {
val inp = ifRidingAvailableSupply(fallback = Vec3.ZERO) { behaviour, settings, state ->
behaviour.velocity(settings, state, this, this.controllingPassenger as Player, deltaMovement)
}
// Rotate velocity vector to face the current y rotation
val f = Mth.sin(this.yRot * 0.017453292f)
val g = Mth.cos(this.yRot * 0.017453292f)
val v = Vec3(
inp.x * g.toDouble() - inp.z * f.toDouble(),
inp.y,
inp.z * g.toDouble() + inp.x * f.toDouble()
)
val diff = v.subtract(this.deltaMovement)
val inertia = ifRidingAvailableSupply(fallback = 0.5) { behaviour, settings, state ->
behaviour.inertia(settings, state,this)
}
this.deltaMovement = this.deltaMovement.add( diff.scale(inertia) )
this.move(MoverType.SELF, this.deltaMovement)
}
super.travel(movementInput)
this.updateBlocksTraveled(prevBlockPos)
}
@@ -1582,7 +1582,7 @@ open class PokemonEntity(
private fun updateBlocksTraveled(fromBp: BlockPos) {
// Riding or falling shouldn't count, other movement sources are fine
if (this.isPassenger() || this.isFalling()) {
if (this.isPassenger || this.isFalling()) {
return
}
val blocksTaken = this.blockPosition().distSqr(fromBp)
@@ -1855,11 +1855,11 @@ open class PokemonEntity(
}
val rotation = behaviour.rotation(settings, state, this, driver)
this.yRotO = this.yRot
setRot(rotation.y, rotation.x)
this.yHeadRot = this.yRot
this.yBodyRot = this.yRot
this.yRotO = this.yRot
val riders = this.passengers.filterIsInstance<LivingEntity>()
this.passengers.filterIsInstance<LivingEntity>()
if (behaviour.isActive(settings, state, this) && behaviour.canJump(settings, state, this, driver)) {
if (this.jumpInputStrength > 0) {
@@ -1900,7 +1900,7 @@ open class PokemonEntity(
fun Entity.isNearGround(): Boolean {
val blockBelow: BlockPos = this.blockPosition().below()
return this.level().getBlockState(blockBelow).isSolid()
return this.level().getBlockState(blockBelow).isSolid
}
// override fun jump() {
@@ -1927,23 +1927,8 @@ open class PokemonEntity(
override fun positionRider(passenger: Entity, positionUpdater: MoveFunction) {
if (this.hasPassenger(passenger)) {
val index = this.passengers.indexOf(passenger).takeIf { it >= 0 && it < this.seats.size } ?: return
val seat = this.seats[index]
val seatOffset = seat.getOffset(this.getCurrentPoseType()).toVector3f()
val center = Vector3f(0f, this.bbHeight / 2, 0f)
this.delegate.positionRider(passenger, positionUpdater)
val seatToCenter = center.sub(seatOffset, Vector3f())
val matrix = (this.passengers.first() as? OrientationControllable)?.orientationController?.orientation
?: Matrix3f().rotate((180f - passenger.yRot).toRadians(), Vector3f(0f, 1f, 0f))
val rotatedOffset =
matrix.transform(seatToCenter, Vector3f()).add(center).sub(Vector3f(0f, passenger.bbHeight / 2, 0f))
positionUpdater.accept(
passenger,
this.x + rotatedOffset.x,
this.y + rotatedOffset.y,
this.z + rotatedOffset.z
)
if (passenger is LivingEntity) {
ifRidingAvailable { behaviour, settings, state ->
behaviour.updatePassengerRotation(settings, state,this, passenger)
@@ -2115,4 +2100,4 @@ open class PokemonEntity(
override fun resolveEntityScan(): LivingEntity {
return this
}
}
}
@@ -8,8 +8,8 @@
package com.cobblemon.mod.common.entity.pokemon
import com.cobblemon.mod.common.CobblemonNetwork
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.OrientationControllable
import com.cobblemon.mod.common.api.entity.PokemonSender
import com.cobblemon.mod.common.api.entity.PokemonSideDelegate
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
@@ -17,17 +17,15 @@ import com.cobblemon.mod.common.api.pokemon.stats.Stats
import com.cobblemon.mod.common.api.pokemon.status.Statuses
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
import com.cobblemon.mod.common.battles.BattleRegistry
import com.cobblemon.mod.common.entity.PlatformType
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.net.messages.server.pokemon.update.ServerboundUpdateRidingStatePacket
import com.cobblemon.mod.common.pokemon.Pokemon
import com.cobblemon.mod.common.pokemon.activestate.ActivePokemonState
import com.cobblemon.mod.common.pokemon.activestate.SentOutState
import com.cobblemon.mod.common.util.getIsSubmerged
import com.cobblemon.mod.common.util.math.geometry.toRadians
import com.cobblemon.mod.common.util.playSoundServer
import com.cobblemon.mod.common.util.update
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import net.minecraft.client.Minecraft
import net.minecraft.network.chat.Component
import net.minecraft.network.syncher.EntityDataAccessor
import net.minecraft.server.level.ServerLevel
@@ -37,6 +35,8 @@ import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.ai.attributes.Attributes
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.pathfinder.PathType
import org.joml.Matrix3f
import org.joml.Vector3f
import java.util.*
/** Handles purely server logic for a Pokémon */
@@ -231,7 +231,7 @@ class PokemonServerDelegate : PokemonSideDelegate {
val isSleeping = entity.pokemon.status?.status == Statuses.SLEEP && entity.behaviour.resting.canSleep
val isMoving = entity.entityData.get(PokemonEntity.MOVING)
val isPassenger = entity.isPassenger()
val isPassenger = entity.isPassenger
val isUnderwater = entity.getIsSubmerged()
val isFlying = entity.getBehaviourFlag(PokemonBehaviourFlag.FLYING)
@@ -297,4 +297,28 @@ class PokemonServerDelegate : PokemonSideDelegate {
entity.remove(Entity.RemovalReason.KILLED)
}
}
override fun positionRider(
passenger: Entity,
positionUpdater: Entity.MoveFunction
) {
val index =
this.entity.passengers.indexOf(passenger).takeIf { it >= 0 && it < this.entity.seats.size } ?: return
val seat = this.entity.seats[index]
val seatOffset = seat.getOffset(this.entity.getCurrentPoseType()).toVector3f()
val center = Vector3f(0f, this.entity.bbHeight / 2, 0f)
val seatToCenter = center.sub(seatOffset, Vector3f())
val matrix = (this.entity.passengers.first() as? OrientationControllable)?.orientationController?.orientation
?: Matrix3f().rotate((180f - passenger.yRot).toRadians(), Vector3f(0f, 1f, 0f))
val offset =
matrix.transform(seatToCenter, Vector3f()).add(center).sub(Vector3f(0f, passenger.bbHeight / 2, 0f))
positionUpdater.accept(
passenger,
this.entity.x + offset.x,
this.entity.y + offset.y,
this.entity.z + offset.z
)
}
}
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.item
import com.cobblemon.mod.common.util.cobblemonResource
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.item.Equipable
class WearableItem(val name: String): CobblemonItem(Properties()), Equipable {
companion object {
const val MODEL_PATH = "item/wearable"
}
fun getModel3d(): ResourceLocation = cobblemonResource("${MODEL_PATH}/${this.name}")
fun getModel2d(): ResourceLocation = cobblemonResource(this.name)
override fun getEquipmentSlot(): EquipmentSlot { return EquipmentSlot.HEAD }
}
@@ -639,11 +639,7 @@ open class Pokemon : ShowdownIdentifiable {
val entity = PokemonEntity(level, this)
illusion?.start(entity)
val adjustedPosition = entity.getAjustedSendoutPosition(position)
val sentOut = entity.setPositionSafely(adjustedPosition)
//If sendout failed, fall back
if (!sentOut) {
entity.setPos(adjustedPosition.x, adjustedPosition.y, adjustedPosition.z)
}
entity.setPositionSafely(adjustedPosition)
mutation(entity)
level.addFreshEntity(entity)
state = SentOutState(entity)
@@ -694,7 +690,7 @@ open class Pokemon : ShowdownIdentifiable {
battleActor is EntityBackedBattleActor<*> && battleActor.entity != null && battleActor.entity?.uuid !== owner.uuid
} as EntityBackedBattleActor<*>
if (activeBattlePokemon != null) {
opposingEntityPos = ShowdownInterpreter.getSendoutPosition(battle, activeBattlePokemon, opposingEntityBattleActor as BattleActor)
opposingEntityPos = activeBattlePokemon.getSendOutPosition()
}
if (opposingEntityPos == null) {
// Sendout calculation failed, fallback to using the opposing actor's position
@@ -20,6 +20,7 @@ import com.cobblemon.mod.common.util.battleLang
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.network.chat.Component
import net.minecraft.world.item.Items
import java.util.function.Function
/**
@@ -130,7 +131,14 @@ object CobblemonHeldItemManager : BaseCobblemonHeldItemManager() {
}
// if items aren't consumed, then we don't want to give them to wild pokemon (dupe)
if (this.giveItemEffect.contains(effectId) && (pokemon.actor is PlayerBattleActor || consumeHeldItems)) {
this.give(pokemon, itemID)
// extra check for item swapping abuse
// checks if the pokemon whose item is being taken away (wild pokemon) has its held item tampered with in any way
// this assumes its always moves causing the swaps
// I still think this is a bit brittle and can cause false positives, but for now this should do the trick I hope
var fromBattlePokemon = battle.majorBattleActions[pokemon.uuid]?.battlePokemon(2, battle)
if(showdownIdOf(fromBattlePokemon?.originalPokemon?.heldItem?.item ?: Items.AIR) == itemID) {
this.give(pokemon, itemID)
}
}
// allow players to steal wild held items
if (this.takeItemEffect.contains(effectId) && (pokemon.actor !is PlayerBattleActor || consumeHeldItems)) {
@@ -8,6 +8,8 @@
package com.cobblemon.mod.common.util
import com.cobblemon.mod.common.api.text.yellow
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.google.common.collect.ImmutableMap
import com.mojang.serialization.Dynamic
import net.minecraft.core.BlockPos
@@ -17,12 +19,20 @@ import net.minecraft.nbt.Tag
import net.minecraft.network.syncher.EntityDataAccessor
import net.minecraft.network.syncher.SynchedEntityData
import net.minecraft.world.entity.Entity
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.Blocks
import net.minecraft.world.phys.AABB
import net.minecraft.world.phys.Vec3
import net.minecraft.world.phys.shapes.BooleanOp
import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.phys.shapes.Shapes
import java.util.*
import kotlin.math.ceil
import kotlin.math.floor
import kotlin.math.min
import kotlin.time.measureTime
fun Entity.makeEmptyBrainDynamic() = Dynamic(
NbtOps.INSTANCE,
@@ -31,9 +41,76 @@ fun Entity.makeEmptyBrainDynamic() = Dynamic(
fun Entity.effectiveName() = this.displayName ?: this.name
private fun getPosScore(level: Level, entity: Entity, box: AABB, pos: BlockPos): Int {
// position the hitbox in the xz center of the block
val movedBox = box.move(Vec3(pos.x + 0.5, pos.y.toDouble(), pos.z + 0.5).subtract(box.bottomCenter))
return level.getBlockCollisions(entity, movedBox).count()
}
private fun findBestBlockPosBFS(
entity: Entity,
pos: Vec3,
level: Level,
maxRadius: Int = 4
): BlockPos {
val directions = listOf(
BlockPos(0, 1, 0), BlockPos(0, -1, 0), // Up and down
BlockPos(1, 0, 0), BlockPos(-1, 0, 0), // East and west
BlockPos(0, 0, 1), BlockPos(0, 0, -1) // North and south
)
val queue = ArrayDeque<BlockPos>()
val visited = mutableSetOf<BlockPos>()
val centerPos = BlockPos(if (pos.x > 0) pos.x.toInt() else floor(pos.x).toInt(), if (pos.y > 0) pos.y.toInt() else floor(pos.y).toInt(), if (pos.z > 0) pos.z.toInt() else floor(pos.z).toInt())
queue.add(centerPos)
var bestScore = Int.MAX_VALUE
var bestPos = centerPos
var deflatedBox = entity.boundingBox
val maxHeight = 3
val maxWidth = 3
// We deflate the box to make collision checks cheaper for large pokemon.
if(entity.bbWidth > maxWidth) {
deflatedBox = deflatedBox.deflate((entity.bbWidth - maxWidth) / 2.0, 0.0, (entity.bbWidth - maxWidth) / 2.0)
}
if(entity.bbHeight > maxHeight) {
deflatedBox = deflatedBox.deflate(0.0, (entity.bbWidth - maxHeight) / 2.0, 0.0)
}
while (queue.isNotEmpty()) {
val currentPos = queue.removeFirst()
if (currentPos in visited) continue
visited.add(currentPos)
val blockPosHasCollision = !level.getBlockState(currentPos).getCollisionShape(level, currentPos, CollisionContext.empty()).isEmpty
// Ignore blockPositions that have collision
val score = if (blockPosHasCollision) Int.MAX_VALUE else getPosScore(level, entity, deflatedBox, currentPos)
if (score == 0) {
// Position found with zero collisions, return immediately.
return currentPos
} else if (bestScore > score) {
// Only take better scores and ignore ties, ensures that positions closer to the original position win ties.
bestPos = currentPos
bestScore = score
}
// Add neighbors (up to maxRadius)
for (dir in directions) {
val neighbor = currentPos.offset(dir)
// stay within the max radius and do not path find into a wall
if (neighbor.distManhattan(centerPos) <= maxRadius && (blockPosHasCollision || level.getBlockState(neighbor).getCollisionShape(level, neighbor, CollisionContext.empty()).isEmpty)) {
queue.add(neighbor)
}
}
}
return bestPos
}
fun Entity.setPositionSafely(pos: Vec3): Boolean {
// TODO: Rework this function. Best way to do it would be to define a vertical and horizontal min/max shift based on the Pokemon's hitbox.
// Then loop through horizontal/vertical shifts, and detect collisions in three categories: suffocation, damaging blocks, and general collision
// Unmute to view how long the BFS algorithm takes to run
// val mute = false
// TODO: Rework this function. Detect collisions in three categories: suffocation, damaging blocks, and general collision
// The closest position with the least severe collision types will be selected to move the Pokemon to
// The throw could be cancelled if there are no viable locations without severe problems
@@ -52,117 +129,34 @@ fun Entity.setPositionSafely(pos: Vec3): Boolean {
// return true
// }
var result = pos
val eyes = pos.with(Direction.Axis.Y, pos.y + this.eyeHeight)
val box = boundingBox.move(pos.subtract(boundingBox.bottomCenter))
var box = boundingBox.move(pos)
val conflicts = mutableSetOf<Direction>()
if (!level().getBlockCollisions(this, box).iterator().hasNext()) {
if (level().noBlockCollision(this, box)) {
// Given position is valid so no need to do extra work
setPos(pos)
return true
}
for (target in BlockPos.betweenClosedStream(box)) {
val blockState = this.level().getBlockState(target)
val collides = !blockState.isAir &&
blockState.isSuffocating(this.level(), target) &&
Shapes.joinIsNotEmpty(blockState.getCollisionShape(this.level(), target)
.move(target.x.toDouble(), target.y.toDouble(), target.z.toDouble()),
Shapes.create(box),
BooleanOp.AND
)
if (collides) {
val x = eyes.toBlockPos()
for (direction in Direction.entries) {
if (conflicts.contains(direction)) continue
val bestBlockPosition: BlockPos
val result: Vec3
// val elapsedTime = measureTime {
val searchRadius = min(ceil((this.bbWidth * 2)).toInt(), 4)
bestBlockPosition = findBestBlockPosBFS(this, pos, level(), searchRadius)
result = Vec3(bestBlockPosition.x + 0.5, bestBlockPosition.y.toDouble(), bestBlockPosition.z + 0.5)
setPos(result)
// }
// if (!mute) {
// // Displays the time taken to calculate the best position
// server()?.playerList?.players?.forEach {
// it.sendSystemMessage("Send out for ${(this as PokemonEntity).pokemon.species.name} completed in $elapsedTime".yellow())
// }
// }
val conflict = target.toVec3d()
if (x.offset(direction.normal) == target) {
conflicts.add(direction)
when (direction) {
Direction.UP -> return false
Direction.NORTH -> {
result = result.add(Vec3(0.0, 0.0, 1 + (conflict.z - box.minZ + (1.0 / 8.0))))
}
Direction.SOUTH -> {
result = result.add(Vec3(0.0, 0.0, (conflict.z - box.maxZ) - (1.0 / 8.0)))
}
Direction.WEST -> {
result = result.add(Vec3(1 + (conflict.x - box.minX + (1.0 / 8.0)), 0.0, 0.0))
}
Direction.EAST -> {
result = result.add(Vec3((conflict.x - box.maxX) - (1.0 / 8.0), 0.0, 0.0))
}
else -> {}
}
}
}
}
}
box = boundingBox.move(result)
if (!level().getBlockCollisions(this, box).iterator().hasNext()) {
this.setPos(result)
return true
} else {
val yChanges = listOf(1.0, -1.0, 2.0, -2.0)
var previousChange = 0.0
// If the Pokemon still collides with blocks after horizontal shifting, try vertical shifting from the shifted position
for (yChange in yChanges) {
box = box.move(0.0, yChange - previousChange, 0.0)
previousChange = yChange
if (level().getBlockCollisions(this, box).iterator().hasNext()) {
continue
} else {
val roundedY = (result.y + yChange).toInt()
box = box.move(0.0, roundedY - result.y, 0.0)
// If the rounded position actually collides again, then don't round at all.
if (level().getBlockCollisions(this, box).iterator().hasNext()) {
result = result.add(0.0, yChange, 0.0)
this.setPos(result)
return true
} else {
result = Vec3(result.x, roundedY.toDouble(), result.z)
this.setPos(result)
return true
}
}
}
// If vertical shifting from the new position still collides, try vertical shifting from the original pos
previousChange = 0.0
box = boundingBox.move(pos)
for (yChange in yChanges) {
box = box.move(0.0, yChange - previousChange, 0.0)
previousChange = yChange
if (level().getBlockCollisions(this, box).iterator().hasNext()) {
continue
} else {
val roundedY = (result.y + yChange).toInt()
box = box.move(0.0, roundedY - result.y, 0.0)
// If the rounded position actually collides again, then don't round at all.
if (level().getBlockCollisions(this, box).iterator().hasNext()) {
result = result.add(0.0, yChange, 0.0)
this.setPos(result)
return true
} else {
result = Vec3(result.x, roundedY.toDouble(), result.z)
this.setPos(result)
return true
}
}
}
}
if (conflicts.size >= 3) {
this.setPos(pos)
}
// This final check guarantees that the sendout will return to the original position if the Pokemon will suffocate in the new one
// This will only happen if the horizontal shift moved the Pokemon into a suffocating position, and there was no valid vertical shift
// I don't see the point of returning to the original position here, as the new position is guaranteed to have equal or fewer
// block collisions are the original given position
// We will return whether the new position causes suffocation, and the caller can decide what to do with that info,
// but we will not revert the position here.
// Battle has too many use cases in which using the new position is the preferred outcome, even if it is dangerous.
val resultEyes = result.with(Direction.Axis.Y, result.y + this.eyeHeight)
val resultEyeBox = AABB.ofSize(resultEyes, bbWidth.toDouble(), 1.0E-6, bbWidth.toDouble())
var collides = false
@@ -174,18 +168,13 @@ fun Entity.setPositionSafely(pos: Vec3): Boolean {
Shapes.joinIsNotEmpty(
blockState.getCollisionShape(this.level(), target)
.move(target.x.toDouble(), target.y.toDouble(), target.z.toDouble()),
Shapes.create(box),
Shapes.create(resultEyeBox),
BooleanOp.AND
)
if (collides) break
}
if (collides) {
this.setPos(pos)
return true
} else {
this.setPos(result)
return true
}
this.setPos(result)
return !collides
}
fun Entity.isDusk(): Boolean {
@@ -43,7 +43,14 @@ object ModelPartTransformationAdapter : JsonDeserializer<ModelPartTransformation
it[2].asDouble
)
} ?: Vec3.ZERO
val scale = json.get("scale")?.asJsonArray?.let {
Vec3(
it[0].asDouble,
it[1].asDouble,
it[2].asDouble
)
} ?: Vec3(1.0,1.0,1.0)
val isVisible = json.get("isVisible")?.asString?.asExpressionLike()
return part.withPosition(position.x, position.y, position.z).withRotationDegrees(rotation.x, rotation.y, rotation.z).also { if (isVisible != null) it.withVisibility(isVisible) }
return part.withPosition(position.x, position.y, position.z).withRotationDegrees(rotation.x, rotation.y, rotation.z).withScale(scale.x, scale.y, scale.z).also { if (isVisible != null) it.withVisibility(isVisible) }
}
}
@@ -16,6 +16,7 @@ import com.google.gson.JsonObject
import com.mojang.serialization.JsonOps
import net.minecraft.core.component.DataComponentMap
import java.lang.reflect.Type
import kotlin.jvm.optionals.getOrNull
/**
* A JSON deserializer for [PossibleHeldItem].
@@ -32,9 +33,7 @@ object PossibleHeldItemAdapter : JsonDeserializer<PossibleHeldItem> {
)
} else {
json as JsonObject
val componentMap = JsonOps.INSTANCE.withDecoder(DataComponentMap.CODEC).apply(json.get("nbt")).getOrThrow {
return@getOrThrow IllegalStateException("Cant serialize components for held item")
}.first
val componentMap = JsonOps.INSTANCE.withDecoder(DataComponentMap.CODEC).apply(json.get("nbt")).result().getOrNull()?.first
val item = json.get("item").asString
val percentage = json.get("percentage")?.asDouble ?: 100.0
return PossibleHeldItem(
@@ -2741,14 +2741,6 @@
}
}
}
},
"animation.pidgeot.cry": {
"animation_length": 1.33333,
"sound_effects": {
"0.04": {
"effect": "pokemon.pidgeot.cry"
}
}
}
}
}
@@ -888,7 +888,7 @@
},
"sound_effects": {
"0.0": {
"effect": "pokemon.ponyta_galar.cry"
"effect": "pokemon.ponyta_galarian.cry"
}
}
},
@@ -1867,7 +1867,7 @@
},
"sound_effects": {
"0.1667": {
"effect": "pokemon.rapidash_galar.cry"
"effect": "pokemon.rapidash_galarian.cry"
}
}
},
@@ -2,522 +2,184 @@
"format_version": "1.8.0",
"animations": {
"animation.eevee.ground_idle": {
"loop": true,
"bones": {
"head": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0]
},
"ear_right": {
"rotation": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"]
},
"ear_left": {
"rotation": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"]
},
"tail": {
"rotation": ["math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0]
},
"leg_front_right": {
"rotation": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
},
"leg_front_left": {
"rotation": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
},
"leg_back_right": {
"rotation": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
},
"leg_back_left": {
"rotation": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*2)*0.2", 0, 0],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0]
}
}
},
"animation.eevee.ground_walk": {
"loop": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0]
},
"tail": {
"rotation": ["-5-math.sin(q.anim_time*90*4*2+60)*10", 0, 0],
"position": [0, 0, -0.5]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
-0.1,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0.1,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
"position": [0, -0.3, 0]
},
"ear_right": {
"rotation": [
"-30-5*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
5,
"-30+5*math.sin(q.anim_time*90*4*2-135)+math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
"rotation": [10, 0, 10]
},
"ear2_right": {
"rotation": [0, -10, 0]
},
"ear_left": {
"rotation": [
"-30-5*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
-5,
"30-5*math.sin(q.anim_time*90*4*2-135)-math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
"rotation": [10, 0, -10]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
"ear2_left": {
"rotation": [0, 10, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
"tail1": {
"rotation": [20, 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
"tail2": {
"rotation": [10, 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
"tail3": {
"rotation": [10, 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*20,0,10)-math.clamp(math.sin(-q.anim_time*90*8-90)*20,0,50)", 0, 0]
"tail4": {
"rotation": [10, 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
"front_leg_left": {
"rotation": [15, 0, 0],
"position": [0, -0.2, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
"elbow_left": {
"rotation": [-20, 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
}
}
},
"animation.eevee.special_attack": {
"loop": true,
"animation_length": 3,
"bones": {
"head": {
"rotation": {
"0.0": [0, 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"0.2083": [0, 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"1.0": [-17.5, 0, "0+math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"2.5": [-17.5, 0, "0+math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"2.6667": [2.5, 0, "0+math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"2.875": [-2.5, 0, "0+math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"],
"3.0": [0, 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"position": {
"0.0": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"0.2083": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"0.9583": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"1.125": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", -0.1],
"1.3333": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"2.5": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"2.6667": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"2.875": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0],
"3.0": [0, "math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180-20)*0.01,-0.5,0.5)", 0]
}
"frontpaw_left": {
"rotation": [5, 0, 0]
},
"ear_right": {
"rotation": {
"0.0": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"0.2083": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"0.5833": [7.76316, 0, "0+(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"1.0": [-10, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"1.1667": [2.5, 0, "0+(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"1.4167": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.5": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.6667": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.875": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"3.0": [0, 0, "(math.sin(q.anim_time*90*4+90)*1-1)*1"]
}
"front_leg_right": {
"rotation": [15, 0, 0],
"position": [0, -0.2, 0]
},
"ear_left": {
"rotation": {
"0.0": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"0.2083": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"0.5833": [7.76316, 0, 1.86603],
"1.0": [-10, 0, "0-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"1.1667": [2.5, 0, "0-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"1.4167": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.5": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.6667": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"2.875": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"],
"3.0": [0, 0, "-(math.sin(q.anim_time*90*4+90)*1-1)*1"]
}
"elbow_right": {
"rotation": [-20, 0, 0]
},
"tail": {
"rotation": {
"0.0": ["math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"0.2083": ["math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"0.625": ["-20+math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"0.9167": ["12.5+math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"1.0833": ["22.5+math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"1.5417": ["12.5+math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"2.5": ["12.5+math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"2.875": ["math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0],
"3.0": ["math.clamp(3*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)*3", 0, 0]
}
"frontpaw_right": {
"rotation": [5, 0, 0]
},
"leg_front_right": {
"rotation": {
"0.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.2083": ["17.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.625": ["7.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.0": ["-12.4907-math.sin(q.anim_time*90*2)*0.2", 0.43399, 2.46207],
"2.5": ["-12.4907-math.sin(q.anim_time*90*2)*0.2", 0.43399, 2.46207],
"2.6667": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.875": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"3.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
}
"back_leg_left": {
"rotation": [7.5, 0, 0]
},
"leg_front_left": {
"rotation": {
"0.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.2083": ["17.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.625": ["7.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.0": ["-12.4907-math.sin(q.anim_time*90*2)*0.2", -0.43399, -2.46207],
"2.5": ["-12.4907-math.sin(q.anim_time*90*2)*0.2", -0.43399, -2.46207],
"2.6667": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.875": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"3.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
}
"ankle_left": {
"rotation": [-7.5, 0, 0]
},
"leg_back_right": {
"rotation": {
"0.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.2083": ["12.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.625": ["17.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.0": ["-14.9813-math.sin(q.anim_time*90*2)*0.2", 0.44221, 4.98047],
"2.5": ["-14.9813-math.sin(q.anim_time*90*2)*0.2", 0.44221, 4.98047],
"2.6667": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.875": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"3.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
}
"back_leg_right": {
"rotation": [7.5, 0, 0]
},
"leg_back_left": {
"rotation": {
"0.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.2083": ["12.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.625": ["17.5-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.0": ["-14.9813-math.sin(q.anim_time*90*2)*0.2", -0.44221, -4.98047],
"2.5": ["-14.9813-math.sin(q.anim_time*90*2)*0.2", -0.44221, -4.98047],
"2.6667": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.875": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0],
"3.0": ["-math.sin(q.anim_time*90*2)*0.2", 0, 0]
}
},
"torso": {
"rotation": {
"0.0": ["math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.2083": ["5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"0.625": ["math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.0": ["5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.125": ["7.5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"1.4167": ["5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.5": ["5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.6667": ["10+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"2.875": ["-2.5+math.sin(q.anim_time*90*2)*0.2", 0, 0],
"3.0": ["math.sin(q.anim_time*90*2)*0.2", 0, 0]
},
"position": {
"0.0": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"0.2083": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"0.9583": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"1.0833": [0, "-0.2+math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", -0.2],
"1.25": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"2.5": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"2.6667": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"2.875": [0, "0.1+math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0],
"3.0": [0, "math.clamp(math.sin(q.anim_time*90*4+180)*0.02,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*4+180)*0.03,-0.5,0.5)", 0]
}
},
"body": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"0.625": [-12.5, 0, 0],
"1.0": [15, 0, 0],
"2.5": [15, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.2083": [0, -0.6, -1.4],
"0.625": [0, 0, -0.9],
"1.0": [0, 0, 0],
"2.5": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"mouth_closed": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"1.0": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"mouth_open": {
"position": {
"0.0": [0, 0, 0],
"0.9583": [0, 0, 0],
"1.0": [0, 0, -0.1],
"2.4583": [0, 0, -0.1],
"2.5": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"eyelid_right": {
"rotation": {
"0.0": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.1667": [0, 0, 0],
"0.2083": [0, 0, -0.1],
"0.6667": [0, 0, -0.1],
"0.7083": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"eyelid_left": {
"rotation": {
"0.0": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
},
"position": {
"0.0": [0, 0, 0],
"0.1667": [0, 0, 0],
"0.2083": [0, 0, -0.1],
"0.6667": [0, 0, -0.1],
"0.7083": [0, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_front_right2": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [-10, 0, 0],
"0.625": [20, 0, 0],
"1.0": [-20, 0, 0],
"2.5": [-20, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_front_right3": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"0.625": [10, 0, 0],
"1.0": [19.97314, 1.60667, -1.91561],
"2.5": [19.97314, 1.60667, -1.91561],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_front_left2": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [-10, 0, 0],
"0.625": [20, 0, 0],
"1.0": [-20, 0, 0],
"2.5": [-20, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_front_left3": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"1.0": [19.97314, -1.60667, 1.91561],
"2.5": [19.97314, -1.60667, 1.91561],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_back_right2": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [-12.5, 0, 0],
"0.625": [-17.5, 0, 0],
"1.0": [20, 0, 0],
"2.5": [20, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_back_right3": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"0.625": [10, 0, 0],
"1.0": [15, 0, 0],
"2.5": [15, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_back_left2": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [-12.5, 0, 0],
"0.625": [-17.5, 0, 0],
"1.0": [20, 0, 0],
"2.5": [20, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
},
"leg_back_left3": {
"rotation": {
"0.0": [0, 0, 0],
"0.2083": [0, 0, 0],
"0.625": [10, 0, 0],
"1.0": [15, 0, 0],
"2.5": [15, 0, 0],
"2.6667": [0, 0, 0],
"2.875": [0, 0, 0],
"3.0": [0, 0, 0]
}
"ankle_right": {
"rotation": [-7.5, 0, 0]
}
}
},
"animation.eevee.blink": {
"animation_length": 0.16667,
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {
"pre": [0, 0, -0.1],
"post": [0, 0, 0]
}
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.1667": {
"pre": [0, 0, -0.1],
"post": [0, 0, 0]
}
}
}
}
},
"animation.eevee.cry": {
"animation_length": 1.25,
"animation.eevee.pose": {
"loop": true,
"bones": {
"body": {
"position": [0, 1, 0]
},
"torso": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [-17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [10, 0, 0]
},
"waist": {
"rotation": [-7.5, 0, 0]
},
"tail1": {
"rotation": [27.5, 0, 0]
},
"tail2": {
"rotation": [-17.5, 0, 0]
},
"tail3": {
"rotation": [25, 0, 0]
},
"tail4": {
"rotation": [27.5, 0, 0]
},
"neck": {
"rotation": [2.5, 0, 0]
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [-20, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [-5, 0, 0]
},
"mouth_open": {
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
}
},
"sound_effects": {
"0.0833": {
"effect": "pokemon.eevee.cry"
"hair_left": {
"rotation": [-62.5, 0, 0]
},
"ear_left": {
"rotation": [30, -22.5, 0]
},
"ear2_left": {
"rotation": [0, -22.5, 0]
},
"ear_right": {
"rotation": [43.09472, 22.29711, 8.11003]
},
"ear2_right": {
"rotation": [0, 22.5, 0]
},
"back_leg_right": {
"rotation": [34.89743, -2.86544, 4.09918]
},
"knee_right": {
"rotation": [15, 0, 0]
},
"ankle_right": {
"rotation": [2.5, 0, 0]
},
"backpaw_right": {
"rotation": [25, 0, 0]
},
"back_leg_left": {
"rotation": [59.90532, 4.32875, -2.50477]
},
"knee_left": {
"rotation": [-15, 0, 0]
},
"ankle_left": {
"rotation": [20, 0, 0]
},
"backpaw_left": {
"rotation": [50, 0, 0]
},
"front_leg_right": {
"rotation": [2.5, 0, 0]
},
"elbow_right": {
"rotation": [-14.89445, 3.9649, 3.04868]
},
"frontpaw_right": {
"rotation": [7.5, 0, 0]
},
"front_leg_left": {
"rotation": [-5, 0, 0]
},
"elbow_left": {
"rotation": [-4.79887, -3.45533, -6.66067]
},
"frontpaw_left": {
"rotation": [-15, 0, 0]
},
"mouth_open_happy": {
"position": [0, -0.38, -0.1]
},
"head_angle": {
"rotation": [0, 0, 0]
}
}
}
@@ -3,732 +3,151 @@
"animations": {
"animation.jolteon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"ear_right": {
"rotation": [0, 0, "-math.sin(q.anim_time*90*2+90)+0.5*math.clamp(math.sin(q.anim_time*90*2-90),-0.5,0.5)"]
},
"ear_left": {
"rotation": [0, 0, "math.sin(q.anim_time*90*2+90)-0.5*math.clamp(math.sin(q.anim_time*90*2-90),-0.5,0.5)"]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
},
"ruff": {
"rotation": [0, "-2*math.sin(q.anim_time*90*4)+math.clamp(3*math.sin(q.anim_time*90*4),-3,3)", 0]
},
"spikes": {
"rotation": [0, "-2*math.sin(q.anim_time*90*4+90)+math.clamp(3*math.sin(q.anim_time*90*4+90),-3,3)", 0]
}
}
},
"animation.jolteon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"position": [0, -0.8, 0]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
},
"ruff": {
"rotation": [0, "-2*math.sin(q.anim_time*90*4)+math.clamp(2*math.sin(q.anim_time*90*4),-2,2)", 0]
},
"spikes": {
"rotation": [0, "-2*math.sin(q.anim_time*90*4+90)+math.clamp(3*math.sin(q.anim_time*90*4+90),-3,3)", 0]
}
}
},
"animation.jolteon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
"rotation": [20, -30, 0]
},
"ear_right": {
"rotation": [
"-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"5+math.sin(q.anim_time*90*4*2+45)+math.clamp(math.sin(q.anim_time*90*4*2+90),-1,1)",
0
]
"rotation": [20, 30, 0]
},
"ear_left": {
"rotation": [
"-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"-5-math.sin(q.anim_time*90*4*2+45)-math.clamp(math.sin(q.anim_time*90*4*2+90),-1,1)",
0
]
"front_leg_left": {
"rotation": [7.5, -2.5, -5]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-70)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*10,5,70)+5", 0, 0]
"elbow_left": {
"rotation": [-22.5, 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8+15),1,1)", 0, 0]
"frontpaw_left": {
"rotation": [15, 0, 5]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-70+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8-30+180+30)*10,5,70)+5", 0, 0]
"front_leg_right": {
"rotation": [7.5, 2.5, 5]
},
"leg_front_left3": {
"rotation": ["12*math.sin(q.anim_time*90*8-15+30)-math.clamp(math.sin(q.anim_time*90*8-30+30),1,1)", 0, 0]
"elbow_right": {
"rotation": [-22.5, 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*20,0,10)-math.clamp(math.sin(-q.anim_time*90*8-90)*20,0,50)", 0, 0]
"frontpaw_right": {
"rotation": [15, 0, -5]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
"backleg_left": {
"rotation": [7.5, -5, -7.5]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
"ankle_left": {
"rotation": [-12.5, 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
"foot_left": {
"rotation": [5, 0, 7.5]
},
"ruff": {
"rotation": ["-2.5-math.sin(q.anim_time*90*4*2+30)*7", 0, 0]
"backleg_right": {
"rotation": [7.5, 5, 7.5]
},
"spikes": {
"rotation": ["-math.sin(q.anim_time*90*4*2+45)*9", 0, 0]
"ankle_right": {
"rotation": [-12.5, 0, 0]
},
"foot_right": {
"rotation": [5, 0, -7.5]
}
}
},
"animation.jolteon.blink": {
"animation_length": 0.1667,
"bones": {
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.jolteon.render": {
"animation.jolteon.hold_item": {
"loop": true,
"bones": {
"torso": {
"rotation": [-7.5, 0, 0]
},
"leg_front_right": {
"rotation": [0, 0, -5]
},
"leg_front_right2": {
"rotation": [0, 0, 5]
},
"leg_front_left": {
"rotation": [0, 0, 7.5]
},
"leg_front_left2": {
"rotation": [0, 0, -7.5]
"jaw": {
"rotation": [32.5, 0, 0]
}
}
},
"animation.jolteon.cry": {
"animation_length": 1.45833,
"animation.jolteon.pose": {
"loop": true,
"bones": {
"body": {
"rotation": [0, 47.5, 0]
},
"torso": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [20, 0, 0]
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-12.94747, 4.87543, -0.82759],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-12.37673, 4.88568, -1.06437],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [-6.31372, -6.71183, -0.23449],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"torso2": {
"rotation": [-2.5, 0, 0]
},
"mouth": {
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"torso3": {
"rotation": [-22.5, 0, 0]
},
"leg_back_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32729, -0.18404],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"head_angle": {
"rotation": [12.5, -32.5, 27.5]
},
"leg_back_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-22.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32189, -0.47184],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
}
}
"front_leg_left": {
"rotation": [40, 0, 0]
},
"leg_back_right3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"elbow_left": {
"rotation": [-45, 0, 0]
},
"leg_back_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32729, -0.18404],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"frontpaw_left": {
"rotation": [85, 0, 0]
},
"leg_back_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-22.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32189, -0.47184],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
}
}
"front_leg_right": {
"rotation": [-17.5, -5, -7.5],
"position": [0, -1, 0]
},
"leg_back_left3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"elbow_right": {
"rotation": [7.5, 0, 0]
},
"tail": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"frontpaw_right": {
"rotation": [10, 0, 10]
},
"leg_front_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, 0.75, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"backleg_left": {
"rotation": [25, -10, -7.5]
},
"leg_front_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ankle_left": {
"rotation": [52.5, 0, 0]
},
"leg_front_right3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"foot_left": {
"rotation": [47.5, 0, 0]
},
"leg_front_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, 0.75, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"backleg_right": {
"rotation": [50, 7.5, 7.5]
},
"leg_front_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ankle_right": {
"rotation": [40, 0, 0]
},
"leg_front_left3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -7.5, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 10, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"foot_right": {
"rotation": [22.5, 0, 0]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -12.5, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 7.5, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [37.5, -37.5, 0]
},
"jaw": {
"rotation": {
"0.0": [0, 0, 0],
"0.1667": [35, 0, 0],
"1.3333": [0, 0, 0]
}
},
"ruff": {
"scale": 1
},
"spikes": {
"scale": 1
}
},
"sound_effects": {
"0.125": {
"effect": "pokemon.jolteon.cry"
"ear_right": {
"rotation": [37.5, 37.5, 0]
}
}
}
@@ -3,744 +3,267 @@
"animations": {
"animation.flareon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"ear_right": {
"rotation": [0, 0, "-math.sin(q.anim_time*90*2+90)+math.clamp(math.sin(q.anim_time*90*2-90),-1,1)"]
},
"ear_left": {
"rotation": [0, 0, "math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)"]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
},
"tail": {
"rotation": [
"math.clamp(1*(math.sin(q.anim_time*90*2+90)*1-1),0,7)-(math.sin(q.anim_time*90*2+90)*1)",
"(math.sin(q.anim_time*90*2)*1)+(math.sin(q.anim_time*90*2/2)*1)",
0
]
},
"ruff": {
"rotation": [0, "-2*math.sin(q.anim_time*90*2)+math.clamp(3*math.sin(q.anim_time*90*2),-3,3)", 0]
}
}
},
"animation.flareon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"position": [0, -0.3, 0]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
},
"ruff": {
"rotation": [0, "-2*math.sin(q.anim_time*90*4)+math.clamp(2*math.sin(q.anim_time*90*4),-2,2)", 0]
}
}
},
"animation.flareon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
"rotation": [25, -30, 0]
},
"ear_right": {
"rotation": [
"-5-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"5+2*math.sin(q.anim_time*90*4*2+45)+math.clamp(2*math.sin(q.anim_time*90*4*2+90),-2,2)",
0
]
},
"ear_left": {
"rotation": [
"-5-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"-5-2*math.sin(q.anim_time*90*4*2+45)-math.clamp(2*math.sin(q.anim_time*90*4*2+90),-2,2)",
0
]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
"rotation": [25, 30, 0]
},
"tail": {
"rotation": ["-15-math.sin(q.anim_time*90*4*2+45)*4", 0, 0]
"rotation": [25, 0, 0]
},
"ruff": {
"rotation": ["-math.sin(q.anim_time*90*4*2+30)*2", 0, 0]
"tail4": {
"rotation": [5, 0, 0]
},
"tail5": {
"rotation": [10, 0, 0]
},
"tail6": {
"rotation": [5, 0, 0]
},
"front_leg_left": {
"rotation": [5, 0, -5]
},
"elbow_left": {
"rotation": [-10, 0, 0]
},
"frontpaw_left": {
"rotation": [5, 0, 5]
},
"front_leg_right": {
"rotation": [5, 0, 5]
},
"elbow_right": {
"rotation": [-10, 0, 0]
},
"frontpaw_right": {
"rotation": [5, 0, -5]
},
"back_leg_left": {
"rotation": [5, -2.5, -5]
},
"ankle_left": {
"rotation": [-5, 0, 0]
},
"foot_left": {
"rotation": [0, 0, 5]
},
"back_leg_right": {
"rotation": [5, 2.5, 5]
},
"ankle_right": {
"rotation": [-5, 0, 0]
},
"foot_right": {
"rotation": [0, 0, -5]
}
}
},
"animation.flareon.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"eye_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": [0, 0, 0]
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.flareon.render": {
"animation.flareon.pose": {
"loop": true,
"bones": {
"torso": {
"rotation": [20, 0, 0],
"position": [0, -1, 0]
"headfur1": {
"rotation": [-2.32648, -2.86313, -6.93488]
},
"tail": {
"rotation": [-27.5, 0, 0]
"ear1_left": {
"rotation": [-4.29907, -5.86145, 44.84339]
},
"tail1": {
"rotation": [64.62786, 7.28488, -7.16943]
},
"tail2": {
"rotation": [7.5, 0, 0]
"rotation": [0, 15, 0]
},
"leg_front_right": {
"rotation": [-23, 0, 0]
"tail4": {
"rotation": [17.5, 17.5, 0]
},
"leg_front_right2": {
"rotation": [19, 0, 0]
"tail5": {
"rotation": [17.5, 10, 0]
},
"leg_front_left": {
"rotation": [20.5, 0, 0],
"position": [0, -1.3, 0]
"tail6": {
"rotation": [0, 27.5, 0]
},
"leg_front_left2": {
"rotation": [-27.5, 0, 0]
"body": {
"rotation": [0, 35, 0],
"position": [0, -0.75, 0]
},
"leg_front_left3": {
"rotation": [10, 0, 0]
},
"leg_back_right": {
"rotation": [-12.5, 0, 0]
},
"leg_back_left": {
"rotation": [17.5, 0, 0]
},
"leg_back_left2": {
"rotation": [-12.5, 0, 0]
}
}
},
"animation.flareon.cry": {
"animation_length": 1.45833,
"bones": {
"torso": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [2.5, 0, 0],
"position": [0, 1, 0]
},
"mane_main": {
"rotation": [-1.68086, -6.89591, 4.97567]
},
"manefur1_left": {
"rotation": [0, 0, 45]
},
"manefur2_left": {
"rotation": [0, 0, 67.5]
},
"manefur3_left": {
"rotation": [0, 0, 90]
},
"manefur1_right": {
"rotation": [0, 0, -45]
},
"manefur2_right": {
"rotation": [0, 0, -67.5]
},
"manefur3_right": {
"rotation": [0, 0, -90]
},
"manefur1": {
"rotation": [-22.5, 0, 0]
},
"manefur2": {
"rotation": [-67.5, 0, 0]
},
"manefur3": {
"rotation": [-90, 0, 0]
},
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-12.94747, 4.87543, -0.82759],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-12.37673, 4.88568, -1.06437],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [-6.31372, -6.71183, -0.23449],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [1.44098, -29.18067, 33.5351]
},
"mouth": {
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, -0.1],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ear3_left": {
"rotation": [-45, 0, 0]
},
"leg_back_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32729, -0.18404],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"waist": {
"rotation": [7.5, 0, 0]
},
"leg_back_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-22.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32189, -0.47184],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
}
}
"torso2": {
"rotation": [0.99736, 4.89966, 6.88728]
},
"leg_back_right3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"shoulder_left": {
"rotation": [-22.5, 0, 0],
"position": [-1, 0, -1]
},
"leg_back_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32729, -0.18404],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"elbow_left": {
"rotation": [-60, 0, 0]
},
"leg_back_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-22.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -0.32189, -0.47184],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, -0.03502, -0.03301],
"lerp_mode": "catmullrom"
}
}
"frontpaw_left": {
"rotation": [117.5, 0, 0]
},
"leg_back_left3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"thigh_left": {
"rotation": [27.78445, 24.4963, -1.02058],
"position": [0, 0, -1]
},
"ankle_left": {
"rotation": [-15, 0, 0]
},
"foot_left": {
"rotation": [-5, 0, 0],
"position": [0, 0, 0]
},
"eyes_closed": {
"position": [0, 0, -1]
},
"mouth_o": {
"position": [0, 0, 0]
},
"eyes_open": {
"position": [0, 0, 0]
},
"eyes_halfclosed": {
"position": [0, 0, 0]
},
"eyelid_halfclosed_right": {
"position": [0, 0, 0]
},
"eyelid_halfclosed_left": {
"position": [0, 0, 0]
},
"fur_tail_right2": {
"rotation": [0, 22.5, 0]
},
"thigh_right": {
"rotation": [-15, 0, 0]
},
"shoulder_right": {
"rotation": [-10, 0, 0],
"position": [-1, -1, 0]
},
"elbow_right": {
"rotation": [-35, 0, 0]
},
"frontpaw_right": {
"rotation": [27.5, 0, 0]
},
"knee_right": {
"rotation": [-27.5, 0, 0]
},
"ankle_right": {
"rotation": [42.5, 0, 0]
},
"torso1": {
"rotation": [10, 0, 0]
},
"ear1_right": {
"rotation": [-19.71092, 2.99333, -7.87628]
},
"ear3_right": {
"rotation": [-45, 0, 0]
},
"torso3": {
"rotation": [-17.5, 0, 0]
},
"front_leg_left": {
"rotation": [10, -20, -12.5],
"position": [0, 0, 1]
},
"back_leg_left": {
"rotation": [20, -7.5, 0]
},
"foot_right": {
"rotation": [-62.5, 0, -7.5],
"position": [0, 1, -1]
},
"tail": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [25, -12.5, 0]
},
"leg_front_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, 0.75, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"back_leg_right": {
"rotation": [50.435, 12.7313, 6.61102]
},
"leg_front_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"leg_front_right3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"leg_front_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, 0.75, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"leg_front_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"leg_front_left3": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -7.5, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 10, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"tail3": {
"rotation": [0, 17.5, 0]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [0, -12.5, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [0, 7.5, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [37.5, -27.5, 0]
},
"jaw": {
"rotation": {
"0.0": [0, 0, 0],
"0.1667": [35, 0, 0],
"1.3333": [0, 0, 0]
}
},
"ruff": {
"scale": 1
},
"spikes": {
"scale": 1
}
},
"sound_effects": {
"0.125": {
"effect": "pokemon.flareon.cry"
"ear_right": {
"rotation": [37.5, 27.5, 0]
}
}
}
@@ -3,480 +3,191 @@
"animations": {
"animation.espeon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"ear_right": {
"rotation": [0, "5-2*math.sin(q.anim_time*90*2+90)+math.clamp(math.sin(q.anim_time*90*2-90),-2,2)", 0]
},
"ear_left": {
"rotation": [0, "-5+2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-2,2)", 0]
},
"tail": {
"rotation": [25, "6*(math.sin(q.anim_time*90*2)*1)+6*(math.sin(q.anim_time*90*2/2)*1)", 0]
},
"tail2": {
"rotation": [25, "6*(math.sin(q.anim_time*90*2-30)*1)+6*(math.sin(q.anim_time*90*2/2-30)*1)", 0]
},
"tail4": {
"rotation": [-10, "8*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0]
},
"fur_left": {
"rotation": [0, "-2.5+2*math.sin(q.anim_time*90*2+45)", "1.5*math.sin(q.anim_time*90*2-180)"]
},
"fur_right": {
"rotation": [0, "2.5-2*math.sin(q.anim_time*90*2+45)", "-1.5*math.sin(q.anim_time*90*2+180)"]
},
"tail5": {
"rotation": [-15, "12*(math.sin(q.anim_time*90*2-120)*1)+6*(math.sin(q.anim_time*90*2/2-120)*1)", 0]
},
"tail7": {
"rotation": ["4*(math.sin(q.anim_time*90*2-180)*1)+3*(math.sin(q.anim_time*90*2/2-180)*1)", 0, 0]
},
"tail3": {
"rotation": [20, "6*(math.sin(q.anim_time*90*2-60)*1)+6*(math.sin(q.anim_time*90*2/2-60)*1)", 0]
},
"tail6": {
"rotation": [
"-20+4*(math.sin(q.anim_time*90*2)*1)+3*(math.sin(q.anim_time*90*2/2)*1)",
"10*(math.sin(q.anim_time*90*2-150)*1)+6*(math.sin(q.anim_time*90*2/2-150)*1)",
0
]
},
"tail8": {
"rotation": [
"-10+4*(math.sin(q.anim_time*90*2)*1)+3*(math.sin(q.anim_time*90*2/2)*1)",
"10*(math.sin(q.anim_time*90*2-150)*1)+6*(math.sin(q.anim_time*90*2/2-150)*1)",
0
]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
}
}
},
"animation.espeon.cry": {
"animation_length": 1.54167,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [-8, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [-8, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": {
"post": [-14.40833, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.1667": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5": [0, 0, 0]
}
},
"mouth": {
"position": {
"0.0": [0, 0, 0],
"0.0417": [0, 0, 0],
"0.0833": [0, 0, -0.1],
"0.3333": [0, 0, -0.1],
"0.375": [0, 0, 0],
"0.5": [0, 0, -0.1],
"0.5417": [0, 0, -0.1],
"1.0833": [0, 0, -0.1],
"1.125": [0, 0, 0]
}
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, 5],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.6667": {
"post": [0, 0, 10],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, -5],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [0, 0, -5],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.6667": {
"post": [0, 0, -10],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, 5],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"fur_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [0.09882, -9.99016, 2.04498],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0.73184, -7.36624, -0.42175],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [0.066, -7.49269, 2.16229],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": [0, 0, 0]
}
}
},
"sound_effects": {
"0.0833": {
"effect": "pokemon.espeon.cry"
}
}
},
"animation.espeon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [0, "5+math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-2,2)", 0]
},
"ear_left": {
"rotation": [0, "-5-math.sin(q.anim_time*90*8+45)-math.clamp(math.sin(q.anim_time*90*8+90),-2,2)", 0]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
},
"fur_left": {
"rotation": [0, -5, "-math.sin(q.anim_time*90*8+90)-math.clamp(math.sin(q.anim_time*90*8+90),-2,2)"]
},
"fur_right": {
"rotation": [0, 5, "math.sin(q.anim_time*90*8+90)+math.clamp(math.sin(q.anim_time*90*8+90),-2,2)"]
}
}
},
"animation.espeon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
"position": [0, -0.1, 0]
},
"tail": {
"rotation": ["5-math.sin(q.anim_time*90*4*2+30)*4", 0, 0]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"ear_right": {
"rotation": [
0,
"15+5*math.sin(q.anim_time*90*4*2+45)+math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
"math.sin(q.anim_time*90*4*2-135)+math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
},
"ear_left": {
"rotation": [
0,
"-15-5*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
"-math.sin(q.anim_time*90*4*2-135)-math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
"rotation": [25, -12.5, 0]
},
"tail2": {
"rotation": ["2.5-math.sin(q.anim_time*90*4*2)*4", 0, 0]
},
"tail4": {
"rotation": ["-2.5-math.sin(q.anim_time*90*4*2-30)*4", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
},
"fur_left": {
"rotation": [
0,
"-10-5*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
"-2*math.sin(q.anim_time*90*4*2-135)-math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
},
"fur_right": {
"rotation": [
0,
"10+5*math.sin(q.anim_time*90*4*2+45)+math.clamp(4*math.sin(q.anim_time*90*4*2+90),-2,2)",
"2*math.sin(q.anim_time*90*4*2-135)+math.clamp(4*math.sin(q.anim_time*90*4*2-90),-2,2)"
]
},
"tail5": {
"rotation": ["-math.sin(q.anim_time*90*4*2-30)*4", 0, 0]
},
"tail7": {
"rotation": ["15-math.sin(q.anim_time*90*4*2-90)*4", 0, 0]
"rotation": [37.5, 12.5, 0]
},
"tail3": {
"rotation": ["2.5-math.sin(q.anim_time*90*4*2-30)*4", 0, 0]
"rotation": [30, 15, 0]
},
"tail6": {
"rotation": ["-5-math.sin(q.anim_time*90*4*2-60)*6", 0, 0]
"tail4": {
"rotation": [-17.5, -15, 0]
},
"tail8": {
"rotation": ["-5-math.sin(q.anim_time*90*4*2-60)*6", 0, 0]
"tail5": {
"rotation": [-17.5, -25, 0]
},
"tail_left": {
"rotation": [0, 7.5, 0]
},
"tail_left2": {
"rotation": [0, 17.5, 0]
},
"tail_right": {
"rotation": [0, -10, 0]
},
"tail_right2": {
"rotation": [0, 17.5, 0]
},
"front_leg_left": {
"rotation": [-2, 0, 0]
},
"elbow_left": {
"rotation": [-5, 0, 0]
},
"frontpaw_left": {
"rotation": [6.5, 0, 0]
},
"front_leg_right": {
"rotation": [-2, 0, 0]
},
"elbow_right": {
"rotation": [-5, 0, 0]
},
"frontpaw_right": {
"rotation": [6.5, 0, 0]
},
"back_legs": {
"position": [0, -0.1, 0]
},
"back_leg_left": {
"rotation": [4, 0, -2.5]
},
"ankle_left": {
"rotation": [-5, 0, 0]
},
"foot_left": {
"rotation": [1, 0, 2.5]
},
"back_leg_right": {
"rotation": [4, 0, 2.5]
},
"ankle_right": {
"rotation": [-5, 0, 0]
},
"foot_right": {
"rotation": [1, 0, -2.5]
}
}
},
"animation.espeon.blink": {
"animation_length": 0.1667,
"bones": {
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.espeon.glow": {
"loop": true,
"bones": {
"head_gem": {
"scale": 1.035
}
}
},
"animation.espeon.pose": {
"loop": true,
"bones": {
"body": {
"rotation": [0, 22.5, 0]
},
"torso": {
"rotation": [-2.5, 0, 0]
},
"torso2": {
"rotation": [-12.5, 0, 0]
},
"torso3": {
"rotation": [-2.5, 0, 0]
},
"neck": {
"rotation": [0, 0, 0]
},
"head_angle": {
"rotation": [20.3, -15, -1.5],
"position": [0, 0, 0.5]
},
"tail": {
"rotation": [-6.6945, 22.92358, 33.3055]
},
"tail2": {
"rotation": [25, 0, 0]
},
"tail3": {
"rotation": [30, 0, 0]
},
"tail4": {
"rotation": [25, 0, 0]
},
"tail5": {
"rotation": [30, 0, 0]
},
"front_leg_left": {
"rotation": [-5, 0, 2.5],
"position": [0, 1, 0]
},
"elbow_left": {
"rotation": [0, 0, 5]
},
"frontpaw_left": {
"rotation": [15, 0, 0]
},
"front_leg_right": {
"rotation": [5, 0, -7.5],
"position": [0, 1, 0]
},
"elbow_right": {
"rotation": [-7.5, 0, 0]
},
"frontpaw_right": {
"rotation": [22.5, 0, 0]
},
"back_leg_left": {
"rotation": [12.41834, -7.61516, -11.90917]
},
"ankle_left": {
"rotation": [12.5, 0, 0]
},
"foot_left": {
"rotation": [2.41492, -0.64686, 14.98637]
},
"back_leg_right": {
"rotation": [7.5, 0, 10]
},
"ankle_right": {
"rotation": [20, 0, 0]
},
"foot_right": {
"rotation": [12.5, 0, 0]
}
}
}
}
}
@@ -3,407 +3,234 @@
"animations": {
"animation.umbreon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"ear_right": {
"rotation": [0, 0, "-2*math.sin(q.anim_time*90*2+90)+math.clamp(math.sin(q.anim_time*90*2-90),-1,1)"]
},
"ear_left": {
"rotation": [0, 0, "2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)"]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
},
"tail": {
"rotation": ["4*(math.sin(q.anim_time*90*2)*1)+4*(math.sin(q.anim_time*90*2/2)*1)", 0, 0]
},
"tail2": {
"rotation": ["4*(math.sin(q.anim_time*90*2-90)*1)+4*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
},
"tail3": {
"rotation": ["4*(math.sin(q.anim_time*90*2-90)*1)+4*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
}
}
},
"animation.umbreon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"position": [0, -0.2, 0]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"rotation": [-20, 0, 0]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
}
}
},
"animation.umbreon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
"ear_left2": {
"rotation": [-2.5, 0, 0]
},
"ear_right": {
"rotation": [
"-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"10+4*math.sin(q.anim_time*90*4*2+45)+math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
0
]
"rotation": [-20, 0, 0]
},
"ear_left": {
"rotation": [
"-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
"-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)",
0
]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
"ear_right2": {
"rotation": [-2.5, 0, 0]
},
"tail": {
"rotation": ["-20-math.sin(q.anim_time*90*4*2+60)*12", 0, 0]
"rotation": [35, 0, 0]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*4*2-30)*12", 0, 0]
"rotation": [2.5, 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*4*2)*6", 0, 0]
"rotation": [2.5, 0, 0]
},
"front_leg_left": {
"rotation": [2.5, 0, -2]
},
"elbow_left": {
"rotation": [-10, 0, 0]
},
"frontpaw_left": {
"rotation": [7.5, 0, 2]
},
"front_leg_right": {
"rotation": [2.5, 0, 2]
},
"elbow_right": {
"rotation": [-10, 0, 0]
},
"frontpaw_right": {
"rotation": [7.5, 0, -2]
},
"back_leg_left": {
"rotation": [3, 0, -4]
},
"ankle_left": {
"rotation": [-5, 0, 0]
},
"foot_left": {
"rotation": [2, 0, 4]
},
"back_leg_right": {
"rotation": [3, 0, 4]
},
"ankle_right": {
"rotation": [-5, 0, 0]
},
"foot_right": {
"rotation": [2, 0, -4]
}
}
},
"animation.umbreon.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.umbreon.cry": {
"animation_length": 1.25,
"animation.umbreon.glow": {
"loop": true,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [1.25, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"0.9167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": [0, 0, 0]
}
"ear_ring_left": {
"scale": [1.01, 1, 1.01]
},
"mouth": {
"position": {
"0.0": [0, 0, 0],
"0.0833": [0, 0, 0],
"0.125": [0, 0, -0.1],
"0.2917": [0, 0, -0.1],
"0.3333": [0, 0, 0],
"0.5417": [0, 0, 0],
"0.5833": [0, 0, -0.1],
"0.75": [0, 0, -0.1],
"0.7917": [0, 0, 0]
}
"ear_ring_right": {
"scale": [1.01, 1, 1.01]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [-0.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": [0, 0, 0]
}
"tail_ring": {
"scale": [1.01, 1.01, 1]
},
"frontleg_ring_left": {
"position": [0.025, 0, 0]
},
"frontleg_ring_right": {
"position": [-0.025, 0, 0]
},
"backleg_ring_left": {
"position": [0.025, 0, 0]
},
"backleg_ring_right": {
"position": [-0.025, 0, 0]
},
"head_ring": {
"scale": 1.02
}
}
},
"animation.umbreon.pose": {
"loop": true,
"bones": {
"body": {
"rotation": [0, -45, 0]
},
"torso": {
"rotation": [10, 0, 0]
},
"torso2": {
"rotation": [-2.5, 0, 0]
},
"torso3": {
"rotation": [-10, 0, 0]
},
"head_angle": {
"rotation": [-35, 70, -55]
},
"tail": {
"rotation": [5, 5, 0]
},
"front_leg_left": {
"rotation": [10, 0, -5]
},
"elbow_left": {
"rotation": [-10, 0, 0]
},
"frontpaw_left": {
"rotation": [0, 0, 5]
},
"back_leg_left": {
"rotation": [5, 0, -5]
},
"ankle_left": {
"rotation": [-5, 0, 0]
},
"foot_left": {
"rotation": [0, 0, 5]
},
"tail2": {
"rotation": [7.5, 5, 0]
},
"tail3": {
"rotation": [12.5, 0, 0]
},
"tail4": {
"rotation": [7.5, 0, 0]
},
"front_leg_right": {
"rotation": [0, 7.5, 7.5]
},
"elbow_right": {
"rotation": [-7.5, 0, 0]
},
"frontpaw_right": {
"rotation": [7.5, 0, -7.5]
},
"ear_left2": {
"rotation": [0, 0, 5]
},
"ear_ring_left": {
"scale": 1.02
},
"ear_left3": {
"rotation": [0, 0, 7.5]
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [-0.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": [0, 0, 0]
}
}
},
"sound_effects": {
"0.125": {
"effect": "pokemon.umbreon.cry"
"rotation": [-30, 0, 5]
},
"ear_right2": {
"rotation": [0, 0, 5]
},
"ear_ring_right": {
"scale": 1.02
},
"ear_right3": {
"rotation": [0, 0, 7.5]
},
"back_leg_right": {
"rotation": [17.5, 0, 12.5]
},
"frontleg_ring_left": {
"scale": 1.02
},
"frontleg_ring_right": {
"scale": 1.02
},
"backleg_ring_left": {
"scale": 1.02
},
"backleg_ring_right": {
"scale": 1.02
},
"knee_right": {
"rotation": [-12.5, 0, 0]
},
"ankle_right": {
"rotation": [15, 0, 0]
},
"foot_right": {
"rotation": [-20, 0, -12.5]
},
"tail_ring": {
"scale": 1.02
},
"ear_left": {
"rotation": [-20, 0, 0]
}
}
}
@@ -0,0 +1,178 @@
{
"format_version": "1.8.0",
"animations": {
"animation.dunsparce.pose": {
"loop": true,
"bones": {
"body": {
"position": [0, 10, 0]
},
"torso": {
"rotation": [-29.14743, 7.43547, 13.06431]
},
"wing_left": {
"rotation": [0, 0, 30]
},
"tail": {
"rotation": [-25, 0, 0]
},
"drill": {
"rotation": [37.5, 0, 0]
},
"neck": {
"rotation": [15, 0, 0]
},
"head": {
"rotation": [11.76782, 4.2453, -19.5623]
},
"mouth_spikes_bottom": {
"rotation": [-55, 0, 0],
"position": [0, -2, 0]
},
"mouth_spikes_front": {
"position": [0, 0, 2]
},
"wing_right": {
"rotation": [0, 0, -30]
},
"mouth_open_wide_right": {
"position": [-0.1, -0.1, -0.1]
},
"mouth_open_wide_left": {
"position": [0.1, -0.1, -0.1]
}
}
},
"animation.dunsparce.mouths_test": {
"loop": "hold_on_last_frame",
"animation_length": 0.75,
"bones": {
"head": {
"rotation": [-10, 0, 0]
},
"mouth_open_right": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [-0.1, -0.1, -0.1]},
"0.5": {"pre": [-0.1, -0.1, -0.1], "post": [0, 0, 0]}
}
},
"mouth_spikes_bottom": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, -2, 0]},
"0.5": {"pre": [0, -2, 0], "post": [0, -2, -2]},
"0.75": {"pre": [0, -2, -2], "post": [0, 0, 0]}
}
},
"mouth_spike_bottom_left": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [-35, 0, 0]},
"0.75": {"pre": [-35, 0, 0], "post": [0, 0, 0]}
}
},
"mouth_spike_bottom_right": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [-35, 0, 0]},
"0.75": {"pre": [-35, 0, 0], "post": [0, 0, 0]}
}
},
"mouth_spikes_front": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 2]},
"0.75": {"pre": [0, 0, 2], "post": [0, 0, 0]}
}
},
"mouth_open_small_right": {
"position": {
"0.0": [0, 0, 0],
"0.5": {"pre": [0, 0, 0], "post": [-0.1, -0.1, -0.1]},
"0.75": {"pre": [-0.1, -0.1, -0.1], "post": [0, 0, 0]}
}
},
"mouth_open_left": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0.1, -0.1, -0.1]},
"0.5": {"pre": [0.1, -0.1, -0.1], "post": [0, 0, 0]}
}
},
"mouth_open_small_left": {
"position": {
"0.0": [0, 0, 0],
"0.5": {"pre": [0, 0, 0], "post": [0.1, -0.1, -0.1]},
"0.75": {"pre": [0.1, -0.1, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.dunsparce.ground_idle": {
"loop": true,
"bones": {
"tail": {
"rotation": [35, 0, 0]
},
"head": {
"rotation": [-5, 0, 0]
},
"wing_left": {
"rotation": [0, -15, 35]
},
"drill": {
"rotation": [30, 0, 0]
},
"mouth_spike_front_right": {
"rotation": [12.5, 0, 0]
},
"mouth_spike_front_left": {
"rotation": [12.5, 0, 0]
},
"wing_right": {
"rotation": [0, 15, -35]
}
}
},
"animation.dunsparce.hiding": {
"loop": true,
"bones": {
"torso": {
"rotation": [-67.5, 0, 0],
"position": [0, -4, 2]
},
"wing_left": {
"rotation": [-37.5, 0, 20]
},
"tail": {
"rotation": [-22.5, 0, 0]
},
"tail2": {
"rotation": [-30, 0, 0]
},
"drill": {
"rotation": [-32.5, 0, 0]
},
"head": {
"rotation": [25, 0, 0]
},
"mouth_spikes_front": {
"rotation": [35, 0, 0]
},
"neck": {
"rotation": [25, 0, 0]
},
"wing_right": {
"rotation": [-37.5, 0, -20]
}
}
},
"animation.dunsparce.blink": {
"animation_length": 0.1667
},
"animation.dunsparce.recoil": {
"animation_length": 0.0417
}
}
}
@@ -0,0 +1,191 @@
{
"format_version": "1.8.0",
"animations": {
"animation.spoink.ground_idle": {
"loop": true,
"animation_length": 1,
"bones": {
"arm_left": {
"rotation": [0, 0, "10+math.sin(query.anim_time*90*4+10)*30"]
},
"tail": {
"rotation": {
"0.0": [45, 0, "-87.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*0.6)*2"],
"0.5": [45, 0, "-87.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*0.7)*1"]
}
},
"tail2": {
"rotation": {
"0.0": ["2.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*0.7)*2", 90, -2.5],
"0.5": ["2.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*1.1)*1", 90, -2.5]
}
},
"tail3": {
"rotation": {
"0.0": [-2.5, 90, "-2.5-((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*0.8)*2"],
"0.5": [-2.5, 90, "-2.5-((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*1.4)*1"]
}
},
"tail4": {
"rotation": {
"0.0": ["-2.5-((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*0.9)*2", 90, 2.5],
"0.5": ["-2.5-((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*1.7)*1", 90, 2.5]
}
},
"tail5": {
"rotation": {
"0.0": [2.5, 90, "2.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*1.0)*2"],
"0.5": [2.5, 90, "2.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*2.0)*1"]
}
},
"tail6": {
"rotation": {
"0.0": ["2.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*1.1)*2", 90, -2.5],
"0.5": ["2.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*2.3)*1", 90, -2.5]
}
},
"tail7": {
"rotation": {
"0.0": [-2.5, 90, "-2.5-((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*1.2)*2"],
"0.5": [-2.5, 90, "-2.5-((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*2.6)*1"]
}
},
"tail8": {
"rotation": {
"0.0": ["-2.5-((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*1.3)*2", 90, 2.5],
"0.5": ["-2.5-((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*2.9)*1", 90, 2.5]
}
},
"tail9": {
"rotation": {
"0.0": [2.5, 90, "2.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10))*1.4)*2"],
"0.5": [2.5, 90, "2.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*3.2)*1"]
}
},
"tail10": {
"rotation": {
"0.0": [
"2.5+((math.clamp(math.sin(query.anim_time*90*4-0)*10,0,10)*0.6+math.clamp((math.sin(query.anim_time*90*1.5+25)-0.5)*1.5,0,1.5))*1.5)*2",
90,
-2.5
],
"0.5": ["2.5+((math.clamp(math.sin(query.anim_time*90*8)*0.6,0,2)+math.clamp(math.sin(query.anim_time*90*4.35+160)*6,0,2))*3.5)*1", 90, -2.5]
}
},
"tailbase": {
"rotation": [0, -90, 0]
},
"arm_right": {
"rotation": [0, 0, "-10-math.sin(query.anim_time*90*4+10)*30"]
},
"nose": {
"rotation": ["math.cos(q.anim_time*90*4-45)*10", 0, 0]
},
"body": {
"position": [
0,
"14.5-((math.sin(q.anim_time*90*4+140)*4+math.exp(math.clamp(math.sin(query.anim_time*90*4+90)*10,0,10)*0.28)-math.clamp(math.sin(query.anim_time*90*4-90)*2,0,2)+math.clamp(math.sin(query.anim_time*90*4-230)*1,0,1)*2.9)*0.8)",
0
]
},
"tail0": {
"position": [0, 0, 0]
},
"chest": {
"position": [0, "math.cos(q.anim_time*90*2-90)*0.5", 0]
},
"torso": {
"rotation": ["math.cos(query.anim_time*90*4)", 0, 0],
"position": [0, "math.clamp((math.sin(query.anim_time*90*1.5+25)-0.5)*1.5,0,1.5)", 0]
},
"orb": {
"rotation": ["math.cos(q.anim_time*90*4-40)*2", 0, 0],
"position": [0, "-math.cos(query.anim_time*90*4-45)*0.3", 0]
},
"spoink": {
"scale": 1
}
}
},
"animation.spoink.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.spoink.shock": {
"loop": true,
"bones": {
"eye_left": {
"scale": [0.7, 0.7, 1]
},
"eye_shine_left": {
"position": [0, 0, 0.1]
},
"eye_right": {
"scale": [0.7, 0.7, 1]
},
"eye_shine_right": {
"position": [0, 0, 0.1]
}
}
},
"animation.spoink.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.spoink.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0, 0, -0.1]
},
"eye_sad_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.spoink.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.spoink.hurt": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,192 @@
{
"format_version": "1.8.0",
"animations": {
"animation.grumpig.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [2.5, 0, 0]
},
"chest": {
"rotation": [-2.5, 0, 0]
},
"arm_left": {
"rotation": [-0.9381, 22.42171, 12.17945]
},
"arm_left2": {
"rotation": [0, 32.5, 0]
},
"hand_left": {
"rotation": [0, 0, 15]
},
"finger_front_left": {
"rotation": [0, 7.5, 12.5]
},
"finger_back_left": {
"rotation": [0, -7.5, 17.5]
},
"arm_right": {
"rotation": [-0.9381, -22.42171, -12.17945]
},
"arm_right2": {
"rotation": [0, -32.5, 0]
},
"hand_right": {
"rotation": [0, 0, -15]
},
"finger_front_right": {
"rotation": [0, -7.5, -12.5]
},
"finger_back_right": {
"rotation": [0, 7.5, -17.5]
},
"neck": {
"rotation": [5, 0, 0]
},
"leg_left": {
"rotation": [5.98448, -7.43547, -7.56398]
},
"leg_left2": {
"rotation": [2.5, 0, 0]
},
"foot_left": {
"rotation": [-8.15586, -14.65945, 10.06205]
},
"leg_right": {
"rotation": [5.98448, 7.43547, 7.56398]
},
"leg_right2": {
"rotation": [2.5, 0, 0]
},
"foot_right": {
"rotation": [-8.15586, 14.65945, -10.06205]
},
"tail3": {
"rotation": [2.5, 0, 0]
},
"tail4": {
"rotation": [0, 17.5, 0]
},
"tail5": {
"rotation": [-15, -15, 0]
},
"tail2": {
"rotation": [7.5, -5, 0]
},
"tail6": {
"rotation": [0.55404, -12.48791, -2.56062]
},
"tail7": {
"rotation": [12.5, 15, 0]
},
"tail8": {
"rotation": [0, 0, 45]
}
}
},
"animation.grumpig.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.grumpig.shock": {
"loop": true,
"bones": {
"pupil_left": {
"scale": [0.7, 0.7, 1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_open": {
"position": [0, -0.1, -0.1]
},
"pupil_right": {
"scale": [0.7, 0.7, 1]
}
}
},
"animation.grumpig.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0.1, 0, -0.1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_grunt": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.grumpig.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0.1, 0, 0]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_sad": {
"position": [0, 0, -0.1]
},
"eye_sad_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.grumpig.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0.1, 0, -0.1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_smile": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.grumpig.hurt": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0.1, 0, -0.1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_grunt": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [-0.1, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,113 @@
{
"format_version": "1.8.0",
"animations": {
"animation.snorunt.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [2.5, 0, 0]
},
"hand_left": {
"rotation": [0, -12.5, 0]
},
"hand_right": {
"rotation": [0, 5, 0]
},
"leg_left": {
"rotation": [0, -27.5, 0]
},
"leg_right": {
"rotation": [0, 27.5, 0]
}
}
},
"animation.snorunt.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.snorunt.shock": {
"loop": true,
"bones": {
"eye_left": {
"rotation": [0, 0, -5],
"scale": [0.7, 0.7, 1]
},
"eye_right": {
"rotation": [0, 0, 5],
"scale": [0.7, 0.7, 1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_big": {
"position": [0, 0.25, -0.1]
}
}
},
"animation.snorunt.angry": {
"loop": true,
"bones": {
"eye_expression_left": {
"position": [-0.5, 0, -0.1]
},
"eye_expression_right": {
"position": [0.5, 0, -0.1]
}
}
},
"animation.snorunt.sad": {
"loop": true,
"bones": {
"eye_expression_left": {
"position": [0.5, 0.25, -0.1]
},
"eye_expression_right": {
"position": [-0.5, 0.25, -0.1]
}
}
},
"animation.snorunt.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [0, 0, -0.1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_happy": {
"position": [0, 0.25, -0.1]
}
}
},
"animation.snorunt.hurt": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,114 @@
{
"format_version": "1.8.0",
"animations": {
"animation.glalie.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [10, 0, 0],
"position": [0, 5, 0]
}
}
},
"animation.glalie.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.glalie.shock": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.5, 0],
"scale": [0.6, 0.6, 1]
},
"pupil_right": {
"position": [0, -0.5, 0],
"scale": [0.6, 0.6, 1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_open": {
"position": [0, 0, -0.1]
}
}
},
"animation.glalie.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.glalie.sad": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.5, 0]
},
"pupil_right": {
"position": [0, -0.5, 0]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_small": {
"position": [0, 0, -0.1]
},
"eye_sad_left": {
"position": [0, 0, -0.1]
},
"eye_sad_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.glalie.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [0, 0, -0.1]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_smile": {
"position": [0, 0, -0.1]
}
}
},
"animation.glalie.hurt": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -4,301 +4,351 @@
"animation.honchkrow.ground_idle": {
"loop": true,
"bones": {
"wing_right": {
"rotation": [90, 85, 0],
"position": [-0.01, -4.2, 0.5]
"body": {
"position": [0, -0.6, 0]
},
"wing_right2": {
"rotation": [-0.1, -45, 0]
"wings_open": {
"scale": 0
},
"wing_right3": {
"rotation": [0.1, 60, 0]
"tail2": {
"rotation": [15, 0, 0]
},
"wing_left": {
"rotation": [90, -85, 0],
"position": [0.01, -4.2, 0.5]
"leg_right": {
"rotation": [10, 10, 0]
},
"wing_left2": {
"rotation": [-0.1, 45, 0]
"leg_right2": {
"rotation": [-25, 0, 0]
},
"wing_left3": {
"rotation": [0.1, -60, 0]
"foot_right": {
"rotation": [15, 0, 0]
},
"tail": {
"rotation": [25, 0, 0]
"plumage3": {
"rotation": [5, 0, 0]
},
"wing_left4": {
"rotation": [-0.1, 40, 0]
},
"wing_right4": {
"rotation": [-0.1, -40, 0]
"plumage4": {
"rotation": [-25, 0, 0]
}
}
},
"animation.honchkrow.air_idle": {
"loop": true,
"bones": {
"wing_left": {
"rotation": [0, -5, -15]
"body": {
"rotation": [5, 0, 0]
},
"wing_left3": {
"rotation": [0.1, -8, 0]
"tail2": {
"rotation": [37.5, 0, 0]
},
"tail": {
"rotation": [20, 0, 0]
"head_angle": {
"rotation": [-5, 0, 0]
},
"wing_left2": {
"rotation": [0.1, 10, 0]
"plumage": {
"rotation": [-5, 0, 0]
},
"leg_right": {
"rotation": [22.5, 0, 0]
"rotation": [32.5, 0, 0]
},
"leg_right2": {
"rotation": [-45, 0, 0]
},
"foot_right": {
"rotation": [13, 0, 0]
},
"claw_back_right": {
"rotation": [-45, 0, 0]
},
"toe_inner_right": {
"rotation": [30, 0, 0]
},
"toe_outer_right": {
"rotation": [30, 0, 0]
},
"claw_outer_right": {
"rotation": [45, 0, 0]
},
"leg_left": {
"rotation": [22.5, 0, 0]
},
"leg_left2": {
"rotation": [-45, 0, 0]
},
"foot_left": {
"rotation": [13, 0, 0]
},
"toe_back_left": {
"rotation": [-45, 0, 0]
},
"toe_inner_left": {
"rotation": [30, 0, 0]
},
"toe_outer_left": {
"rotation": [30, 0, 0]
},
"body": {
"rotation": [-10, 0, 0]
},
"wing_right": {
"rotation": [0, 5, 15]
},
"wing_right3": {
"rotation": [0.1, 8, 0]
"rotation": [-60, 0, 0]
},
"toe_back_right": {
"rotation": [-45, 0, 0]
},
"claw_inner_right": {
"rotation": [45, 0, 0]
},
"claw_back_left": {
"rotation": [-45, 0, 0]
},
"claw_inner_left": {
"rotation": [45, 0, 0]
},
"claw_outer_left": {
"rotation": [45, 0, 0]
},
"wing_right2": {
"rotation": [0.1, -10, 0]
},
"headai": {
"rotation": [10, 0, 0]
},
"toe_middle_left": {
"rotation": [30, 0, 0]
},
"claw_middle_left": {
"rotation": [45, 0, 0]
"rotation": [-50, 0, 0]
},
"toe_middle_right": {
"rotation": [30, 0, 0]
"rotation": [40, 0, 0]
},
"claw_middle_right": {
"toe_outer_right": {
"rotation": [45, 0, 0]
},
"claw_back_right": {
"rotation": [-30, 0, 0]
},
"toe_outer_right2": {
"rotation": [55, 0, 0]
},
"toe_middle_right2": {
"rotation": [55, 0, 0]
},
"toe_inner_right": {
"rotation": [45, 0, 0]
},
"toe_inner_right2": {
"rotation": [55, 0, 0]
},
"leg_left": {
"rotation": [32.5, 0, 0]
},
"leg_left2": {
"rotation": [-60, 0, 0]
},
"toe_back_left": {
"rotation": [-50, 0, 0]
},
"claw_back_left": {
"rotation": [-30, 0, 0]
},
"toe_inner_left": {
"rotation": [45, 0, 0]
},
"toe_inner_left2": {
"rotation": [55, 0, 0]
},
"toe_middle_left": {
"rotation": [40, 0, 0]
},
"toe_middle_left2": {
"rotation": [55, 0, 0]
},
"toe_outer_left": {
"rotation": [45, 0, 0]
},
"toe_outer_left2": {
"rotation": [55, 0, 0]
},
"wings_closed": {
"rotation": [10, 0, 0]
},
"wing_closed_right": {
"rotation": [0, 47.5, 90]
},
"wing_closed_right2": {
"rotation": [-20, 0, 0]
},
"wing_closed_left": {
"rotation": [0, -47.5, -90]
},
"wing_closed_left2": {
"rotation": [-20, 0, 0]
},
"wings_open": {
"rotation": [10, 0, 0]
}
}
},
"animation.honchkrow.air_fly": {
"loop": true,
"bones": {
"wing_left": {
"rotation": [0.5, 0, -5]
},
"wing_left3": {
"rotation": [0.01, -10, 0]
},
"torso": {
"rotation": [2.5, 0, 0]
},
"tail": {
"rotation": [5, 0, 0]
},
"wing_left2": {
"rotation": [0, 0, 0]
},
"leg_right": {
"rotation": [30, 0, 0],
"position": [0, -0.5, 0]
},
"leg_right2": {
"rotation": [-70, 0, 0]
},
"foot_right": {
"rotation": [25, 0, 0]
},
"claw_back_right": {
"rotation": [-45, 0, 0]
},
"toe_inner_right": {
"rotation": [30, 0, 0]
},
"toe_outer_right": {
"rotation": [30, 0, 0]
},
"claw_outer_right": {
"rotation": [45, 0, 0]
},
"leg_left": {
"rotation": [30, 0, 0],
"position": [0, -0.5, 0]
},
"leg_left2": {
"rotation": [-70, 0, 0]
},
"foot_left": {
"rotation": [25, 0, 0]
},
"toe_back_left": {
"rotation": [-45, 0, 0]
},
"toe_inner_left": {
"rotation": [30, 0, 0]
},
"toe_outer_left": {
"rotation": [30, 0, 0]
},
"body": {
"rotation": [12.5, 0, 0]
"rotation": [35, 0, 0]
},
"toe_back_right": {
"rotation": [-45, 0, 0]
"tail2": {
"rotation": [37.5, 0, 0]
},
"claw_inner_right": {
"rotation": [45, 0, 0]
"head_angle": {
"rotation": [-20, 0, 0]
},
"claw_back_left": {
"rotation": [-45, 0, 0]
},
"claw_inner_left": {
"rotation": [45, 0, 0]
},
"claw_outer_left": {
"rotation": [45, 0, 0]
},
"wing_right": {
"rotation": [0.5, 0, 5]
},
"wing_right3": {
"rotation": [0.01, 10, 0]
},
"headai": {
"rotation": [-10, 0, 0],
"position": [0, -0.5, -1]
},
"hat": {
"rotation": [0, 0, 0]
},
"toe_middle_left": {
"rotation": [30, 0, 0]
},
"claw_middle_left": {
"rotation": [45, 0, 0]
},
"toe_middle_right": {
"rotation": [30, 0, 0]
},
"claw_middle_right": {
"rotation": [45, 0, 0]
}
}
},
"animation.honchkrow.sleep": {
"loop": true,
"bones": {
"torso": {
"rotation": [12.5, 0, 0],
"position": [0, -3, 0]
},
"wing_right": {
"rotation": [90, 85, 0],
"position": [-0.01, -3, 0.5]
},
"wing_right2": {
"rotation": [-0.1, -45, 0]
},
"wing_right3": {
"rotation": [0.1, 55, 0]
},
"wing_left": {
"rotation": [90, -85, 0],
"position": [0.01, -3, 0.5]
},
"wing_left2": {
"rotation": [-0.1, 45, 0]
},
"wing_left3": {
"rotation": [0.1, -55, 0]
},
"tail": {
"plumage": {
"rotation": [-5, 0, 0]
},
"eyelid_right": {
"position": [0, 0, -0.1]
"leg_right": {
"rotation": [32.5, 0, 0]
},
"eyelid_left": {
"position": [0, 0, -0.1]
"leg_right2": {
"rotation": [-60, 0, 0]
},
"wing_left4": {
"rotation": [0.1, 30, 0]
"toe_back_right": {
"rotation": [-50, 0, 0]
},
"wing_right4": {
"rotation": [0.1, -30, 0]
"toe_middle_right": {
"rotation": [40, 0, 0]
},
"toe_outer_right": {
"rotation": [45, 0, 0]
},
"claw_back_right": {
"rotation": [-30, 0, 0]
},
"toe_outer_right2": {
"rotation": [55, 0, 0]
},
"toe_middle_right2": {
"rotation": [55, 0, 0]
},
"toe_inner_right": {
"rotation": [45, 0, 0]
},
"toe_inner_right2": {
"rotation": [55, 0, 0]
},
"leg_left": {
"rotation": [32.5, 0, 0]
},
"leg_left2": {
"rotation": [-60, 0, 0]
},
"toe_back_left": {
"rotation": [-50, 0, 0]
},
"claw_back_left": {
"rotation": [-30, 0, 0]
},
"toe_inner_left": {
"rotation": [45, 0, 0]
},
"toe_inner_left2": {
"rotation": [55, 0, 0]
},
"toe_middle_left": {
"rotation": [40, 0, 0]
},
"toe_middle_left2": {
"rotation": [55, 0, 0]
},
"toe_outer_left": {
"rotation": [45, 0, 0]
},
"toe_outer_left2": {
"rotation": [55, 0, 0]
},
"wing_closed_right": {
"rotation": [0, 47.5, 90]
},
"wing_closed_right2": {
"rotation": [-20, 0, 0]
},
"wing_closed_left": {
"rotation": [0, -47.5, -90]
},
"wing_closed_left2": {
"rotation": [-20, 0, 0]
}
}
},
"animation.honchkrow.blink": {
"animation_length": 0.16667,
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
"0.0": [-0.1, 0, -0.1],
"0.125": {"pre": [-0.1, 0, -0.1], "post": [-0.1, 0, -0.1]},
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
"0.0": [0.1, 0, -0.1],
"0.125": {"pre": [0.1, 0, -0.1], "post": [0.1, 0, -0.1]},
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.honchkrow.wangs": {
"loop": true,
"bones": {
"wing_open_right": {
"rotation": [0, -15, 0]
},
"wing_open_right2": {
"rotation": [0, 10, 0]
},
"wing_open_left": {
"rotation": [0, 15, 0]
},
"wing_open_left2": {
"rotation": [0, -10, 0]
},
"feathers_inner_right": {
"rotation": [0, 5, 0]
},
"feathers_inner_left": {
"rotation": [0, -5, 0]
}
}
},
"animation.honchkrow.angry": {
"loop": true,
"bones": {
"jaw": {
"rotation": [32.5, 0, 0]
},
"eye_emote_right": {
"scale": [1, 1.5, 1]
},
"eye_emote_left": {
"scale": [1, 1.5, 1]
}
}
},
"animation.honchkrow.sad": {
"loop": true,
"bones": {
"eye_emote_right": {
"position": [1, 0, 0]
},
"eye_emote_left": {
"position": [-1, 0, 0]
}
}
},
"animation.honchkrow.surprised": {
"loop": true,
"bones": {
"jaw": {
"rotation": [32.5, 0, 0]
},
"pupil_right": {
"scale": [0.8, 0.8, 1]
},
"pupil_left": {
"scale": [0.8, 0.8, 1]
},
"eye_emote_right": {
"position": [0.5, 0.5, 0],
"scale": [2, 1, 1]
},
"eye_emote_left": {
"position": [-0.5, 0.5, 0],
"scale": [2, 1, 1]
}
}
},
"animation.honchkrow.disintrested": {
"loop": true,
"bones": {
"pupil_right": {
"position": [0, -0.25, 0],
"scale": [1, 0.5, 1]
},
"pupil_left": {
"position": [0, -0.25, 0],
"scale": [1, 0.5, 1]
},
"eye_emote_right": {
"position": [0.1, 0, 0.1]
},
"eye_emote_left": {
"position": [-0.1, 0, 0.1]
}
}
},
"animation.honchkrow.happy": {
"loop": true,
"bones": {
"jaw": {
"rotation": [30, 0, 0]
},
"eyelid_happy_right": {
"position": [-0.1, 0, -0.1]
},
"eyelid_happy_left": {
"position": [0.1, 0, -0.1]
}
}
},
"animation.honchkrow.hurt": {
"loop": true,
"bones": {
"jaw": {
"rotation": [30, 0, 0]
},
"eyelid_hurt_right": {
"position": [-0.1, 0, -0.1]
},
"eyelid_hurt_left": {
"position": [0.1, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,224 @@
{
"format_version": "1.8.0",
"animations": {
"animation.bronzor.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": ["10+math.sin(q.anim_time*90*1-60)*3", 0, "math.sin(q.anim_time*90*0.5)*5+math.sin(q.anim_time*90*3)"],
"position": ["math.sin(q.anim_time*90*0.5)", "4+math.sin(q.anim_time*90*1+230)", 0]
}
}
},
"animation.bronzor.ground_walk": {
"loop": true,
"bones": {
"body": {
"rotation": ["22+math.sin(q.anim_time*90*1.5-60)*5", 0, "math.sin(q.anim_time*90*1 )*3+math.sin(q.anim_time*90*5 )*0.5"],
"position": ["math.sin(q.anim_time*90*0.5)*0.5", "3.8+math.sin(q.anim_time*90*0.6+230)*0.5", "math.sin(q.anim_time*90*2)*0.5"]
}
}
},
"animation.bronzor.idle_quirk": {
"animation_length": 3.5,
"bones": {
"body": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": {
"pre": [0, 0, 0],
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.1667": {
"post": [304, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [364, 9, 0],
"lerp_mode": "catmullrom"
},
"2.0417": {
"post": [364, 345, 0],
"lerp_mode": "catmullrom"
},
"2.4167": {
"post": [360.5182, 405.98642, -1.75324],
"lerp_mode": "catmullrom"
},
"3.0": {
"post": [360, 360, 0],
"lerp_mode": "catmullrom"
},
"3.5": {
"post": [360, 360, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": [0, 0, 0],
"0.25": {
"pre": [0, -0.2, 0],
"post": [0, -0.2, 0],
"lerp_mode": "catmullrom"
},
"0.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [0, 1.8, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [0, 1.8, 0],
"lerp_mode": "catmullrom"
},
"1.2917": {
"post": [0, -0.3, 0],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.7083": {
"post": [0, 1.8, 0],
"lerp_mode": "catmullrom"
},
"2.25": {
"post": [0, 1.8, 0],
"lerp_mode": "catmullrom"
},
"2.4583": {
"post": [0, -0.3, 0],
"lerp_mode": "catmullrom"
},
"3.0": {
"post": [0, -0.2, 0],
"lerp_mode": "catmullrom"
},
"3.2917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"3.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"pupil_left": {
"position": {
"0.2083": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"1.125": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"1.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
"1.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"1.4167": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"3.0833": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"3.125": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
}
},
"pupil_closed_left": {
"position": {
"0.2083": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"1.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"1.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
"1.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"1.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"3.0833": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"3.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
}
},
"pupil_right": {
"position": {
"0.2083": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"1.125": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"1.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
"1.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"1.4167": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"3.0833": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"3.125": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
}
},
"pupil_closed_right": {
"position": {
"0.2083": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"1.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"1.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
"1.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"1.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"3.0833": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"3.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.bronzor.blink": {
"animation_length": 0.1667,
"bones": {
"pupil_left": {
"position": {
"0.0": [0, 0, 0.1],
"0.125": [0, 0, 0.1],
"0.1667": [0, 0, 0]
}
},
"pupil_closed_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"pupil_right": {
"position": {
"0.0": [0, 0, 0.1],
"0.125": [0, 0, 0.1],
"0.1667": [0, 0, 0]
}
},
"pupil_closed_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.bronzor.sleep": {
"animation_length": 22.5833,
"bones": {
"body": {
"rotation": [
"64.6585+math.sin(q.anim_time*90*0.5+180)*5+math.sin(q.anim_time*90*2.5)*0.5",
"18.2688+math.sin(q.anim_time*90*0.2+60)*2",
"13.3647+math.sin(q.anim_time*90*0.5)*3"
],
"position": [0, "2.2+math.sin(q.anim_time*90*0.3+180)", 0]
},
"pupil_left": {
"position": [0, 0, 0.1]
},
"pupil_closed_left": {
"position": [0, 0, -0.1]
},
"pupil_right": {
"position": [0, 0, 0.1]
},
"pupil_closed_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,86 @@
{
"format_version": "1.8.0",
"animations": {
"animation.bronzong.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [
"5.5+math.sin(q.anim_time*90*0.4+90)*3",
"math.sin(q.anim_time*90*2+180)*0.3",
"math.sin(q.anim_time*90*0.7+180)*1.5 +math.sin(q.anim_time*90*2.5+180)*0.25"
],
"position": ["math.sin(q.anim_time*90*0.5+165)*0.8", "4+math.sin(q.anim_time*90*0.7)*1.2", 0]
},
"arm_left": {
"rotation": [0, 0, 55]
},
"arm_left2": {
"rotation": [0, "1+math.sin(q.anim_time*90*0.8)*3.3", "-12.5+math.sin(q.anim_time*90*0.7)*1.3"]
},
"arm_left3": {
"rotation": [0, "math.sin(q.anim_time*90*0.7+56)*4.6", "-7.5+math.sin(q.anim_time*90*0.7+45)*2.5"]
},
"arm_left4": {
"rotation": [0, "math.sin(q.anim_time*90*0.7+90)*5.6", "-10+math.sin(q.anim_time*90*0.7+130)*3"]
},
"arm_right": {
"rotation": [0, 0, -55]
},
"arm_right2": {
"rotation": [0, "-1+math.sin(q.anim_time*90*0.8)*3.3", "12.5-math.sin(q.anim_time*90*0.7)*1.3"]
},
"arm_right3": {
"rotation": [0, "-(math.sin(q.anim_time*90*0.7+56)*4.6)", "7.5-math.sin(q.anim_time*90*0.7+45)*2.5"]
},
"arm_right4": {
"rotation": [0, "-(math.sin(q.anim_time*90*0.7+90)*5.6)", "10-math.sin(q.anim_time*90*0.7+130)*3"]
}
}
},
"animation.bronzong.ground_walk": {
"loop": true,
"bones": {
"body": {
"rotation": [32.5, 0, 0],
"position": [0, 5, 0]
},
"arm_left": {
"rotation": [0, -10, 50]
},
"arm_left2": {
"rotation": [1.31845, -9.91358, -7.61435]
},
"arm_left3": {
"rotation": [0.88045, -9.96156, -5.07673]
},
"arm_left4": {
"rotation": [1.75378, -9.84655, -10.15108]
},
"arm_right": {
"rotation": [0, 10, -50]
},
"arm_right2": {
"rotation": [1.31845, 9.91358, 7.61435]
},
"arm_right3": {
"rotation": [0.88045, 9.96156, 5.07673]
},
"arm_right4": {
"rotation": [1.75378, 9.84655, 10.15108]
}
}
},
"animation.bronzong.light_eyes": {
"loop": true,
"bones": {
"eye_light_left": {
"position": [0, 0, -1]
},
"eye_light_right": {
"position": [0, 0, -1]
}
}
}
}
}
@@ -3,565 +3,160 @@
"animations": {
"animation.leafeon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
"ear_left": {
"rotation": [35, -30, 0]
},
"ear2_right": {
"rotation": [0, -5, 0]
},
"ear_right": {
"rotation": ["math.sin(q.anim_time*90*2+90)-0.5*math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
"rotation": [35, 30, 0]
},
"ear_left": {
"rotation": ["math.sin(q.anim_time*90*2+90)-0.5*math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
"ear2_left": {
"rotation": [0, 5, 0]
},
"forehead_leaf": {
"rotation": [10, 0, 0]
},
"forehead_leaf2": {
"rotation": [-20, 0, 0]
},
"neck_leaf": {
"rotation": [-10, 0, 0]
},
"neck_leaf2": {
"rotation": [30, 0, 0]
},
"neck_leaf3": {
"rotation": [25, 0, 0]
},
"tail": {
"rotation": ["60+6*(math.sin(q.anim_time*90*2)*1)+6*(math.sin(q.anim_time*90*2/2)*1)", 0, 0]
"rotation": [20, 0, 0]
},
"tail2": {
"rotation": ["5+6*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
"rotation": [40, 0, 0]
},
"tail3": {
"rotation": ["5+6*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
},
"ear_left2": {
"rotation": ["2*math.sin(q.anim_time*90*2+60)-math.clamp(math.sin(q.anim_time*90*2-120),-1,1)", 0, 0]
},
"ear_right2": {
"rotation": ["2*math.sin(q.anim_time*90*2+60)-math.clamp(math.sin(q.anim_time*90*2-120),-1,1)", 0, 0]
"rotation": [45, 0, 0]
},
"tail4": {
"rotation": ["5+6*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
"rotation": [-45, 0, 0]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
"front_leg_left": {
"rotation": [-2, 0, -1]
},
"leaf_top": {
"rotation": ["math.sin(q.anim_time*90*2+120)-0.5*math.clamp(math.sin(q.anim_time*90*2-60),-2,2)", 0, 0]
}
}
},
"animation.leafeon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
"elbow_left": {
"rotation": [-2, 0, 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
"frontpaw_left": {
"rotation": [4, 0, 1]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
"front_leg_right": {
"rotation": [-2, 0, 1]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
"elbow_right": {
"rotation": [-2, 0, 0]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
"frontpaw_right": {
"rotation": [4, 0, -1]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
"back_leg_right": {
"rotation": [0, 2.5, 5]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"foot_right": {
"rotation": [0, 0, -5]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
"back_leg_left": {
"rotation": [0, -2.5, -5]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
},
"leaf_top": {
"rotation": ["0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-1,1)", 0, 0]
}
}
},
"animation.leafeon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"ear_right": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"ear_left": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
},
"tail": {
"rotation": ["20-math.sin(q.anim_time*90*4*2+60)*12", 0, 0]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*4*2-30)*12", 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*4*2)*12", 0, 0]
},
"ear_left2": {
"rotation": ["-5-4*math.sin(q.anim_time*90*4*2+15)-math.clamp(4*math.sin(q.anim_time*90*4*2+60),-4,4)", 0, 0]
},
"ear_right2": {
"rotation": ["-5-4*math.sin(q.anim_time*90*4*2+15)-math.clamp(4*math.sin(q.anim_time*90*4*2+60),-4,4)", 0, 0]
},
"tail4": {
"rotation": ["-math.sin(q.anim_time*90*4*2-60)*12", 0, 0]
},
"leaf_top": {
"rotation": ["-4*math.sin(q.anim_time*90*4*2+15)-math.clamp(4*math.sin(q.anim_time*90*4*2+60),-4,4)", 0, 0]
"foot_left": {
"rotation": [0, 0, 5]
}
}
},
"animation.leafeon.blink": {
"animation_length": 0.1667,
"bones": {
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.leafeon.cry": {
"animation_length": 2,
"animation.leafeon.pose": {
"loop": true,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5833": [0, 0, 0],
"2.0": [0, 0, 0]
}
"body": {
"rotation": [0, 42.5, 0]
},
"leaf_top": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [3.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [-2.2637, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0": {
"post": [-1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0833": {
"post": [-3.44058, 0, 0],
"lerp_mode": "catmullrom"
},
"1.375": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.625": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"mouth": {
"position": {
"0.0": [0, 0, 0],
"0.1667": [0, 0, 0],
"0.2083": [0, 0, "-0.1"],
"1.0": [0, 0, "-0.1"],
"1.0417": [0, 0, 0]
}
"head_angle": {
"rotation": [4.70412, -28.02432, 11.17023]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-6.2637, 2.13879, 4.91341],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [-9.44058, 2.38503, 4.804],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [20, -30, 10]
},
"ear_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-6.2637, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [-9.44058, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ear2_right": {
"rotation": [0, -10, 0]
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [12.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-6.2637, -2.13879, -4.91341],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [-9.44058, -2.38503, -4.804],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [27, 27.5, 20.5]
},
"ear_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2083": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-6.2637, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0417": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.125": {
"post": [-9.44058, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"2.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
}
},
"sound_effects": {
"0.0417": {
"effect": "pokemon.leafeon.cry"
"ear2_left": {
"rotation": [0, 20, 0]
},
"forehead_leaf": {
"rotation": [0, 0, 5]
},
"tail": {
"rotation": [12.5, 0, 0]
},
"tail2": {
"rotation": [37.5, 0, 0]
},
"tail3": {
"rotation": [57.5, 0, 0]
},
"tail4": {
"rotation": [-45, 0, 0]
},
"front_leg_left": {
"rotation": [-15, 0, 0]
},
"frontpaw_left": {
"rotation": [17.5, 0, 0]
},
"front_leg_right": {
"rotation": [15, 0, 0]
},
"elbow_right": {
"rotation": [-15, 0, 0]
},
"back_leg_left": {
"rotation": [10, 0, -10]
},
"foot_left": {
"rotation": [-9.99762, -0.10901, 10.00238]
}
}
}
@@ -3,530 +3,178 @@
"animations": {
"animation.glaceon.ground_idle": {
"loop": true,
"override_previous_animation": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
},
"ear_right": {
"rotation": ["2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
},
"ear_left": {
"rotation": ["2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
},
"tail": {
"rotation": ["30+8*(math.sin(q.anim_time*90*2)*1)+8*(math.sin(q.anim_time*90*2/2)*1)", 0, 0]
},
"tail2": {
"rotation": ["15+8*(math.sin(q.anim_time*90*2-90)*1)+8*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
},
"tail3": {
"rotation": ["15+8*(math.sin(q.anim_time*90*2-90)*1)+8*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
},
"hair_left": {
"rotation": ["-math.sin(q.anim_time*90*2+30)+0.5*math.clamp(math.sin(q.anim_time*90*2-150),-1,1)", 0, 0]
},
"hair_left2": {
"rotation": ["2*math.sin(q.anim_time*90*2+150)-math.clamp(math.sin(q.anim_time*90*2-30),-1,1)", 0, 0]
},
"hair_right": {
"rotation": ["-math.sin(q.anim_time*90*2+30)+0.5*math.clamp(math.sin(q.anim_time*90*2-150),-1,1)", 0, 0]
},
"hair_right2": {
"rotation": ["2*math.sin(q.anim_time*90*2+150)-math.clamp(math.sin(q.anim_time*90*2-30),-1,1)", 0, 0]
}
}
},
"animation.glaceon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
},
"hair_left": {
"rotation": ["-math.sin(q.anim_time*90*8+45)-math.clamp(math.sin(q.anim_time*90*8+90),-1,1)", 0, 0]
},
"hair_left2": {
"rotation": [0, 0, "math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)"]
},
"hair_right": {
"rotation": ["-math.sin(q.anim_time*90*8+45)-math.clamp(math.sin(q.anim_time*90*8+90),-1,1)", 0, 0]
},
"hair_right2": {
"rotation": [0, 0, "-math.sin(q.anim_time*90*8+45)-math.clamp(math.sin(q.anim_time*90*8+90),-1,1)"]
}
}
},
"animation.glaceon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"ear_right": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"ear_left": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
"position": [0, -0.2, 0]
},
"tail": {
"rotation": ["10-math.sin(q.anim_time*90*4*2+60)*12", 0, 0]
"rotation": [20, 0, 0]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*4*2-30)*14", 0, 0]
"rotation": [15, 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*4*2)*16", 0, 0]
"rotation": [10, 0, 0]
},
"hair_left": {
"rotation": ["-5+2*math.sin(q.anim_time*90*4*2+45)+2*math.clamp(math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
"tail4": {
"rotation": [12.5, 0, 0]
},
"hair_left2": {
"rotation": ["2*math.sin(q.anim_time*90*4*2+15)+2*math.clamp(math.sin(q.anim_time*90*4*2+60),-4,4)", 0, 0]
"front_leg_left": {
"rotation": [8, -2.5, -3]
},
"hair_right": {
"rotation": ["-5+2*math.sin(q.anim_time*90*4*2+45)+2*math.clamp(math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
"elbow_left": {
"rotation": [-13.5, 0, 0]
},
"hair_right2": {
"rotation": ["2*math.sin(q.anim_time*90*4*2+15)+2*math.clamp(math.sin(q.anim_time*90*4*2+60),-4,4)", 0, 0]
"frontpaw_left": {
"rotation": [6, 0, 3]
},
"front_leg_right": {
"rotation": [8, 2.5, 3]
},
"elbow_right": {
"rotation": [-13.5, 0, 0]
},
"frontpaw_right": {
"rotation": [6, 0, -3]
},
"back_leg_left": {
"rotation": [8, -2.5, -5]
},
"knee_left": {
"rotation": [-5, 0, 0]
},
"ankle_left": {
"rotation": [-3, 0, 0]
},
"foot_left": {
"rotation": [0, 0, 5]
},
"back_leg_right": {
"rotation": [8, 2.5, 5]
},
"knee_right": {
"rotation": [-5, 0, 0]
},
"ankle_right": {
"rotation": [-3, 0, 0]
},
"foot_right": {
"rotation": [0, 0, -5]
}
}
},
"animation.glaceon.blink": {
"animation_length": 0.1667,
"bones": {
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.glaceon.cry": {
"animation_length": 1.75,
"animation.glaceon.pose": {
"loop": true,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.125": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": [0, 0, 0]
}
"glaceon": {
"rotation": [0, -55, 0]
},
"mouth": {
"position": {
"0.0": [0, 0, 0],
"0.0417": [0, 0, -0.1],
"1.4167": [0, 0, -0.1],
"1.4583": [0, 0, 0]
}
"torso": {
"rotation": [5, 0, 0]
},
"torso2": {
"rotation": [-5, 0, 0]
},
"torso3": {
"rotation": [-5, 0, 0]
},
"head_angle": {
"rotation": [-7.5, 31, -12]
},
"hair_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.875": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [-1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [-23.99144, -1.17962, -26.96951]
},
"hair_left2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.875": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [-1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"rotation": [0, 0, 10]
},
"hair_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.875": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [-1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"hair_left3": {
"rotation": [0, 0, 12.5]
},
"hair_right2": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.5417": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.875": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [-1.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"hair_left4": {
"rotation": [0, 0, 12.5]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [0, 0, 2.5],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, 7.4],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [0, 0, 0.3],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": [0, 0, 0]
}
"rotation": [24, -37.5, -38.5]
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [0, 0, -2.5],
"lerp_mode": "catmullrom"
},
"0.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7917": {
"post": [0, 0, -7.4],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [0, 0, -0.3],
"lerp_mode": "catmullrom"
},
"1.4583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.75": [0, 0, 0]
}
}
},
"sound_effects": {
"0.0": {
"effect": "pokemon.glaceon.cry"
"rotation": [27.5, 37.5, -12.5]
},
"tail": {
"rotation": [-11.1003, -13.75392, -4.78274]
},
"front_leg_left": {
"rotation": [-12.589, -8.403, -3.25155]
},
"frontpaw_left": {
"rotation": [12.48848, -0.54094, 2.44081]
},
"front_leg_right": {
"rotation": [7.5, 0, 0]
},
"elbow_right": {
"rotation": [-10, 0, 0]
},
"back_leg_left": {
"rotation": [15, 0, -15]
},
"foot_left": {
"rotation": [-14.83045, 1.29256, 14.94548]
},
"back_leg_right": {
"rotation": [7.5, 0, 20]
},
"foot_right": {
"rotation": [-7.50238, -0.10901, -20.00238]
},
"tail2": {
"rotation": [22.5, 0, 0]
},
"tail3": {
"rotation": [30, 0, 0]
},
"tail4": {
"rotation": [20, 0, 0]
},
"hair_right": {
"rotation": [-15.54836, 12.65737, 8.61486]
},
"hair_right2": {
"rotation": [0, 0, -10]
},
"hair_right3": {
"rotation": [0, 0, -17.5]
},
"hair_right4": {
"rotation": [0, 0, -7.5]
}
}
}
@@ -0,0 +1,287 @@
{
"format_version": "1.8.0",
"animations": {
"animation.froslass.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [5, 0, 0],
"position": [0, 1, 0]
},
"torso2": {
"rotation": [-5, 0, 0]
},
"ribbon_left": {
"rotation": [10.23772, 12.3071, 2.20462]
},
"torso3": {
"rotation": [-2.5, 0, 0]
},
"neck": {
"rotation": [5, 0, 0]
},
"head": {
"rotation": [5, 0, 0]
},
"arm_left": {
"rotation": [5, 0, -10]
},
"arm_left2": {
"rotation": [-5, 0, -10]
},
"arm_left3": {
"rotation": [-7.5, 0, 0]
},
"arm_left_back": {
"rotation": [0, 7.5, 0]
},
"skirt": {
"rotation": [5, 0, 0]
},
"skirt_front": {
"rotation": [2.5, 0, 0]
},
"skirt_back": {
"rotation": [5, 0, 0]
},
"skirt_left": {
"rotation": [0, 0, -2.5]
},
"skirt_right": {
"rotation": [0, 0, 2.5]
},
"finger1_left": {
"rotation": [-9.25249, 3.81024, 22.19157]
},
"finger2_left": {
"rotation": [0, 0, 17.5]
},
"finger3_left": {
"rotation": [14.89149, -9.29798, 31.28223]
},
"arm_right": {
"rotation": [5, 0, 10]
},
"arm_right2": {
"rotation": [-5, 0, 10]
},
"arm_right3": {
"rotation": [-7.5, 0, 0]
},
"arm_right_back": {
"rotation": [0, 5, 0]
},
"fingers_right": {
"rotation": [-5, 0, 0]
},
"finger1_right": {
"rotation": [-13.90319, -7.98133, -15.62489]
},
"finger2_right": {
"rotation": [0, 0, -15]
},
"finger3_right": {
"rotation": [9.25249, 3.81024, -22.19157]
},
"ribbon_right": {
"rotation": [10.23772, -12.3071, -2.20462]
}
}
},
"animation.froslass.battle_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [5, 0, 0],
"position": [0, 1, 0]
},
"torso2": {
"rotation": [-5, 0, 0]
},
"ribbon_left": {
"rotation": [10.23772, 12.3071, 2.20462]
},
"torso3": {
"rotation": [-2.5, 0, 0]
},
"neck": {
"rotation": [5, 0, 0]
},
"head": {
"rotation": [5, 0, 0]
},
"arm_left": {
"rotation": [5, 0, -10]
},
"arm_left2": {
"rotation": [-5, 0, -10]
},
"arm_left3": {
"rotation": [-7.5, 0, 0]
},
"arm_left_back": {
"rotation": [0, 7.5, 0]
},
"skirt": {
"rotation": [5, 0, 0]
},
"skirt_front": {
"rotation": [2.5, 0, 0]
},
"skirt_back": {
"rotation": [5, 0, 0]
},
"skirt_left": {
"rotation": [0, 0, -2.5]
},
"skirt_right": {
"rotation": [0, 0, 2.5]
},
"finger1_left": {
"rotation": [-9.25249, 3.81024, 22.19157]
},
"finger2_left": {
"rotation": [0, 0, 17.5]
},
"finger3_left": {
"rotation": [14.89149, -9.29798, 31.28223]
},
"arm_right": {
"rotation": [-43.34873, 14.90631, 5.31747]
},
"arm_right2": {
"rotation": [-40.144, -22.32924, -24.25045]
},
"arm_right3": {
"rotation": [-14.94452, 1.1229, -57.97513]
},
"arm_right_back": {
"rotation": [0, 5, 0]
},
"fingers_right": {
"rotation": [-5, 0, 0]
},
"finger1_right": {
"rotation": [-13.90319, -7.98133, -15.62489]
},
"finger2_right": {
"rotation": [0, 0, -15]
},
"finger3_right": {
"rotation": [9.25249, 3.81024, -22.19157]
},
"ribbon_right": {
"rotation": [10.23772, -12.3071, -2.20462]
}
}
},
"animation.froslass.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_open_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.125": [-0.1, 0, 0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_closed_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_open_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.125": [0.1, 0, 0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_closed_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.froslass.shock": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.2, 0],
"scale": [0.7, 0.6, 1]
},
"eyelid_open_left": {
"position": [-0.1, 0, 0.1]
},
"pupil_right": {
"position": [0, -0.2, 0],
"scale": [0.7, 0.6, 1]
},
"eyelid_open_right": {
"position": [0.1, 0, 0.1]
}
}
},
"animation.froslass.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.froslass.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0.1, 0, -0.1]
},
"eye_sad_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.froslass.happy": {
"loop": true,
"bones": {
"eyelid_open_left": {
"position": [-0.1, 0, 0.1]
},
"eyelid_open_right": {
"position": [0.1, 0, 0.1]
},
"eyelid_happy_left": {
"position": [0.1, 0, -0.1]
},
"eyelid_happy_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.froslass.hurt": {
"loop": true,
"bones": {
"eyelid_open_left": {
"position": [-0.1, 0, 0.1]
},
"eyelid_open_right": {
"position": [0.1, 0, 0.1]
},
"eyelid_recoil_left": {
"position": [0.1, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [-0.1, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,213 @@
{
"format_version": "1.8.0",
"animations": {
"animation.munna.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [-4.98043, 0.29177, 0.31964],
"position": [0, 3, 0]
},
"leg_front_left": {
"rotation": [9.97359, 0.72047, 7.4455]
},
"leg_back_left": {
"rotation": [-7.5, 0, 12.5]
},
"leg_front_right": {
"rotation": [9.97359, -0.72047, -7.4455]
},
"cloud": {
"scale": 0
}
}
},
"animation.munna.blink": {
"animation_length": 0.1667,
"bones": {
"eyelash_left": {
"position": {
"0.0": [0, -3.75, 0],
"0.125": [0, -3.75, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"eyelash_left2": {
"position": {
"0.0": [0, -3.75, 0],
"0.125": [0, -3.75, 0],
"0.1667": [0, 0, 0]
}
},
"eyelash_right": {
"position": {
"0.0": [0, -3.75, 0],
"0.125": [0, -3.75, 0],
"0.1667": [0, 0, 0]
}
},
"eyelash_right2": {
"position": {
"0.0": [0, -3.75, 0],
"0.125": [0, -3.75, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.munna.shock": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.75, 0],
"scale": [1, 0.7, 0.7]
},
"muzzle": {
"rotation": [-27.5, 0, 0]
},
"pupil_right": {
"position": [0, -0.75, 0],
"scale": [1, 0.7, 0.7]
},
"jaw": {
"rotation": [7.5, 0, 0]
}
}
},
"animation.munna.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0.1, 0, 0]
},
"eyelash_left": {
"position": [0, -0.25, 0]
},
"eyelash_left2": {
"position": [0, 0.25, 0]
},
"pupil_left": {
"position": [0, -0.25, 0]
},
"eye_angry_right": {
"position": [-0.1, 0, 0]
},
"eyelash_right": {
"position": [0, -0.25, 0]
},
"eyelash_right2": {
"position": [0, 0.25, 0]
}
}
},
"animation.munna.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0.1, 0.5, 0]
},
"eyelash_left2": {
"position": [0, -0.5, 0]
},
"eye_sad_right": {
"position": [-0.1, 0.5, 0]
},
"eyelash_right2": {
"position": [0, -0.5, 0]
}
}
},
"animation.munna.happy": {
"loop": true,
"bones": {
"eyelash_left": {
"position": [-0.1, 0, 0]
},
"eyelash_left2": {
"position": [-0.1, 0, 0]
},
"eyelid_happy_left": {
"position": [0.1, 0, 0]
},
"muzzle": {
"rotation": [-27.5, 0, 0]
},
"eyelash_right": {
"position": [0.1, 0, 0]
},
"eyelash_right2": {
"position": [0.1, 0, 0]
},
"eyelid_happy_right": {
"position": [-0.1, 0, 0]
},
"jaw": {
"rotation": [7.5, 0, 0]
}
}
},
"animation.munna.hurt": {
"loop": true,
"bones": {
"eyelash_left": {
"position": [0, -2, 0]
},
"eyelash_left2": {
"position": [0, -1, 0]
},
"eyelid_recoil_left": {
"position": [0.1, 0, 0]
},
"eyelash_right": {
"position": [0, -2, 0]
},
"eyelash_right2": {
"position": [0, -1, 0]
},
"eyelid_recoil_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.munna.render": {
"loop": true,
"bones": {
"body": {
"rotation": [-15, 45, 0]
},
"jaw": {
"rotation": [10, 0, 0]
},
"muzzle": {
"rotation": [-22.5, 0, 0]
},
"leg_front_left": {
"rotation": [12.5, 0, 0]
},
"leg_back_left": {
"rotation": [15, 0, 0]
},
"leg_front_right": {
"rotation": [-15, 0, 0]
},
"leg_back_right": {
"rotation": [10, 0, -10]
}
}
}
}
}
@@ -0,0 +1,233 @@
{
"format_version": "1.8.0",
"animations": {
"animation.musharna.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [55.86272, 35.37604, 6.30048],
"position": [0, 9, 0]
},
"head2": {
"rotation": [0, 0, 0]
},
"muzzle": {
"rotation": [7.5, 0, 0]
},
"leg_left": {
"rotation": [-32.66492, 9.68323, -2.62049]
},
"leg_left2": {
"rotation": [0, 7.5, 0]
},
"leg_right": {
"rotation": [-32.66492, -9.68323, 2.62049]
},
"leg_right2": {
"rotation": [0, -7.5, 0]
},
"arm_right": {
"rotation": [10.88852, -16.41371, -6.15491]
},
"arm_left": {
"rotation": [10.88852, 16.41371, 6.15491]
},
"arm_left2": {
"rotation": [0, 10, 0]
},
"arm_right2": {
"rotation": [0, -10, 0]
},
"cloud": {
"rotation": [-7.5, 0, 0]
},
"cloud3": {
"rotation": [-5, 0, 0]
},
"cloud4": {
"rotation": [0, -12.5, 0]
},
"cloud6": {
"rotation": [-2.5, 0, 0]
},
"cloud8": {
"rotation": [10, 0, 0]
},
"cloud9": {
"rotation": [-15, 0, 0]
},
"cloud10": {
"rotation": [22.5, 0, 0]
},
"cloud2": {
"rotation": [-2.5, 0, 0]
}
}
},
"animation.musharna.open_eyes": {
"loop": true,
"bones": {
"eye_closed_left": {
"position": [-0.1, 0, 0]
},
"eye_open_left": {
"position": [0.1, 0, 0]
},
"eyelash_left": {
"position": [0, 3.7, 0]
},
"eye_closed_right": {
"position": [0.1, 0, 0]
},
"eye_open_right": {
"position": [-0.1, 0, 0]
},
"eyelash_right": {
"position": [0, 3.7, 0]
}
}
},
"animation.musharna.sad": {
"loop": true,
"bones": {
"eye_closed_left": {
"position": [-0.1, 0, 0]
},
"eye_sad_left": {
"position": [0.1, 0, 0]
},
"eye_closed_right": {
"position": [0.1, 0, 0]
},
"eye_sad_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.musharna.happy": {
"loop": true,
"bones": {
"eye_closed_left": {
"position": [-0.1, 0, 0]
},
"eye_happy_left": {
"position": [0.1, 0, 0]
},
"jaw": {
"rotation": [50, 0, 0]
},
"eye_closed_right": {
"position": [0.1, 0, 0]
},
"eye_happy_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.musharna.hurt": {
"loop": true,
"bones": {
"eye_closed_left": {
"position": [-0.1, 0, 0]
},
"eye_recoil_left": {
"position": [0.1, 0, 0]
},
"eye_closed_right": {
"position": [0.1, 0, 0]
},
"eye_recoil_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.musharna.render": {
"loop": true,
"bones": {
"body": {
"rotation": [41.93206, 54.77621, -11.63655],
"position": [0, 9, 0]
},
"head2": {
"rotation": [0, 0, 0]
},
"muzzle": {
"rotation": [7.5, 0, 0]
},
"leg_left": {
"rotation": [-35.16492, 9.68323, -2.62049]
},
"leg_left2": {
"rotation": [0, 7.5, 0]
},
"leg_right": {
"rotation": [-20.16492, -9.68323, 2.62049]
},
"leg_right2": {
"rotation": [0, -7.5, 0]
},
"arm_right": {
"rotation": [30.88852, -16.41371, -6.15491]
},
"arm_left": {
"rotation": [23.38852, 16.41371, 6.15491]
},
"arm_left2": {
"rotation": [0, 10, 0]
},
"arm_right2": {
"rotation": [0, -10, 0]
},
"cloud": {
"rotation": [-7.5, 0, 0]
},
"cloud3": {
"rotation": [-5, 0, 0]
},
"cloud4": {
"rotation": [1.71343, -13.36898, -7.6438]
},
"cloud6": {
"rotation": [-2.15993, -3.21132, -12.08681]
},
"cloud8": {
"rotation": [11.65589, -11.31335, -16.60179]
},
"cloud9": {
"rotation": [-15.10257, -2.86544, 4.09918]
},
"cloud10": {
"rotation": [21.55613, -6.60796, 16.24074]
},
"cloud2": {
"rotation": [-2.9377, 4.2453, -11.76782]
},
"chest": {
"rotation": [2.5, 0, 0]
},
"cloud5": {
"rotation": [-2.42287, 1.91134, 4.62111]
},
"cloud7": {
"rotation": [0, 0, 0]
}
}
},
"animation.musharna.portrait": {
"loop": true,
"bones": {
"body": {
"rotation": [54.46871, -24.19344, 6.49763]
}
}
},
"animation.musharna.profile": {
"loop": true,
"bones": {
"body": {
"rotation": [55, 0, 0]
}
}
}
}
}
@@ -0,0 +1,189 @@
{
"format_version": "1.8.0",
"animations": {
"animation.zebstrika.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [7.5, 0, 0]
},
"torso2": {
"rotation": [-12.5, 0, 0]
},
"leg_front_left": {
"rotation": [0, -2.5, 0]
},
"leg_front_right": {
"rotation": [0, 2.5, 0]
},
"leg_back_left": {
"rotation": [0, -2.5, -1]
},
"leg_back_right": {
"rotation": [0, 2.5, 1]
},
"tail": {
"rotation": [-10, 0, 0]
},
"tail4": {
"rotation": [-10, 0, 0]
},
"head": {
"rotation": [-5, 0, 0]
}
}
},
"animation.zebstrika.blink": {
"animation_length": 0.1667,
"bones": {
"right_eyelid": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"left_eyelid": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_unamused_left": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"undefined": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"eyelid_unamused_right": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.zebstrika.unamused": {
"loop": true
},
"animation.zebstrika.sad": {
"loop": true,
"bones": {
"mouth_closed_smile": {
"scale": 0
},
"mouth_closed_neutral": {
"scale": 0
},
"mouth_closed_frown": {
"position": [0, -0.1, 0]
},
"eyelid_unamused_left": {
"position": [-0.1, 0, 0]
},
"eyelid_sad_left": {
"position": [0.1, 0, 0]
},
"undefined": {
"position": [0.1, 0, 0]
},
"eyelid_unamused_right": {
"position": [0.1, 0, 0]
},
"eyelid_sad_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.zebstrika.angry": {
"loop": true,
"bones": {
"mouth_closed_smile": {
"scale": 0
},
"mouth_closed_neutral": {
"scale": 0
},
"mouth_closed_frown": {
"position": [0, -0.1, 0]
},
"eyelid_angry_left": {
"position": [0.1, 0, -0.1]
},
"eyelid_unamused_left": {
"position": [-0.1, 0, 0]
},
"undefined": {
"position": [0.1, 0, 0]
},
"eyelid_unamused_right": {
"position": [0.1, 0, 0]
},
"eyelid_angry_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.zebstrika.happy": {
"loop": true,
"bones": {
"eyelid_unamused_left": {
"position": [-0.1, 0, 0]
},
"eyelid_happy_left": {
"position": [0.1, 0, 0]
},
"undefined": {
"position": [0.1, 0, 0]
},
"eyelid_unamused_right": {
"position": [0.1, 0, 0]
},
"eyelid_happy_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.zebstrika.surpised": {
"loop": true,
"bones": {
"jaw": {
"rotation": [55, 0, 0]
},
"eyelid_unamused_left": {
"position": [-0.1, 0, 0]
},
"undefined": {
"position": [-0.1, 0, 0]
},
"eyelid_unamused_right": {
"position": [0.1, 0, 0]
}
}
}
}
}
@@ -0,0 +1,144 @@
{
"format_version": "1.8.0",
"animations": {
"animation.trubbish.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [-7.5, 0, 0]
},
"arm_left": {
"rotation": [-1.3378, -14.94159, 15.17544]
},
"arm_left2": {
"rotation": [0, -22.5, 0]
},
"hand_left": {
"rotation": [3.48303, -24.77164, -8.26511]
},
"hand_left2": {
"rotation": [0, -10, 0]
},
"arm_right": {
"rotation": [-1.3378, 14.94159, -15.17544]
},
"arm_right2": {
"rotation": [0, 22.5, 0]
},
"hand_right": {
"rotation": [3.48303, 24.77164, 8.26511]
},
"hand_right2": {
"rotation": [0, 10, 0]
},
"ear_left": {
"rotation": [-9.91615, 1.29876, 34.88733]
},
"ear_left2": {
"rotation": [-15, 0, 0]
},
"ear_right": {
"rotation": [-2.5, 0, -10]
},
"ear_right2": {
"rotation": [-7.5, 0, 0]
},
"legs": {
"rotation": [-5, 0, 0]
},
"leg_left": {
"rotation": [0, -25, 0]
},
"leg_right": {
"rotation": [0, 25, 0]
},
"body": {
"rotation": [5, 0, 0]
}
}
},
"animation.trubbish.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.trubbish.shock": {
"loop": true,
"bones": {
"pupil_left": {
"scale": [0.7, 0.7, 1]
},
"pupil_right": {
"scale": [0.7, 0.7, 1]
},
"mouth_open": {
"position": [0, 0, -0.1]
}
}
},
"animation.trubbish.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"pupil_left": {
"position": [0, -0.5, 0]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
},
"pupil_right": {
"position": [0, -0.5, 0]
}
}
},
"animation.trubbish.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0, 0, -0.1]
},
"eye_sad_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.trubbish.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.trubbish.recoil": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -0,0 +1,183 @@
{
"format_version": "1.8.0",
"animations": {
"animation.garbodor.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [-2.5, 0, 0]
},
"torso2": {
"rotation": [2.5, 0, 2.5]
},
"chest": {
"rotation": [2.5, 0, -2.5]
},
"arm_left": {
"rotation": [0.44621, -11.3875, 35.38426]
},
"arm_left2": {
"rotation": [0, 35, 0]
},
"arm_left3": {
"rotation": [-12.5, 47.5, 0]
},
"arm_left4": {
"rotation": [0, 20, 0]
},
"arm_left5": {
"rotation": [-22.5, 20, 0]
},
"hand_left": {
"rotation": [0, -12.5, 0]
},
"hand_left2": {
"rotation": [0, -5, 0]
},
"head": {
"rotation": [-2.50238, 0.10901, 5.00238]
},
"leg_left": {
"rotation": [0, -10, 0]
},
"leg_right": {
"rotation": [0, 10, 0]
},
"ear_right": {
"rotation": [0, 0, -7.5]
},
"arm_right": {
"rotation": [3.28396, -12.06754, 2.15279]
},
"arm_right2": {
"rotation": [-18.5482, -26.74387, 38.05687]
},
"arm_right3": {
"rotation": [-11.93851, 3.67352, 49.53414]
},
"arm_right4": {
"rotation": [-4.95744, -0.65182, -7.47178]
},
"arm_right5": {
"rotation": [-11.79777, -16.25509, -27.7149]
},
"hand_right": {
"rotation": [0, 0, -5]
},
"finger_back_right": {
"rotation": [-2.06754, 22.40972, -5.40961]
},
"finger_front_right": {
"rotation": [0, -15, 0]
},
"thumb_right": {
"rotation": [0, 0, 15]
},
"cape_left": {
"rotation": [-0.6353, 7.46602, -4.71385]
},
"cape_left2": {
"rotation": [2.5, 0, 5]
},
"cape_right": {
"rotation": [-0.6353, -7.46602, 4.71385]
},
"cape_right2": {
"rotation": [2.5, 0, -5]
}
}
},
"animation.garbodor.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.garbodor.shock": {
"loop": true,
"bones": {
"pupil_left": {
"scale": [0.7, 0.7, 1]
},
"pupil_right": {
"scale": [0.7, 0.7, 1]
},
"mouth_closed": {
"position": [0, 0, 1]
},
"mouth_open": {
"position": [0, 0, -1]
}
}
},
"animation.garbodor.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0, 0, -0.1]
},
"pupil_left": {
"position": [0, -0.5, 0]
},
"pupil_right": {
"position": [0, -0.5, 0]
},
"eye_angry_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.garbodor.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0, 0, -0.1]
},
"eye_sad_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.garbodor.happy": {
"loop": true,
"bones": {
"mouth_closed": {
"position": [0, 0, 1]
},
"mouth_open": {
"position": [0, 0, -1]
},
"eyelid_happy_left": {
"position": [0, 0, -0.1]
},
"eyelid_happy_right": {
"position": [0, 0, -0.1]
}
}
},
"animation.garbodor.recoil": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [0, 0, -0.1]
}
}
}
}
}
@@ -4,489 +4,280 @@
"animation.sylveon.ground_idle": {
"loop": true,
"bones": {
"head": {
"rotation": ["-math.sin(q.anim_time*90*4)*0.2", 0, "math.clamp(math.sin(q.anim_time*90*4+45)*0.2,-1.2,1.2)"]
"body": {
"position": [0, -0.2, 0]
},
"ear_right": {
"rotation": ["2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
"ribbon_neck_left": {
"rotation": [-15, -15, 0]
},
"ribbon_neck_left2": {
"rotation": [-5, -47, 7.5]
},
"ribbon_neck_left3": {
"rotation": [8.5, -60, -10]
},
"ribbon_neck_left4": {
"rotation": [10.5, -46.5, -14.5]
},
"ribbon_neck_left5": {
"rotation": [0, 22.5, 19.5]
},
"ribbon_neck_left6": {
"rotation": [7, 18.5, 21]
},
"ribbon_neck_right": {
"rotation": [-22.5, 7.5, -35]
},
"ribbon_neck_right2": {
"rotation": [-56, 20, -21.5]
},
"ribbon_neck_right3": {
"rotation": [-35, 50, 0]
},
"ribbon_neck_right4": {
"rotation": [-13.5, 55.5, 10]
},
"ribbon_neck_right5": {
"rotation": [-20, 85, 0]
},
"ribbon_neck_right6": {
"rotation": [-18.5, 50, -23.5]
},
"ear_left": {
"rotation": ["2*math.sin(q.anim_time*90*2+90)-math.clamp(math.sin(q.anim_time*90*2-90),-1,1)", 0, 0]
"rotation": [-2, -5, 15]
},
"ear_left2": {
"rotation": [-2, 0, 0]
},
"ear_left3": {
"rotation": [-2, 0, 0]
},
"ribbon_ear_right": {
"rotation": [0, 52.5, -25]
},
"ribbon_ear_right2": {
"rotation": [0, -35, 5]
},
"ribbon_ear_right3": {
"rotation": [-135, -37.5, 120]
},
"ribbon_ear_right4": {
"rotation": [-25, -60, 30]
},
"ribbon_ear_left": {
"rotation": [0, -25, 17.5]
},
"ribbon_ear_left2": {
"rotation": [0, -35, -12.5]
},
"ribbon_ear_left3": {
"rotation": [0, -25, -10]
},
"ribbon_ear_left4": {
"rotation": [0, 20, -12.5]
},
"ear_right": {
"rotation": [-2, 5, -15]
},
"ear_right2": {
"rotation": [-2, 0, 0]
},
"ear_right3": {
"rotation": [-2, 0, 0]
},
"tail": {
"rotation": ["20+6*(math.sin(q.anim_time*90*2)*1)+6*(math.sin(q.anim_time*90*2/2)*1)", 0, 0]
"rotation": [25, 0, 0]
},
"tail2": {
"rotation": ["5+6*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
"rotation": [20, 0, 0]
},
"tail3": {
"rotation": ["5+6*(math.sin(q.anim_time*90*2-90)*1)+6*(math.sin(q.anim_time*90*2/2-90)*1)", 0, 0]
"rotation": [10, 0, 0]
},
"ear_ribbon_right": {
"rotation": [0, "22.5-math.sin(q.anim_time*90*3-45)*3", 0]
"front_leg_left": {
"rotation": [2.5, 0, 0]
},
"ear_ribbon_right2": {
"rotation": [0, "-7.5-math.sin(q.anim_time*90*3+90)*3", 0]
"elbow_left": {
"rotation": [-5, 0, 0]
},
"ear_ribbon_right3": {
"rotation": [0, "-65-math.sin(q.anim_time*90*3+45)*5", 0]
"frontpaw_left": {
"rotation": [2.5, 0, 0]
},
"ear_ribbon_right4": {
"rotation": [0, "-90-math.sin(q.anim_time*90*3-90)*10", 0]
"front_leg_right": {
"rotation": [2.5, 0, 0]
},
"ear_ribbon_left": {
"rotation": [15, "-25+math.sin(q.anim_time*90*3-90)*4", -10]
"elbow_right": {
"rotation": [-5, 0, 0]
},
"ear_ribbon_left2": {
"rotation": [0, "-45+math.sin(q.anim_time*90*3-180)*6", 0]
"frontpaw_right": {
"rotation": [2.5, 0, 0]
},
"ear_ribbon_left3": {
"rotation": [0, "-42.5+math.sin(q.anim_time*90*3-60-180)*6", 0]
"back_leg_left": {
"rotation": [5, -2.5, -2.5]
},
"ear_ribbon_left4": {
"rotation": [0, "-35+math.sin(q.anim_time*90*3-120-180)*8", 0]
"ankle_left": {
"rotation": [-2.5, 0, 0]
},
"ribbon_right": {
"rotation": [-15, "15-math.sin(q.anim_time*90*3-120)*2", -15]
"foot_left": {
"rotation": [-2.5, 0, 3]
},
"ribbon_right2": {
"rotation": [0, "45-math.sin(q.anim_time*90*3-120)*2", 0]
"back_leg_right": {
"rotation": [5, 2.5, 2.5]
},
"ribbon_right3": {
"rotation": [0, "25-math.sin(q.anim_time*90*3+150)*6", 0]
"ankle_right": {
"rotation": [-2.5, 0, 0]
},
"ribbon_right4": {
"rotation": [0, "10-math.sin(q.anim_time*90*3+90)*8", 0]
},
"ribbon_left": {
"rotation": [0, "-17.5+math.sin(q.anim_time*90*3+60)*1", -15]
},
"ribbon_left2": {
"rotation": [0, "-40+math.sin(q.anim_time*90*3-30)*4", 0]
},
"ribbon_left3": {
"rotation": [0, "-25+math.sin(q.anim_time*90*3-120)*6", 0]
},
"ribbon_left4": {
"rotation": [0, "-15+math.sin(q.anim_time*90*3-180)*8", 0]
},
"torso": {
"rotation": ["math.sin(q.anim_time*90*4)*0.2", 0, 0],
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4+180)*0.1,-0.03,0.03)+math.clamp(math.sin(q.anim_time*90*2+180)*0.15,-0.5,0.5))*0.5", 0]
}
}
},
"animation.sylveon.ground_walk": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": [0, 0, "math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180)*1"],
"position": [0, "-1.5+math.clamp(math.sin(q.anim_time*90*4)*1.1,0.5,1)+math.clamp(math.sin(q.anim_time*90*4+180)*1.1,0.5,1)", 0]
},
"head": {
"rotation": [0, 0, "-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"],
"position": [
"math.sin(q.anim_time*90*4-45)*0.1",
"math.clamp(math.sin(q.anim_time*90*4+30)*0.05,0.5,1)+math.clamp(math.sin(-q.anim_time*90*4+30)*0.05,0.5,1)+math.sin(-q.anim_time*90*8+30)*0.2-1",
0
]
},
"leg_front_right": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155+180)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75+180)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4+180)*1.4,1,1.4)+1)",
0
]
},
"leg_front_left": {
"rotation": [
"30-math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-0.5+0.8*(math.clamp(math.sin(q.anim_time*90*4-155)*1.6,1,1.6)-0.2)+0.5*(math.clamp(math.sin(q.anim_time*90*4-75)*1.8,1,1.8)-1)-0.2*(math.clamp(math.sin(q.anim_time*90*4)*1.4,1,1.4)+1)",
0
]
},
"leg_back_right": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)",
0,
"math.clamp(math.sin(q.anim_time*90*4-90+180)*1,-0.8,0.8)+math.sin(q.anim_time*90*4-180+180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90+180)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20+180)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"leg_back_left": {
"rotation": [
"-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)",
0,
"-math.clamp(math.sin(q.anim_time*90*4-90)*1,-0.8,0.8)-math.sin(q.anim_time*90*4-180)*1"
],
"position": [
0,
"-math.clamp(-math.sin(q.anim_time*90*4+90)*0.01,0,0.01)+math.clamp(-math.sin(q.anim_time*90*4+20)*1,0.4,1)-0.4+math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.4,0.6)-0.3",
-0.1
]
},
"ear_right": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"0.5*math.sin(q.anim_time*90*8+45)+0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"ear_left": {
"rotation": [
"math.sin(q.anim_time*90*8+45)+math.clamp(math.sin(q.anim_time*90*8+90),-1,1)",
"-0.5*math.sin(q.anim_time*90*8+45)-0.5*math.clamp(math.sin(q.anim_time*90*8+90),-2,2)",
0
]
},
"leg_front_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+25",
0,
0
]
},
"leg_front_right3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10+180)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10+180)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40+180)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120+180)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130+180)*1.3,0.9,1)-0.9", 0]
},
"leg_front_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)+math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)-math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+25",
0,
0
]
},
"leg_front_left3": {
"rotation": [
"-45+math.clamp(20*(math.sin(q.anim_time*90*4-90)*1+1),-0,60)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,0,10)-math.clamp(math.sin(q.anim_time*90*4-180+10)*20,-50,50)+math.clamp(math.sin(q.anim_time*90*4+10)*70,50,60)+math.clamp(math.sin(q.anim_time*90*4+40)*80,50,80)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-120)*1.1,0.9,1)-0.9+math.clamp(math.sin(q.anim_time*90*2-130)*1.3,0.9,1)-0.9", 0]
},
"leg_back_right2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130+180)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_right3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95+180)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90+180)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100+180)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110)*1,0.8,1)-0.8", 0]
},
"leg_back_left2": {
"rotation": [
"math.clamp(math.sin(q.anim_time*90*4)*10,0,10)+math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)-math.clamp(math.sin(q.anim_time*90*4+180)*10,0,45)",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-130)*1.5,0.5,0.8)-0.5", 0]
},
"leg_back_left3": {
"rotation": [
"-math.clamp(math.sin(q.anim_time*90*4)*10,0,10)-math.clamp(math.sin(q.anim_time*90*4-95)*25,0,45)+math.clamp(math.sin(q.anim_time*90*4+180)*15,0,45)-(-20+math.clamp(15*(math.sin(q.anim_time*90*4-90)*1+1),-0,60))+math.clamp(math.sin(q.anim_time*90*4-100)*100,60,100)-60",
0,
0
],
"position": [0, "math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.8,1)-0.8", 0]
}
}
},
"animation.sylveon.ground_run": {
"loop": true,
"override_previous_animation": true,
"bones": {
"body": {
"rotation": ["5*(math.sin(q.anim_time*90*4*2-90)*1+1)-math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)+15", 0, 0],
"position": [
0,
"math.clamp(math.sin(q.anim_time*90*4*2+45)*1,0.5,2)-0.5+math.clamp(math.sin(q.anim_time*90*4*2)*1,0,2)",
"-math.clamp(math.sin(q.anim_time*90*4*2-30)*2,0,2)+math.clamp(math.sin(-q.anim_time*90*4*2-30)*1,0,2)"
]
},
"head": {
"rotation": ["-5*(math.sin(q.anim_time*90*4*2-90)*1+1)+math.clamp(10*(math.sin(q.anim_time*90*4*2+45)*1+1),15,20)-15", 0, 0],
"position": [0, -1, -1]
},
"leg_front_right": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180)*20,5,70)+5",
0,
0
]
},
"leg_front_left": {
"rotation": [
"5+math.clamp(math.sin(-q.anim_time*90*4*1-20+30)*30,-40,0)+math.clamp(math.sin(q.anim_time*90*4*1+20-30)*30,-40,0)+math.clamp(math.sin(-q.anim_time*90*4*2-40+30)*50,0,70)-math.clamp(math.sin(-q.anim_time*90*4*2-30+180+30)*20,5,70)+5",
0,
0
]
},
"leg_back_right": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,-1,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"leg_back_left": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*4*2+20)*40,0,50)-math.clamp(math.sin(-q.anim_time*90*4*2-20)*40,0,50)", 0, 0],
"position": [
0,
"-math.clamp(math.sin(q.anim_time*90*4*2)*0.3,-1,2)-math.clamp(math.sin(-q.anim_time*90*4*2)*0.8,0,2)",
"-0.3+math.clamp(math.sin(q.anim_time*90*4*2-30)*0.5,0,2)-math.clamp(math.sin(q.anim_time*90*4*2-30+180)*0.5,0,2)"
]
},
"ear_right": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"ear_left": {
"rotation": ["-10-4*math.sin(q.anim_time*90*4*2+45)-math.clamp(4*math.sin(q.anim_time*90*4*2+90),-4,4)", 0, 0]
},
"leg_front_right2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*4*2-90)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*4*2+180)*10,5,70)+5", 0, 0]
},
"leg_front_right3": {
"rotation": ["12*math.sin(q.anim_time*90*8+30)-math.clamp(math.sin(q.anim_time*90*8),1,1)", 0, 0]
},
"leg_front_left2": {
"rotation": ["-math.clamp(math.sin(-q.anim_time*90*8-90+30)*20,5,70)+5-math.clamp(math.sin(-q.anim_time*90*8+180+30)*10,5,70)+5", 0, 0]
},
"leg_front_left3": {
"rotation": ["8*math.sin(q.anim_time*90*8+30-90)-math.clamp(math.sin(q.anim_time*90*8-90),1,1)", 0, 0]
},
"leg_back_right2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-180-30)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,50)", 0, 0]
},
"leg_back_right3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+45-30)-math.clamp(math.sin(q.anim_time*90*8+90-30),1,1)", 0, 0]
},
"leg_back_left2": {
"rotation": ["math.clamp(math.sin(q.anim_time*90*8-90)*5,0,5)-math.clamp(math.sin(-q.anim_time*90*8-90)*10,0,10)", 0, 0]
},
"leg_back_left3": {
"rotation": ["20+20*math.sin(q.anim_time*90*8+15)-math.clamp(math.sin(q.anim_time*90*8+90),1,1)", 0, 0]
},
"tail": {
"rotation": ["10-math.sin(q.anim_time*90*4*2+60)*12", 0, 0]
},
"tail2": {
"rotation": ["-math.sin(q.anim_time*90*4*2-30)*14", 0, 0]
},
"tail3": {
"rotation": ["-math.sin(q.anim_time*90*4*2)*16", 0, 0]
},
"ear_ribbon_right": {
"rotation": [0, "25-math.sin(q.anim_time*90*4-60-90)*4", -5]
},
"ear_ribbon_right2": {
"rotation": [0, "52.5-math.sin(q.anim_time*90*4-60-180)*6", 0]
},
"ear_ribbon_right3": {
"rotation": [0, "20-math.sin(q.anim_time*90*4-120-180)*6", 0]
},
"ear_ribbon_right4": {
"rotation": [0, "-math.sin(q.anim_time*90*4+180-180)*8", 0]
},
"ear_ribbon_left": {
"rotation": [15, "-27.5+math.sin(q.anim_time*90*4-90)*4", -10]
},
"ear_ribbon_left2": {
"rotation": [0, "-50+math.sin(q.anim_time*90*4-180)*6", 0]
},
"ear_ribbon_left3": {
"rotation": [0, "-10+math.sin(q.anim_time*90*4-60-180)*6", 0]
},
"ear_ribbon_left4": {
"rotation": [0, "math.sin(q.anim_time*90*4-120-180)*8", 0]
},
"ribbon_right": {
"rotation": [-10, "17.5-math.sin(q.anim_time*90*4-120)*2", -5]
},
"ribbon_right2": {
"rotation": [0, "55-math.sin(q.anim_time*90*4-120)*2", 0]
},
"ribbon_right3": {
"rotation": [0, "17.5-math.sin(q.anim_time*90*4+150)*6", 0]
},
"ribbon_right4": {
"rotation": [0, "-math.sin(q.anim_time*90*4+90)*8", 0]
},
"ribbon_left": {
"rotation": [0, "-20+math.sin(q.anim_time*90*4+60)*1", -5]
},
"ribbon_left2": {
"rotation": [0, "-50+math.sin(q.anim_time*90*4-30)*4", 0]
},
"ribbon_left3": {
"rotation": [0, "-20+math.sin(q.anim_time*90*4-120)*6", 0]
},
"ribbon_left4": {
"rotation": [0, "math.sin(q.anim_time*90*4-180)*8", 0]
"foot_right": {
"rotation": [-2.5, 0, -3]
}
}
},
"animation.sylveon.blink": {
"animation_length": 0.1667,
"bones": {
"eye_right": {
"position": {
"0.0": [0.1, 0, 0.1],
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
}
},
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.125": [-0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.125": [0.1, 0, -0.1],
"0.1667": [0, 0, 0]
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eye_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.sylveon.cry": {
"animation_length": 2,
"animation.sylveon.pose": {
"loop": true,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.4583": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.9167": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [-5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ribbon_ear_right": {
"rotation": [-8.16447, 59.46579, -11.54138]
},
"mouth": {
"position": {
"0.0": [0, 0, 0],
"0.0417": [0, 0, -0.1],
"1.25": [0, 0, -0.1],
"1.2917": [0, 0, 0]
}
"ribbon_ear_right2": {
"rotation": [3.36603, -27.20977, -11.0864]
},
"ear_right": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2917": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.9583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
"ribbon_ear_right3": {
"rotation": [-151.47661, -45.48137, 148.46033]
},
"ribbon_ear_right4": {
"rotation": [-47, -40.5, 37.5]
},
"ribbon_ear_left": {
"rotation": [-2.87277, 4.09405, 9.8973]
},
"ribbon_ear_left2": {
"rotation": [7.49332, -1.34767, -36.19577]
},
"ribbon_ear_left3": {
"rotation": [-1.50701, 4.76804, -47.56274]
},
"ribbon_ear_left4": {
"rotation": [-19.62313, -26.80494, 43.62387]
},
"body": {
"rotation": [0, 42.5, 0]
},
"head_angle": {
"rotation": [-13, -36, 23]
},
"ear_left": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.0833": {
"post": [2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.2917": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.7083": {
"post": [-2.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.2083": {
"post": [-7.5, 0, 0],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [-10, 0, 0],
"lerp_mode": "catmullrom"
},
"1.5833": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"1.9583": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
}
},
"sound_effects": {
"0.0417": {
"effect": "pokemon.sylveon.cry"
"rotation": [-5, -10, 20]
},
"bow_ear": {
"rotation": [0, 0, -15]
},
"tail": {
"rotation": [7.5, 32.5, 0]
},
"tail2": {
"rotation": [17.5, 0, 0]
},
"tail3": {
"rotation": [17.5, 0, 0]
},
"front_leg_left": {
"rotation": [-20, 0, 0]
},
"frontpaw_left": {
"rotation": [22.5, 0, 0]
},
"front_leg_right": {
"rotation": [17.5, 0, 0]
},
"elbow_right": {
"rotation": [-5, 0, 0]
},
"frontpaw_right": {
"rotation": [-12.5, 0, 0]
},
"back_leg_left": {
"rotation": [15, 0, 0]
},
"foot_left": {
"rotation": [-15, 0, 0]
},
"ankle_right": {
"rotation": [-10, 0, 0]
},
"foot_right": {
"rotation": [12.5, 0, 0]
},
"bow_neck": {
"rotation": [-17.5, 0, 0]
},
"ribbon_neck_left": {
"rotation": [8.5, -22, 15],
"position": [0, 0, -0.2]
},
"ribbon_neck_left2": {
"rotation": [-39.80911, -60.39937, 25.5634]
},
"ribbon_neck_left3": {
"rotation": [-0.93737, -31.7447, -23.743]
},
"ribbon_neck_left4": {
"rotation": [-29.07442, -21.64613, 10.26355]
},
"ribbon_neck_left5": {
"rotation": [-0.57587, 20.05826, 34.79096]
},
"ribbon_neck_left6": {
"rotation": [-31.01357, -8.21219, 67.36018]
},
"ribbon_neck_right": {
"rotation": [20, 0, -50]
},
"ribbon_neck_right2": {
"rotation": [-30, 32.5, 0]
},
"ribbon_neck_right3": {
"rotation": [-76.71018, 46.03805, -71.83277]
},
"ribbon_neck_right4": {
"rotation": [-47.10792, 58.70409, -27.40784]
},
"ribbon_neck_right5": {
"rotation": [-78.30408, 64.53645, -79.41322]
},
"ribbon_neck_right6": {
"rotation": [0, 60, 0]
},
"ear_right": {
"rotation": [-5, 10, -7.5]
}
}
}
@@ -0,0 +1,594 @@
{
"format_version": "1.8.0",
"animations": {
"animation.hawlucha.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [7.5, 0, 0]
},
"arm_left": {
"rotation": [9.7, -10.3, 38.5],
"position": [-1.4, 1.4, -0.4]
},
"arm_left2": {
"rotation": [25.7, 42.6, 30],
"position": [-1.2, -0.3, 0.74]
},
"feather_inner_left": {
"rotation": [15, 0, 0],
"position": [0, 0, -1]
},
"feather_middle_inner_left": {
"rotation": [12.5, 0, 0],
"position": [-0.95, -0.75, -1]
},
"wing_left2": {
"rotation": [38.75, 45.95, 40.25],
"position": [-2.5, -1.5, -1.4]
},
"pupil_right": {
"position": [0, -0.25, 0]
},
"pupil_left": {
"position": [0, -0.25, 0]
},
"hand_left": {
"rotation": [-0.26, 7.36, 22.89],
"position": [0.19476, 0.4605, 0.00226]
},
"finger_front_left": {
"rotation": [121.97401, 19.44675, 49.22434],
"position": [-0.91298, -0.98715, -0.38512]
},
"finger_back_left": {
"rotation": [-120.30974, -14.31429, 42.9406],
"position": [-0.91296, -0.98713, 0.38508]
},
"finger_mid_left": {
"rotation": [0, 0, 7.5],
"position": [-0.25, 0.43301, 0]
},
"wing_left": {
"rotation": [10, 0, -20],
"position": [0.93969, 1.34202, 0]
},
"feather_middle_left": {
"rotation": [0, 0, -22.5],
"position": [0.1, -0.3, 0]
},
"feather_outer_left": {
"rotation": [0, 0, -35],
"position": [-0.8, -0.55, 0]
},
"torso2": {
"rotation": [-12.5, 0, 0],
"position": [0, -0.98, -0.22]
},
"torso_feather_middle_front_right": {
"rotation": [-1.36836, -4.98206, -26.32683]
},
"torso_feather_middle_back_right": {
"rotation": [0, 0, -25]
},
"torso_feather_side_left": {
"rotation": [12.5, 0, 0]
},
"torso_feather_middle_front_left": {
"rotation": [-1.36836, 4.98206, 26.32683]
},
"torso_feather_middle_back_left": {
"rotation": [0, 0, 25]
},
"torso_feather_side_right": {
"rotation": [12.5, 0, 0]
},
"wing_back": {
"rotation": [22.5, 0, 0]
},
"wing_back_left2": {
"rotation": [-2.5, 0, 0]
},
"wing_back_right2": {
"rotation": [-2.5, 0, 0]
},
"wing_back2": {
"rotation": [-10, 0, 0]
},
"feather_inner_left2": {
"rotation": [-15, 0, 0]
},
"feather_middle_inner_left2": {
"rotation": [-15, 0, 0]
},
"feather_middle_left2": {
"rotation": [-10, 0, 0]
},
"feather_middle_outer_left": {
"rotation": [2.38443, 0.75155, -24.98436],
"position": [0, -0.2, 0]
},
"feather_middle_outer_left2": {
"rotation": [-12.5, 0, 0]
},
"feather_outer_left2": {
"rotation": [-20, 0, 0]
},
"arm_right": {
"rotation": [9.7, 10.3, -38.5],
"position": [1.4, 1.4, -0.4]
},
"arm_right2": {
"rotation": [25.7, -42.6, -30],
"position": [1.2, -0.3, 0.74]
},
"hand_right": {
"rotation": [-0.26, -7.36, -22.89],
"position": [-0.19476, 0.4605, 0.00226]
},
"finger_front_right": {
"rotation": [121.97401, -19.44675, -49.22434],
"position": [0.91298, -0.98715, -0.38512]
},
"finger_back_right": {
"rotation": [-120.30974, 14.31429, -42.9406],
"position": [0.91296, -0.98713, 0.38508]
},
"finger_mid_right": {
"rotation": [0, 0, -7.5],
"position": [0.25, 0.43301, 0]
},
"wing_right": {
"rotation": [10, 0, 20],
"position": [-0.93969, 1.34202, 0]
},
"feather_inner_right": {
"rotation": [15, 0, 0],
"position": [0, 0, -1]
},
"feather_inner_right2": {
"rotation": [-15, 0, 0]
},
"feather_middle_inner_right": {
"rotation": [12.5, 0, 0],
"position": [0.95, -0.75, -1]
},
"feather_middle_inner_right2": {
"rotation": [-15, 0, 0]
},
"wing_right2": {
"rotation": [38.75, -45.95, -40.25],
"position": [2.5, -1.5, -1.4]
},
"feather_middle_right": {
"rotation": [0, 0, 22.5],
"position": [-0.1, -0.3, 0]
},
"feather_middle_right2": {
"rotation": [-10, 0, 0]
},
"feather_middle_outer_right": {
"rotation": [2.38443, -0.75155, 24.98436],
"position": [0, -0.2, 0]
},
"feather_middle_outer_right2": {
"rotation": [-12.5, 0, 0]
},
"feather_outer_right": {
"rotation": [0, 0, 35],
"position": [0.8, -0.55, 0]
},
"feather_outer_right2": {
"rotation": [-20, 0, 0]
},
"body": {
"position": [0, -0.2, 0]
},
"head": {
"rotation": [8, 0, 0]
},
"leg_right": {
"rotation": [-2.5, 0, 15]
},
"leg_right2": {
"rotation": [5, 0, -10]
},
"foot_right": {
"rotation": [-2.5, 0, -5]
},
"leg_left": {
"rotation": [-2.5, 0, -15]
},
"leg_left2": {
"rotation": [5, 0, 10]
},
"foot_left": {
"rotation": [-2.5, 0, 5]
},
"claw_front_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_back_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_mid_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_front_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
},
"claw_back_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
},
"claw_mid_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
}
}
},
"animation.hawlucha.cry": {
"animation_length": 1.25,
"bones": {
"head": {
"rotation": {
"0.0": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
},
"0.25": {
"post": [-15, 0, 0],
"lerp_mode": "catmullrom"
},
"1.0": {
"post": [-15, 0, 0],
"lerp_mode": "catmullrom"
},
"1.25": {
"post": [0, 0, 0],
"lerp_mode": "catmullrom"
}
}
},
"mouth_closed": {
"position": {
"0.2083": [0, 0, 0],
"0.25": [0, 0, 0.1],
"1.0": [0, 0, 0.1],
"1.0417": [0, 0, 0]
}
},
"mouth_open": {
"position": {
"0.2083": [0, 0, 0],
"0.25": [0, 0, -0.1],
"1.0": [0, 0, -0.1],
"1.0417": [0, 0, 0]
}
}
}
},
"animation.hawlucha.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, 1],
"0.1667": {"pre": [-0.1, 0, 1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, 1],
"0.1667": {"pre": [0.1, 0, 1], "post": [0, 0, 0]}
}
},
"iris_left": {
"position": {
"0.0": [-0.1, 0, 0],
"0.1667": {"pre": [-0.1, 0, 0], "post": [0, 0, 0]}
}
},
"iris_right": {
"position": {
"0.0": [0.1, 0, 0],
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
}
}
}
},
"animation.hawlucha.pose": {
"loop": true,
"bones": {
"torso2": {
"rotation": [-7.5, 0, 0],
"position": [0, -0.9763, -0.21644]
},
"head": {
"position": [0, -0.13053, -0.99144]
},
"mouth_open": {
"position": [0, 0, -0.1]
},
"head2": {
"rotation": [-2.5, 0, 0]
},
"pupil_right": {
"position": [0, -1.00071, -0.03271]
},
"pupil_left": {
"position": [0, -1.00071, 0.16729]
},
"arm_left": {
"rotation": [-25.18583, -31.43411, 6.55855]
},
"arm_left2": {
"rotation": [-36.85403, 32.26529, -7.56803],
"position": [-0.78522, 0.09747, 0.66063]
},
"hand_left": {
"rotation": [0, 0, 27.5]
},
"finger_front_left": {
"rotation": [76.87284, 31.93932, 76.4579],
"position": [-0.57056, 0.10689, -0.19503]
},
"finger_back_left": {
"rotation": [-64.7707, -26.78539, 51.10587],
"position": [-0.57056, 0.10689, 0.195]
},
"finger_mid_left": {
"rotation": [0, 0, 5],
"position": [-0.19134, 0.46194, 0]
},
"feather_inner_left": {
"rotation": [54.33829, 7.57131, -22.47528],
"position": [-0.17171, 0.77455, -0.60876]
},
"feather_middle_inner_left": {
"rotation": [56.54514, 9.06524, -24.5012],
"position": [-0.17171, 0.77455, -0.60876]
},
"feather_middle_left": {
"rotation": [53.53285, 31.83543, -8.31006],
"position": [-0.60405, 0.95166, -0.63008]
},
"feather_middle_outer_left": {
"rotation": [62.31334, 33.45674, -10.5703],
"position": [-1.80069, 2.3234, -3.34545]
},
"feather_outer_left": {
"rotation": [88.8579, 54.50631, 28.70066],
"position": [-3.00915, 2.06454, -4.08515]
},
"leg_right": {
"rotation": [-15.84411, 11.31335, 16.60179],
"position": [0.29, -1.3, -0.47]
},
"leg_right2": {
"rotation": [97.5, 0, 0],
"position": [-0.29523, 1.67431, 2.17847]
},
"foot_right": {
"rotation": [40, 0, 0]
},
"leg_left": {
"rotation": [-21.8569, -7.13136, -10.29284],
"position": [-0.89714, -0.42394, -0.12414]
},
"leg_left2": {
"rotation": [115, 0, 0],
"position": [0.06339, 1.7992, 1.89463]
},
"foot_left": {
"rotation": [30, 0, 0]
},
"feather_inner_left2": {
"rotation": [22.5, 0, 0]
},
"feather_middle_inner_left2": {
"rotation": [10, 0, 0]
},
"feather_middle_left2": {
"rotation": [30, 0, 0]
},
"feather_middle_outer_left2": {
"rotation": [17.5, 0, 0]
},
"feather_outer_left2": {
"rotation": [17.5, 0, 0]
},
"wing_back": {
"rotation": [25, 0, 0]
},
"wing_back_left2": {
"rotation": [15, 0, 0]
},
"wing_back2": {
"rotation": [15, 0, 0]
},
"wing_back_right2": {
"rotation": [15, 0, 0]
},
"arm_right": {
"rotation": [-22.10002, 9.31411, -8.43817]
},
"arm_right2": {
"rotation": [-36.85403, -32.26529, 7.56803],
"position": [0.78522, 0.09747, 0.66063]
},
"hand_right": {
"rotation": [0, 0, -27.5]
},
"finger_front_right": {
"rotation": [76.87284, -31.93932, -76.4579],
"position": [0.57056, 0.10689, -0.19503]
},
"finger_back_right": {
"rotation": [-64.7707, 26.78539, -51.10587],
"position": [0.57056, 0.10689, 0.195]
},
"finger_mid_right": {
"rotation": [0, 0, -5],
"position": [0.19134, 0.46194, 0]
},
"feather_inner_right": {
"rotation": [54.33829, -7.57131, 22.47528],
"position": [0.17171, 0.77455, -0.60876]
},
"feather_inner_right2": {
"rotation": [22.5, 0, 0]
},
"feather_middle_inner_right": {
"rotation": [56.54514, -9.06524, 24.5012],
"position": [0.17171, 0.77455, -0.60876]
},
"feather_middle_inner_right2": {
"rotation": [10, 0, 0]
},
"feather_middle_right": {
"rotation": [53.53285, -31.83543, 8.31006],
"position": [0.60405, 0.95166, -0.63008]
},
"feather_middle_right2": {
"rotation": [30, 0, 0]
},
"feather_middle_outer_right": {
"rotation": [62.31334, -33.45674, 10.5703],
"position": [1.80069, 2.3234, -3.34545]
},
"feather_middle_outer_right2": {
"rotation": [17.5, 0, 0]
},
"feather_outer_right": {
"rotation": [88.8579, -54.50631, -28.70066],
"position": [3.00915, 2.06454, -4.08515]
},
"feather_outer_right2": {
"rotation": [17.5, 0, 0]
},
"claw_front_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_back_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_mid_left": {
"rotation": [0, 0, 45],
"position": [0.07071, -0.07071, 0]
},
"claw_front_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
},
"claw_back_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
},
"claw_mid_right": {
"rotation": [0, 0, -45],
"position": [-0.07071, -0.07071, 0]
}
}
},
"animation.hawlucha.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0.1, 0, 0]
},
"pupil_right": {
"position": [0, -0.75, 0.25]
},
"pupil_left": {
"position": [0, -0.75, 0.25]
},
"eye_angry_right": {
"position": [-0.1, 0, 0]
}
}
},
"animation.hawlucha.sad": {
"loop": true,
"bones": {
"pupil_right": {
"position": [0, -0.75, 0.25]
},
"pupil_left": {
"position": [0, -0.75, 0.25]
},
"eye_sad_left": {
"position": [0.1, -0.5, 0]
},
"eye_sad_right": {
"position": [-0.1, -0.5, 0]
}
}
},
"animation.hawlucha.shock": {
"loop": true,
"bones": {
"pupil_right": {
"position": [0, -0.5, 0.5]
},
"pupil_left": {
"position": [0, -0.5, 0.5]
},
"mouth_closed": {
"position": [0, 0, 0.1]
},
"mouth_open": {
"position": [0, 0, -0.1]
},
"iris_left": {
"position": [0, 0, -0.3],
"scale": [1, 0.6, 0.6]
},
"iris_right": {
"position": [0, 0, -0.3],
"scale": [1, 0.6, 0.6]
}
}
},
"animation.hawlucha.happy": {
"loop": true,
"bones": {
"eye_happy_left": {
"position": [0.02, 0, 0]
},
"eye_happy_right": {
"position": [-0.02, 0, 0]
},
"mouth_closed_curve": {
"position": [0, 1, 0]
},
"mouth_closed": {
"position": [0, -0.5, 0]
}
}
},
"animation.hawlucha.hurt": {
"loop": true,
"bones": {
"head": {
"rotation": [-7.5, 0, 0]
},
"mouth_open": {
"position": [0, 0, -0.1]
},
"eye_recoil_right": {
"position": [-0.1, 0, 0]
},
"eye_recoil_left": {
"position": [0.1, 0, 0]
}
}
}
}
}
@@ -0,0 +1,251 @@
{
"format_version": "1.8.0",
"animations": {
"animation.noibat.ground_idle": {
"loop": true,
"bones": {
"wing_right": {
"rotation": [100, -11, -25]
},
"wing_right2": {
"rotation": [0, 0, -22.5]
},
"wing_left": {
"rotation": [100, 11, 25]
},
"wing_left2": {
"rotation": [0, 0, 22.5]
},
"leg_left": {
"rotation": [0, 5, 0]
},
"leg_left2": {
"rotation": [0, 17.5, 0]
},
"leg_right": {
"rotation": [0, -5, 0]
},
"leg_right2": {
"rotation": [0, -17.5, 0]
}
}
},
"animation.noibat.air_idle": {
"loop": true,
"bones": {
"body": {
"rotation": ["30+5*Math.cos((query.anim_time-0) * 90 * 12) * 0.5", 0, "5*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5"],
"position": [
"1.5*Math.cos((query.anim_time-0.5) * 90 * 3) * 0.5",
"2+1.5*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"1.5*Math.cos((query.anim_time-0.75) * 90 * 3) * 0.5"
]
},
"head": {
"rotation": ["-25+3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0, 0]
},
"wing_right": {
"rotation": [
"75-25*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5",
"60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"
]
},
"wing_right2": {
"rotation": [0, "-30+80*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0]
},
"wing_left": {
"rotation": [
"75-25*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"-60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5",
"-60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"
]
},
"wing_left2": {
"rotation": [0, "30-80*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0]
},
"leg_left": {
"rotation": ["-3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 15, 10]
},
"leg_left2": {
"rotation": ["20+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5", 0, "-15-5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"]
},
"foot_left": {
"rotation": ["22.5-3*Math.cos((query.anim_time-0.75) * 90 * 12) * 0.5", 0, 0]
},
"leg_right": {
"rotation": ["-3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", -15, -10]
},
"leg_right2": {
"rotation": ["20+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5", 0, "15+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"]
},
"foot_right": {
"rotation": ["22.5-3*Math.cos((query.anim_time-0.75) * 90 * 12) * 0.5", 0, 0]
},
"torso": {
"rotation": [-15, 0, 0]
}
}
},
"animation.noibat.air_fly": {
"loop": true,
"bones": {
"body": {
"rotation": ["30+5*Math.cos((query.anim_time-0) * 90 * 12) * 0.5", 0, "5*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5"],
"position": [
"1.5*Math.cos((query.anim_time-0.5) * 90 * 3) * 0.5",
"2+1.5*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"1.5*Math.cos((query.anim_time-0.75) * 90 * 3) * 0.5"
]
},
"head": {
"rotation": ["-25+3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0, 0]
},
"wing_right": {
"rotation": [
"75-25*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5",
"60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"
]
},
"wing_right2": {
"rotation": [0, "-30+80*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0]
},
"wing_left": {
"rotation": [
"75-25*Math.cos((query.anim_time-0) * 90 * 12) * 0.5",
"-60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5",
"-60*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"
]
},
"wing_left2": {
"rotation": [0, "30-80*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 0]
},
"leg_left": {
"rotation": ["-3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", 15, 10]
},
"leg_left2": {
"rotation": ["20+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5", 0, "-15-5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"]
},
"foot_left": {
"rotation": ["22.5-3*Math.cos((query.anim_time-0.75) * 90 * 12) * 0.5", 0, 0]
},
"leg_right": {
"rotation": ["-3*Math.cos((query.anim_time-0.25) * 90 * 12) * 0.5", -15, -10]
},
"leg_right2": {
"rotation": ["20+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5", 0, "15+5*Math.cos((query.anim_time-0.5) * 90 * 12) * 0.5"]
},
"foot_right": {
"rotation": ["22.5-3*Math.cos((query.anim_time-0.75) * 90 * 12) * 0.5", 0, 0]
},
"torso": {
"rotation": [-15, 0, 0]
}
}
},
"animation.noibat.cry": {
"animation_length": 1,
"bones": {
"head": {
"rotation": {
"0.0": [0, 0, 0],
"0.125": {
"pre": [-17.5, 0, 0],
"post": [-17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-17.78, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"jaw": {
"rotation": {
"0.0": [0, 0, 0],
"0.125": {
"pre": [17.5, 0, 0],
"post": [17.5, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [17.78, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
}
}
},
"animation.noibat.blink": {
"animation_length": 0.2083,
"bones": {
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.2083": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.2083": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
},
"animation.noibat.render": {
"loop": true,
"bones": {
"noibat": {
"rotation": [30, 0, 0],
"position": [0, 3, 0]
},
"body": {
"rotation": [0.21502, -11.04857, -13.79522]
},
"head_angle": {
"rotation": [-20, 0, 0]
},
"head": {
"rotation": [-25, 10, 0]
},
"torso": {
"rotation": [7.5, 0, 0]
},
"leg_left": {
"rotation": [5.38152, 19.291, 15.91527]
},
"leg_left2": {
"rotation": [22.99008, 11.53486, 4.8493]
},
"wing_left": {
"rotation": [40.24258, 5.73853, 4.83711]
},
"wing_right": {
"rotation": [38.49432, 32.86407, 7.42379]
},
"wing_right2": {
"rotation": [0, -40, 0]
},
"foot_left": {
"rotation": [35, 0, 0]
},
"leg_right": {
"rotation": [2.74715, -12.19908, -12.79362]
},
"leg_right2": {
"rotation": [20, -12.5, 12.5]
},
"foot_right": {
"rotation": [35, 0, 0]
},
"wing_left2": {
"rotation": [0, 32.5, 0]
}
}
}
}
}
@@ -0,0 +1,521 @@
{
"format_version": "1.8.0",
"animations": {
"animation.noivern.ground_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [45, 0, 0],
"position": [0, -10, 0]
},
"torso": {
"rotation": [27.5, 0, 0]
},
"torso2": {
"rotation": [-15, 0, 0]
},
"torso3": {
"rotation": [-10, 0, 0]
},
"fluff_back": {
"rotation": [5, 0, 0]
},
"neck": {
"rotation": [-10, 0, 0]
},
"neck2": {
"rotation": [-10, 0, 0]
},
"head": {
"rotation": [-20, 0, 0]
},
"shoulder_left": {
"rotation": [95, 55, 17.5]
},
"shoulder_membrane_left": {
"rotation": [-77.5, 0, 47.5]
},
"arm_left": {
"rotation": [0, 7.5, 17.5]
},
"arm_membrane_left": {
"rotation": [-72.5, 0, 0],
"position": [0, 0.1, 0]
},
"arm_membrane_hidden_left": {
"scale": 0
},
"elbow_left": {
"rotation": [0, 0, 12.5]
},
"wing_trim_inner_left": {
"rotation": [0, 0, 17.5]
},
"wing_trim_inner_left2": {
"rotation": [0, 0, 7.5]
},
"elbow_membrane_left": {
"rotation": [2.5, 0, 3.8],
"position": [0, 0, -0.3]
},
"elbow_membrane_hidden_left": {
"scale": 0
},
"hand_left": {
"rotation": [-0.5, -10, 27.5]
},
"hand_membrane_left": {
"rotation": [0, 0, -3.5]
},
"finger_outer_left2": {
"rotation": [15, 0, 0]
},
"finger_inner_left2": {
"rotation": [15, 0, 0]
},
"finger_middle_left2": {
"rotation": [15, 0, 0]
},
"wing_end_left": {
"rotation": [0, 0, -16]
},
"wing_trim_outer_left": {
"rotation": [0, 0, 0]
},
"wing_trim_outer_left2": {
"rotation": [0, 0, 0]
},
"shoulder_right": {
"rotation": [95, -55, -17.5]
},
"shoulder_membrane_right": {
"rotation": [-77.5, 0, -47.5]
},
"arm_right": {
"rotation": [0, -7.5, -17.5]
},
"arm_membrane_right": {
"rotation": [-72.5, 0, 0],
"position": [0, 0.1, 0]
},
"arm_membrane_hidden_right": {
"scale": 0
},
"elbow_right": {
"rotation": [0, 0, -12.5]
},
"wing_trim_inner_right": {
"rotation": [0, 0, -17.5]
},
"wing_trim_inner_right2": {
"rotation": [0, 0, -7.5]
},
"elbow_membrane_right": {
"rotation": [2.5, 0, -3.8],
"position": [0, 0, -0.3]
},
"elbow_membrane_hidden_right": {
"scale": 0
},
"hand_right": {
"rotation": [-0.5, 10, -27.5]
},
"hand_membrane_right": {
"rotation": [0, 0, 3.5]
},
"finger_outer_right2": {
"rotation": [15, 0, 0]
},
"finger_inner_right2": {
"rotation": [15, 0, 0]
},
"finger_middle_right2": {
"rotation": [15, 0, 0]
},
"wing_end_right": {
"rotation": [0, 0, 16]
},
"wing_trim_outer_right": {
"rotation": [0, 0, 0]
},
"wing_trim_outer_right2": {
"rotation": [0, 0, 0]
},
"tail": {
"rotation": [-12.5, 0, 0],
"position": [0, -3, -1]
},
"tail2": {
"rotation": [7.5, 0, 0]
},
"tail3": {
"rotation": [5, 0, 0]
},
"tail4": {
"rotation": [10, 0, 0]
},
"tail5": {
"rotation": [10, 0, 0]
},
"tail6": {
"rotation": [-7.5, 0, 0]
},
"tail7": {
"rotation": [-12.5, 0, 0]
},
"tail8": {
"rotation": [-20, 0, 0]
},
"leg_left": {
"rotation": [-27.5, 0, 0]
},
"knee_left": {
"rotation": [12.5, 12.5, 7.5]
},
"foot_left": {
"rotation": [-52.5, 10, 12.5]
},
"foot_left2": {
"rotation": [-2.5, 0, 0]
},
"foot_left3": {
"rotation": [0, 0, 2.5]
},
"leg_right": {
"rotation": [-27.5, 0, 0]
},
"knee_right": {
"rotation": [12.5, -12.5, -7.5]
},
"foot_right": {
"rotation": [-52.5, -10, -12.5]
},
"foot_right2": {
"rotation": [-2.5, 0, 0]
},
"foot_right3": {
"rotation": [0, 0, -2.5]
},
"fingers_left": {
"rotation": [-60, 0, 0]
},
"fingers_right": {
"rotation": [-60, 0, 0]
},
"head_angle": {
"rotation": [-5, 0, 0]
}
}
},
"animation.noivern.air_fly": {
"loop": true,
"bones": {
"body": {
"rotation": [50, 0, 0],
"position": [0, -6, 0]
},
"torso2": {
"rotation": [-5, 0, 0]
},
"torso3": {
"rotation": [10, 0, 0]
},
"neck": {
"rotation": [2.5, 0, 0]
},
"neck2": {
"rotation": [-10, 0, 0]
},
"head": {
"rotation": [-42.5, 0, 0]
},
"leg_left": {
"rotation": [7.4708, -10.39173, -7.09888]
},
"knee_left": {
"rotation": [0, 0, 0]
},
"foot_left": {
"rotation": [12.5, 0, 0]
},
"foot_left3": {
"rotation": [5, 0, 0]
},
"toe_inner_left": {
"rotation": [37.5, 0, 0]
},
"toe_inner_left2": {
"rotation": [17.5, 0, 0]
},
"toe_outer_left": {
"rotation": [47.5, 0, 0]
},
"toe_outer_left2": {
"rotation": [17.5, 0, 0]
},
"leg_right": {
"rotation": [-22.03377, 9.74287, 3.43184]
},
"knee_right": {
"rotation": [22.5, 0, 0]
},
"foot_right": {
"rotation": [17.5, 0, 0]
},
"foot_right3": {
"rotation": [27.5, 0, 0]
},
"toe_inner_right": {
"rotation": [40, 0, 0]
},
"toe_outer_right": {
"rotation": [37.5, 0, 0]
},
"toe_outer_right2": {
"rotation": [17.5, 0, 0]
},
"tail": {
"rotation": [11.84886, -7.30898, 10.16816]
},
"tail2": {
"rotation": [15.22074, -9.65594, -2.61298]
},
"tail3": {
"rotation": [-15.22074, -9.65594, 2.61298]
},
"tail4": {
"rotation": [-20.6469, 14.0761, -5.23619]
},
"tail5": {
"rotation": [-10.34527, 14.76689, -2.66399]
},
"tail6": {
"rotation": [15.69284, 16.88547, 4.6653]
},
"tail7": {
"rotation": [31.32977, 35.63104, 19.52546]
},
"tail8": {
"rotation": [29.65098, 31.3213, 16.48457]
},
"undefined": {
"rotation": [0, -25, 0]
},
"shoulder_left": {
"rotation": [0, -15, 0]
},
"arm_left": {
"rotation": [0, -7.5, 0]
},
"elbow_left": {
"rotation": [0, 0, 5]
},
"hand_left": {
"rotation": [0, 0, -10]
},
"wing_end_left": {
"rotation": [0, 0, -10]
},
"shoulder_right": {
"rotation": [0, 15, 0]
},
"arm_right": {
"rotation": [0, 7.5, 0]
},
"elbow_right": {
"rotation": [0, 0, -5]
},
"hand_right": {
"rotation": [0, 0, 10]
},
"wing_end_right": {
"rotation": [0, 0, 10]
},
"head_angle": {
"rotation": [-2.5, 0, 0]
}
}
},
"animation.noivern.air_idle": {
"loop": true,
"bones": {
"body": {
"rotation": [25, 0, 0],
"position": [0, -6, 0]
},
"torso2": {
"rotation": [-5, 0, 0]
},
"torso3": {
"rotation": [10, 0, 0]
},
"neck": {
"rotation": [2.5, 0, 0]
},
"neck2": {
"rotation": [-10, 0, 0]
},
"head": {
"rotation": [-42.5, 0, 0]
},
"leg_left": {
"rotation": [7.4708, -10.39173, -7.09888]
},
"knee_left": {
"rotation": [0, 0, 0]
},
"foot_left": {
"rotation": [12.5, 0, 0]
},
"foot_left3": {
"rotation": [5, 0, 0]
},
"toe_inner_left": {
"rotation": [37.5, 0, 0]
},
"toe_inner_left2": {
"rotation": [17.5, 0, 0]
},
"toe_outer_left": {
"rotation": [47.5, 0, 0]
},
"toe_outer_left2": {
"rotation": [17.5, 0, 0]
},
"leg_right": {
"rotation": [-22.03377, 9.74287, 3.43184]
},
"knee_right": {
"rotation": [22.5, 0, 0]
},
"foot_right": {
"rotation": [17.5, 0, 0]
},
"foot_right3": {
"rotation": [27.5, 0, 0]
},
"toe_inner_right": {
"rotation": [40, 0, 0]
},
"toe_outer_right": {
"rotation": [37.5, 0, 0]
},
"toe_outer_right2": {
"rotation": [17.5, 0, 0]
},
"tail": {
"rotation": [11.84886, -7.30898, 10.16816]
},
"tail2": {
"rotation": [15.22074, -9.65594, -2.61298]
},
"tail3": {
"rotation": [-15.22074, -9.65594, 2.61298]
},
"tail4": {
"rotation": [-20.6469, 14.0761, -5.23619]
},
"tail5": {
"rotation": [-10.34527, 14.76689, -2.66399]
},
"tail6": {
"rotation": [15.69284, 16.88547, 4.6653]
},
"tail7": {
"rotation": [31.32977, 35.63104, 19.52546]
},
"tail8": {
"rotation": [29.65098, 31.3213, 16.48457]
},
"undefined": {
"rotation": [0, -25, 0]
},
"shoulder_left": {
"rotation": [0, -15, 0]
},
"arm_left": {
"rotation": [0, -7.5, 0]
},
"elbow_left": {
"rotation": [0, 0, 5]
},
"hand_left": {
"rotation": [0, 0, -10]
},
"wing_end_left": {
"rotation": [0, 0, -10]
},
"shoulder_right": {
"rotation": [0, 15, 0]
},
"arm_right": {
"rotation": [0, 7.5, 0]
},
"elbow_right": {
"rotation": [0, 0, -5]
},
"hand_right": {
"rotation": [0, 0, 10]
},
"wing_end_right": {
"rotation": [0, 0, 10]
},
"head_angle": {
"rotation": [25, 0, 0]
}
}
},
"animation.noivern.blink": {
"animation_length": 0.1667,
"bones": {
"pupil_left": {
"rotation": {
"0.0": [0, 0, -90],
"0.1667": {"pre": [0, 0, -90], "post": [0, 0, 0]}
}
},
"pupil_right": {
"rotation": {
"0.0": [0, 0, 90],
"0.1667": {"pre": [0, 0, 90], "post": [0, 0, 0]}
}
}
}
},
"animation.noivern.cry": {
"animation_length": 1,
"bones": {
"head": {
"rotation": {
"0.0": [0, 0, 0],
"0.125": {
"pre": [-15, 0, 0],
"post": [-15, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [-17.78, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
},
"jaw": {
"rotation": {
"0.0": [0, 0, 0],
"0.125": {
"pre": [50, 0, 0],
"post": [50, 0, 0],
"lerp_mode": "catmullrom"
},
"0.625": {
"post": [50, 0, 0],
"lerp_mode": "catmullrom"
},
"0.75": [0, 0, 0]
}
}
}
}
}
}
@@ -0,0 +1,510 @@
{
"format_version": "1.8.0",
"animations": {
"animation.drampa.ground_idle": {
"loop": true,
"bones": {
"neck": {
"rotation": [-15, 0, 0]
},
"neck2": {
"rotation": [-4.96207, -0.27077, 0.34484]
},
"neck3": {
"rotation": [22.5, 0, 0]
},
"neck4": {
"rotation": [40, 0, 0]
},
"neck5": {
"rotation": [45, 0, 0]
},
"neck6": {
"rotation": [42.5, 0, 0]
},
"neck7": {
"rotation": [10, 0, 0]
},
"neck8": {
"rotation": [-12.5, 0, 0]
},
"head_rotation": {
"rotation": [-47.5, 0, 0]
},
"nose_left": {
"rotation": [-5.89248, -34.91212, 12.08322]
},
"nose_left2": {
"rotation": [0.43607, -8.07504, -45.00712]
},
"nose_left3": {
"rotation": [0, 0, -50]
},
"nose_left4": {
"rotation": [0, 0, -65]
},
"nose_right": {
"rotation": [-5.89248, 34.91212, -12.08322]
},
"nose_right2": {
"rotation": [0.43607, 8.07504, 45.00712]
},
"nose_right3": {
"rotation": [0, 0, 50]
},
"nose_right4": {
"rotation": [0, 0, 65]
},
"hair_front_left": {
"rotation": [0, 7.5, 0]
},
"hair_front_left2": {
"rotation": [0, 0, 37.5]
},
"hair_front_left3": {
"rotation": [-0.65426, 4.95712, 32.47168]
},
"hair_front_left4": {
"rotation": [0, 0, 10]
},
"hair_back_left": {
"rotation": [-1.10693, -7.45167, 5.12076]
},
"hair_back_left2": {
"rotation": [0, 0, 27.5]
},
"hair_back_left3": {
"rotation": [0, 0, 37.5]
},
"hair_back_left4": {
"rotation": [0, 0, 15]
},
"hair_back_right": {
"rotation": [-1.10693, 7.45167, -5.12076]
},
"hair_back_right2": {
"rotation": [0, 0, -27.5]
},
"hair_back_right3": {
"rotation": [0, 0, -37.5]
},
"hair_back_right4": {
"rotation": [0, 0, -15]
},
"hair_front_right": {
"rotation": [0, -7.5, 0]
},
"hair_front_right2": {
"rotation": [0, 0, -37.5]
},
"hair_front_right3": {
"rotation": [-0.65426, -4.95712, -32.47168]
},
"hair_front_right4": {
"rotation": [0, 0, -10]
},
"ear_left": {
"rotation": [0, 0, 40]
},
"ear_left2": {
"rotation": [0, 0, 30]
},
"ear_left3": {
"rotation": [0, 0, 12.5]
},
"jaw_hair": {
"rotation": [-7.5, 0, 0]
},
"ear_right": {
"rotation": [0, 0, -40]
},
"ear_right2": {
"rotation": [0, 0, -30]
},
"ear_right3": {
"rotation": [0, 0, -12.5]
},
"arm_left": {
"rotation": [10.65119, 15.16099, -1.90415],
"position": [0, 0, 4]
},
"arm_left2_rotation": {
"rotation": [19.70927, 33.70509, 21.14599]
},
"arm_left3_rotation": {
"rotation": [10.67146, 21.00552, 12.98596]
},
"arm_left4": {
"rotation": [-7.27905, 7.85993, 0.83067]
},
"arm_fur1_left": {
"rotation": [-6.29006, -3.43099, -30.08269]
},
"arm_fur1_left2": {
"rotation": [0, 0, -45]
},
"arm_fur2_left": {
"rotation": [-6.38485, -8.87601, -59.36417]
},
"arm_fur2_left2": {
"rotation": [0, 0, -30]
},
"arm_fur3_left_rotation": {
"rotation": [-20.69471, 55.16364, -1.79096]
},
"arm_fur3_left2": {
"rotation": [0, 37.5, 0]
},
"arm_right": {
"rotation": [10.65119, -15.16099, 1.90415],
"position": [0, 0, 4]
},
"arm_fur1_right": {
"rotation": [-6.29006, 3.43099, 30.08269]
},
"arm_fur1_right2": {
"rotation": [0, 0, 45]
},
"arm_right2_rotation": {
"rotation": [19.70927, -33.70509, -21.14599]
},
"arm_fur2_right": {
"rotation": [-6.38485, 8.87601, 59.36417]
},
"arm_fur2_right2": {
"rotation": [0, 0, 30]
},
"arm_right3_rotation": {
"rotation": [10.67146, -21.00552, -12.98596]
},
"arm_fur3_right_rotation": {
"rotation": [-20.69471, -55.16364, 1.79096]
},
"arm_fur3_right2": {
"rotation": [0, -37.5, 0]
},
"arm_right4": {
"rotation": [-7.27905, -7.85993, -0.83067]
},
"eyebrow_left": {
"rotation": [6.79286, -10.51794, -33.12598]
},
"eyebrow_left2": {
"rotation": [0, 0, 35]
},
"eyebrow_left3": {
"rotation": [0, 0, 42.5]
},
"eyebrow_right": {
"rotation": [6.79286, 10.51794, 33.12598]
},
"eyebrow_right2": {
"rotation": [0, 0, -35]
},
"eyebrow_right3": {
"rotation": [0, 0, -42.5]
},
"chest_fluff_left1_rotation": {
"rotation": [0, 2.5, 0]
},
"chest_fluff_left1_2": {
"rotation": [0, -12.5, 0]
},
"chest_fluff_right1_rotation": {
"rotation": [0, -2.5, 0]
},
"chest_fluff_right1_2": {
"rotation": [0, 12.5, 0]
},
"chest_fluff_left2_rotation": {
"rotation": [0, 0, -2.5]
},
"chest_fluff_left2_2": {
"rotation": [0, -20, 0]
},
"chest_fluff_right2_rotation": {
"rotation": [0, 0, 2.5]
},
"chest_fluff_right2_2": {
"rotation": [0, 20, 0]
}
}
},
"animation.drampa.active_pose": {
"loop": true,
"bones": {
"neck": {
"rotation": [-20, 0, 0]
},
"neck2": {
"rotation": [-4.96207, -0.27077, 0.34484]
},
"neck3": {
"rotation": [22.5, 0, 0]
},
"neck4": {
"rotation": [40, 0, 0]
},
"neck5": {
"rotation": [42.5, 0, 0]
},
"neck6": {
"rotation": [42.5, 0, 0]
},
"neck7": {
"rotation": [7.5, 0, 0]
},
"neck8": {
"rotation": [-20, 0, 0]
},
"head_rotation": {
"rotation": [-30, 0, 0]
},
"nose_left": {
"rotation": [-12.59726, -33.29883, 24.00994]
},
"nose_left2": {
"rotation": [-3.31914, -14.63639, -7.07362]
},
"nose_left3": {
"rotation": [0, 0, -22.5]
},
"nose_left4": {
"rotation": [0, 0, -35]
},
"nose_right": {
"rotation": [-12.59726, 33.29883, -24.00994]
},
"nose_right2": {
"rotation": [-3.31914, 14.63639, 7.07362]
},
"nose_right3": {
"rotation": [0, 0, 22.5]
},
"nose_right4": {
"rotation": [0, 0, 35]
},
"hair_front_left": {
"rotation": [-3.76613, 6.49053, -30.21362]
},
"hair_front_left2": {
"rotation": [0, 0, 27.5]
},
"hair_front_left3": {
"rotation": [-2.30973, -3.06006, 12.71274]
},
"hair_front_left4": {
"rotation": [0, 0, 30]
},
"hair_back_left": {
"rotation": [2.74715, -7.19908, -12.79362]
},
"hair_back_left2": {
"rotation": [0, 0, 10]
},
"hair_back_left3": {
"rotation": [0, 0, 25]
},
"hair_back_left4": {
"rotation": [0, 0, 35]
},
"hair_back_right": {
"rotation": [2.74715, 7.19908, 12.79362]
},
"hair_back_right2": {
"rotation": [0, 0, -10]
},
"hair_back_right3": {
"rotation": [0, 0, -25]
},
"hair_back_right4": {
"rotation": [0, 0, -35]
},
"hair_front_right": {
"rotation": [-3.76613, -6.49053, 30.21362]
},
"hair_front_right2": {
"rotation": [0, 0, -27.5]
},
"hair_front_right3": {
"rotation": [-2.30973, 3.06006, -12.71274]
},
"hair_front_right4": {
"rotation": [0, 0, -30]
},
"ear_left": {
"rotation": [0, -7.5, 5]
},
"ear_left2": {
"rotation": [0, 0, 7.5]
},
"ear_left3": {
"rotation": [0, 0, 12.5]
},
"jaw_hair": {
"rotation": [-7.5, 0, 0]
},
"ear_right": {
"rotation": [0, 7.5, -5]
},
"ear_right2": {
"rotation": [0, 0, -7.5]
},
"ear_right3": {
"rotation": [0, 0, -12.5]
},
"arm_left": {
"rotation": [-4.14501, -22.4654, 2.06932],
"position": [0, 0, 4]
},
"arm_left2_rotation": {
"rotation": [4.7972, 5.19485, -2.06381]
},
"arm_left3_rotation": {
"rotation": [2.28888, 5.0999, -2.28888]
},
"arm_left4": {
"rotation": [-7.5, 0, 0]
},
"arm_fur1_left": {
"rotation": [-6.96027, -1.69054, -15.16845]
},
"arm_fur1_left2": {
"rotation": [0, 0, -22.5]
},
"arm_fur2_left": {
"rotation": [1.77004, 3.84775, -20.55548]
},
"arm_fur2_left2": {
"rotation": [0, 0, -25]
},
"arm_fur3_left_rotation": {
"rotation": [-12.94507, 12.34955, -0.33783]
},
"arm_fur3_left2": {
"rotation": [0, 27.5, 0]
},
"arm_right": {
"rotation": [-4.14501, 22.4654, -2.06932],
"position": [0, 0, 4]
},
"arm_fur1_right": {
"rotation": [-6.96027, 1.69054, 15.16845]
},
"arm_fur1_right2": {
"rotation": [0, 0, 22.5]
},
"arm_right2_rotation": {
"rotation": [4.7972, -5.19485, 2.06381]
},
"arm_fur2_right": {
"rotation": [1.77004, -3.84775, 20.55548]
},
"arm_fur2_right2": {
"rotation": [0, 0, 25]
},
"arm_right3_rotation": {
"rotation": [2.28888, -5.0999, 2.28888]
},
"arm_fur3_right_rotation": {
"rotation": [-12.94507, -12.34955, 0.33783]
},
"arm_fur3_right2": {
"rotation": [0, -27.5, 0]
},
"arm_right4": {
"rotation": [-7.5, 0, 0]
},
"eyebrow_left": {
"rotation": [6.32526, -10.80355, -30.59871]
},
"eyebrow_left2": {
"rotation": [0, 0, -10]
},
"eyebrow_left3": {
"rotation": [0, 0, -10]
},
"eyebrow_right": {
"rotation": [6.32526, 10.80355, 30.59871]
},
"eyebrow_right2": {
"rotation": [0, 0, 10]
},
"eyebrow_right3": {
"rotation": [0, 0, 10]
},
"body2": {
"rotation": [-2.5, 0, 0]
},
"jaw_rotation": {
"rotation": [35, 0, 0]
},
"jaw2": {
"rotation": [-2.5, 0, 0]
},
"claw_inner_left": {
"rotation": [0, -10, 17.5]
},
"claw_outer_left": {
"rotation": [0, -12.5, -15]
},
"claw_inner_right": {
"rotation": [0, 10, -17.5]
},
"claw_outer_right": {
"rotation": [0, 12.5, 15]
},
"tail_rotation": {
"rotation": [10, 0, 0]
},
"tail_top": {
"rotation": [2.5, 0, 0]
},
"tongue": {
"rotation": [-5, 0, 0]
},
"tongue2": {
"rotation": [-2.5, 0, 0]
}
}
},
"animation.drampa.blink": {
"animation_length": 0.1667,
"bones": {
"eyebrow_left": {
"scale": {
"0.0": [0, 0, 0],
"0.125": [0, 0, 0],
"0.1667": [1, 1, 1]
}
},
"eyebrow_right": {
"scale": {
"0.0": [0, 0, 0],
"0.125": [0, 0, 0],
"0.1667": [1, 1, 1]
}
},
"eyebrow_closed_left": {
"position": {
"0.0": [1, 0, -1],
"0.125": [1, 0, -1],
"0.1667": [0, 0, 0]
}
},
"eyebrow_closed_right": {
"position": {
"0.0": [-1, 0, -1],
"0.125": [-1, 0, -1],
"0.1667": [0, 0, 0]
},
"scale": {
"0.0": [1, 1, 1],
"0.125": [1, 1, 1],
"0.1667": [0, 0, 0]
}
}
}
}
}
}
@@ -0,0 +1,165 @@
{
"format_version": "1.8.0",
"animations": {
"animation.silicobra.ground_idle": {
"loop": true,
"bones": {
"body": {
"position": [0, -20, -3]
},
"segment2": {
"rotation": [20.10362, -1.61889, -7.32417]
},
"segment3": {
"rotation": [51.85307, -18.66843, -21.02439]
},
"segment4": {
"rotation": [0, 57.5, 0]
},
"segment5": {
"rotation": [-2.07266, 47.23368, 5.72717]
},
"segment6": {
"rotation": [0, -55, 0]
},
"segment7": {
"rotation": [14.3899, -47.7721, 3.86348]
},
"segment8": {
"rotation": [53.18965, -6.87991, 11.11634]
},
"neck": {
"rotation": [-7.5, 0, 0]
},
"head": {
"rotation": [12.5, 0, 0]
},
"segment1_rotation": {
"rotation": [20, 0, -10]
},
"tail_end": {
"rotation": [59.96208, -3.01428, 10.97272]
},
"tail_end2": {
"rotation": [55.14892, 1.72794, 9.85108]
},
"tail_end3": {
"rotation": [61.43699, 2.70385, 12.67857]
},
"tail_end4": {
"rotation": [65, 0, 0]
}
}
},
"animation.silicobra.blink": {
"animation_length": 0.1667,
"bones": {
"pupil_left": {
"position": {
"0.0": [-0.1, 0, 0.1],
"0.125": [-0.1, 0, 0.1],
"0.1667": [0, 0, 0]
}
},
"pupil_closed_left": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0.1]
}
}
}
},
"animation.silicobra.shock": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.25, 0.75],
"scale": [1, 0.7, 0.7]
},
"jaw": {
"rotation": [35, 0, 0]
},
"tongue": {
"position": [0, 0, 1]
},
"tongue3": {
"rotation": [-12.5, 0, 0],
"position": [0, -2, 0]
}
}
},
"animation.silicobra.angry": {
"loop": true,
"bones": {
"eye_expression_left": {
"position": [0.1, 0.1, -0.35]
},
"eye_expression_right": {
"position": [-0.1, 0.1, -0.35]
}
}
},
"animation.silicobra.sad": {
"loop": true,
"bones": {
"eye_expression_left": {
"position": [0.1, 0.1, 0.3]
},
"eye_expression_right": {
"position": [-0.1, 0.1, 0.3]
}
}
},
"animation.silicobra.happy": {
"loop": true,
"bones": {
"pupil_left": {
"position": [-0.1, 0, 0]
},
"jaw": {
"rotation": [35, 0, 0]
},
"tongue": {
"rotation": [-7.5, 0, 0]
},
"tongue2": {
"rotation": [-30, 0, 0],
"position": [0, -3, 0]
},
"tongue3": {
"rotation": [35, 0, 0],
"position": [0, -2, 0]
},
"pupil_happy_left": {
"position": [0.1, -0.25, 0]
},
"pupil_right": {
"position": [0.1, 0, 0]
},
"pupil_happy_right": {
"position": [-0.1, -0.25, 0]
}
}
},
"animation.silicobra.hurt": {
"loop": true,
"bones": {
"pupil_left": {
"position": [-0.1, 0, 0]
},
"pupil_closed_left": {
"rotation": [15, 0, 0],
"position": [0.1, -0.25, 0.25]
},
"pupil_right": {
"position": [0.1, 0, 0]
},
"pupil_closed_right": {
"rotation": [15, 0, 0],
"position": [-0.1, -0.25, 0.25]
}
}
}
}
}
@@ -0,0 +1,218 @@
{
"format_version": "1.8.0",
"animations": {
"animation.sandaconda.ground_idle": {
"loop": true,
"bones": {
"front_ring": {
"rotation": [2.51725, 1.53476, 1.99762]
},
"middle_ring": {
"rotation": [-0.18508, -0.12645, 1.20532]
},
"back_ring": {
"rotation": [0.1102, 2.51648, 0.15246]
},
"neck_connector": {
"rotation": [2.5, 0, 0]
},
"back_ring_connector": {
"rotation": [32.47777, -4.99753, -0.15477]
},
"tail": {
"rotation": [-44.73715, -1.78818, -2.45027]
},
"tail2": {
"rotation": [5.2908, -1.92536, -3.31687]
},
"tail3": {
"rotation": [7.73772, 12.3071, 2.20462]
},
"tail4": {
"rotation": [0, -2.5, 0]
},
"body": {
"rotation": [-7.5, 0, 0],
"position": [0, 0, -11]
},
"head": {
"rotation": [7.5, 0, 0]
},
"middle_ring_connector": {
"rotation": [0, -2.5, 0]
}
}
},
"animation.sandaconda.blink": {
"animation_length": 0.1667,
"bones": {
"pupil_left": {
"position": {
"0.0": [-0.1, 0, 0],
"0.125": [-0.1, 0, 0],
"0.1667": [0, 0, 0]
}
},
"pupil_closed_left": {
"position": {
"0.0": [0.1, 0, 0],
"0.125": [0.1, 0, 0],
"0.1667": [0, 0, 0]
}
}
}
},
"animation.sandaconda.shock": {
"loop": true,
"bones": {
"pupil_left": {
"position": [0, -0.5, 0.75],
"scale": [1, 0.6, 0.6]
},
"jaw": {
"rotation": [30, 0, 0]
},
"tongue": {
"rotation": [12.5, 0, 0]
},
"pupil_right": {
"position": [0, -0.5, 0.75],
"scale": [1, 0.6, 0.6]
}
}
},
"animation.sandaconda.angry": {
"loop": true,
"bones": {
"eyebrow_left": {
"rotation": [14, 0, 0],
"position": [0, 0.25, 0]
},
"jaw": {
"rotation": [30, 0, 0]
},
"tongue": {
"rotation": [7.5, 0, 0],
"position": [0, 0, 3]
},
"tongue2": {
"rotation": [-15, 0, 0],
"position": [0, -4, 0]
},
"tongue3": {
"rotation": [-32.5, 0, 0],
"position": [0, -4, 0]
},
"tongue4": {
"rotation": [25, 0, 0],
"position": [0, -4, 0]
},
"tongue5": {
"rotation": [37.5, 0, 0],
"position": [0, -2, 0]
},
"eyebrow_right": {
"rotation": [14, 0, 0],
"position": [0, 0.25, 0]
}
}
},
"animation.sandaconda.sad": {
"loop": true,
"bones": {
"eyebrow_left": {
"rotation": [-12.5, 0, 0],
"position": [0, -0.25, 0]
},
"eyebrow_right": {
"rotation": [-12.5, 0, 0],
"position": [0, -0.25, 0]
}
}
},
"animation.sandaconda.happy": {
"loop": true,
"bones": {
"pupil_left": {
"position": [-0.1, 0, 0]
},
"jaw": {
"rotation": [27.5, 0, 0]
},
"tongue": {
"rotation": [7.5, 0, 0],
"position": [0, 0, 3]
},
"tongue2": {
"rotation": [-15, 0, 0],
"position": [0, -4, 0]
},
"tongue3": {
"rotation": [-32.5, 0, 0],
"position": [0, -4, 0]
},
"tongue4": {
"rotation": [25, 0, 0],
"position": [0, -4, 0]
},
"tongue5": {
"rotation": [37.5, 0, 0],
"position": [0, -2, 0]
},
"pupil_happy_left": {
"position": [0.1, 0.15, 0],
"scale": [1, 0.8, 0.8]
},
"pupil_right": {
"position": [0.1, 0, 0]
},
"pupil_happy_right": {
"position": [-0.1, 0.15, 0],
"scale": [1, 0.8, 0.8]
}
}
},
"animation.sandaconda.hurt": {
"loop": true,
"bones": {
"pupil_left": {
"position": [-0.1, 0, 0]
},
"pupil_closed_left": {
"rotation": [17.5, 0, 0],
"position": [0.1, 0, 0]
},
"pupil_right": {
"position": [0.1, 0, 0]
},
"pupil_closed_right": {
"rotation": [17.5, 0, 0],
"position": [-0.1, 0, 0]
}
}
},
"animation.sandaconda.uncoiled": {
"loop": true,
"bones": {
"neck_connector": {
"rotation": [22.5, 0, 0]
},
"front_ring": {
"rotation": [-20, 0, 0]
},
"front_ring_connector": {
"rotation": [0, -25, 0]
},
"middle_ring": {
"rotation": [0, 27.5, 0]
},
"middle_ring_connector": {
"rotation": [0, -32.5, 0]
},
"back_ring": {
"rotation": [0, 35, 0]
}
}
}
}
}
@@ -0,0 +1,68 @@
{
"format_version": "1.8.0",
"animations": {
"animation.smoliv.ground_idle": {
"loop": true,
"bones": {
"torso": {
"rotation": [-2.5, 0, 0]
},
"olive": {
"rotation": [15, 0, 0]
},
"stem": {
"rotation": [12.5, 0, 0]
},
"stem3": {
"rotation": [35, 0, 0]
},
"leaf_front_right": {
"rotation": [-25, 0, 0]
},
"leaf_front_right_tip": {
"rotation": [-15, 0, 0]
},
"leaf_back_right": {
"rotation": [25, 0, 0]
},
"leaf_back_right_tip": {
"rotation": [10, 0, 0]
},
"leaf_front_left": {
"rotation": [-25, 0, 0]
},
"leaf_front_left_tip": {
"rotation": [-15, 0, 0]
},
"leaf_back_left": {
"rotation": [25, 0, 0]
},
"leaf_back_left_tip": {
"rotation": [10, 0, 0]
},
"stem2": {
"rotation": [45, 0, 0]
}
}
},
"animation.smoliv.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
}
}
}
@@ -0,0 +1,143 @@
{
"format_version": "1.8.0",
"animations": {
"animation.dolliv.ground_idle": {
"loop": true,
"bones": {
"dress_front_left": {
"rotation": [-2.5, 0, 5]
},
"collar_back_middle": {
"rotation": [6, 0, 0]
},
"arm_left": {
"rotation": [60, 25, 42]
},
"arm_left2": {
"rotation": [-32, 67, -33]
},
"head": {
"rotation": [5, 0, 0]
},
"leaf_left": {
"rotation": [0, 0, 12.5]
},
"dolliv": {
"scale": 1
},
"hand_left": {
"rotation": [0, 22.5, 15]
},
"leaves": {
"rotation": [12.5, 0, 0]
},
"hair_right": {
"rotation": [0, 5, 0]
},
"hair_left": {
"rotation": [0, -5, 0]
},
"stem": {
"rotation": [-45, 0, 0]
},
"stem2": {
"rotation": [-32.5, 0, 0]
},
"stem3": {
"rotation": [0, 40, 0]
},
"leaf_right": {
"rotation": [0, 0, -12.5]
},
"olive_left": {
"rotation": [0, 0, -5]
},
"arm_right": {
"rotation": [60, -25, -42]
},
"arm_right2": {
"rotation": [-32, -65, 35]
},
"hand_right": {
"rotation": [0, -22.5, -25]
},
"olive_right": {
"rotation": [0, 0, 5]
},
"dress_front_left3": {
"rotation": [-12.5, 0, 0]
},
"dress_front_right": {
"rotation": [-2.5, 0, -5]
},
"dress_front_right2": {
"rotation": [-12.5, 0, 0]
},
"dress_right": {
"rotation": [0, 10, -75]
},
"dress_right2": {
"rotation": [-12.5, 0, 15]
},
"dress_right3": {
"rotation": [0, 0, 37.5]
},
"dress_back": {
"rotation": [-65, 0, 0]
},
"dress_back2": {
"rotation": [15, 0, 0]
},
"dress_back3": {
"rotation": [40, 0, 0]
},
"collar_back_left": {
"rotation": [0, 0, -10]
},
"collar_back_right": {
"rotation": [0, 0, 10]
},
"collar_front_left": {
"rotation": [0, 0, 0]
},
"collar_front_right": {
"rotation": [0, 0, 0]
},
"collar_front": {
"rotation": [-5, 0, 0]
},
"dress_right4": {
"rotation": [0, 0, 7.5]
},
"dress_left": {
"rotation": [0, -10, 75]
},
"dress_left2": {
"rotation": [-12.5, 0, -15]
},
"dress_left3": {
"rotation": [0, 0, -37.5]
}
}
},
"animation.dolliv.blink": {
"animation_length": 0.1667,
"bones": {
"eyelid_right": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, -0.1],
"0.125": [0, 0, -0.1],
"0.1667": [0, 0, 0]
}
}
}
}
}
}
@@ -0,0 +1,483 @@
{
"format_version": "1.8.0",
"animations": {
"animation.arboliva.ground_idle": {
"loop": true,
"bones": {
"arm_left8": {
"rotation": [0, 0, -25]
},
"olive2": {
"rotation": [-1, 0, 107.5]
},
"olive3": {
"rotation": [-1, 0, 45]
},
"olive4": {
"rotation": [-1, 0, -45]
},
"olive5": {
"rotation": [-1, 0, -105]
},
"arm_right8": {
"rotation": [0, 0, 25]
},
"olive6": {
"rotation": [-1, 0, -150]
},
"undefined": {
"rotation": [0, 0, 25]
},
"centrebend": {
"rotation": [-22.5, 0, 0]
},
"centretip": {
"rotation": [17.5, 0, 0]
},
"tip_left": {
"rotation": [0, 2.5, 7.5]
},
"tip_right": {
"rotation": [0, -2.5, -7.5]
},
"arm_right": {
"rotation": [0, 0, -45]
},
"arm_right2": {
"rotation": [0, 0, 5]
},
"arm_right3": {
"rotation": [0, 0, 10]
},
"arm_right4": {
"rotation": [0, 0, 20]
},
"arm_right5": {
"rotation": [0, 0, 30]
},
"arm_right6": {
"rotation": [0, 0, 20]
},
"arm_right7": {
"rotation": [0, 0, 30]
},
"olive_inner_right": {
"rotation": [50, 30, 30]
},
"olive_middle_right": {
"rotation": [40, 0, 0]
},
"olive_outer_right": {
"rotation": [45, 0, 35],
"position": [0, 0, -0.5]
},
"leaves_top": {
"rotation": [-10, 0, 0]
},
"leaf_top_left": {
"rotation": [-20, 0, 0]
},
"leaf_top_left2": {
"rotation": [20, 0, 0]
},
"leaf_top_right": {
"rotation": [-20, 0, 0]
},
"leaf_top_right2": {
"rotation": [20, 0, 0]
},
"leaf_left": {
"rotation": [0, 0, -25]
},
"leaf_left2": {
"rotation": [0, -45, 0]
},
"leaf_right": {
"rotation": [0, 0, 25]
},
"leaf_right2": {
"rotation": [0, 45, 0]
},
"leaves_front_right": {
"rotation": [0, 0, 5]
},
"leaves_front_left": {
"rotation": [0, 0, -5]
},
"leaves_front": {
"rotation": [-5, 0, 0]
},
"leaves_back": {
"rotation": [5, 0, 0]
},
"leaves_back_right": {
"rotation": [0, 0, 5]
},
"leaves_back_left": {
"rotation": [0, 0, -5]
},
"coat_front": {
"rotation": [-5, 0, 0]
},
"coat_front_left": {
"rotation": [0, 0, -5]
},
"coat_front_right": {
"rotation": [0, 0, 5]
},
"coat_left": {
"rotation": [7.5, 0, -5]
},
"coat_left2": {
"rotation": [0, 0, -10]
},
"coat_right": {
"rotation": [5, 0, 5]
},
"coat_right2": {
"rotation": [0, 0, 10]
},
"coat_back": {
"rotation": [10, 0, 0]
},
"coat_back2": {
"rotation": [10, 0, 0]
},
"collar_front_right": {
"rotation": [0, 0, -5]
},
"collar_front": {
"rotation": [5, 0, 0]
},
"collar_front_left": {
"rotation": [0, 0, 5]
},
"collar_right": {
"rotation": [0, 0, -5]
},
"collar_right2": {
"rotation": [0, 0, -10]
},
"collar_left": {
"rotation": [0, 0, 5]
},
"collar_left2": {
"rotation": [0, 0, 10]
},
"collar_back": {
"rotation": [-20, 0, 0]
},
"collar_back_right": {
"rotation": [0, 0, -7.5]
},
"collar_back_middle": {
"rotation": [-5, 0, 0]
},
"collar_back_left": {
"rotation": [0, 0, 7.5]
},
"collar_back_middle3": {
"rotation": [-15, 0, 0]
},
"leg_right": {
"rotation": [5, 0, -10],
"position": [0, -0.25, 0]
},
"leg_left": {
"rotation": [-5, 0, 10],
"position": [0, -0.25, 0]
},
"arm_left": {
"rotation": [0, 0, 45]
},
"olive_inner_left": {
"rotation": [50, -30, -30]
},
"arm_left2": {
"rotation": [0, 0, -5]
},
"arm_left3": {
"rotation": [0, 0, -10]
},
"arm_left4": {
"rotation": [0, 0, -20]
},
"olive_middle_left": {
"rotation": [40, 0, 0]
},
"arm_left5": {
"rotation": [0, 0, -30]
},
"arm_left6": {
"rotation": [0, 0, -20]
},
"olive_outer_left": {
"rotation": [45, 0, -35],
"position": [0, 0, -0.5]
},
"arm_left7": {
"rotation": [0, 0, -30]
},
"olive_stem_middle_right": {
"rotation": [0, 0, 10]
},
"olive_stem_outer_right": {
"rotation": [0, 0, -55]
},
"olive_stem_middle_left": {
"rotation": [0, 0, -10]
},
"olive_stem_outer_left": {
"rotation": [0, 0, 55]
}
}
},
"animation.arboliva.battle_idle": {
"loop": true,
"bones": {
"arm_left8": {
"rotation": [0, 12.5, 0]
},
"olive2": {
"rotation": [-1, 0, 107.5]
},
"olive3": {
"rotation": [-1, 0, 45]
},
"olive4": {
"rotation": [-1, 0, -45]
},
"olive5": {
"rotation": [-1, 0, -105]
},
"arm_right8": {
"rotation": [0, 12.5, 0]
},
"olive6": {
"rotation": [-1, 0, -150]
},
"undefined": {
"rotation": [0, 0, 25]
},
"centrebend": {
"rotation": [-22.5, 0, 0]
},
"centretip": {
"rotation": [17.5, 0, 0]
},
"tip_left": {
"rotation": [0, 2.5, 7.5]
},
"tip_right": {
"rotation": [0, -2.5, -7.5]
},
"arm_right": {
"rotation": [0, 5, 25]
},
"arm_right2": {
"rotation": [0, 0, 25]
},
"arm_right3": {
"rotation": [0, 0, 25]
},
"arm_right4": {
"rotation": [0, 0, 25]
},
"arm_right5": {
"rotation": [0, 0, 25]
},
"arm_right6": {
"rotation": [0, 0, 25]
},
"arm_right7": {
"rotation": [0, 0, 5]
},
"olive_inner_right": {
"rotation": [50, 0, 0]
},
"olive_middle_right": {
"rotation": [0, -45, 0]
},
"olive_outer_right": {
"rotation": [-45, -5, 10],
"position": [0, 0, -0.65]
},
"leaves_top": {
"rotation": [-10, 0, 0]
},
"leaf_top_left": {
"rotation": [-20, 0, 0]
},
"leaf_top_left2": {
"rotation": [20, 0, 0]
},
"leaf_top_right": {
"rotation": [-20, 0, 0]
},
"leaf_top_right2": {
"rotation": [20, 0, 0]
},
"leaf_left": {
"rotation": [0, 0, -25]
},
"leaf_left2": {
"rotation": [0, -45, 0]
},
"leaf_right": {
"rotation": [0, 0, 25]
},
"leaf_right2": {
"rotation": [0, 45, 0]
},
"leaves_front_right": {
"rotation": [0, 0, 5]
},
"leaves_front_left": {
"rotation": [0, 0, -5]
},
"leaves_front": {
"rotation": [-5, 0, 0]
},
"leaves_back": {
"rotation": [5, 0, 0]
},
"leaves_back_right": {
"rotation": [0, 0, 5]
},
"leaves_back_left": {
"rotation": [0, 0, -5]
},
"coat_front": {
"rotation": [-5, 0, 0]
},
"coat_front_left": {
"rotation": [0, 0, -5]
},
"coat_front_right": {
"rotation": [0, 0, 5]
},
"coat_left": {
"rotation": [7.5, 0, -5]
},
"coat_left2": {
"rotation": [0, 0, -10]
},
"coat_right": {
"rotation": [5, 0, 5]
},
"coat_right2": {
"rotation": [0, 0, 10]
},
"coat_back": {
"rotation": [10, 0, 0]
},
"coat_back2": {
"rotation": [10, 0, 0]
},
"collar_front_right": {
"rotation": [0, 0, -5]
},
"collar_front": {
"rotation": [5, 0, 0]
},
"collar_front_left": {
"rotation": [0, 0, 5]
},
"collar_right": {
"rotation": [0, 0, -5]
},
"collar_right2": {
"rotation": [0, 0, -10]
},
"collar_left": {
"rotation": [0, 0, 5]
},
"collar_left2": {
"rotation": [0, 0, 10]
},
"collar_back": {
"rotation": [-20, 0, 0]
},
"collar_back_right": {
"rotation": [0, 0, -7.5]
},
"collar_back_middle": {
"rotation": [-5, 0, 0]
},
"collar_back_left": {
"rotation": [0, 0, 7.5]
},
"collar_back_middle3": {
"rotation": [-15, 0, 0]
},
"leg_right": {
"rotation": [5, 0, -10],
"position": [0, -0.25, 0]
},
"leg_left": {
"rotation": [-5, 0, 10],
"position": [0, -0.25, 0]
},
"arm_left": {
"rotation": [0, 5, -25]
},
"olive_inner_left": {
"rotation": [50, 0, 0]
},
"arm_left2": {
"rotation": [0, 0, -25]
},
"arm_left3": {
"rotation": [0, 0, -25]
},
"arm_left4": {
"rotation": [0, 0, -25]
},
"olive_middle_left": {
"rotation": [0, 45, 0]
},
"arm_left5": {
"rotation": [0, 0, -25]
},
"arm_left6": {
"rotation": [0, 0, -25]
},
"olive_outer_left": {
"rotation": [-45, 5, -10],
"position": [0, 0, -0.65]
},
"arm_right9": {
"rotation": [0, 10, 0]
},
"arm_left9": {
"rotation": [0, 10, 0]
},
"olive_stem_outer_right": {
"rotation": [0, 0, 35]
},
"olive_stem_outer_left": {
"rotation": [0, 0, -35]
}
}
},
"animation.arboliva.blink": {
"animation_length": 0.125,
"bones": {
"eyelid_right": {
"position": {
"0.0": [-0.1, 0, -0.1],
"0.0833": {"pre": [-0.1, 0, -0.1], "post": [-0.1, 0, -0.1]},
"0.125": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0, -0.1],
"0.0833": {"pre": [0.1, 0, -0.1], "post": [0.1, 0, -0.1]},
"0.125": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
}
}
}
}
}
}

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