Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d11ef0411a |
@@ -13,10 +13,7 @@
|
||||
- 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, Sandile line, Treecko line, Braixen, Delphox, and Dragonite.
|
||||
- Added cosmetics for Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandle line, Treecko line, Braixen, Delphox, and Dragonite.
|
||||
- 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.
|
||||
|
||||
### Pokémon Added
|
||||
|
||||
@@ -69,13 +66,9 @@
|
||||
|
||||
### Animation updates for the following Pokémon
|
||||
- Garchomp
|
||||
- Tropius
|
||||
- Torpius
|
||||
- Nosepass
|
||||
- Probopass
|
||||
- Sneasler
|
||||
- Braixen
|
||||
- Delphox
|
||||
|
||||
### Model updates for the following Pokémon
|
||||
- Gyarados
|
||||
@@ -89,16 +82,13 @@
|
||||
- Leafeon
|
||||
- Glaceon
|
||||
- Sylveon
|
||||
- Treecko
|
||||
- Grovyle
|
||||
- Sceptile
|
||||
- Honchkrow
|
||||
- Garchomp
|
||||
- Pidgeot
|
||||
- Nosepass
|
||||
- Probopass
|
||||
- Magnezone
|
||||
- Metagross
|
||||
- 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`.
|
||||
@@ -137,6 +127,7 @@
|
||||
- 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.
|
||||
@@ -165,11 +156,8 @@
|
||||
- Added `interpolate` boolean property to animated textures to allow gradual colour changes between frames.
|
||||
- Fixed species additions not being capable of changing implemented status.
|
||||
- Added support for action effects that are triggered by `|-activate|` Showdown instructions. `activate_{effect_id}` is the syntax.
|
||||
- Added MoLang functions for rendering items `render_item(item_id, locator_name)` and `clear_items()`.
|
||||
- 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.
|
||||
- Added `spawn_pokemon` as an available MoLang function for the `worldHolder` functions.
|
||||
- Added `attempt_wild_battle` as an available MoLang function.
|
||||
- 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
|
||||
@@ -278,7 +266,6 @@
|
||||
- Geodude
|
||||
- Graveler
|
||||
- Golem
|
||||
- Magnezone
|
||||
|
||||
### Cry updates for the following Pokémon
|
||||
- Sceptile
|
||||
|
||||
@@ -13,13 +13,11 @@ 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.MountedPokemonAnimationRenderController;
|
||||
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.config.CobblemonConfig;
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
@@ -62,8 +60,6 @@ public abstract class CameraMixin {
|
||||
|
||||
@Shadow
|
||||
private BlockGetter level;
|
||||
|
||||
@Shadow private float partialTickTime;
|
||||
@Unique private float returnTimer = 0;
|
||||
@Unique private float rollAngleStart = 0;
|
||||
@Unique Minecraft minecraft = Minecraft.getInstance();
|
||||
@@ -71,7 +67,7 @@ public abstract class CameraMixin {
|
||||
@Unique boolean disableRollableCameraDebug = false;
|
||||
|
||||
@Inject(method = "setRotation", at = @At("HEAD"), cancellable = true)
|
||||
public void cobblemon$setRotation(float f, float g, CallbackInfo ci) {
|
||||
public void open_camera$setRotation(float f, float g, CallbackInfo ci) {
|
||||
if (!(this.entity instanceof OrientationControllable controllable) || disableRollableCameraDebug) return;
|
||||
var controller = controllable.getOrientationController();
|
||||
if (!controller.isActive() && controller.getOrientation() != null) {
|
||||
@@ -89,7 +85,7 @@ public abstract class CameraMixin {
|
||||
return;
|
||||
}
|
||||
controller.getOrientation().rotateZ((float) Math.toRadians(-rollAngleStart*(1-returnTimer)));
|
||||
cobblemon$applyRotation();
|
||||
applyRotation();
|
||||
this.returnTimer += .05F;
|
||||
ci.cancel();
|
||||
} else {
|
||||
@@ -98,27 +94,17 @@ public abstract class CameraMixin {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (controller.getOrientation() == null && !Cobblemon.config.getThirdPartyViewBobbing()) return;
|
||||
cobblemon$applyRotation();
|
||||
if (controller.getOrientation() == null) return;
|
||||
applyRotation();
|
||||
|
||||
this.returnTimer = 0;
|
||||
this.rollAngleStart = controller.getRoll();
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "setup", at = @At("HEAD"))
|
||||
private void cobblemon$prepAnimation(BlockGetter level, Entity entity, boolean detached, boolean thirdPersonReverse, float partialTick, CallbackInfo ci) {
|
||||
Entity vehicle = entity.getVehicle();
|
||||
MountedPokemonAnimationRenderController.INSTANCE.reset();
|
||||
|
||||
if (vehicle instanceof PokemonEntity pokemon) {
|
||||
MountedPokemonAnimationRenderController.INSTANCE.setup(pokemon, partialTickTime);
|
||||
}
|
||||
}
|
||||
|
||||
//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 cobblemon$positionCamera(Camera instance, double x, double y, double z, Operation<Void> original, @Local(ordinal = 1, argsOnly = true) boolean thirdPersonReverse) {
|
||||
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();
|
||||
|
||||
@@ -129,19 +115,20 @@ public abstract class CameraMixin {
|
||||
return;
|
||||
}
|
||||
|
||||
PokemonClientDelegate delegate = (PokemonClientDelegate) pokemon.getDelegate();
|
||||
int seatIndex = pokemon.getPassengers().indexOf(entity);
|
||||
Seat seat = pokemon.getSeats().get(seatIndex);
|
||||
|
||||
Vec3 entityPos = new Vec3(
|
||||
Mth.lerp(instance.getPartialTickTime(), pokemon.xOld, pokemon.getX()),
|
||||
Mth.lerp(instance.getPartialTickTime(), pokemon.yOld, pokemon.getY()),
|
||||
Mth.lerp(instance.getPartialTickTime(), pokemon.zOld, pokemon.getZ())
|
||||
);
|
||||
int seatIndex = pokemon.getPassengers().indexOf(entity);
|
||||
Seat seat = pokemon.getSeats().get(seatIndex);
|
||||
|
||||
OrientationControllable rollable = (OrientationControllable) entity;
|
||||
OrientationController controller = rollable.getOrientationController();
|
||||
|
||||
if (!instance.isDetached() || Cobblemon.config.getThirdPartyViewBobbing()) {
|
||||
PokemonClientDelegate delegate = (PokemonClientDelegate) pokemon.getDelegate();
|
||||
MatrixWrapper locator = delegate.getLocatorStates().get(seat.getLocator());
|
||||
|
||||
if (locator == null) {
|
||||
@@ -152,12 +139,10 @@ public abstract class CameraMixin {
|
||||
Vec3 locatorOffset = new Vec3(locator.getMatrix().getTranslation(new Vector3f()));
|
||||
|
||||
float currEyeHeight = Mth.lerp(instance.getPartialTickTime(), eyeHeightOld, eyeHeight);
|
||||
var rotatedEyeHeight = new Vector3f(0f, currEyeHeight - (entity.getBbHeight() / 2), 0f);
|
||||
if (controller.isActive()) {
|
||||
rotatedEyeHeight = controller.getRenderOrientation(partialTickTime).transform(rotatedEyeHeight);
|
||||
}
|
||||
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(new Vec3(rotatedEyeHeight));
|
||||
Vec3 position = locatorOffset.add(entityPos).add(rotatedEyeHeight);
|
||||
setPosition(position);
|
||||
} else {
|
||||
Vector3f pos = entityPos.add(new Vec3(0, pokemon.getBbHeight() / 2, 0)).toVector3f();
|
||||
@@ -194,36 +179,19 @@ public abstract class CameraMixin {
|
||||
}
|
||||
|
||||
@Unique
|
||||
private void cobblemon$applyRotation(){
|
||||
private void applyRotation(){
|
||||
if (!(this.entity instanceof OrientationControllable controllable) || controllable.getOrientationController().getOrientation() == null) return;
|
||||
var controller = controllable.getOrientationController();
|
||||
var newRotation = controller.getOrientation().normal(new Matrix3f()).getNormalizedRotation(new Quaternionf());
|
||||
if (this.minecraft.options.getCameraType().isMirrored()) {
|
||||
newRotation.rotateY((float)Math.toRadians(180));
|
||||
}
|
||||
|
||||
var vehicle = entity.getVehicle();
|
||||
if (vehicle instanceof PokemonEntity pokemon) {
|
||||
var delegate = (PokemonClientDelegate) pokemon.getDelegate();
|
||||
int seatIndex = pokemon.getPassengers().indexOf(entity);
|
||||
Seat seat = pokemon.getSeats().get(seatIndex);
|
||||
MatrixWrapper locator = delegate.getLocatorStates().get(seat.getLocator());
|
||||
if (locator != null) {
|
||||
var locatorRotation = locator.getMatrix().getUnnormalizedRotation(new Quaternionf());
|
||||
newRotation.mul(locatorRotation);
|
||||
}
|
||||
}
|
||||
|
||||
this.rotation.set(newRotation);
|
||||
|
||||
var forwardVector = newRotation.transform(OrientationController.Companion.getFORWARDS(), new Vector3f());
|
||||
var upVector = newRotation.transform(OrientationController.Companion.getUP(), new Vector3f());
|
||||
var leftVector = newRotation.transform(OrientationController.Companion.getLEFT(), new Vector3f());
|
||||
this.xRot = (float)Mth.wrapDegrees(-Math.toDegrees(Math.asin(forwardVector.y)));
|
||||
this.yRot = Mth.wrapDegrees((float)-Math.toDegrees(OrientationController.Companion.getFORWARDS().angleSigned(forwardVector, OrientationController.Companion.getUP())) + 180);
|
||||
this.forwards.set(forwardVector);
|
||||
this.up.set(upVector);
|
||||
this.left.set(leftVector);
|
||||
this.xRot = controller.getPitch();
|
||||
this.yRot = controller.getYaw();
|
||||
this.forwards.set(controller.getForwardVector());
|
||||
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))
|
||||
|
||||
@@ -15,7 +15,6 @@ import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
|
||||
import com.cobblemon.mod.common.pokedex.scanner.PokedexUsageContext;
|
||||
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import com.mojang.blaze3d.Blaze3D;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
@@ -30,10 +29,9 @@ 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.LocalCapture;
|
||||
|
||||
@Mixin(MouseHandler.class)
|
||||
public abstract class MouseHandlerMixin {
|
||||
public class MouseHandlerMixin {
|
||||
@Shadow private double accumulatedScrollY;
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@@ -51,14 +49,6 @@ public abstract class MouseHandlerMixin {
|
||||
|
||||
@Shadow private double accumulatedDY;
|
||||
|
||||
@Shadow private double lastHandleMovementTime;
|
||||
|
||||
@Shadow public abstract boolean isMouseGrabbed();
|
||||
|
||||
@Shadow protected abstract void turnPlayer(double movementTime);
|
||||
|
||||
@Unique private double cobblemon$timeDelta;
|
||||
|
||||
@Inject(
|
||||
method = "onScroll",
|
||||
at = @At(
|
||||
@@ -171,21 +161,16 @@ public abstract class MouseHandlerMixin {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Inject(method = "handleAccumulatedMovement", at = @At("HEAD"))
|
||||
private void cobblemon$maintainMovementWhenInScreens2(CallbackInfo ci) {
|
||||
double time = Blaze3D.getTime();
|
||||
cobblemon$timeDelta = time - this.lastHandleMovementTime;
|
||||
}
|
||||
|
||||
@Inject(method = "handleAccumulatedMovement", at = @At("TAIL"))
|
||||
private void cobblemon$maintainMovementWhenInScreens(CallbackInfo ci) {
|
||||
@Inject(method = "handleAccumulatedMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;isMouseGrabbed()Z", ordinal = 0))
|
||||
private void cobblemon$maintainMovementWhenInScreens(CallbackInfo ci, @Local(ordinal = 1) double e) {
|
||||
if (minecraft.player == null) return;
|
||||
if (!(minecraft.player instanceof OrientationControllable controllable)) return;
|
||||
if (!controllable.getOrientationController().isActive()) return;
|
||||
if (minecraft.isPaused()) return;
|
||||
if (isMouseGrabbed()) return;
|
||||
|
||||
this.turnPlayer(cobblemon$timeDelta);
|
||||
var pitch = pitchSmoother.getNewDeltaValue(0, e);
|
||||
var roll = rollSmoother.getNewDeltaValue(0, e);
|
||||
controllable.getOrientationController().rotate(0.0F, (float)pitch, (float)roll);
|
||||
}
|
||||
|
||||
@Unique
|
||||
|
||||
@@ -20,4 +20,4 @@ interface EntitySideDelegate<T : Entity> {
|
||||
fun tick(entity: T) {}
|
||||
fun onSyncedDataUpdated(data: EntityDataAccessor<*>) {}
|
||||
fun addToStruct(struct: QueryStruct) {}
|
||||
}
|
||||
}
|
||||
@@ -22,5 +22,4 @@ interface PokemonSideDelegate : EntitySideDelegate<PokemonEntity> {
|
||||
fun handleStatus(status: Byte) {}
|
||||
fun spawnShinyParticle(player: Player) {}
|
||||
fun positionRider(passenger: Entity, positionUpdater: MoveFunction)
|
||||
fun updateAge(age: Int) {}
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,6 @@ import com.cobblemon.mod.common.api.storage.party.PartyStore
|
||||
import com.cobblemon.mod.common.api.storage.party.PlayerPartyStore
|
||||
import com.cobblemon.mod.common.api.storage.pc.PCPosition
|
||||
import com.cobblemon.mod.common.api.storage.pc.PCStore
|
||||
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
|
||||
import com.cobblemon.mod.common.api.text.text
|
||||
import com.cobblemon.mod.common.battles.BattleRegistry
|
||||
import com.cobblemon.mod.common.battles.actor.PlayerBattleActor
|
||||
@@ -294,27 +293,6 @@ object MoLangFunctions {
|
||||
packet.sendToPlayersAround(x, y, z, 64.0, world.dimension())
|
||||
}
|
||||
}
|
||||
map.put("spawn_pokemon") { params ->
|
||||
val x = params.getInt(0)
|
||||
val y = params.getInt(1)
|
||||
val z = params.getInt(2)
|
||||
val props = params.getString(3).toProperties()
|
||||
|
||||
val pos = BlockPos(x, y, z)
|
||||
|
||||
if (!Level.isInSpawnableBounds(pos)) {
|
||||
return@put DoubleValue.ZERO
|
||||
}
|
||||
|
||||
val pokemon = props.createEntity(world)
|
||||
pokemon.moveTo(pos, pokemon.yRot, pokemon.xRot)
|
||||
|
||||
if (world.addFreshEntity(pokemon)) {
|
||||
return@put pokemon.struct
|
||||
} else {
|
||||
return@put DoubleValue.ZERO
|
||||
}
|
||||
}
|
||||
map.put("get_entities_around") { params ->
|
||||
val x = params.getDouble(0)
|
||||
val y = params.getDouble(1)
|
||||
@@ -834,11 +812,7 @@ object MoLangFunctions {
|
||||
map.put("is_gliding") { DoubleValue(pokemonEntity.useRidingAltPose()) }
|
||||
map.put("has_aspect") { DoubleValue(it.getString(0) in pokemonEntity.aspects) }
|
||||
map.put("is_pokemon") { DoubleValue.ONE }
|
||||
map.put("is_holding_item") { DoubleValue(!pokemonEntity.entityData.get(PokemonEntity.SHOWN_HELD_ITEM).let {
|
||||
it.isEmpty || it.`is`(CobblemonItemTags.WEARABLE_HAT_ITEMS) || it.`is`(CobblemonItemTags.WEARABLE_FACE_ITEMS)
|
||||
}) }
|
||||
map.put("is_wearing_hat") { DoubleValue(pokemonEntity.entityData.get(PokemonEntity.SHOWN_HELD_ITEM).`is`(CobblemonItemTags.WEARABLE_HAT_ITEMS)) }
|
||||
map.put("is_wearing_face") { DoubleValue(pokemonEntity.entityData.get(PokemonEntity.SHOWN_HELD_ITEM).`is`(CobblemonItemTags.WEARABLE_FACE_ITEMS)) }
|
||||
map.put("is_holding_item") { DoubleValue(!pokemonEntity.entityData.get(PokemonEntity.SHOWN_HELD_ITEM).isEmpty) }
|
||||
map
|
||||
}
|
||||
)
|
||||
|
||||
@@ -19,4 +19,4 @@ interface Decodable {
|
||||
*/
|
||||
fun decode(buffer: RegistryFriendlyByteBuf)
|
||||
|
||||
}
|
||||
}
|
||||
@@ -25,4 +25,4 @@ interface Encodable {
|
||||
*/
|
||||
fun encode(buffer: RegistryFriendlyByteBuf)
|
||||
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,9 @@ class RidingProperties(
|
||||
}
|
||||
}
|
||||
|
||||
val canRide: Boolean
|
||||
get() = seats.isNotEmpty() && behaviour != null
|
||||
|
||||
fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeMap(
|
||||
stats,
|
||||
@@ -50,6 +53,7 @@ class RidingProperties(
|
||||
buffer.writeCollection(seats) { _, seat -> seat.encode(buffer) }
|
||||
buffer.writeCollection(conditions) { _, condition -> buffer.writeString(condition.getString()) }
|
||||
buffer.writeNullable(behaviour) { _, behaviour ->
|
||||
buffer.writeResourceLocation(behaviour.key)
|
||||
behaviour.encode(buffer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,5 @@ package com.cobblemon.mod.common.api.riding
|
||||
enum class RidingStyle {
|
||||
LAND,
|
||||
LIQUID,
|
||||
AIR,
|
||||
COMPOSITE
|
||||
}
|
||||
AIR
|
||||
}
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.riding.behaviour
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
@@ -28,7 +27,6 @@ import net.minecraft.world.phys.Vec3
|
||||
*/
|
||||
interface RidingBehaviour<Settings : RidingBehaviourSettings, State : RidingBehaviourState> {
|
||||
val key: ResourceLocation
|
||||
val style: RidingStyle
|
||||
|
||||
fun isActive(settings: Settings, state: State, vehicle: PokemonEntity): Boolean
|
||||
|
||||
@@ -87,6 +85,6 @@ interface RidingBehaviour<Settings : RidingBehaviourSettings, State : RidingBeha
|
||||
|
||||
fun shouldRotatePlayerHead(settings: Settings, state: State, vehicle: PokemonEntity): Boolean
|
||||
|
||||
fun createDefaultState(settings: Settings): State
|
||||
fun createDefaultState(): State
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.api.riding.behaviour
|
||||
import com.cobblemon.mod.common.api.net.Decodable
|
||||
import com.cobblemon.mod.common.api.net.Encodable
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
/**
|
||||
* Represents static settings of a riding behaviour.
|
||||
|
||||
@@ -8,10 +8,15 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.riding.behaviour
|
||||
|
||||
import com.cobblemon.mod.common.api.net.Decodable
|
||||
import com.cobblemon.mod.common.api.net.Encodable
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.ifClient
|
||||
import com.cobblemon.mod.common.util.ifServer
|
||||
import net.minecraft.client.player.RemotePlayer
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
/**
|
||||
* Represents the state of a Pokemon when being ridden.
|
||||
@@ -22,38 +27,18 @@ import net.minecraft.world.phys.Vec3
|
||||
*
|
||||
* @author landonjw
|
||||
*/
|
||||
open class RidingBehaviourState {
|
||||
open val rideVelocity: SidedRidingState<Vec3> = ridingState(Vec3.ZERO, Side.BOTH)
|
||||
open val stamina: SidedRidingState<Float> = ridingState(0F, Side.BOTH)
|
||||
|
||||
open fun reset() {
|
||||
rideVelocity.set(Vec3.ZERO, true)
|
||||
stamina.set(0F, true)
|
||||
}
|
||||
|
||||
open fun copy(): RidingBehaviourState {
|
||||
val copy = RidingBehaviourState()
|
||||
copy.rideVelocity.set(rideVelocity.get(), true)
|
||||
copy.stamina.set(stamina.get(), true)
|
||||
return copy
|
||||
}
|
||||
|
||||
open fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous.rideVelocity.get() != rideVelocity.get()) return true
|
||||
if (previous.stamina.get() != stamina.get()) return true
|
||||
return false
|
||||
}
|
||||
|
||||
open fun encode(buffer: FriendlyByteBuf) {
|
||||
buffer.writeVec3(rideVelocity.get())
|
||||
buffer.writeFloat(stamina.get())
|
||||
}
|
||||
|
||||
open fun decode(buffer: FriendlyByteBuf) {
|
||||
rideVelocity.set(buffer.readVec3(), true)
|
||||
stamina.set(buffer.readFloat(), true)
|
||||
}
|
||||
interface RidingBehaviourState : Encodable, Decodable {
|
||||
fun reset()
|
||||
fun copy(): RidingBehaviourState
|
||||
fun shouldSync(previous: RidingBehaviourState): Boolean
|
||||
}
|
||||
|
||||
object NoState : RidingBehaviourState {
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
override fun copy() = NoState
|
||||
override fun reset() = Unit
|
||||
override fun shouldSync(previous: RidingBehaviourState) = false
|
||||
}
|
||||
|
||||
fun <T> ridingState(value: T, side: Side) = SidedRidingState(value, side)
|
||||
|
||||
@@ -9,31 +9,32 @@
|
||||
package com.cobblemon.mod.common.api.riding.behaviour
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.*
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeBehaviour
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
|
||||
object RidingBehaviours {
|
||||
val behaviours = mutableMapOf<ResourceLocation, RidingBehaviour<RidingBehaviourSettings, RidingBehaviourState>>()
|
||||
val behaviours = mutableMapOf<ResourceLocation, RidingBehaviour<*, *>>()
|
||||
|
||||
init {
|
||||
register(BirdAirBehaviour.KEY, BirdAirBehaviour())
|
||||
register(DolphinBehaviour.KEY, DolphinBehaviour())
|
||||
register(FallToGlideCompositeBehaviour.KEY, FallToGlideCompositeBehaviour())
|
||||
register(GenericLandBehaviour.KEY, GenericLandBehaviour())
|
||||
register(GenericSwimBehaviour.KEY, GenericSwimBehaviour())
|
||||
register(GliderAirBehaviour.KEY, GliderAirBehaviour())
|
||||
register(HelicopterBehaviour.KEY, HelicopterBehaviour())
|
||||
register(JetAirBehaviour.KEY, JetAirBehaviour())
|
||||
register(JumpToFlightCompositeBehaviour.KEY, JumpToFlightCompositeBehaviour())
|
||||
register(RunToJetCompositeBehaviour.KEY, RunToJetCompositeBehaviour())
|
||||
register(SwimDashBehaviour.KEY, SwimDashBehaviour())
|
||||
register(VehicleLandBehaviour.KEY, VehicleLandBehaviour())
|
||||
register(CompositeBehaviour.KEY, CompositeBehaviour())
|
||||
}
|
||||
|
||||
fun register(key: ResourceLocation, behaviour: RidingBehaviour<out RidingBehaviourSettings, out RidingBehaviourState>) {
|
||||
fun register(key: ResourceLocation, behaviour: RidingBehaviour<*, *>) {
|
||||
if (behaviours.contains(key)) error("Behaviour already registered to key $key")
|
||||
behaviours[key] = RidingController(behaviour) as RidingBehaviour<RidingBehaviourSettings, RidingBehaviourState>
|
||||
behaviours[key] = RidingController(behaviour)
|
||||
}
|
||||
|
||||
fun get(key: ResourceLocation): RidingBehaviour<RidingBehaviourSettings, RidingBehaviourState> {
|
||||
fun get(key: ResourceLocation): RidingBehaviour<*, *> {
|
||||
if (!behaviours.contains(key)) error("Behaviour not registered to key $key")
|
||||
return behaviours[key]!!
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.riding.behaviour
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
@@ -25,7 +24,6 @@ import net.minecraft.world.phys.Vec3
|
||||
class RidingController<Settings : RidingBehaviourSettings, State : RidingBehaviourState>(val behaviour: RidingBehaviour<Settings, State>) : RidingBehaviour<Settings, State> {
|
||||
|
||||
override val key = behaviour.key
|
||||
override val style = behaviour.style
|
||||
|
||||
override fun isActive(settings: Settings, state: State, vehicle: PokemonEntity) =
|
||||
behaviour.isActive(settings, state, vehicle)
|
||||
@@ -42,7 +40,7 @@ class RidingController<Settings : RidingBehaviourSettings, State : RidingBehavio
|
||||
}
|
||||
|
||||
override fun rotation(settings: Settings, state: State, vehicle: PokemonEntity, driver: LivingEntity): Vec2 {
|
||||
if (!isActive(settings, state, vehicle)) return driver.rotationVector
|
||||
if (!isActive(settings, state, vehicle)) return vehicle.rotationVector
|
||||
return behaviour.rotation(settings, state, vehicle, driver)
|
||||
}
|
||||
|
||||
@@ -166,8 +164,8 @@ class RidingController<Settings : RidingBehaviourSettings, State : RidingBehavio
|
||||
return behaviour.setRideBar(settings, state, vehicle, driver)
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: Settings): State {
|
||||
return behaviour.createDefaultState(settings)
|
||||
override fun createDefaultState(): State {
|
||||
return behaviour.createDefaultState()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,14 +12,12 @@ import com.bedrockk.molang.Expression
|
||||
import com.bedrockk.molang.runtime.MoLangMath.lerp
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseOption
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
@@ -35,10 +33,9 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
}
|
||||
|
||||
override val key: ResourceLocation = KEY
|
||||
override val style = RidingStyle.AIR
|
||||
|
||||
val poseProvider = PoseProvider<BirdAirSettings, BirdAirState>(PoseType.HOVER)
|
||||
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVelocity.get().z > 0.2 })
|
||||
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVel.get().z > 0.2 })
|
||||
|
||||
override fun isActive(settings: BirdAirSettings, state: BirdAirState, vehicle: PokemonEntity): Boolean {
|
||||
return true
|
||||
@@ -54,7 +51,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return state.rideVelocity.get().length().toFloat()
|
||||
return state.rideVel.get().length().toFloat()
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
@@ -86,11 +83,11 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
if (controller != null) {
|
||||
//Need to deadzone this when straight up or down
|
||||
|
||||
upForce += -1.0 * sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().z
|
||||
forwardForce += cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().z
|
||||
upForce += -1.0 * sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().z
|
||||
forwardForce += cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().z
|
||||
|
||||
upForce += cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().y
|
||||
forwardForce += sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().y
|
||||
upForce += cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().y
|
||||
forwardForce += sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().y
|
||||
}
|
||||
|
||||
|
||||
@@ -107,7 +104,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
upForce = if (vehicle.y >= altitudeLimit && upForce > 0) 0.0 else upForce
|
||||
}
|
||||
|
||||
val velocity = Vec3(state.rideVelocity.get().x , upForce, forwardForce)
|
||||
val velocity = Vec3(state.rideVel.get().x , upForce, forwardForce)
|
||||
return velocity
|
||||
}
|
||||
|
||||
@@ -123,12 +120,12 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
|
||||
var glideSpeedChange = 0.0
|
||||
|
||||
val currSpeed = state.rideVelocity.get().length()
|
||||
val currSpeed = state.rideVel.get().length()
|
||||
|
||||
//Flag for determining if player is actively inputting
|
||||
var activeInput = false
|
||||
|
||||
var newVelocity = Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, state.rideVelocity.get().z)
|
||||
var newVelocity = Vec3(state.rideVel.get().x, state.rideVel.get().y, state.rideVel.get().z)
|
||||
|
||||
//speed up and slow down based on input
|
||||
if (driver.zza != 0.0f && state.stamina.get() > 0.0) {
|
||||
@@ -243,7 +240,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
if( abs(newVelocity.z) > 0) {
|
||||
newVelocity = newVelocity.subtract(0.0, 0.0, min(0.003 * newVelocity.z.sign, newVelocity.z))
|
||||
}
|
||||
state.rideVelocity.set(newVelocity)
|
||||
state.rideVel.set(newVelocity)
|
||||
}
|
||||
|
||||
override fun angRollVel(
|
||||
@@ -303,7 +300,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
//modulated by speed so that when flapping idle in air you are ont wobbling around to look around
|
||||
val rotMin = 15.0
|
||||
var rollForce = xInput
|
||||
val rotLimit = max(handling * normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).pow(3), rotMin)
|
||||
val rotLimit = max(handling * normalizeVal(state.rideVel.get().length(), 0.0, topSpeed).pow(3), rotMin)
|
||||
|
||||
//Limit roll by non linearly decreasing inputs towards
|
||||
// a rotation limit based on the current distance from
|
||||
@@ -318,7 +315,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
}
|
||||
|
||||
//Give the ability to yaw with x mouse input when at low speeds.
|
||||
val yawForce = xInput * ( 1.0 - normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).pow(3))
|
||||
val yawForce = xInput * ( 1.0 - normalizeVal(state.rideVel.get().length(), 0.0, topSpeed).pow(3))
|
||||
|
||||
//yaw, pitch, roll
|
||||
return Vec3(yawForce, yInput, rollForce)
|
||||
@@ -381,7 +378,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
val glideTopSpeed = vehicle.runtime.resolveDouble(settings.glidespeedExpr)
|
||||
|
||||
//Must I ensure that topspeed is greater than minimum?
|
||||
val normalizedGlideSpeed = normalizeVal(state.rideVelocity.get().length(), topSpeed, glideTopSpeed)
|
||||
val normalizedGlideSpeed = normalizeVal(state.rideVel.get().length(), topSpeed, glideTopSpeed)
|
||||
|
||||
//Only ever want the fov change to be a max of 0.2 and for it to have non linear scaling.
|
||||
return 1.0f + normalizedGlideSpeed.pow(2).toFloat() * 0.2f
|
||||
@@ -436,7 +433,7 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: BirdAirSettings) = BirdAirState()
|
||||
override fun createDefaultState() = BirdAirState()
|
||||
|
||||
}
|
||||
|
||||
@@ -460,7 +457,6 @@ class BirdAirSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(infiniteAltitude)
|
||||
buffer.writeExpression(infiniteStamina)
|
||||
buffer.writeExpression(glidespeedExpr)
|
||||
@@ -483,33 +479,37 @@ class BirdAirSettings : RidingBehaviourSettings {
|
||||
}
|
||||
}
|
||||
|
||||
class BirdAirState : RidingBehaviourState() {
|
||||
class BirdAirState : RidingBehaviourState {
|
||||
var rideVel = ridingState(Vec3.ZERO, Side.CLIENT)
|
||||
var stamina = ridingState(1.0f, Side.CLIENT)
|
||||
var gliding = ridingState(false, Side.CLIENT)
|
||||
var lastGlide = ridingState(-100L, Side.CLIENT)
|
||||
|
||||
override fun encode(buffer: FriendlyByteBuf) {
|
||||
super.encode(buffer)
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeVec3(rideVel.get())
|
||||
buffer.writeFloat(stamina.get())
|
||||
buffer.writeBoolean(gliding.get())
|
||||
}
|
||||
|
||||
override fun decode(buffer: FriendlyByteBuf) {
|
||||
super.decode(buffer)
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
rideVel.set(buffer.readVec3(), forced = true)
|
||||
stamina.set(buffer.readFloat(), forced = true)
|
||||
gliding.set(buffer.readBoolean(), forced = true)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
rideVel.set(Vec3.ZERO, forced = true)
|
||||
stamina.set(1.0f, forced = true)
|
||||
gliding.set(false, forced = true)
|
||||
lastGlide.set(-100L, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "BirdAirState(rideVelocity=${rideVelocity.get()}, stamina=${stamina.get()}, gliding=${gliding.get()})"
|
||||
return "BirdAirState(rideVel=${rideVel.get()}, stamina=${stamina.get()}, gliding=${gliding.get()})"
|
||||
}
|
||||
|
||||
override fun copy() = BirdAirState().also {
|
||||
it.rideVelocity.set(this.rideVelocity.get(), forced = true)
|
||||
it.rideVel.set(this.rideVel.get(), forced = true)
|
||||
it.stamina.set(this.stamina.get(), forced = true)
|
||||
it.gliding.set(this.gliding.get(), forced = true)
|
||||
it.lastGlide.set(this.lastGlide.get(), forced = true)
|
||||
@@ -517,7 +517,9 @@ class BirdAirState : RidingBehaviourState() {
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is BirdAirState) return false
|
||||
if (previous.rideVel != rideVel) return true
|
||||
if (previous.stamina != stamina) return true
|
||||
if (previous.gliding != gliding) return true
|
||||
return super.shouldSync(previous)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseOption
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
|
||||
@@ -19,6 +18,7 @@ import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
@@ -35,7 +35,6 @@ class DolphinBehaviour : RidingBehaviour<DolphinSettings, DolphinState> {
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.LIQUID
|
||||
|
||||
val poseProvider = PoseProvider<DolphinSettings, DolphinState>(PoseType.FLOAT)
|
||||
.with(PoseOption(PoseType.SWIM) { _, _, entity -> entity.entityData.get(PokemonEntity.MOVING) })
|
||||
@@ -257,7 +256,7 @@ class DolphinBehaviour : RidingBehaviour<DolphinSettings, DolphinState> {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: DolphinSettings) = DolphinState()
|
||||
override fun createDefaultState() = DolphinState()
|
||||
|
||||
}
|
||||
|
||||
@@ -283,7 +282,6 @@ class DolphinSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(canJump)
|
||||
buffer.writeExpression(jumpVector[0])
|
||||
buffer.writeExpression(jumpVector[1])
|
||||
@@ -308,11 +306,13 @@ class DolphinSettings : RidingBehaviourSettings {
|
||||
}
|
||||
}
|
||||
|
||||
class DolphinState : RidingBehaviourState() {
|
||||
class DolphinState : RidingBehaviourState {
|
||||
var lastVelocity = ridingState(Vec3.ZERO, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
lastVelocity.set(Vec3.ZERO, forced = true)
|
||||
}
|
||||
|
||||
@@ -321,8 +321,8 @@ class DolphinState : RidingBehaviourState() {
|
||||
}
|
||||
|
||||
override fun copy() = DolphinState().also {
|
||||
it.stamina.set(stamina.get(), forced = true)
|
||||
it.rideVelocity.set(rideVelocity.get(), forced = true)
|
||||
it.lastVelocity.set(lastVelocity.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState) = false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,434 @@
|
||||
/*
|
||||
* 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.api.riding.behaviour.types
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class FallToGlideCompositeBehaviour : RidingBehaviour<FallToGlideCompositeSettings, FallToGlideCompositeState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("composite/fall_to_glide")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
|
||||
val landBehaviour: GenericLandBehaviour = GenericLandBehaviour()
|
||||
val glideBehaviour: GliderAirBehaviour = GliderAirBehaviour()
|
||||
|
||||
override fun tick(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
val shouldBeFlying = checkShouldBeFlying(settings, vehicle, state.activeController.get() == GliderAirBehaviour.KEY)
|
||||
if (state.activeController.get() == GliderAirBehaviour.KEY && !shouldBeFlying) { // && entity.onGround() && state.timeTransitioned + 20 < entity.level().gameTime) {
|
||||
state.activeController.set(GenericLandBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, false)
|
||||
} else if (state.activeController.get() == GenericLandBehaviour.KEY && shouldBeFlying) {
|
||||
state.activeController.set(GliderAirBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkShouldBeFlying(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
vehicle: PokemonEntity,
|
||||
isFlyingAlready: Boolean
|
||||
): Boolean {
|
||||
val runtime = vehicle.runtime
|
||||
val minFallingSpeed = runtime.resolveFloat(settings.minimumFallSpeed)
|
||||
val minForwardSpeed = runtime.resolveFloat(settings.minimumForwardSpeed)
|
||||
val grounded = vehicle.onGround()
|
||||
return if (isFlyingAlready) {
|
||||
!grounded
|
||||
} else {
|
||||
vehicle.deltaMovement.y <= -minFallingSpeed && vehicle.deltaMovement.horizontalDistance() >= minForwardSpeed
|
||||
}
|
||||
}
|
||||
|
||||
override fun isActive(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun pose(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): PoseType {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.pose(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.pose(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun speed(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.speed(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.speed(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotation(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.rotation(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun velocity(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.velocity(settings.land, state.landState, vehicle, driver, input)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.velocity(settings.glide, NoState, vehicle, driver, input)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun angRollVel(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.angRollVel(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.angRollVel(settings.glide, NoState, vehicle, driver, deltaTime)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
mouseX: Double,
|
||||
mouseYSmoother: SmoothDouble,
|
||||
mouseXSmoother: SmoothDouble,
|
||||
sensitivity: Double,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotationOnMouseXY(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.rotationOnMouseXY(
|
||||
settings.glide,
|
||||
NoState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun canJump(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.canJump(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.canJump(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun setRideBar(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.setRideBar(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.setRideBar(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun jumpForce(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.jumpForce(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
jumpStrength
|
||||
)
|
||||
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.jumpForce(settings.glide, NoState, vehicle, driver, jumpStrength)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun gravity(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.gravity(settings.land, state.landState, vehicle, regularGravity)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.gravity(settings.glide, NoState, vehicle, regularGravity)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rideFovMultiplier(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.rideFovMultiplier(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useAngVelSmoothing(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.useAngVelSmoothing(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useRidingAltPose(settings.land, state.landState, vehicle, driver)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.useRidingAltPose(settings.glide, NoState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun inertia(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.inertia(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.inertia(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRoll(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRoll(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.shouldRoll(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.turnOffOnGround(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.turnOffOnGround(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismountOnShift(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.dismountOnShift(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.dismountOnShift(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePokemonHead(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.shouldRotatePokemonHead(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(
|
||||
settings: FallToGlideCompositeSettings,
|
||||
state: FallToGlideCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePlayerHead(settings.land, state.landState, vehicle)
|
||||
GliderAirBehaviour.KEY -> glideBehaviour.shouldRotatePlayerHead(settings.glide, NoState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun createDefaultState() = FallToGlideCompositeState()
|
||||
|
||||
|
||||
}
|
||||
|
||||
class FallToGlideCompositeSettings : RidingBehaviourSettings {
|
||||
override val key = FallToGlideCompositeBehaviour.KEY
|
||||
|
||||
var glide: GliderAirSettings = GliderAirSettings()
|
||||
private set
|
||||
|
||||
var land: GenericLandSettings = GenericLandSettings()
|
||||
private set
|
||||
|
||||
var minimumForwardSpeed: Expression = "0.0".asExpression()
|
||||
private set
|
||||
|
||||
var minimumFallSpeed: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
glide.encode(buffer)
|
||||
land.encode(buffer)
|
||||
buffer.writeExpression(minimumForwardSpeed)
|
||||
buffer.writeExpression(minimumFallSpeed)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
glide.decode(buffer)
|
||||
land.decode(buffer)
|
||||
minimumForwardSpeed = buffer.readExpression()
|
||||
minimumFallSpeed = buffer.readExpression()
|
||||
}
|
||||
}
|
||||
|
||||
class FallToGlideCompositeState : RidingBehaviourState {
|
||||
var activeController = ridingState(GenericLandBehaviour.KEY, Side.CLIENT)
|
||||
var landState: GenericLandState = GenericLandState()
|
||||
var timeTransitioned = ridingState(-100L, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(activeController.get())
|
||||
landState.encode(buffer)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
activeController.set(buffer.readResourceLocation(), forced = true)
|
||||
landState.decode(buffer)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
activeController.set(GenericLandBehaviour.KEY, forced = true)
|
||||
landState.reset()
|
||||
timeTransitioned.set(-100L, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "FallToGlideCompositeState(activeController=$activeController, landState=$landState, timeTransitioned=$timeTransitioned)"
|
||||
}
|
||||
|
||||
override fun copy() = FallToGlideCompositeState().also {
|
||||
it.activeController.set(activeController.get(), forced = true)
|
||||
it.landState = landState.copy()
|
||||
it.timeTransitioned.set(timeTransitioned.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is FallToGlideCompositeState) return false
|
||||
if (activeController != previous.activeController) return true
|
||||
if (landState.shouldSync(previous.landState)) return true
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseOption
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
|
||||
@@ -34,11 +33,10 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.LAND
|
||||
|
||||
val poseProvider = PoseProvider<GenericLandSettings, GenericLandState>(PoseType.STAND)
|
||||
.with(PoseOption(PoseType.WALK) { _, state, _ ->
|
||||
return@PoseOption state.rideVelocity.get().z > 0.1
|
||||
return@PoseOption state.rideVel.get().z > 0.1
|
||||
})
|
||||
|
||||
override fun isActive(
|
||||
@@ -74,7 +72,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return state.rideVelocity.get().length().toFloat()
|
||||
return state.rideVel.get().length().toFloat()
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
@@ -107,9 +105,9 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
|
||||
//Jump the thang!
|
||||
if (driver.jumping && vehicle.onGround()) {
|
||||
state.rideVelocity.set(Vec3(newVelocity.x, 2.0, newVelocity.z))
|
||||
state.rideVel.set(Vec3(newVelocity.x, 2.0, newVelocity.z))
|
||||
} else {
|
||||
state.rideVelocity.set(newVelocity)
|
||||
state.rideVel.set(newVelocity)
|
||||
}
|
||||
|
||||
//This is cheap.
|
||||
@@ -120,7 +118,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
|
||||
//entity.deltaMovement = entity.deltaMovement.lerp(velocity, 1.0)
|
||||
//state.currVel = state.currVel.add( f.toDouble() / 20.0, gravity / 20.0 , g.toDouble() / 20.0)
|
||||
return state.rideVelocity.get()
|
||||
return state.rideVel.get()
|
||||
}
|
||||
|
||||
private fun calculateRideSpaceVel(
|
||||
@@ -131,11 +129,11 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
): Vec3 {
|
||||
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
|
||||
val accel = vehicle.runtime.resolveDouble(settings.accelExpr)
|
||||
val speed = state.rideVelocity.get().length()
|
||||
val speed = state.rideVel.get().length()
|
||||
|
||||
val minSpeed = 0.0
|
||||
|
||||
var newVelocity = Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, state.rideVelocity.get().z)
|
||||
var newVelocity = Vec3(state.rideVel.get().x, state.rideVel.get().y, state.rideVel.get().z)
|
||||
|
||||
//speed up and slow down based on input
|
||||
if (driver.zza > 0.0 && speed <= topSpeed && state.stamina.get() > 0.0f) {
|
||||
@@ -318,7 +316,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: GenericLandSettings) = GenericLandState()
|
||||
override fun createDefaultState() = GenericLandState()
|
||||
}
|
||||
|
||||
class GenericLandSettings : RidingBehaviourSettings {
|
||||
@@ -356,7 +354,6 @@ class GenericLandSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(driveFactor)
|
||||
buffer.writeExpression(strafeFactor)
|
||||
buffer.writeExpression(reverseDriveFactor)
|
||||
@@ -388,17 +385,41 @@ class GenericLandSettings : RidingBehaviourSettings {
|
||||
|
||||
}
|
||||
|
||||
class GenericLandState : RidingBehaviourState() {
|
||||
class GenericLandState : RidingBehaviourState {
|
||||
var rideVel = ridingState(Vec3.ZERO, Side.CLIENT)
|
||||
var stamina = ridingState(1.0f, Side.CLIENT)
|
||||
var currSpeed = ridingState(0.0, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeVec3(rideVel.get())
|
||||
buffer.writeFloat(stamina.get())
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
rideVel.set(buffer.readVec3(), forced = true)
|
||||
stamina.set(buffer.readFloat(), forced = true)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
rideVel.set(Vec3.ZERO, forced = true)
|
||||
stamina.set(1.0f, forced = true)
|
||||
currSpeed.set(0.0, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "GenericLandState(rideVel=${rideVel.get()}, stamina=${stamina.get()}, currSpeed=${currSpeed.get()})"
|
||||
}
|
||||
|
||||
override fun copy() = GenericLandState().also {
|
||||
it.rideVelocity.set(this.rideVelocity.get(), forced = true)
|
||||
it.rideVel.set(this.rideVel.get(), forced = true)
|
||||
it.stamina.set(this.stamina.get(), forced = true)
|
||||
it.currSpeed.set(this.currSpeed.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is GenericLandState) return false
|
||||
return super.shouldSync(previous)
|
||||
if (rideVel != previous.rideVel) return true
|
||||
if (stamina != previous.stamina) return true
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,7 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.NoState
|
||||
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.posing.PoseOption
|
||||
@@ -29,18 +28,17 @@ import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
|
||||
class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviourState> {
|
||||
class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, NoState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("swim/generic")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.LIQUID
|
||||
|
||||
val poseProvider = PoseProvider<GenericSwimSettings, RidingBehaviourState>(PoseType.FLOAT)
|
||||
val poseProvider = PoseProvider<GenericSwimSettings, NoState>(PoseType.FLOAT)
|
||||
.with(PoseOption(PoseType.SWIM) { _, _, entity -> entity.isSwimming && entity.entityData.get(PokemonEntity.MOVING) })
|
||||
|
||||
override fun isActive(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun isActive(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return Shapes.create(vehicle.boundingBox).blockPositionsAsListRounded().any {
|
||||
if (vehicle.isInWater || vehicle.isUnderWater) {
|
||||
return@any true
|
||||
@@ -50,17 +48,17 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
}
|
||||
}
|
||||
|
||||
override fun pose(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): PoseType {
|
||||
override fun pose(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): PoseType {
|
||||
return poseProvider.select(settings, state, vehicle)
|
||||
}
|
||||
|
||||
override fun speed(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
override fun speed(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
return vehicle.runtime.resolveFloat(settings.speed)
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
@@ -69,7 +67,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun velocity(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
@@ -90,7 +88,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun angRollVel(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
@@ -100,7 +98,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
@@ -120,7 +118,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun canJump(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
@@ -129,7 +127,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun setRideBar(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
@@ -138,7 +136,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun jumpForce(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
@@ -151,7 +149,7 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun gravity(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
@@ -160,45 +158,45 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return 1.0f
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun useAngVelSmoothing(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun inertia(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Double {
|
||||
override fun inertia(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Double {
|
||||
return 0.5
|
||||
}
|
||||
|
||||
override fun shouldRoll(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRoll(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun turnOffOnGround(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun dismountOnShift(settings: GenericSwimSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun dismountOnShift(settings: GenericSwimSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return false
|
||||
@@ -206,13 +204,13 @@ class GenericSwimBehaviour : RidingBehaviour<GenericSwimSettings, RidingBehaviou
|
||||
|
||||
override fun shouldRotatePlayerHead(
|
||||
settings: GenericSwimSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: GenericSwimSettings) = RidingBehaviourState()
|
||||
override fun createDefaultState() = NoState
|
||||
|
||||
}
|
||||
|
||||
@@ -238,7 +236,6 @@ class GenericSwimSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(canJump)
|
||||
buffer.writeExpression(jumpVector[0])
|
||||
buffer.writeExpression(jumpVector[1])
|
||||
|
||||
@@ -12,7 +12,7 @@ import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.NoState
|
||||
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.posing.PoseOption
|
||||
@@ -29,32 +29,31 @@ import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourState> {
|
||||
class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, NoState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("air/glider")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.AIR
|
||||
|
||||
val poseProvider = PoseProvider<GliderAirSettings, RidingBehaviourState>(PoseType.HOVER)
|
||||
val poseProvider = PoseProvider<GliderAirSettings, NoState>(PoseType.HOVER)
|
||||
.with(PoseOption(PoseType.FLY) { _, _, entity -> entity.entityData.get(PokemonEntity.MOVING) })
|
||||
|
||||
override fun isActive(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun isActive(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun pose(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): PoseType {
|
||||
override fun pose(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): PoseType {
|
||||
return poseProvider.select(settings, state, vehicle)
|
||||
}
|
||||
|
||||
override fun speed(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
override fun speed(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
return vehicle.runtime.resolveFloat(settings.speed)
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
@@ -63,7 +62,7 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun velocity(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
@@ -78,7 +77,7 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun angRollVel(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
@@ -88,7 +87,7 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
@@ -106,13 +105,13 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
return Vec3(0.0, mouseY * invertPitch, mouseX * invertRoll)
|
||||
}
|
||||
|
||||
override fun canJump(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity, driver: Player): Boolean {
|
||||
override fun canJump(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity, driver: Player): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun setRideBar(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
@@ -121,7 +120,7 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun jumpForce(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
@@ -131,7 +130,7 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun gravity(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
@@ -140,51 +139,51 @@ class GliderAirBehaviour : RidingBehaviour<GliderAirSettings, RidingBehaviourSta
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return 1.0f
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun useAngVelSmoothing(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: GliderAirSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun inertia(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Double {
|
||||
override fun inertia(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Double {
|
||||
return 0.5
|
||||
}
|
||||
|
||||
override fun shouldRoll(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRoll(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun turnOffOnGround(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun dismountOnShift(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun dismountOnShift(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRotatePokemonHead(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(settings: GliderAirSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRotatePlayerHead(settings: GliderAirSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: GliderAirSettings) = RidingBehaviourState()
|
||||
override fun createDefaultState() = NoState
|
||||
}
|
||||
|
||||
class GliderAirSettings : RidingBehaviourSettings {
|
||||
@@ -200,7 +199,6 @@ class GliderAirSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(glideSpeed)
|
||||
buffer.writeExpression(speed)
|
||||
buffer.writeExpression(canStrafe)
|
||||
|
||||
@@ -11,8 +11,7 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.NoState
|
||||
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.posing.PoseOption
|
||||
@@ -32,19 +31,18 @@ import kotlin.math.abs
|
||||
import kotlin.math.pow
|
||||
import kotlin.math.sin
|
||||
|
||||
class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourState> {
|
||||
class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, NoState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("air/helicopter")
|
||||
val ROTATION_LIMIT = 30.0f
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.AIR
|
||||
|
||||
val poseProvider = PoseProvider<HelicopterSettings, RidingBehaviourState>(PoseType.HOVER)
|
||||
val poseProvider = PoseProvider<HelicopterSettings, NoState>(PoseType.HOVER)
|
||||
.with(PoseOption(PoseType.FLY) { _, _, entity -> entity.entityData.get(PokemonEntity.MOVING) })
|
||||
|
||||
override fun isActive(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun isActive(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
//If there are only fluid blocks or air block below the ride
|
||||
//then activate the controller. If it is in water the ride will
|
||||
//dismount accordingly
|
||||
@@ -58,11 +56,11 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
}
|
||||
}
|
||||
|
||||
override fun pose(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): PoseType {
|
||||
override fun pose(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): PoseType {
|
||||
return poseProvider.select(settings, state, vehicle)
|
||||
}
|
||||
|
||||
override fun speed(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
override fun speed(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity, driver: Player): Float {
|
||||
//Increased max speed to exaggerate movement.
|
||||
//This likely just needs to be a static number if it really is just
|
||||
//the scalar for the velocity vector
|
||||
@@ -71,7 +69,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun rotation(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
@@ -80,7 +78,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun velocity(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
@@ -109,7 +107,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun angRollVel(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
@@ -164,7 +162,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
@@ -184,7 +182,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun canJump(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
@@ -193,7 +191,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun setRideBar(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
@@ -202,7 +200,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun jumpForce(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
@@ -212,7 +210,7 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun gravity(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
@@ -221,55 +219,55 @@ class HelicopterBehaviour : RidingBehaviour<HelicopterSettings, RidingBehaviourS
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return 1.0f
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun useAngVelSmoothing(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun inertia(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Double {
|
||||
override fun inertia(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Double {
|
||||
return 0.1
|
||||
}
|
||||
|
||||
override fun shouldRoll(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRoll(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun turnOffOnGround(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun dismountOnShift(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun dismountOnShift(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: HelicopterSettings,
|
||||
state: RidingBehaviourState,
|
||||
state: NoState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(settings: HelicopterSettings, state: RidingBehaviourState, vehicle: PokemonEntity): Boolean {
|
||||
override fun shouldRotatePlayerHead(settings: HelicopterSettings, state: NoState, vehicle: PokemonEntity): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: HelicopterSettings) = RidingBehaviourState()
|
||||
override fun createDefaultState() = NoState
|
||||
}
|
||||
|
||||
|
||||
@@ -289,7 +287,6 @@ class HelicopterSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(gravity)
|
||||
buffer.writeExpression(horizontalAcceleration)
|
||||
buffer.writeExpression(verticalVelocity)
|
||||
|
||||
@@ -11,14 +11,12 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseOption
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
@@ -34,10 +32,9 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.AIR
|
||||
|
||||
val poseProvider = PoseProvider<JetAirSettings, JetAirState>(PoseType.HOVER)
|
||||
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVelocity.get().z > 0.1 })
|
||||
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVel.get().z > 0.1 })
|
||||
|
||||
override fun isActive(settings: JetAirSettings, state: JetAirState, vehicle: PokemonEntity): Boolean {
|
||||
return true
|
||||
@@ -60,7 +57,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
//Calculate stamina loss due to speed
|
||||
//At max speed it will tick down 0.1 a second so the stamina will last ten seconds
|
||||
//There has got to be a better way to express this equation. It interpolates between 0.5 and 1.0
|
||||
var staminaRate = (normalizeSpeed(state.rideVelocity.get().length(), minSpeed, topSpeed))
|
||||
var staminaRate = (normalizeSpeed(state.rideVel.get().length(), minSpeed, topSpeed))
|
||||
|
||||
//interpolate between 0.25 and 1.0 so that you always have at least a min of 0.25 stam loss
|
||||
staminaRate = 0.25 + (0.75 * staminaRate.pow(3))
|
||||
@@ -72,7 +69,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
state.stamina.set(1.0f)
|
||||
}
|
||||
|
||||
return state.rideVelocity.get().length().toFloat()
|
||||
return state.rideVel.get().length().toFloat()
|
||||
}
|
||||
|
||||
//TODO: Move these functions to a riding util class.
|
||||
@@ -111,8 +108,8 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
|
||||
//Translate ride space velocity to world space velocity.
|
||||
if (controller != null) {
|
||||
upForce = -1.0 * sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().z
|
||||
forwardForce = cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVelocity.get().z
|
||||
upForce = -1.0 * sin(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().z
|
||||
forwardForce = cos(Math.toRadians(controller.pitch.toDouble())) * state.rideVel.get().z
|
||||
}
|
||||
|
||||
//If stamina has run out then initiate forced glide down.
|
||||
@@ -144,7 +141,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
val accel = vehicle.runtime.resolveDouble(settings.accelerationExpr)
|
||||
val altitudeLimit = vehicle.runtime.resolveDouble(settings.jumpExpr)
|
||||
val minSpeed = vehicle.runtime.resolveDouble(settings.minSpeed)
|
||||
val speed = state.rideVelocity.get().length()
|
||||
val speed = state.rideVel.get().length()
|
||||
|
||||
//Give no altitude limit if at max jump stat.
|
||||
val pushingHeightLimit = if (vehicle.runtime.resolveBoolean(settings.infiniteStamina)) false
|
||||
@@ -155,15 +152,15 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
if (driver.zza > 0.0 && speed < topSpeed && state.stamina.get() > 0.0f && !pushingHeightLimit) {
|
||||
//modify acceleration to be slower when at closer speeds to top speed
|
||||
val accelMod = max(-(normalizeSpeed(speed, minSpeed, topSpeed)) + 1, 0.0)
|
||||
state.rideVelocity.set(Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, min(state.rideVelocity.get().z + (accel * accelMod), topSpeed)))
|
||||
state.rideVel.set(Vec3(state.rideVel.get().x, state.rideVel.get().y, min(state.rideVel.get().z + (accel * accelMod), topSpeed)))
|
||||
} else if (driver.zza >= 0.0 && (state.stamina.get() == 0.0f || pushingHeightLimit)) {
|
||||
state.rideVelocity.set(Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, max(state.rideVelocity.get().z - ((accel) / 4), minSpeed)))
|
||||
state.rideVel.set(Vec3(state.rideVel.get().x, state.rideVel.get().y, max(state.rideVel.get().z - ((accel) / 4), minSpeed)))
|
||||
} else if (driver.zza < 0.0 && speed > minSpeed) {
|
||||
//modify deccel to be slower when at closer speeds to minimum speed
|
||||
val deccelMod = max((normalizeSpeed(speed, minSpeed, topSpeed) - 1).pow(2), 0.1)
|
||||
|
||||
//Decelerate currently always a constant half of max acceleration.
|
||||
state.rideVelocity.set(Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, max(state.rideVelocity.get().z - ((accel * deccelMod) / 2), minSpeed)))
|
||||
state.rideVel.set(Vec3(state.rideVel.get().x, state.rideVel.get().y, max(state.rideVel.get().z - ((accel * deccelMod) / 2), minSpeed)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,7 +285,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
val minSpeed = vehicle.runtime.resolveDouble(settings.minSpeed)
|
||||
|
||||
//Must I ensure that topspeed is greater than minimum?
|
||||
val normalizedSpeed = normalizeSpeed(state.rideVelocity.get().length(), minSpeed, topSpeed)
|
||||
val normalizedSpeed = normalizeSpeed(state.rideVel.get().length(), minSpeed, topSpeed)
|
||||
|
||||
//TODO: Determine if this should be based on max possible speed instead of top speed.
|
||||
//Only ever want the fov change to be a max of 0.2 and for it to have non linear scaling.
|
||||
@@ -336,7 +333,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: JetAirSettings) = JetAirState()
|
||||
override fun createDefaultState() = JetAirState()
|
||||
}
|
||||
|
||||
class JetAirSettings : RidingBehaviourSettings {
|
||||
@@ -370,7 +367,6 @@ class JetAirSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(gravity)
|
||||
buffer.writeExpression(minSpeed)
|
||||
buffer.writeExpression(handlingYawExpr)
|
||||
@@ -397,33 +393,41 @@ class JetAirSettings : RidingBehaviourSettings {
|
||||
}
|
||||
}
|
||||
|
||||
class JetAirState : RidingBehaviourState() {
|
||||
class JetAirState : RidingBehaviourState {
|
||||
var currSpeed = ridingState(0.0, Side.CLIENT)
|
||||
var stamina = ridingState(1.0f, Side.CLIENT)
|
||||
var rideVel = ridingState(Vec3.ZERO, Side.CLIENT)
|
||||
var currMouseXForce = ridingState(0.0, Side.BOTH)
|
||||
var currMouseYForce = ridingState(0.0, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: FriendlyByteBuf) {
|
||||
super.encode(buffer)
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeDouble(currSpeed.get())
|
||||
buffer.writeFloat(stamina.get())
|
||||
buffer.writeVec3(rideVel.get())
|
||||
}
|
||||
|
||||
override fun decode(buffer: FriendlyByteBuf) {
|
||||
super.decode(buffer)
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
currSpeed.set(buffer.readDouble(), forced = true)
|
||||
stamina.set(buffer.readFloat(), forced = true)
|
||||
rideVel.set(buffer.readVec3(), forced = true)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
currSpeed.set(0.0, forced = true)
|
||||
stamina.set(1.0f, forced = true)
|
||||
rideVel.set(Vec3.ZERO, forced = true)
|
||||
currMouseXForce.set(0.0, forced = true)
|
||||
currMouseYForce.set(0.0, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "JetAirState(currSpeed=${currSpeed.get()}, stamina=${stamina.get()}, rideVel=${rideVel.get()}, currMouseXForce=${currMouseXForce.get()}, currMouseYForce=${currMouseYForce.get()})"
|
||||
}
|
||||
|
||||
override fun copy() = JetAirState().also {
|
||||
it.currSpeed.set(currSpeed.get(), forced = true)
|
||||
it.stamina.set(stamina.get(), forced = true)
|
||||
it.rideVelocity.set(rideVelocity.get(), forced = true)
|
||||
it.rideVel.set(rideVel.get(), forced = true)
|
||||
it.currMouseXForce.set(currMouseXForce.get(), forced = true)
|
||||
it.currMouseYForce.set(currMouseYForce.get(), forced = true)
|
||||
}
|
||||
@@ -431,6 +435,8 @@ class JetAirState : RidingBehaviourState() {
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is JetAirState) return false
|
||||
if (previous.currSpeed != currSpeed) return true
|
||||
return super.shouldSync(previous)
|
||||
if (previous.stamina != stamina) return true
|
||||
if (previous.rideVel != rideVel) return true
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,469 @@
|
||||
/*
|
||||
* 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.api.riding.behaviour.types
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.asExpression
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.readExpression
|
||||
import com.cobblemon.mod.common.util.writeExpression
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class JumpToFlightCompositeBehaviour : RidingBehaviour<JumpToFlightCompositeSettings, JumpToFlightCompositeState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("composite/jump_to_flight")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
|
||||
val landBehaviour: GenericLandBehaviour = GenericLandBehaviour()
|
||||
val birdBehaviour: BirdAirBehaviour = BirdAirBehaviour()
|
||||
|
||||
override fun tick(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
val flightState = state.flightState
|
||||
val groundState = state.landState
|
||||
if (shouldTransitionToGround(state, vehicle)) {
|
||||
//Pass the speed to the next state
|
||||
// groundState.currSpeed = flightState.currSpeed
|
||||
groundState.rideVel.set(flightState.rideVel.get())
|
||||
groundState.stamina.set(flightState.stamina.get())
|
||||
|
||||
state.activeController.set(GenericLandBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, false)
|
||||
state.timeTransitioned.set(vehicle.level().gameTime)
|
||||
} else if (shouldTransitionToAir(state, vehicle, driver)) {
|
||||
//Pass the speed to the next state
|
||||
// flightState.currSpeed = groundState.currSpeed
|
||||
flightState.rideVel.set(groundState.rideVel.get())
|
||||
flightState.stamina.set(groundState.stamina.get())
|
||||
|
||||
state.activeController.set(BirdAirBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, true)
|
||||
state.timeTransitioned.set(vehicle.level().gameTime)
|
||||
}
|
||||
}
|
||||
|
||||
override fun isActive(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
private fun shouldTransitionToGround(state: JumpToFlightCompositeState, entity: PokemonEntity): Boolean {
|
||||
return state.activeController.get() == BirdAirBehaviour.KEY
|
||||
&& entity.onGround()
|
||||
&& state.timeTransitioned.get() + 20 < entity.level().gameTime
|
||||
}
|
||||
|
||||
private fun shouldTransitionToAir(
|
||||
state: JumpToFlightCompositeState,
|
||||
entity: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return state.activeController.get() == GenericLandBehaviour.KEY
|
||||
&& driver.jumping
|
||||
&& state.timeTransitioned.get() + 20 < entity.level().gameTime
|
||||
}
|
||||
|
||||
override fun pose(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): PoseType {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.pose(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.pose(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun speed(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.speed(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.speed(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotation(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.rotation(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun velocity(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.velocity(settings.land, state.landState, vehicle, driver, input)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.velocity(settings.bird, state.flightState, vehicle, driver, input)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun angRollVel(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.angRollVel(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.angRollVel(
|
||||
settings.bird,
|
||||
state.flightState,
|
||||
vehicle,
|
||||
driver,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
mouseX: Double,
|
||||
mouseYSmoother: SmoothDouble,
|
||||
mouseXSmoother: SmoothDouble,
|
||||
sensitivity: Double,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotationOnMouseXY(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.rotationOnMouseXY(
|
||||
settings.bird,
|
||||
state.flightState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun canJump(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.canJump(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.canJump(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun setRideBar(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.setRideBar(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.setRideBar(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun jumpForce(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.jumpForce(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
jumpStrength
|
||||
)
|
||||
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.jumpForce(
|
||||
settings.bird,
|
||||
state.flightState,
|
||||
vehicle,
|
||||
driver,
|
||||
jumpStrength
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun gravity(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.gravity(settings.land, state.landState, vehicle, regularGravity)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.gravity(settings.bird, state.flightState, vehicle, regularGravity)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rideFovMultiplier(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.rideFovMultiplier(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useAngVelSmoothing(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.useAngVelSmoothing(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useRidingAltPose(settings.land, state.landState, vehicle, driver)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.useRidingAltPose(settings.bird, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun inertia(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.inertia(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.inertia(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRoll(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRoll(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.shouldRoll(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.turnOffOnGround(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.turnOffOnGround(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismountOnShift(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.dismountOnShift(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.dismountOnShift(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePokemonHead(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.shouldRotatePokemonHead(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(
|
||||
settings: JumpToFlightCompositeSettings,
|
||||
state: JumpToFlightCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePlayerHead(settings.land, state.landState, vehicle)
|
||||
BirdAirBehaviour.KEY -> birdBehaviour.shouldRotatePlayerHead(settings.bird, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun createDefaultState() = JumpToFlightCompositeState()
|
||||
}
|
||||
|
||||
class JumpToFlightCompositeSettings : RidingBehaviourSettings {
|
||||
override val key = JumpToFlightCompositeBehaviour.KEY
|
||||
|
||||
var bird: BirdAirSettings = BirdAirSettings()
|
||||
private set
|
||||
|
||||
var land: GenericLandSettings = GenericLandSettings()
|
||||
private set
|
||||
|
||||
var minimumSpeed: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
var minimumJump: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
bird.encode(buffer)
|
||||
land.encode(buffer)
|
||||
buffer.writeExpression(minimumSpeed)
|
||||
buffer.writeExpression(minimumJump)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
bird.decode(buffer)
|
||||
land.decode(buffer)
|
||||
minimumSpeed = buffer.readExpression()
|
||||
minimumJump = buffer.readExpression()
|
||||
}
|
||||
}
|
||||
|
||||
class JumpToFlightCompositeState : RidingBehaviourState {
|
||||
var activeController = ridingState(GenericLandBehaviour.KEY, Side.CLIENT)
|
||||
var currSpeed = ridingState(0.0, Side.BOTH)
|
||||
var timeTransitioned = ridingState(-100L, Side.BOTH)
|
||||
var landState = GenericLandState()
|
||||
var flightState = BirdAirState()
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(activeController.get())
|
||||
landState.encode(buffer)
|
||||
flightState.encode(buffer)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
activeController.set(buffer.readResourceLocation(), forced = true)
|
||||
landState.decode(buffer)
|
||||
flightState.decode(buffer)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
activeController.set(GenericLandBehaviour.KEY, forced = true)
|
||||
timeTransitioned.set(-100L, forced = true)
|
||||
currSpeed.set(0.0, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "JumpToFlightCompositeState(activeController=${activeController.get()}, landState=$landState, flightState=$flightState, currSpeed=${currSpeed.get()}, timeTransitioned=${timeTransitioned.get()})"
|
||||
}
|
||||
|
||||
override fun copy() = JumpToFlightCompositeState().also {
|
||||
it.activeController.set(activeController.get(), forced = true)
|
||||
it.landState = landState.copy()
|
||||
it.flightState = flightState.copy()
|
||||
it.currSpeed.set(currSpeed.get(), forced = true)
|
||||
it.timeTransitioned.set(timeTransitioned.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is JumpToFlightCompositeState) return false
|
||||
if (activeController != previous.activeController) return true
|
||||
if (landState.shouldSync(previous.landState)) return true
|
||||
if (flightState.shouldSync(previous.flightState)) return true
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,450 @@
|
||||
/*
|
||||
* 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.api.riding.behaviour.types
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.asExpression
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.readExpression
|
||||
import com.cobblemon.mod.common.util.writeExpression
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class RunToJetCompositeBehaviour : RidingBehaviour<RunToJetCompositeSettings, RunToJetCompositeState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("composite/run_to_jet")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
|
||||
val landBehaviour: GenericLandBehaviour = GenericLandBehaviour()
|
||||
val jetBehaviour: JetAirBehaviour = JetAirBehaviour()
|
||||
|
||||
override fun tick(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
val flightState = state.flightState
|
||||
val groundState = state.landState
|
||||
if (shouldTransitionToGround(state, vehicle, driver)) {
|
||||
groundState.currSpeed = flightState.currSpeed
|
||||
groundState.stamina = flightState.stamina
|
||||
groundState.rideVel = flightState.rideVel
|
||||
|
||||
state.activeController.set(GenericLandBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, false)
|
||||
state.timeTransitioned.set(vehicle.level().gameTime)
|
||||
} else if (shouldTransitionToAir(state, vehicle, driver, input)) {
|
||||
flightState.currSpeed = groundState.currSpeed
|
||||
flightState.stamina = groundState.stamina
|
||||
flightState.rideVel = groundState.rideVel
|
||||
|
||||
state.activeController.set(JetAirBehaviour.KEY)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, true)
|
||||
state.timeTransitioned.set(vehicle.level().gameTime)
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldTransitionToGround(
|
||||
state: RunToJetCompositeState,
|
||||
entity: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
if (state.activeController.get() != JetAirBehaviour.KEY) return false
|
||||
if (state.timeTransitioned.get() + 20 >= entity.level().gameTime) return false
|
||||
return driver.isSprinting || entity.onGround()
|
||||
}
|
||||
|
||||
private fun shouldTransitionToAir(
|
||||
state: RunToJetCompositeState,
|
||||
entity: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Boolean {
|
||||
if (state.activeController.get() != GenericLandBehaviour.KEY) return false
|
||||
if (state.timeTransitioned.get() + 20 >= entity.level().gameTime) return false
|
||||
return driver.isSprinting && input.z > 0.5
|
||||
}
|
||||
|
||||
override fun isActive(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun pose(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): PoseType {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.pose(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.pose(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun speed(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.speed(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.speed(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotation(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.rotation(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun velocity(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.velocity(settings.land, state.landState, vehicle, driver, input)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.velocity(settings.jet, state.flightState, vehicle, driver, input)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun angRollVel(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.angRollVel(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
JetAirBehaviour.KEY -> jetBehaviour.angRollVel(settings.jet, state.flightState, vehicle, driver, deltaTime)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
mouseX: Double,
|
||||
mouseYSmoother: SmoothDouble,
|
||||
mouseXSmoother: SmoothDouble,
|
||||
sensitivity: Double,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rotationOnMouseXY(
|
||||
settings.land,
|
||||
state.landState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.rotationOnMouseXY(
|
||||
settings.jet,
|
||||
state.flightState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun canJump(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.canJump(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.canJump(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun setRideBar(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.setRideBar(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.setRideBar(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun jumpForce(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
): Vec3 {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.jumpForce(settings.land, state.landState, vehicle, driver, jumpStrength)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.jumpForce(settings.jet, state.flightState, vehicle, driver, jumpStrength)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun gravity(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.gravity(settings.land, state.landState, vehicle, regularGravity)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.gravity(settings.jet, state.flightState, vehicle, regularGravity)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.rideFovMultiplier(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.rideFovMultiplier(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useAngVelSmoothing(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.useAngVelSmoothing(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.useRidingAltPose(settings.land, state.landState, vehicle, driver)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.useRidingAltPose(settings.jet, state.flightState, vehicle, driver)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun inertia(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Double {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.inertia(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.inertia(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRoll(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRoll(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.shouldRoll(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.turnOffOnGround(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.turnOffOnGround(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismountOnShift(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.dismountOnShift(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.dismountOnShift(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePokemonHead(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.shouldRotatePokemonHead(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(
|
||||
settings: RunToJetCompositeSettings,
|
||||
state: RunToJetCompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return when (state.activeController.get()) {
|
||||
GenericLandBehaviour.KEY -> landBehaviour.shouldRotatePlayerHead(settings.land, state.landState, vehicle)
|
||||
JetAirBehaviour.KEY -> jetBehaviour.shouldRotatePlayerHead(settings.jet, state.flightState, vehicle)
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun createDefaultState() = RunToJetCompositeState()
|
||||
}
|
||||
|
||||
class RunToJetCompositeSettings : RidingBehaviourSettings {
|
||||
override val key = RunToJetCompositeBehaviour.KEY
|
||||
|
||||
var jet: JetAirSettings = JetAirSettings()
|
||||
private set
|
||||
|
||||
var land: GenericLandSettings = GenericLandSettings()
|
||||
private set
|
||||
|
||||
var minimumSpeed: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
var minimumJump: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
jet.encode(buffer)
|
||||
land.encode(buffer)
|
||||
buffer.writeExpression(minimumSpeed)
|
||||
buffer.writeExpression(minimumJump)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
jet.decode(buffer)
|
||||
land.decode(buffer)
|
||||
minimumSpeed = buffer.readExpression()
|
||||
minimumJump = buffer.readExpression()
|
||||
}
|
||||
}
|
||||
|
||||
class RunToJetCompositeState : RidingBehaviourState {
|
||||
var activeController = ridingState(GenericLandBehaviour.KEY, Side.CLIENT)
|
||||
var landState: GenericLandState = GenericLandState()
|
||||
var flightState: JetAirState = JetAirState()
|
||||
var currSpeed = ridingState(0.0, Side.BOTH)
|
||||
var timeTransitioned = ridingState(-100L, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(activeController.get())
|
||||
landState.encode(buffer)
|
||||
flightState.encode(buffer)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
activeController.set(buffer.readResourceLocation(), forced = true)
|
||||
landState.decode(buffer)
|
||||
flightState.decode(buffer)
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
activeController.set(GenericLandBehaviour.KEY, forced = true)
|
||||
timeTransitioned.set(-100L, forced = true)
|
||||
currSpeed.set(0.0, forced = true)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "RunToJetCompositeState(activeController=${activeController.get()}, landState=$landState, flightState=$flightState, currSpeed=${currSpeed.get()}, timeTransitioned=${timeTransitioned.get()})"
|
||||
}
|
||||
|
||||
override fun copy() = RunToJetCompositeState().also {
|
||||
it.activeController.set(activeController.get(), forced = true)
|
||||
it.landState = landState.copy()
|
||||
it.flightState = flightState.copy()
|
||||
it.currSpeed.set(currSpeed.get(), forced = true)
|
||||
it.timeTransitioned.set(timeTransitioned.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is RunToJetCompositeState) return false
|
||||
if (activeController != previous.activeController) return true
|
||||
if (landState.shouldSync(previous.landState)) return true
|
||||
if (flightState.shouldSync(previous.flightState)) return true
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ package com.cobblemon.mod.common.api.riding.behaviour.types
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseOption
|
||||
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
|
||||
@@ -34,7 +33,6 @@ class SwimDashBehaviour : RidingBehaviour<SwimDashSettings, SwimDashState> {
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.LIQUID
|
||||
|
||||
val poseProvider = PoseProvider<SwimDashSettings, SwimDashState>(PoseType.FLOAT)
|
||||
.with(PoseOption(PoseType.SWIM) { _, _, entity -> entity.isSwimming && entity.entityData.get(PokemonEntity.MOVING) })
|
||||
@@ -219,7 +217,7 @@ class SwimDashBehaviour : RidingBehaviour<SwimDashSettings, SwimDashState> {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: SwimDashSettings) = SwimDashState()
|
||||
override fun createDefaultState() = SwimDashState()
|
||||
}
|
||||
|
||||
class SwimDashSettings : RidingBehaviourSettings {
|
||||
@@ -229,7 +227,6 @@ class SwimDashSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeFloat(dashSpeed)
|
||||
}
|
||||
|
||||
@@ -238,12 +235,14 @@ class SwimDashSettings : RidingBehaviourSettings {
|
||||
}
|
||||
}
|
||||
|
||||
class SwimDashState : RidingBehaviourState() {
|
||||
class SwimDashState : RidingBehaviourState {
|
||||
var dashing = ridingState(false, Side.BOTH)
|
||||
var ticks = ridingState(0, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
dashing.set(false, forced = true)
|
||||
ticks.set(0, forced = true)
|
||||
}
|
||||
@@ -253,9 +252,9 @@ class SwimDashState : RidingBehaviourState() {
|
||||
}
|
||||
|
||||
override fun copy() = SwimDashState().also {
|
||||
it.rideVelocity.set(rideVelocity.get(), forced = true)
|
||||
it.stamina.set(stamina.get(), forced = true)
|
||||
it.dashing.set(dashing.get(), forced = true)
|
||||
it.ticks.set(ticks. get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState) = false
|
||||
}
|
||||
|
||||
@@ -53,7 +53,6 @@ class VehicleLandBehaviour : RidingBehaviour<VehicleLandSettings, VehicleLandSta
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.LAND
|
||||
|
||||
val poseProvider = PoseProvider<VehicleLandSettings, VehicleLandState>(PoseType.STAND)
|
||||
.with(PoseOption(PoseType.WALK) { _, _, entity -> entity.entityData.get(PokemonEntity.MOVING) })
|
||||
@@ -266,7 +265,7 @@ class VehicleLandBehaviour : RidingBehaviour<VehicleLandSettings, VehicleLandSta
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createDefaultState(settings: VehicleLandSettings) = VehicleLandState()
|
||||
override fun createDefaultState() = VehicleLandState()
|
||||
}
|
||||
|
||||
class VehicleLandSettings : RidingBehaviourSettings {
|
||||
@@ -297,7 +296,6 @@ class VehicleLandSettings : RidingBehaviourSettings {
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeExpression(canJump)
|
||||
buffer.writeExpression(jumpVector[0])
|
||||
buffer.writeExpression(jumpVector[1])
|
||||
@@ -326,12 +324,14 @@ class VehicleLandSettings : RidingBehaviourSettings {
|
||||
}
|
||||
}
|
||||
|
||||
class VehicleLandState : RidingBehaviourState() {
|
||||
class VehicleLandState : RidingBehaviourState {
|
||||
var currSpeed = ridingState(0.0, Side.BOTH)
|
||||
var deltaRotation = ridingState(Vec2.ZERO, Side.BOTH)
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) = Unit
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
currSpeed.set(0.0, forced = true)
|
||||
deltaRotation.set(Vec2.ZERO, forced = true)
|
||||
}
|
||||
@@ -341,9 +341,9 @@ class VehicleLandState : RidingBehaviourState() {
|
||||
}
|
||||
|
||||
override fun copy() = VehicleLandState().also {
|
||||
it.rideVelocity.set(rideVelocity.get(), forced = true)
|
||||
it.stamina.set(stamina.get(), forced = true)
|
||||
it.currSpeed.set(currSpeed.get(), forced = true)
|
||||
it.deltaRotation.set(deltaRotation.get(), forced = true)
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState) = false
|
||||
}
|
||||
|
||||
@@ -1,418 +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.api.riding.behaviour.types.composite
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.*
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.strategies.CompositeRidingStrategies
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.adapters.RidingBehaviourSettingsAdapter
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.SmoothDouble
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec2
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class CompositeBehaviour : RidingBehaviour<CompositeSettings, CompositeState> {
|
||||
companion object {
|
||||
val KEY = cobblemonResource("composite")
|
||||
}
|
||||
|
||||
override val key = KEY
|
||||
override val style = RidingStyle.COMPOSITE
|
||||
|
||||
override fun createDefaultState(settings: CompositeSettings): CompositeState {
|
||||
val defaultBehaviour = RidingBehaviours.get(settings.defaultBehaviour.key)
|
||||
val defaultState = defaultBehaviour.createDefaultState(settings.defaultBehaviour)
|
||||
val alternateBehaviour = RidingBehaviours.get(settings.alternateBehaviour.key)
|
||||
val alternativeState = alternateBehaviour.createDefaultState(settings.alternateBehaviour)
|
||||
return CompositeState(
|
||||
defaultBehaviour = settings.defaultBehaviour.key,
|
||||
defaultBehaviourState = defaultState,
|
||||
alternateBehaviourState = alternativeState
|
||||
)
|
||||
}
|
||||
|
||||
fun <T> chooseBehaviour(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
action: (behaviour: RidingBehaviour<RidingBehaviourSettings, RidingBehaviourState>, settings: RidingBehaviourSettings, state: RidingBehaviourState) -> T
|
||||
): T {
|
||||
val defaultBehaviour = RidingBehaviours.get(settings.defaultBehaviour.key)
|
||||
val alternativeBehaviour = RidingBehaviours.get(settings.alternateBehaviour.key)
|
||||
return when (state.activeController.get()) {
|
||||
settings.defaultBehaviour.key -> action(
|
||||
defaultBehaviour,
|
||||
settings.defaultBehaviour,
|
||||
state.defaultBehaviourState
|
||||
)
|
||||
settings.alternateBehaviour.key -> action(
|
||||
alternativeBehaviour,
|
||||
settings.alternateBehaviour,
|
||||
state.alternateBehaviourState
|
||||
)
|
||||
|
||||
else -> error("Invalid controller: ${state.activeController.get()}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun tick(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
val strategy = CompositeRidingStrategies.get(settings.transitionStrategy)
|
||||
strategy.tick(settings, state, state.defaultBehaviourState, state.alternateBehaviourState, vehicle, driver, input)
|
||||
}
|
||||
|
||||
override fun clampPassengerRotation(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
entity: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
) {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.clampPassengerRotation(behaviourSettings, behaviourState, entity, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun updatePassengerRotation(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
entity: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
) {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.updatePassengerRotation(behaviourSettings, behaviourState, entity, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePlayerHead(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.shouldRotatePlayerHead(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRotatePokemonHead(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.shouldRotatePokemonHead(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismountOnShift(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.dismountOnShift(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun turnOffOnGround(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.turnOffOnGround(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun shouldRoll(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.shouldRoll(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun inertia(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Double {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.inertia(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun useRidingAltPose(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.useRidingAltPose(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun useAngVelSmoothing(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.useAngVelSmoothing(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun rideFovMultiplier(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.rideFovMultiplier(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun gravity(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
regularGravity: Double
|
||||
): Double {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.gravity(behaviourSettings, behaviourState, vehicle, regularGravity)
|
||||
}
|
||||
}
|
||||
|
||||
override fun jumpForce(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
jumpStrength: Int
|
||||
): Vec3 {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.jumpForce(behaviourSettings, behaviourState, vehicle, driver, jumpStrength)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setRideBar(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.setRideBar(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun canJump(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.canJump(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotationOnMouseXY(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
mouseY: Double,
|
||||
mouseX: Double,
|
||||
mouseYSmoother: SmoothDouble,
|
||||
mouseXSmoother: SmoothDouble,
|
||||
sensitivity: Double,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.rotationOnMouseXY(
|
||||
behaviourSettings,
|
||||
behaviourState,
|
||||
vehicle,
|
||||
driver,
|
||||
mouseY,
|
||||
mouseX,
|
||||
mouseYSmoother,
|
||||
mouseXSmoother,
|
||||
sensitivity,
|
||||
deltaTime
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun angRollVel(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
deltaTime: Double
|
||||
): Vec3 {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.angRollVel(behaviourSettings, behaviourState, vehicle, driver, deltaTime)
|
||||
}
|
||||
}
|
||||
|
||||
override fun velocity(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Vec3 {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.velocity(behaviourSettings, behaviourState, vehicle, driver, input)
|
||||
}
|
||||
}
|
||||
|
||||
override fun rotation(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: LivingEntity
|
||||
): Vec2 {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.rotation(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun speed(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Float {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.speed(behaviourSettings, behaviourState, vehicle, driver)
|
||||
}
|
||||
}
|
||||
|
||||
override fun pose(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): PoseType {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.pose(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun isActive(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
return chooseBehaviour(settings, state) { behaviour, behaviourSettings, behaviourState ->
|
||||
behaviour.isActive(behaviourSettings, behaviourState, vehicle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open class CompositeSettings : RidingBehaviourSettings {
|
||||
lateinit var transitionStrategy: ResourceLocation
|
||||
private set
|
||||
lateinit var defaultBehaviour: RidingBehaviourSettings
|
||||
private set
|
||||
lateinit var alternateBehaviour: RidingBehaviourSettings
|
||||
private set
|
||||
|
||||
override val key: ResourceLocation = CompositeBehaviour.KEY
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(key)
|
||||
buffer.writeResourceLocation(transitionStrategy)
|
||||
defaultBehaviour.encode(buffer)
|
||||
alternateBehaviour.encode(buffer)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
transitionStrategy = buffer.readResourceLocation()
|
||||
val defaultBehaviourKey = buffer.readResourceLocation()
|
||||
defaultBehaviour = RidingBehaviourSettingsAdapter.types[defaultBehaviourKey]?.getConstructor()?.newInstance()
|
||||
?: error("Unknown controller key: $key")
|
||||
defaultBehaviour.decode(buffer)
|
||||
val alternativeBehaviourKey = buffer.readResourceLocation()
|
||||
alternateBehaviour =
|
||||
RidingBehaviourSettingsAdapter.types[alternativeBehaviourKey]?.getConstructor()?.newInstance()
|
||||
?: error("Unknown controller key: $key")
|
||||
alternateBehaviour.decode(buffer)
|
||||
}
|
||||
}
|
||||
|
||||
class CompositeState(
|
||||
private val defaultBehaviour: ResourceLocation,
|
||||
val defaultBehaviourState: RidingBehaviourState,
|
||||
val alternateBehaviourState: RidingBehaviourState
|
||||
) : RidingBehaviourState() {
|
||||
var activeController = ridingState(defaultBehaviour, Side.CLIENT)
|
||||
var lastTransition = ridingState(-100L, Side.BOTH)
|
||||
|
||||
override val rideVelocity: SidedRidingState<Vec3>
|
||||
get() = when (activeController.get()) {
|
||||
defaultBehaviour -> defaultBehaviourState.rideVelocity
|
||||
else -> alternateBehaviourState.rideVelocity
|
||||
}
|
||||
|
||||
override val stamina: SidedRidingState<Float>
|
||||
get() = when (activeController.get()) {
|
||||
defaultBehaviour -> defaultBehaviourState.stamina
|
||||
else -> alternateBehaviourState.stamina
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
activeController.set(defaultBehaviour, forced = true)
|
||||
lastTransition.set(-100L, forced = true)
|
||||
}
|
||||
|
||||
override fun copy(): CompositeState {
|
||||
val state =
|
||||
CompositeState(defaultBehaviour, defaultBehaviourState.copy(), alternateBehaviourState.copy())
|
||||
state.activeController.set(activeController.get(), forced = true)
|
||||
state.lastTransition.set(lastTransition.get(), forced = true)
|
||||
state.rideVelocity.set(rideVelocity.get(), forced = true)
|
||||
state.stamina.set(stamina.get(), forced = true)
|
||||
return state
|
||||
}
|
||||
|
||||
override fun shouldSync(previous: RidingBehaviourState): Boolean {
|
||||
if (previous !is CompositeState) return false
|
||||
if (previous.activeController.get() != activeController.get()) return true
|
||||
return super.shouldSync(previous)
|
||||
}
|
||||
|
||||
override fun encode(buffer: FriendlyByteBuf) {
|
||||
super.encode(buffer)
|
||||
buffer.writeResourceLocation(activeController.get())
|
||||
}
|
||||
|
||||
override fun decode(buffer: FriendlyByteBuf) {
|
||||
super.decode(buffer)
|
||||
activeController.set(buffer.readResourceLocation(), forced = true)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,32 +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.api.riding.behaviour.types.composite.strategies
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeSettings
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
|
||||
object CompositeRidingStrategies {
|
||||
val strategies = mutableMapOf<ResourceLocation, CompositeRidingStrategy<out CompositeSettings>>()
|
||||
|
||||
init {
|
||||
register(RunStrategy.key, RunStrategy)
|
||||
register(JumpStrategy.key, JumpStrategy)
|
||||
register(FallStrategy.key, FallStrategy)
|
||||
}
|
||||
|
||||
fun register(key: ResourceLocation, strategy: CompositeRidingStrategy<out CompositeSettings>) {
|
||||
if (strategies.contains(key)) error("Strategy already registered to key $key")
|
||||
strategies[key] = strategy
|
||||
}
|
||||
|
||||
fun get(key: ResourceLocation): CompositeRidingStrategy<CompositeSettings> {
|
||||
if (!strategies.contains(key)) error("Strategy not registered to key $key")
|
||||
return strategies[key]!! as CompositeRidingStrategy<CompositeSettings>
|
||||
}
|
||||
}
|
||||
@@ -1,52 +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.api.riding.behaviour.types.composite.strategies
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
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.behaviour.types.composite.CompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeState
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
interface CompositeRidingStrategy<T : CompositeSettings> {
|
||||
val key: ResourceLocation
|
||||
|
||||
fun tick(
|
||||
settings: T,
|
||||
state: CompositeState,
|
||||
defaultState: RidingBehaviourState,
|
||||
alternateState: RidingBehaviourState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
)
|
||||
|
||||
fun transition(
|
||||
vehicle: PokemonEntity,
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
fromState: RidingBehaviourState,
|
||||
toState: RidingBehaviourState,
|
||||
toSettings: RidingBehaviourSettings
|
||||
) {
|
||||
toState.stamina.set(fromState.stamina.get())
|
||||
toState.rideVelocity.set(fromState.rideVelocity.get())
|
||||
state.activeController.set(toSettings.key)
|
||||
state.lastTransition.set(vehicle.level().gameTime)
|
||||
val behaviour = RidingBehaviours.get(toSettings.key)
|
||||
vehicle.setBehaviourFlag(PokemonBehaviourFlag.FLYING, behaviour.style == RidingStyle.AIR)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,99 +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.api.riding.behaviour.types.composite.strategies
|
||||
|
||||
import com.bedrockk.molang.Expression
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
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.behaviour.types.composite.CompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeState
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
object FallStrategy : CompositeRidingStrategy<FallCompositeSettings> {
|
||||
|
||||
override val key = cobblemonResource("strategy/fall")
|
||||
|
||||
override fun tick(
|
||||
settings: FallCompositeSettings,
|
||||
state: CompositeState,
|
||||
defaultState: RidingBehaviourState,
|
||||
alternateState: RidingBehaviourState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
if (shouldTransitionToDefault(state, settings.defaultBehaviour, vehicle)) {
|
||||
transition(vehicle, settings, state, alternateState, defaultState, settings.defaultBehaviour)
|
||||
} else if (shouldTransitionToAlternate(settings, state, settings.alternateBehaviour, vehicle, driver)) {
|
||||
transition(vehicle, settings, state, defaultState, alternateState, settings.alternateBehaviour)
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldTransitionToDefault(
|
||||
state: CompositeState,
|
||||
defaultSettings: RidingBehaviourSettings,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
if (state.activeController.get() == defaultSettings.key) return false
|
||||
if (state.lastTransition.get() + 20 >= vehicle.level().gameTime) return false
|
||||
if (!vehicle.onGround()) return false
|
||||
val defaultBehaviour = RidingBehaviours.get(defaultSettings.key)
|
||||
return defaultBehaviour.isActive(defaultSettings, state.defaultBehaviourState, vehicle)
|
||||
}
|
||||
|
||||
private fun shouldTransitionToAlternate(
|
||||
settings: FallCompositeSettings,
|
||||
state: CompositeState,
|
||||
alternateSettings: RidingBehaviourSettings,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
if (state.activeController.get() == alternateSettings.key) return false
|
||||
if (!driver.jumping) return false
|
||||
if (state.lastTransition.get() + 20 >= vehicle.level().gameTime) return false
|
||||
|
||||
val runtime = vehicle.runtime
|
||||
val minFallingSpeed = runtime.resolveFloat(settings.minimumFallSpeed)
|
||||
val minForwardSpeed = runtime.resolveFloat(settings.minimumForwardSpeed)
|
||||
if (vehicle.deltaMovement.y < -minFallingSpeed) return false
|
||||
if (vehicle.deltaMovement.horizontalDistance() < minForwardSpeed) return false
|
||||
val alternativeBehaviour = RidingBehaviours.get(alternateSettings.key)
|
||||
return alternativeBehaviour.isActive(alternateSettings, state.alternateBehaviourState, vehicle)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class FallCompositeSettings : CompositeSettings() {
|
||||
override val key = FallStrategy.key
|
||||
|
||||
var minimumForwardSpeed: Expression = "0.0".asExpression()
|
||||
private set
|
||||
|
||||
var minimumFallSpeed: Expression = "0.5".asExpression()
|
||||
private set
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
super.encode(buffer)
|
||||
buffer.writeExpression(minimumForwardSpeed)
|
||||
buffer.writeExpression(minimumFallSpeed)
|
||||
}
|
||||
|
||||
override fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
super.decode(buffer)
|
||||
minimumForwardSpeed = buffer.readExpression()
|
||||
minimumFallSpeed = buffer.readExpression()
|
||||
}
|
||||
}
|
||||
@@ -1,68 +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.api.riding.behaviour.types.composite.strategies
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.RidingStyle
|
||||
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.behaviour.types.composite.CompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeState
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonBehaviourFlag
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
object JumpStrategy : CompositeRidingStrategy<CompositeSettings> {
|
||||
|
||||
override val key = cobblemonResource("strategy/jump")
|
||||
|
||||
override fun tick(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
defaultState: RidingBehaviourState,
|
||||
alternateState: RidingBehaviourState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
if (shouldTransitionToDefault(state, settings.defaultBehaviour, vehicle)) {
|
||||
transition(vehicle, settings, state, alternateState, defaultState, settings.defaultBehaviour)
|
||||
} else if (shouldTransitionToAlternative(state, settings.alternateBehaviour, vehicle, driver)) {
|
||||
transition(vehicle, settings, state, defaultState, alternateState, settings.alternateBehaviour)
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldTransitionToDefault(
|
||||
state: CompositeState,
|
||||
defaultSettings: RidingBehaviourSettings,
|
||||
vehicle: PokemonEntity
|
||||
): Boolean {
|
||||
if (state.activeController.get() == defaultSettings.key) return false
|
||||
if (!vehicle.onGround()) return false
|
||||
if (state.lastTransition.get() + 20 >= vehicle.level().gameTime) return false
|
||||
val defaultBehaviour = RidingBehaviours.get(defaultSettings.key)
|
||||
return defaultBehaviour.isActive(defaultSettings, state.defaultBehaviourState, vehicle)
|
||||
}
|
||||
|
||||
private fun shouldTransitionToAlternative(
|
||||
state: CompositeState,
|
||||
alternativeSettings: RidingBehaviourSettings,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
if (state.activeController.get() == alternativeSettings.key) return false
|
||||
if (!driver.jumping) return false
|
||||
if (state.lastTransition.get() + 20 >= vehicle.level().gameTime) return false
|
||||
val alternativeBehaviour = RidingBehaviours.get(alternativeSettings.key)
|
||||
return alternativeBehaviour.isActive(alternativeSettings, state.alternateBehaviourState, vehicle)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,67 +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.api.riding.behaviour.types.composite.strategies
|
||||
|
||||
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.behaviour.types.composite.CompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeState
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
object RunStrategy : CompositeRidingStrategy<CompositeSettings> {
|
||||
|
||||
override val key = cobblemonResource("strategy/run")
|
||||
|
||||
override fun tick(
|
||||
settings: CompositeSettings,
|
||||
state: CompositeState,
|
||||
defaultState: RidingBehaviourState,
|
||||
alternateState: RidingBehaviourState,
|
||||
vehicle: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
) {
|
||||
if (shouldTransitionToDefault(state, settings.defaultBehaviour, vehicle, driver)) {
|
||||
transition(vehicle, settings, state, alternateState, defaultState, settings.defaultBehaviour)
|
||||
}
|
||||
else if (shouldTransitionToAlternate(state, settings.alternateBehaviour, vehicle, driver, input)) {
|
||||
transition(vehicle, settings, state, defaultState, alternateState, settings.alternateBehaviour)
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldTransitionToDefault(
|
||||
state: CompositeState,
|
||||
defaultSettings: RidingBehaviourSettings,
|
||||
entity: PokemonEntity,
|
||||
driver: Player
|
||||
): Boolean {
|
||||
if (state.activeController.get() == defaultSettings.key) return false
|
||||
if (state.lastTransition.get() + 20 >= entity.level().gameTime) return false
|
||||
val defaultBehaviour = RidingBehaviours.get(defaultSettings.key)
|
||||
return !driver.isSprinting || defaultBehaviour.isActive(defaultSettings, state.defaultBehaviourState, entity)
|
||||
}
|
||||
|
||||
private fun shouldTransitionToAlternate(
|
||||
state: CompositeState,
|
||||
alternativeSettings: RidingBehaviourSettings,
|
||||
entity: PokemonEntity,
|
||||
driver: Player,
|
||||
input: Vec3
|
||||
): Boolean {
|
||||
if (state.activeController.get() == alternativeSettings.key) return false
|
||||
if (state.lastTransition.get() + 20 >= entity.level().gameTime) return false
|
||||
val alternativeBehaviour = RidingBehaviours.get(alternativeSettings.key)
|
||||
return driver.isSprinting && input.z > 0.5 && alternativeBehaviour.isActive(alternativeSettings, state.alternateBehaviourState, entity)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,77 +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
|
||||
|
||||
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
/**
|
||||
* This class is responsible for setting up the animation state of a Pokemon entity before it begins to render.
|
||||
*
|
||||
* Sometimes we depend on the animation state of the Pokemon to be set up before we begin rendering it, so this class
|
||||
* allows us to do that. It also caches which Pokemon have been pre-animated to avoid doing it multiple times.
|
||||
*
|
||||
* @author landonjw
|
||||
*/
|
||||
object MountedPokemonAnimationRenderController {
|
||||
private val forcedDeltas = mutableMapOf<Int, Float>()
|
||||
|
||||
fun setup(pokemon: PokemonEntity, partialTickTime: Float) {
|
||||
if (forcedDeltas.contains(pokemon.id)) return
|
||||
|
||||
val delegate = pokemon.delegate as? PokemonClientDelegate ?: return
|
||||
val model = delegate.currentModel ?: return
|
||||
if (!model.isReadyForAnimation()) return
|
||||
|
||||
val entityPos = Vec3(
|
||||
Mth.lerp(partialTickTime.toDouble(), pokemon.xOld, pokemon.x),
|
||||
Mth.lerp(partialTickTime.toDouble(), pokemon.yOld, pokemon.y),
|
||||
Mth.lerp(partialTickTime.toDouble(), pokemon.zOld, pokemon.z)
|
||||
)
|
||||
|
||||
val f = Mth.rotLerp(partialTickTime, pokemon.yBodyRotO, pokemon.yBodyRot)
|
||||
val g = Mth.rotLerp(partialTickTime, pokemon.yHeadRotO, pokemon.yHeadRot)
|
||||
var h = g - f
|
||||
val j = Mth.lerp(partialTickTime, pokemon.xRotO, pokemon.xRot)
|
||||
h = Mth.wrapDegrees(h)
|
||||
|
||||
var l = 0.0f
|
||||
var m = 0.0f
|
||||
if (!pokemon.isPassenger && pokemon.isAlive) {
|
||||
l = pokemon.walkAnimation.speed(partialTickTime)
|
||||
m = pokemon.walkAnimation.position(partialTickTime)
|
||||
if (pokemon.isBaby) {
|
||||
m *= 3.0f
|
||||
}
|
||||
|
||||
if (l > 1.0f) {
|
||||
l = 1.0f
|
||||
}
|
||||
}
|
||||
|
||||
delegate.updatePartialTicks(partialTickTime)
|
||||
delegate.updateLocatorPosition(entityPos)
|
||||
delegate.currentModel?.applyAnimations(pokemon, delegate, l, m, partialTickTime, j, h)
|
||||
|
||||
forcedDeltas[pokemon.id] = partialTickTime
|
||||
}
|
||||
|
||||
fun getPartialTick(pokemon: PokemonEntity) : Float? {
|
||||
return forcedDeltas[pokemon.id]
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the prerendered list. This should be called in the render loop before we begin setting up any pokemon with `setup`.
|
||||
*/
|
||||
fun reset() {
|
||||
forcedDeltas.clear()
|
||||
}
|
||||
}
|
||||
@@ -345,12 +345,9 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
|
||||
runtime.environment.query = struct
|
||||
}
|
||||
|
||||
override fun updateAge(age: Int) {
|
||||
this.age = age
|
||||
}
|
||||
|
||||
override fun initialize(entity: PokemonEntity) {
|
||||
this.currentEntity = entity
|
||||
this.age = entity.tickCount
|
||||
|
||||
this.runtime.environment.query.addFunctions(mapOf(
|
||||
"in_battle" to java.util.function.Function {
|
||||
|
||||
@@ -48,7 +48,6 @@ 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.renderer.MultiBufferSource
|
||||
import net.minecraft.client.renderer.RenderStateShard
|
||||
@@ -827,6 +826,4 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
|
||||
condition = condition,
|
||||
animations = { animations(it) }
|
||||
)
|
||||
|
||||
fun isReadyForAnimation() = ::context.isInitialized
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ import com.cobblemon.mod.common.entity.PosableEntity
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
|
||||
import com.mojang.brigadier.StringReader
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.multiplayer.ClientLevel
|
||||
import net.minecraft.client.resources.sounds.SimpleSoundInstance
|
||||
@@ -158,16 +157,10 @@ abstract class PosableState : Schedulable {
|
||||
.addFunction("render_item") { params ->
|
||||
if (params.get<MoValue>(0) !is StringValue) return@addFunction Unit
|
||||
|
||||
val item: ItemStack
|
||||
try {
|
||||
val client = Minecraft.getInstance().connection ?: return@addFunction Unit
|
||||
val result = ItemParser(client.registryAccess()).parse(StringReader(params.getString(0)))
|
||||
item = ItemStack(result.item)
|
||||
item.applyComponents(result.components)
|
||||
}
|
||||
catch (_: CommandSyntaxException) {
|
||||
return@addFunction Unit
|
||||
}
|
||||
val client = Minecraft.getInstance().connection ?: return@addFunction Unit
|
||||
val result = ItemParser(client.registryAccess()).parse(StringReader(params.getString(0)))
|
||||
val item = ItemStack(result.item)
|
||||
item.applyComponents(result.components)
|
||||
|
||||
val renderLocation = if (params.contains(1)) params.getString(1) else "item"
|
||||
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench
|
||||
|
||||
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
|
||||
import com.cobblemon.mod.common.entity.PosableEntity
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture
|
||||
import net.minecraft.client.renderer.RenderType
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer
|
||||
@@ -34,6 +36,7 @@ abstract class PosableEntityModel<T : Entity>(
|
||||
val context: RenderContext = RenderContext().also {
|
||||
it.put(RenderContext.RENDER_STATE, RenderContext.RenderState.WORLD)
|
||||
}
|
||||
|
||||
lateinit var posableModel: PosableModel
|
||||
|
||||
override fun renderToBuffer(
|
||||
@@ -76,25 +79,11 @@ abstract class PosableEntityModel<T : Entity>(
|
||||
) {
|
||||
setupEntityTypeContext(entity)
|
||||
if (entity is PosableEntity) {
|
||||
val ticks = getTicksForAnimation(entity, limbSwing, limbSwingAmount, ageInTicks, headYaw, headPitch)
|
||||
posableModel.applyAnimations(entity, entity.delegate as PosableState, limbSwing, limbSwingAmount, ticks, headYaw, headPitch)
|
||||
val state = entity.delegate as PosableState
|
||||
posableModel.applyAnimations(entity, state, limbSwing, limbSwingAmount, ageInTicks, headYaw, headPitch)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is to support cases where the ageInTicks value that should go to the animator is not the same as the entity's
|
||||
* normal value. This can happen in the case of riding where it has been rendered in a different part of the pipeline
|
||||
* and we want to prevent stuttering / re-render it for a specific moment.
|
||||
*/
|
||||
open fun getTicksForAnimation(
|
||||
entity: T,
|
||||
limbSwing: Float,
|
||||
limbSwingAmount: Float,
|
||||
ageInTicks: Float,
|
||||
headYaw: Float,
|
||||
headPitch: Float
|
||||
): Float = ageInTicks
|
||||
|
||||
open fun setupEntityTypeContext(entity: Entity?) {
|
||||
entity?.let {
|
||||
context.put(RenderContext.ENTITY, entity)
|
||||
@@ -103,4 +92,4 @@ abstract class PosableEntityModel<T : Entity>(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,16 +8,12 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon
|
||||
|
||||
import com.cobblemon.mod.common.client.MountedPokemonAnimationRenderController
|
||||
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableEntityModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class PosablePokemonEntityModel : PosableEntityModel<PokemonEntity>() {
|
||||
override fun setupEntityTypeContext(entity: Entity?) {
|
||||
@@ -30,28 +26,4 @@ class PosablePokemonEntityModel : PosableEntityModel<PokemonEntity>() {
|
||||
.let { texture -> context.put(RenderContext.TEXTURE, texture) }
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: This is a bit of a hack, but it works for now. We should find a better way to do this.
|
||||
override fun getTicksForAnimation(
|
||||
entity: PokemonEntity,
|
||||
limbSwing: Float,
|
||||
limbSwingAmount: Float,
|
||||
ageInTicks: Float,
|
||||
headYaw: Float,
|
||||
headPitch: Float
|
||||
): Float {
|
||||
val delegate = entity.delegate as? PosableState
|
||||
val forcedTick = MountedPokemonAnimationRenderController.getPartialTick(entity)
|
||||
if (entity.passengers.isEmpty() || delegate == null || forcedTick == null) {
|
||||
return ageInTicks
|
||||
}
|
||||
delegate.updatePartialTicks(forcedTick)
|
||||
val entityPos = Vec3(
|
||||
Mth.lerp(forcedTick.toDouble(), entity.xOld, entity.x),
|
||||
Mth.lerp(forcedTick.toDouble(), entity.yOld, entity.y),
|
||||
Mth.lerp(forcedTick.toDouble(), entity.zOld, entity.z)
|
||||
)
|
||||
delegate.updateLocatorPosition(entityPos)
|
||||
return forcedTick
|
||||
}
|
||||
}
|
||||
@@ -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.client.render.models.blockbench.pokemon.gen3
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
|
||||
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 net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class GrovyleModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("grovyle")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val leftLeg = getPart("left_upper_leg")
|
||||
override val rightLeg = getPart("right_upper_leg")
|
||||
|
||||
override var portraitScale = 2.31F
|
||||
override var portraitTranslation = Vec3(-0.24, 1.29, 0.0)
|
||||
|
||||
override var profileScale = 0.66F
|
||||
override var profileTranslation = Vec3(0.01, 0.87, 0.0)
|
||||
|
||||
//lateinit var sleep: CobblemonPose
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("grovyle", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
//sleep = registerPose(
|
||||
// poseType = PoseType.SLEEP,
|
||||
// animations = arrayOf(bedrock("grovyle", "sleep"))
|
||||
//)
|
||||
|
||||
val blink = quirk { bedrockStateful("grovyle", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("grovyle", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("grovyle", "ground_idle"),
|
||||
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
|
||||
)
|
||||
)
|
||||
}
|
||||
//override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
//) = if (state.isNotPosedIn(sleep)) bedrockStateful("grovyle", "faint") else null
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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.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.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class MetagrossModel (root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("metagross")
|
||||
|
||||
override var portraitScale = 1.1F
|
||||
override var portraitTranslation = Vec3(-0.45, 0.5, 0.0)
|
||||
|
||||
override var profileScale = 0.4F
|
||||
override var profileTranslation = Vec3(0.0, 1.0, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var hover: Pose
|
||||
lateinit var fly: Pose
|
||||
lateinit var sleep: Pose
|
||||
lateinit var battleidle: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("metagross", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("metagross", "blink")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("metagross", "sleep"))
|
||||
)
|
||||
standing = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = PoseType.STATIONARY_POSES - PoseType.HOVER - PoseType.FLOAT + PoseType.UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("metagross", "ground_idle")
|
||||
)
|
||||
)
|
||||
hover = registerPose(
|
||||
poseName = "hover",
|
||||
poseTypes = setOf(PoseType.HOVER, PoseType.FLOAT),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("metagross", "air_idle")
|
||||
)
|
||||
)
|
||||
fly = registerPose(
|
||||
poseName = "fly",
|
||||
poseTypes = setOf(PoseType.FLY, PoseType.SWIM),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("metagross", "air_fly")
|
||||
)
|
||||
)
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES - PoseType.FLY - PoseType.SWIM,
|
||||
transformTicks = 5,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("metagross", "ground_walk")
|
||||
)
|
||||
)
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling },
|
||||
animations = arrayOf(
|
||||
bedrock("metagross", "battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("metagross", "faint") else null
|
||||
}
|
||||
@@ -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.client.render.models.blockbench.pokemon.gen3
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
|
||||
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 net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class SceptileModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("sceptile")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val leftLeg = getPart("left_upper_leg")
|
||||
override val rightLeg = getPart("right_upper_leg")
|
||||
|
||||
override var portraitScale = 2.34F
|
||||
override var portraitTranslation = Vec3(-0.25, 2.22, 0.0)
|
||||
|
||||
override var profileScale = 0.63F
|
||||
override var profileTranslation = Vec3(0.06, 0.91, 0.0)
|
||||
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("sceptile", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
// sleep = registerPose(
|
||||
// poseType = PoseType.SLEEP,
|
||||
// animations = arrayOf(bedrock("sceptile", "sleep"))
|
||||
// )
|
||||
val blink = quirk { bedrockStateful("sceptile", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("sceptile", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("sceptile", "ground_idle"),
|
||||
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
|
||||
)
|
||||
)
|
||||
}
|
||||
//override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
//) = if (state.isNotPosedIn(sleep)) bedrockStateful("sceptile", "faint") else null
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* 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.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 net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class TreeckoModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("treecko")
|
||||
override val head = getPart("head")
|
||||
|
||||
override var portraitScale = 2.25F
|
||||
override var portraitTranslation = Vec3(0.02, 0.12, 0.0)
|
||||
|
||||
override var profileScale = 0.74F
|
||||
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
|
||||
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("treecko", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
//sleep = registerPose(
|
||||
// poseType = PoseType.SLEEP,
|
||||
// animations = arrayOf(bedrock("treecko", "sleep"))
|
||||
//)
|
||||
|
||||
val blink = quirk { bedrockStateful("treecko", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES + PoseType.SLEEP,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("treecko", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("treecko", "ground_walk"),
|
||||
)
|
||||
)
|
||||
}
|
||||
//override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
//) = if (state.isNotPosedIn(sleep)) bedrockStateful("treecko", "faint") else null
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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.gen8
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BimanualSwingAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BimanualFrame
|
||||
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 net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class SneaslerModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("sneasler")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 2.03F
|
||||
override var portraitTranslation = Vec3(-0.44, 2.41, 0.0)
|
||||
|
||||
override var profileScale = 0.52F
|
||||
override var profileTranslation = Vec3(0.0, 0.94, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("sneasler", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("sneasler", "blink") }
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("sneasler", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("sneasler", "ground_idle"),
|
||||
BipedWalkAnimation(this, periodMultiplier = 0.6F, amplitudeMultiplier = 0.9F),
|
||||
BimanualSwingAnimation(this, swingPeriodMultiplier = 0.6F, amplitudeMultiplier = 0.9F)
|
||||
//bedrock("sneasler", "ground_walk")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -404,6 +404,9 @@ object VaryingModelRepository {
|
||||
inbuilt("klinklang", :: KlinklangModel)
|
||||
inbuilt("morelull", :: MorelullModel)
|
||||
inbuilt("shiinotic", :: ShiinoticModel)
|
||||
inbuilt("treecko", :: TreeckoModel)
|
||||
inbuilt("grovyle", :: GrovyleModel)
|
||||
inbuilt("sceptile", :: SceptileModel)
|
||||
inbuilt("honedge", :: HonedgeModel)
|
||||
inbuilt("spiritomb", :: SpiritombModel)
|
||||
inbuilt("chespin", :: ChespinModel)
|
||||
@@ -639,6 +642,7 @@ object VaryingModelRepository {
|
||||
inbuilt("gallade", ::GalladeModel)
|
||||
inbuilt("beldum", ::BeldumModel)
|
||||
inbuilt("metang", ::MetangModel)
|
||||
inbuilt("metagross", ::MetagrossModel)
|
||||
inbuilt("ursaluna", ::UrsalunaModel)
|
||||
inbuilt("lechonk", ::LechonkModel)
|
||||
inbuilt("oinkologne_male", ::OinkologneMaleModel)
|
||||
@@ -698,6 +702,7 @@ object VaryingModelRepository {
|
||||
inbuilt("qwilfish_hisuian", ::QwilfishHisuianModel)
|
||||
inbuilt("overqwil", ::OverqwilModel)
|
||||
inbuilt("sneasel_hisuian", ::SneaselHisuianModel)
|
||||
inbuilt("sneasler", ::SneaslerModel)
|
||||
inbuilt("petilil", ::PetililModel)
|
||||
inbuilt("lilligant", ::LilligantModel)
|
||||
inbuilt("petilil_hisui_bias", ::PetililHisuiBiasModel)
|
||||
|
||||
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.client.render.player
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.riding.Rideable
|
||||
import com.cobblemon.mod.common.client.MountedPokemonAnimationRenderController
|
||||
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
|
||||
@@ -21,7 +20,6 @@ import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.client.player.AbstractClientPlayer
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import org.joml.AxisAngle4f
|
||||
import org.joml.Matrix4f
|
||||
import org.joml.Vector3f
|
||||
|
||||
@@ -42,7 +40,12 @@ object MountedPlayerRenderer {
|
||||
|
||||
//Positions player
|
||||
if (locator != null) {
|
||||
MountedPokemonAnimationRenderController.setup(entity, partialTicks)
|
||||
val locatorOffset = locator.matrix.getTranslation(Vector3f())
|
||||
|
||||
val center = Vector3f(0f, entity.bbHeight/2, 0f)
|
||||
val locatorOffsetToCenter = locatorOffset.sub(center, Vector3f())
|
||||
val offset = locatorOffsetToCenter.add(center, Vector3f()).sub(Vector3f(0f, player.bbHeight / 2, 0f))
|
||||
matrix.translate(offset)
|
||||
|
||||
//Undo seat position
|
||||
val playerPos = Vec3(
|
||||
@@ -58,16 +61,20 @@ object MountedPlayerRenderer {
|
||||
)
|
||||
|
||||
matrix.translate(playerPos.subtract(entityPos).toVector3f().negate())
|
||||
matrix.translate(locator.matrix.getTranslation(Vector3f()))
|
||||
|
||||
val offset = Vector3f(0f, player.bbHeight / 2, 0f).mul(-1f)
|
||||
|
||||
matrix.rotate(locator.matrix.getRotation(AxisAngle4f()))
|
||||
matrix.rotate(Axis.YP.rotationDegrees(180 + yBodyRot))
|
||||
matrix.translate(offset)
|
||||
|
||||
matrix.translate(Vector3f(0f, 0.35f, 0f))
|
||||
}
|
||||
|
||||
//Rotates player
|
||||
if (player is OrientationControllable && player.orientationController.active && !disableRollableRenderDebug) {
|
||||
val center = Vector3f(0f, player.bbHeight / 2, 0f)
|
||||
val transformationMatrix = Matrix4f()
|
||||
transformationMatrix.translate(center)
|
||||
transformationMatrix.rotate(player.orientationController.getRenderOrientation(partialTicks))
|
||||
transformationMatrix.translate(center.negate(Vector3f()))
|
||||
//Pre-Undo Yaw
|
||||
transformationMatrix.rotate(Axis.YP.rotationDegrees(yBodyRot+180f))
|
||||
matrix.mul(transformationMatrix)
|
||||
}
|
||||
matrix.translate(0f, 0.25f, 0f)
|
||||
}
|
||||
|
||||
fun animate(
|
||||
|
||||
@@ -283,9 +283,9 @@ open class PokemonEntity(
|
||||
ridingBehaviourSettings = null
|
||||
if (pokemon.riding.behaviour == null) return
|
||||
|
||||
riding = RidingBehaviours.get(pokemon.riding.behaviour!!.key)
|
||||
riding = RidingBehaviours.get(pokemon.riding.behaviour!!.key) as RidingBehaviour<RidingBehaviourSettings, RidingBehaviourState>?
|
||||
ridingState = riding!!.createDefaultState()
|
||||
ridingBehaviourSettings = pokemon.riding.behaviour!!
|
||||
ridingState = riding!!.createDefaultState(ridingBehaviourSettings!!)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,11 +354,10 @@ open class PokemonEntity(
|
||||
}
|
||||
|
||||
var flyDistO = 0F
|
||||
|
||||
var isPokemonWalking = false
|
||||
var isPokemonFlying = false
|
||||
|
||||
var tickSpawned = 0
|
||||
|
||||
init {
|
||||
delegate.initialize(this)
|
||||
delegate.changePokemon(pokemon)
|
||||
@@ -1012,15 +1011,12 @@ open class PokemonEntity(
|
||||
itemStack
|
||||
)
|
||||
if (player.isShiftKeyDown) {
|
||||
val canRide = ifRidingAvailableSupply(false) { behaviour, settings, state ->
|
||||
this.canRide(player) && seats.isNotEmpty() && behaviour.isActive(settings, state, this)
|
||||
}
|
||||
InteractPokemonUIPacket(
|
||||
this.getUUID(),
|
||||
canSitOnShoulder() && pokemon in player.party(),
|
||||
!(pokemon.heldItemNoCopy().isEmpty && itemStack.isEmpty),
|
||||
(!pokemon.cosmeticItem.isEmpty && itemStack.isEmpty) || cosmeticItemDefinition != null,
|
||||
canRide
|
||||
this.canRide(player) && pokemon.riding.canRide
|
||||
).sendToPlayer(player)
|
||||
} else {
|
||||
// TODO #105
|
||||
@@ -1240,7 +1236,6 @@ open class PokemonEntity(
|
||||
else -> lang("held_item.replace", returned.displayName, this.pokemon.getDisplayName(), giving.displayName)
|
||||
}
|
||||
|
||||
player.giveOrDropItemStack(returned, false)
|
||||
player.sendSystemMessage(text)
|
||||
this.level().playSoundServer(
|
||||
position = this.position(),
|
||||
@@ -2105,4 +2100,4 @@ open class PokemonEntity(
|
||||
override fun resolveEntityScan(): LivingEntity {
|
||||
return this
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,14 +8,10 @@
|
||||
|
||||
package com.cobblemon.mod.common.entity.pokemon
|
||||
|
||||
import com.bedrockk.molang.runtime.struct.QueryStruct
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.bedrockk.molang.runtime.value.MoValue
|
||||
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.molang.ObjectValue
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import com.cobblemon.mod.common.api.pokemon.status.Statuses
|
||||
@@ -25,7 +21,6 @@ import com.cobblemon.mod.common.entity.PoseType
|
||||
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.asUUID
|
||||
import com.cobblemon.mod.common.util.getIsSubmerged
|
||||
import com.cobblemon.mod.common.util.math.geometry.toRadians
|
||||
import com.cobblemon.mod.common.util.playSoundServer
|
||||
@@ -107,32 +102,6 @@ class PokemonServerDelegate : PokemonSideDelegate {
|
||||
updateTrackedValues()
|
||||
}
|
||||
|
||||
override fun addToStruct(struct: QueryStruct) {
|
||||
super.addToStruct(struct)
|
||||
if (entity.pokemon.isWild()) {
|
||||
struct
|
||||
.addFunction("attempt_wild_battle") { params ->
|
||||
val opponentValue = params.get<MoValue>(0)
|
||||
val opponent = if (opponentValue is ObjectValue<*>) {
|
||||
opponentValue.obj as ServerPlayer
|
||||
} else {
|
||||
val paramString = opponentValue.asString()
|
||||
val playerUUID = paramString.asUUID
|
||||
if (playerUUID != null) {
|
||||
entity.server!!.playerList.getPlayer(playerUUID) ?: return@addFunction DoubleValue.ZERO
|
||||
} else {
|
||||
entity.server!!.playerList.getPlayerByName(paramString) ?: return@addFunction DoubleValue.ZERO
|
||||
}
|
||||
}
|
||||
|
||||
// Need to wait to ensure any entity info gets grabbed properly before battle attempt.
|
||||
return@addFunction entity.after(0.01F) {
|
||||
DoubleValue(entity.forceBattle(opponent))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getBattle() = entity.battleId?.let(BattleRegistry::getBattle)
|
||||
|
||||
fun updateTrackedValues() {
|
||||
|
||||
@@ -10,8 +10,10 @@ package com.cobblemon.mod.common.net.messages.client.pokemon.update
|
||||
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
|
||||
import com.cobblemon.mod.common.net.messages.server.pokemon.update.ServerboundUpdateRidingStatePacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import com.cobblemon.mod.common.util.server
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
|
||||
@@ -19,7 +21,7 @@ class ClientboundUpdateRidingStatePacket(
|
||||
val entity: Int,
|
||||
val behaviour: ResourceLocation,
|
||||
val state: RidingBehaviourState? = null,
|
||||
val data: FriendlyByteBuf? = null
|
||||
val data: RegistryFriendlyByteBuf? = null
|
||||
) : NetworkPacket<ClientboundUpdateRidingStatePacket> {
|
||||
override val id = ID
|
||||
|
||||
@@ -35,7 +37,7 @@ class ClientboundUpdateRidingStatePacket(
|
||||
fun decode(buffer: RegistryFriendlyByteBuf): ClientboundUpdateRidingStatePacket {
|
||||
val entity = buffer.readInt()
|
||||
val behaviour = buffer.readResourceLocation()
|
||||
val state = FriendlyByteBuf(buffer.readBytes(buffer.readableBytes()))
|
||||
val state = RegistryFriendlyByteBuf(buffer.readBytes(buffer.readableBytes()), Minecraft.getInstance().player!!.registryAccess())
|
||||
return ClientboundUpdateRidingStatePacket(
|
||||
entity = entity,
|
||||
behaviour = behaviour,
|
||||
|
||||
@@ -48,7 +48,6 @@ class SpawnPokemonPacket(
|
||||
var friendship: Int,
|
||||
var freezeFrame: Float,
|
||||
var passengers: IntArray,
|
||||
var tickSpawned: Int,
|
||||
vanillaSpawnPacket: ClientboundAddEntityPacket,
|
||||
) : SpawnExtraDataEntityPacket<SpawnPokemonPacket, PokemonEntity>(vanillaSpawnPacket) {
|
||||
|
||||
@@ -77,7 +76,6 @@ class SpawnPokemonPacket(
|
||||
entity.entityData.get(PokemonEntity.FRIENDSHIP),
|
||||
entity.entityData.get(PokemonEntity.FREEZE_FRAME),
|
||||
entity.passengers.map { it.id }.toIntArray(),
|
||||
entity.tickCount,
|
||||
vanillaSpawnPacket
|
||||
)
|
||||
|
||||
@@ -104,7 +102,6 @@ class SpawnPokemonPacket(
|
||||
buffer.writeInt(this.friendship)
|
||||
buffer.writeFloat(this.freezeFrame)
|
||||
buffer.writeVarIntArray(this.passengers)
|
||||
buffer.writeInt(this.tickSpawned)
|
||||
}
|
||||
|
||||
override fun applyData(entity: PokemonEntity, level: ClientLevel) {
|
||||
@@ -139,8 +136,6 @@ class SpawnPokemonPacket(
|
||||
val passenger = level.getEntity(it) ?: return@forEach
|
||||
passenger.startRiding(entity)
|
||||
}
|
||||
entity.tickSpawned = this.tickSpawned
|
||||
entity.delegate.updateAge(this.tickSpawned)
|
||||
}
|
||||
|
||||
override fun checkType(entity: Entity): Boolean = entity is PokemonEntity
|
||||
@@ -170,10 +165,9 @@ class SpawnPokemonPacket(
|
||||
val friendship = buffer.readInt()
|
||||
val freezeFrame = buffer.readFloat()
|
||||
val passengers = buffer.readVarIntArray()
|
||||
val tickSpawned = buffer.readInt()
|
||||
val vanillaPacket = decodeVanillaPacket(buffer)
|
||||
|
||||
return SpawnPokemonPacket(ownerId, scaleModifier, speciesId, gender, shiny, formName, aspects, battleId, phasingTargetId, beamModeEmitter, platform, nickname, mark, labelLevel, poseType, unbattlable, hideLabel, caughtBall, spawnAngle, friendship, freezeFrame, passengers, tickSpawned, vanillaPacket)
|
||||
return SpawnPokemonPacket(ownerId, scaleModifier, speciesId, gender, shiny, formName, aspects, battleId, phasingTargetId, beamModeEmitter, platform, nickname, mark, labelLevel, poseType, unbattlable, hideLabel, caughtBall, spawnAngle, friendship, freezeFrame, passengers, vanillaPacket)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -10,12 +10,6 @@ package com.cobblemon.mod.common.util.adapters
|
||||
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.*
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeBehaviour
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.CompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.strategies.FallCompositeSettings
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.strategies.FallStrategy
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.strategies.JumpStrategy
|
||||
import com.cobblemon.mod.common.api.riding.behaviour.types.composite.strategies.RunStrategy
|
||||
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
|
||||
import com.google.gson.JsonDeserializationContext
|
||||
import com.google.gson.JsonDeserializer
|
||||
@@ -29,41 +23,26 @@ import java.lang.reflect.Type
|
||||
* @author landonjw
|
||||
*/
|
||||
object RidingBehaviourSettingsAdapter : JsonDeserializer<RidingBehaviourSettings> {
|
||||
val types: MutableMap<ResourceLocation, Class<out RidingBehaviourSettings>> = mutableMapOf(BirdAirBehaviour.KEY to BirdAirSettings::class.java,
|
||||
val types: MutableMap<ResourceLocation, Class<out RidingBehaviourSettings>> = mutableMapOf(
|
||||
BirdAirBehaviour.KEY to BirdAirSettings::class.java,
|
||||
DolphinBehaviour.KEY to DolphinSettings::class.java,
|
||||
FallToGlideCompositeBehaviour.KEY to FallToGlideCompositeSettings::class.java,
|
||||
GenericLandBehaviour.KEY to GenericLandSettings::class.java,
|
||||
GenericSwimBehaviour.KEY to GenericSwimSettings::class.java,
|
||||
GliderAirBehaviour.KEY to GliderAirSettings::class.java,
|
||||
HelicopterBehaviour.KEY to HelicopterSettings::class.java,
|
||||
JetAirBehaviour.KEY to JetAirSettings::class.java,
|
||||
JumpToFlightCompositeBehaviour.KEY to JumpToFlightCompositeSettings::class.java,
|
||||
RunToJetCompositeBehaviour.KEY to RunToJetCompositeSettings::class.java,
|
||||
SwimDashBehaviour.KEY to SwimDashSettings::class.java,
|
||||
VehicleLandBehaviour.KEY to VehicleLandSettings::class.java,
|
||||
CompositeBehaviour.KEY to CompositeSettings::class.java,
|
||||
|
||||
/*
|
||||
Strategy registration. if you do not register a strategy here, it will not be deserialized.
|
||||
Register to CompositeSettings if you do not need to define a subclass.
|
||||
*/
|
||||
FallStrategy.key to FallCompositeSettings::class.java,
|
||||
JumpStrategy.key to CompositeSettings::class.java,
|
||||
RunStrategy.key to CompositeSettings::class.java,
|
||||
VehicleLandBehaviour.KEY to VehicleLandSettings::class.java
|
||||
)
|
||||
|
||||
override fun deserialize(element: JsonElement, type: Type, context: JsonDeserializationContext): RidingBehaviourSettings {
|
||||
val root = element.asJsonObject
|
||||
val key = root.get("key").asString
|
||||
val keyIdentifier = key.asIdentifierDefaultingNamespace()
|
||||
if (keyIdentifier == CompositeBehaviour.KEY) {
|
||||
val strategy = root.get("transitionStrategy").asString
|
||||
val strategyIdentifier = strategy.asIdentifierDefaultingNamespace()
|
||||
val behaviourType = types[strategyIdentifier] ?: throw IllegalArgumentException("Unknown strategy for composite behaviour: $strategy")
|
||||
val settings: RidingBehaviourSettings = context.deserialize(root, behaviourType)
|
||||
return settings
|
||||
}
|
||||
else {
|
||||
val behaviourType = types[keyIdentifier] ?: throw IllegalArgumentException("Unknown behaviour: $key")
|
||||
val settings: RidingBehaviourSettings = context.deserialize(element, behaviourType)
|
||||
return settings
|
||||
}
|
||||
val behaviourType = types[key.asIdentifierDefaultingNamespace()] ?: throw IllegalArgumentException("Unknown controller: $key")
|
||||
val settings: RidingBehaviourSettings = context.deserialize(element, behaviourType)
|
||||
return settings
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,14 +182,6 @@
|
||||
"rotation": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.eevee.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.eevee.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -225,14 +225,6 @@
|
||||
"rotation": [-59.83045, -1.29256, -14.94548]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.vaporeon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.vaporeon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -150,14 +150,6 @@
|
||||
"rotation": [37.5, 37.5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.jolteon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.jolteon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,14 +266,6 @@
|
||||
"rotation": [37.5, 27.5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.flareon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.flareon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -188,14 +188,6 @@
|
||||
"rotation": [12.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.espeon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.espeon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,14 +233,6 @@
|
||||
"rotation": [-20, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.umbreon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.umbreon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,102 +2,257 @@
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.treecko.test": {
|
||||
"loop": true,
|
||||
"animation_length": 1.2,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": [-10, 0, 0],
|
||||
"position": [0, 0.1, -0.3]
|
||||
"rotation": [-2.5, 0, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [32.5, 0, 0]
|
||||
"rotation": [42.5, 0, 0]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-45, 0, 0],
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": [10, 0, 2.5]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": [10, 0, -2.5]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, 0, -57.5]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, 0, 57.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [1.18155, -9.91358, -2.38565]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [-0.4165, -7.26605, 3.29302]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [1.18155, 9.91358, 2.38565]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [-0.4165, 7.26605, -3.29302]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.test2": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"torso": {
|
||||
"rotation": [-4.73298, 2.77592, 27.09295]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-6.80313, 33.64286, -11.17316],
|
||||
"position": [0.25, 0, 0]
|
||||
},
|
||||
"left_tail": {
|
||||
"rotation": [15.32536, 9.84392, 1.79183]
|
||||
},
|
||||
"left_tail2": {
|
||||
"rotation": [15.64835, 14.47267, 4.00563]
|
||||
},
|
||||
"right_tail": {
|
||||
"rotation": [20.05865, 9.84795, 1.74036]
|
||||
},
|
||||
"right_tail2": {
|
||||
"rotation": [17.62876, 9.658, 2.59914]
|
||||
},
|
||||
"upper_torso": {
|
||||
"rotation": [12.06953, 5.56451, -12.40436]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [3.59647, 22.86202, -3.90796]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [8.6876, -10.06991, 4.69965],
|
||||
"position": [0, 0, -0.5]
|
||||
},
|
||||
"right_pupil": {
|
||||
"position": [0, 0, -0.5]
|
||||
},
|
||||
"left_upper_arm": {
|
||||
"rotation": [0, 22.5, -25],
|
||||
"position": [0, 0, 0.25]
|
||||
},
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"left_hand": {
|
||||
"rotation": [-17.87814, -19.86103, -49.99202],
|
||||
"position": [-0.15, 0.05, 0]
|
||||
},
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 5, 20]
|
||||
},
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, -5, 20]
|
||||
},
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"right_upper_arm": {
|
||||
"rotation": [27.9096, 1.08115, 23.32938]
|
||||
},
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"right_hand": {
|
||||
"rotation": [8.98458, -4.04496, 42.82624],
|
||||
"position": [0.15, 0.05, 0]
|
||||
},
|
||||
"right_index_finger": {
|
||||
"rotation": [0, -15, -20]
|
||||
},
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 15, -20]
|
||||
},
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"right_upper_leg": {
|
||||
"rotation": [-118.81845, 9.91358, 2.38565],
|
||||
"position": [0, 0.75, -1.25]
|
||||
},
|
||||
"right_foot": {
|
||||
"rotation": [-11.96634, 26.73797, -15.04829]
|
||||
},
|
||||
"left_upper_leg": {
|
||||
"rotation": [-2.91472, -22.08853, 21.08653]
|
||||
},
|
||||
"left_foot": {
|
||||
"rotation": [65.81573, -6.16374, -15.44323]
|
||||
},
|
||||
"body": {
|
||||
"position": [0, 0.75, 0]
|
||||
},
|
||||
"right_tail3": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [50, 0, 0]
|
||||
},
|
||||
"right_lower_leg": {
|
||||
"rotation": [70.02991, 6.8466, -10.45577]
|
||||
},
|
||||
"right_foot2": {
|
||||
"rotation": [12.5, 0, 0],
|
||||
"position": [0, 0, 0.25]
|
||||
},
|
||||
"right_toes": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"left_lower_leg": {
|
||||
"rotation": [16.93839, -4.46375, 14.33501]
|
||||
},
|
||||
"left_foot2": {
|
||||
"rotation": [-40.67815, -9.54385, 8.11019]
|
||||
},
|
||||
"left_toes": {
|
||||
"rotation": [-24.91643, -2.11089, -4.53359]
|
||||
},
|
||||
"left_pupil": {
|
||||
"position": [0, 0, 0.5]
|
||||
},
|
||||
"right_inner_toe": {
|
||||
"rotation": [25, -20, 0]
|
||||
},
|
||||
"right_outer_toe": {
|
||||
"rotation": [22.5, 20, 0]
|
||||
},
|
||||
"right_middle_toe": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"left_inner_toe": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"left_outer_toe": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"left_middle_toe": {
|
||||
"rotation": [-25, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
@@ -107,19 +262,19 @@
|
||||
"tail": {
|
||||
"rotation": [-45, 0, 0]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
@@ -128,106 +283,95 @@
|
||||
"head": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"right_pupil": {
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [10.08453, -7.38542, 48.69038]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 42.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, 0, 22.5],
|
||||
"position": [-0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [6.94363, 7.64256, 14.02881]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [-4.01743, -1.75217, 14.46202]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 30]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [10.08453, 7.38542, -48.69038]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -42.5, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, 0, -22.5],
|
||||
"position": [0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [6.94363, -7.64256, -14.02881]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [-4.01743, 1.75217, -14.46202]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -30]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [1.18155, 9.91358, 2.38565]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [-0.4165, 7.26605, -3.29302]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [1.18155, -9.91358, -2.38565]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [-0.4165, -7.26605, 3.29302]
|
||||
},
|
||||
"stick": {
|
||||
"rotation": [30, 45, 0],
|
||||
"scale": 0.7
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_left": {
|
||||
"left_eyelid": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.125": [0.1, 0, 0],
|
||||
"0.125": {"pre": [0.1, 0, 0], "post": [0.1, 0, 0]},
|
||||
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"right_eyelid": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.125": [-0.1, 0, 0],
|
||||
"0.125": {"pre": [-0.1, 0, 0], "post": [-0.1, 0, 0]},
|
||||
"0.1667": {"pre": [-0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.125": [0.1, 0, 0],
|
||||
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -278,25 +422,25 @@
|
||||
"tail": {
|
||||
"rotation": ["-42.5+math.sin(q.anim_time*90*8+0)*3", "math.sin(q.anim_time*90*4+60)*10", 0]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": ["10+math.sin(q.anim_time*90*8-25)*2", "0+math.sin(q.anim_time*90*4+30)*8", 0]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": ["15+math.sin(q.anim_time*90*8-55)*2", "0+math.sin(q.anim_time*90*4+0)*6", 0]
|
||||
},
|
||||
"tail_left3": {
|
||||
"left_tail3": {
|
||||
"rotation": ["0+math.sin(q.anim_time*90*8-85)*2", "0+math.sin(q.anim_time*90*4-30)*4", 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": ["10+math.sin(q.anim_time*90*8-35)*2", "0+math.sin(q.anim_time*90*4+30)*8", 0]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": ["15+math.sin(q.anim_time*90*8-65)*2", "0+math.sin(q.anim_time*90*4+0)*6", 0]
|
||||
},
|
||||
"tail_right3": {
|
||||
"right_tail3": {
|
||||
"rotation": ["0+math.sin(q.anim_time*90*8-95)*2", "0+math.sin(q.anim_time*90*4-30)*4", 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": ["-5+math.sin(q.anim_time*90*8+0)*1", "0+math.sin(q.anim_time*90*4+60+180)*5", "0+math.sin(q.anim_time*90*4+60)*3"]
|
||||
},
|
||||
"neck": {
|
||||
@@ -305,66 +449,66 @@
|
||||
"head": {
|
||||
"rotation": ["2.5+math.sin(q.anim_time*90*8-60)*1.5", "0+math.sin(q.anim_time*90*4+0)*5", "0+math.sin(q.anim_time*90*4+0+180)*3"]
|
||||
},
|
||||
"pupil_right": {
|
||||
"right_pupil": {
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [10.08453, "-7.3854+math.sin(q.anim_time*90*4-90)*25", "48.6904+math.sin(q.anim_time*90*4+0)*2.5"]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, "42.5+math.sin(q.anim_time*90*4-120)*20", 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, "0+math.sin(q.anim_time*90*4-150)*2.5", "22.5+math.sin(q.anim_time*90*4-150)*5"],
|
||||
"position": [-0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [6.94363, 7.64256, 14.02881]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [-4.01743, -1.75217, 14.46202]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 30]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [10.08453, "7.3854+math.sin(q.anim_time*90*4-90)*25", "-48.6904+math.sin(q.anim_time*90*4+0)*2.5"]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, "-42.5+math.sin(q.anim_time*90*4-120)*20", 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, "0+math.sin(q.anim_time*90*4-150)*2.5", "-22.5+math.sin(q.anim_time*90*4-150)*5"],
|
||||
"position": [0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [6.94363, -7.64256, -14.02881]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [-4.01743, 1.75217, -14.46202]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -30]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [36.50677, 8.43184, 4.42536],
|
||||
@@ -414,7 +558,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [15, 0, 0],
|
||||
@@ -442,7 +586,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [24.37394, 0.4385, -6.40588],
|
||||
@@ -470,7 +614,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"foot_right2": {
|
||||
"right_foot2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-30, 0, 0],
|
||||
@@ -508,7 +652,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"toes_right": {
|
||||
"right_toes": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-42.5, 0, 0],
|
||||
@@ -546,7 +690,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-61.31845, -9.91358, -2.38565],
|
||||
@@ -596,7 +740,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [47.5, 0, 0],
|
||||
@@ -624,7 +768,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-30.4165, -7.26605, 3.29302],
|
||||
@@ -652,7 +796,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"foot_left2": {
|
||||
"left_foot2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [12.5, 0, 0],
|
||||
@@ -690,7 +834,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"toes_right2": {
|
||||
"left_toes": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [15, 0, 0],
|
||||
@@ -738,265 +882,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.test2": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"torso": {
|
||||
"rotation": [-4.73298, 2.77592, 27.09295]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-5.82738, 13.76109, -8.78252],
|
||||
"position": [0.25, 0, 0]
|
||||
},
|
||||
"tail_left": {
|
||||
"rotation": [17.07306, 24.25643, 6.31117]
|
||||
},
|
||||
"tail_left2": {
|
||||
"rotation": [24.53554, -3.67372, -4.51152]
|
||||
},
|
||||
"tail_right": {
|
||||
"rotation": [20.05865, 9.84795, 1.74036]
|
||||
},
|
||||
"tail_right2": {
|
||||
"rotation": [25.12876, 9.658, 2.59914]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [7.06953, 5.56451, -12.40436],
|
||||
"position": [0, 0, 0.5]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [0.41092, 23.12473, -12.05132],
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [12.80178, -8.52421, -5.3105],
|
||||
"position": [0, 0.5, -1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0, -0.5]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [9.29398, -6.81225, -20.04345],
|
||||
"position": [0, 0.25, 1]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0.65426, 4.95712, 7.52832]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [-17.87814, -19.86103, -49.99202],
|
||||
"position": [-0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 5, 20]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [0, -5, 20]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [28.39833, -11.25395, 25.21731],
|
||||
"position": [0, 3, -3.25]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -27.5, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [8.98458, -4.04496, 42.82624],
|
||||
"position": [0.15, 0.05, 0]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [24.55654, -22.88323, -18.35198]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [24.23178, 6.06465, 25.68919]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-156.31845, 9.91358, 2.38565],
|
||||
"position": [0, 0.75, -2.25]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [0.53366, 26.73797, -15.04829]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-2.91472, -22.08853, 21.08653],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [65.81573, -6.16374, -15.44323]
|
||||
},
|
||||
"body": {
|
||||
"rotation": [0, 32.5, 0],
|
||||
"position": [0, 1.75, 0]
|
||||
},
|
||||
"tail_right3": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [40, 0, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [77.54738, -0.6465, -10.13344]
|
||||
},
|
||||
"foot_right2": {
|
||||
"rotation": [12.5, 0, 0],
|
||||
"position": [0, 0, 0.25]
|
||||
},
|
||||
"toes_right": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [16.93839, -4.46375, 14.33501]
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": [-35.67815, -9.54385, 8.11019]
|
||||
},
|
||||
"toes_right2": {
|
||||
"rotation": [-24.91643, -2.11089, -4.53359]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"rotation": [26.9673, -26.74473, -3.82626]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"rotation": [22.5, 20, 0]
|
||||
},
|
||||
"toe_middle_right": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"toe_inner_left": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"toe_outer_left": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"toe_middle_left": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0, 0, 0.5]
|
||||
},
|
||||
"eye_shine_left": {
|
||||
"position": [0, 0, 0.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.eye_wide": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_emote_right2": {
|
||||
"scale": [1, 1.5, 1]
|
||||
},
|
||||
"eye_emote_left2": {
|
||||
"scale": [1, 1.5, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [20, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_happy_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_emote_right2": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_emote_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_emote_left2": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_emote_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_emote_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_emote_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.shocked": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [20, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0, -0.2],
|
||||
"scale": [1, 0.5, 0.7]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0, 0, -0.2],
|
||||
"scale": [1, 0.5, 0.7]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [20, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eyelid_hurt_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_hurt_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.treecko.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"torso": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
@@ -17,122 +17,100 @@
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"leaf7": {
|
||||
"rotation": [-5, 0, 0]
|
||||
"rotation": [12.5, 0, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [2.5, 7.5, 40]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 52.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [2.5, 0, 32.5]
|
||||
},
|
||||
"arm_leaves_left": {
|
||||
"left_arm_leaves": {
|
||||
"rotation": [-25.08377, -4.53051, 2.11751]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 27.5]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": [-10, 12.5, -2.5]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [0, -22.5, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"toe_inner_left": {
|
||||
"left_inner_toe": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"toe_outer_left": {
|
||||
"left_outer_toe": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": [-10, -12.5, 2.5]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"right_inner_toe": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"right_outer_toe": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [2.5, -7.5, -40]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -52.5, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [2.5, 0, -32.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -27.5]
|
||||
},
|
||||
"arm_leaves_right": {
|
||||
"right_arm_leaves": {
|
||||
"rotation": [-25.08377, 4.53051, -2.11751]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"leaf": {
|
||||
"rotation": [-50, 0, 0]
|
||||
},
|
||||
"leaf2": {
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
"leaf3": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"leaf4": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"leaf5": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"leaf6": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"stick": {
|
||||
"rotation": [30, 40, 0],
|
||||
"scale": 0.7
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -142,7 +120,7 @@
|
||||
"torso": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
@@ -157,94 +135,94 @@
|
||||
"jaw": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [-52.5, 5, 27.5]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 65, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [2.38443, -0.75155, 49.98436]
|
||||
},
|
||||
"arm_leaves_left": {
|
||||
"left_arm_leaves": {
|
||||
"rotation": [-10, -17.5, 0]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": [-15, 12.5, -2.5]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [0, -22.5, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"toe_inner_left": {
|
||||
"left_inner_toe": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"toe_outer_left": {
|
||||
"left_outer_toe": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": [-15, -12.5, 2.5]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"right_inner_toe": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"right_outer_toe": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [-52.5, -5, -27.5]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -65, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [2.38443, 0.75155, -49.98436]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"arm_leaves_right": {
|
||||
"right_arm_leaves": {
|
||||
"rotation": [-10, 17.5, 0]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 65]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 87.5]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -65]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -87.5]
|
||||
}
|
||||
}
|
||||
@@ -255,7 +233,7 @@
|
||||
"torso": {
|
||||
"rotation": [45.38165, -3.51814, -7.08167]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [-9.97857, 3.32943, 4.4913]
|
||||
},
|
||||
"neck": {
|
||||
@@ -270,86 +248,86 @@
|
||||
"jaw": {
|
||||
"rotation": [42.5, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [-12.58328, 9.94037, 39.45082]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 82.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [7.5, 0, 32.5]
|
||||
},
|
||||
"arm_leaves_left": {
|
||||
"left_arm_leaves": {
|
||||
"rotation": [-21.78282, -11.4487, 11.10461]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"tail_left": {
|
||||
"left_tail": {
|
||||
"rotation": [-17.99085, 11.53327, -4.85721]
|
||||
},
|
||||
"tail_left2": {
|
||||
"left_tail2": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [-37.5, -22.5, 0],
|
||||
"position": [0.5, 0.5, -1]
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"toe_inner_left": {
|
||||
"left_inner_toe": {
|
||||
"rotation": [10, 10, 0]
|
||||
},
|
||||
"toe_outer_left": {
|
||||
"left_outer_toe": {
|
||||
"rotation": [20, -10, 0]
|
||||
},
|
||||
"tail_right": {
|
||||
"right_tail": {
|
||||
"rotation": [-28.32455, -16.15901, -4.25872]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [38, 7.5, 2.5],
|
||||
"position": [0, -0.5, -0.5]
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"right_inner_toe": {
|
||||
"rotation": [-24.71447, -5.46269, -2.12052],
|
||||
"position": [0, -0.1, 0.6]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"right_outer_toe": {
|
||||
"rotation": [-24.71447, 5.46269, 2.12052],
|
||||
"position": [0, -0.1, 0.6]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [-14.26018, -29.40676, -34.54418]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -70, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [7.5, 0, -32.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"arm_leaves_right": {
|
||||
"right_arm_leaves": {
|
||||
"rotation": [-26.39218, 18.05776, -8.74472]
|
||||
},
|
||||
"tail_right2": {
|
||||
"right_tail2": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"body": {
|
||||
@@ -367,191 +345,76 @@
|
||||
"leaf6": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"toe_back_left": {
|
||||
"left_back_toe": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"toe_back_right": {
|
||||
"right_back_toe": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"toe_outer_left2": {
|
||||
"left_outer_toe2": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"toe_inner_left2": {
|
||||
"left_inner_toe2": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"toe_inner_right2": {
|
||||
"right_inner_toe2": {
|
||||
"rotation": [-45, 0, 0],
|
||||
"position": [0, -0.55, 1.4]
|
||||
},
|
||||
"toe_outer_right2": {
|
||||
"right_outer_toe2": {
|
||||
"rotation": [-45, 0, 0],
|
||||
"position": [0, -0.55, 1.4]
|
||||
},
|
||||
"arm_leaf_middle_left": {
|
||||
"left_leaf1": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"arm_leaf_inner_left": {
|
||||
"left_leaf2": {
|
||||
"rotation": [5.76917, -1.99557, 14.05033]
|
||||
},
|
||||
"arm_leaf_outer_left": {
|
||||
"left_leaf3": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"arm_leaf_middle_right": {
|
||||
"right_leaf1": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"arm_leaf_inner_right": {
|
||||
"right_leaf2": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 30]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -30]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.125": [-0.1, 0, 0],
|
||||
"0.1667": {"pre": [-0.1, 0, 0], "post": [0, 0, 0]}
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.125": [0.1, 0, 0],
|
||||
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.125": [-0.1, 0, 0],
|
||||
"0.1667": {"pre": [-0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.125": [0.1, 0, 0],
|
||||
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_happy_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_emote_right": {
|
||||
"scale": [1, 1.5, 1]
|
||||
},
|
||||
"eye_brow_right": {
|
||||
"position": [0, -0.3, 0]
|
||||
},
|
||||
"eye_brow_right2": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, -0.3, 0]
|
||||
},
|
||||
"eye_brow_left2": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eye_emote_left": {
|
||||
"scale": [1, 1.5, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_brow_right": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eye_brow_right2": {
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eye_brow_left2": {
|
||||
"position": [0, -0.5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.shocked": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left": {
|
||||
"position": [0, 0, -0.1],
|
||||
"scale": [1, 0.5, 0.5]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0, -0.1],
|
||||
"scale": [1, 0.5, 0.5]
|
||||
},
|
||||
"eye_emote_right": {
|
||||
"position": [0, -0.5, 0],
|
||||
"scale": [1, 2, 1]
|
||||
},
|
||||
"eye_brow_right": {
|
||||
"position": [0, 0.3, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, 0.3, 0]
|
||||
},
|
||||
"eye_emote_left": {
|
||||
"position": [0, -0.5, 0],
|
||||
"scale": [1, 2, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_hurt_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_hurt_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.grovyle.cry": {
|
||||
"animation_length": 1.2,
|
||||
"animation_length": 1.33333,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.grovyle.cry"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"torso": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
@@ -16,34 +16,37 @@
|
||||
"head": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"jaw": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"right_upper_arm": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -50, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, 0, -27.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -47.5]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -50]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -40]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"tail": {
|
||||
@@ -61,81 +64,77 @@
|
||||
"tail5": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"shoulder_right": {
|
||||
"right_shoulder": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"shoulder_left": {
|
||||
"left_shoulder": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 50, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, 0, 27.5]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 50]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 40]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 47.5]
|
||||
},
|
||||
"arm_leaf_front_blade_right": {
|
||||
"right_arm_leaf_front_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_back_blade_right": {
|
||||
"right_arm_leaf_back_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_front_blade_left": {
|
||||
"left_arm_leaf_front_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_back_blade_left": {
|
||||
"left_arm_leaf_back_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"tail_leaves_top_left": {
|
||||
"left_top_leaves": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"tail_leaves_bottom_left": {
|
||||
"left_bottom_leaves": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
},
|
||||
"tail_leaves_top_left3": {
|
||||
"left_top_leaves3": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"tail_leaves_bottom_left3": {
|
||||
"left_bottom_leaves3": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"tail_leaves_top_right": {
|
||||
"right_top_leaves": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"tail_leaves_bottom_right": {
|
||||
"right_bottom_leaves": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
},
|
||||
"tail_leaves_top_right3": {
|
||||
"right_top_leaves3": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"tail_leaves_bottom_right3": {
|
||||
"right_bottom_leaves3": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"stick": {
|
||||
"rotation": [16, 40, 0],
|
||||
"scale": 0.7
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -145,7 +144,7 @@
|
||||
"torso": {
|
||||
"rotation": [32.40109, 2.68407, -4.22005]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [4.98107, -0.43523, 4.98107]
|
||||
},
|
||||
"neck": {
|
||||
@@ -157,34 +156,34 @@
|
||||
"jaw": {
|
||||
"rotation": [45, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [-7.5, 2.5, 0]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -72.5, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, 0, -50]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -20]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -47.5]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -50]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -40]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [22.5, 15, 0],
|
||||
"position": [0, 0.5, 0.5]
|
||||
},
|
||||
@@ -203,92 +202,92 @@
|
||||
"tail5": {
|
||||
"rotation": [12.79362, 12.19908, 2.74715]
|
||||
},
|
||||
"shoulder_right": {
|
||||
"right_shoulder": {
|
||||
"rotation": [-10.01754, 2.34914, -25.85553]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [-17.5, -15, 0],
|
||||
"position": [0, 0, -0.5]
|
||||
},
|
||||
"shoulder_left": {
|
||||
"left_shoulder": {
|
||||
"rotation": [-11.9857, 23.12519, 20.20473]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [-5, 10, 0]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 47.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 50]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 40]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 47.5]
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"right_ankle": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"toe_middle_right": {
|
||||
"right_middle_toe": {
|
||||
"rotation": [-42.5, 0, 0],
|
||||
"position": [0, -0.5, 0.6]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"right_inner_toe": {
|
||||
"rotation": [-43.11609, 4.07933, 4.44372],
|
||||
"position": [0, -0.5, 0.6]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"right_outer_toe": {
|
||||
"rotation": [-43.11609, -4.07933, -4.44372],
|
||||
"position": [0, -0.5, 0.6]
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"leg_left3": {
|
||||
"left_ankle": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"arm_leaf_front_blade_right": {
|
||||
"right_arm_leaf_front_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_back_blade_right": {
|
||||
"right_arm_leaf_back_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_front_blade_left": {
|
||||
"left_arm_leaf_front_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"arm_leaf_back_blade_left": {
|
||||
"left_arm_leaf_back_blade": {
|
||||
"scale": [1, 0, 1]
|
||||
},
|
||||
"tail_leaves_top_left": {
|
||||
"left_top_leaves": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"tail_leaves_top_left2": {
|
||||
"left_top_leaves2": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"tail_leaves_top_left3": {
|
||||
"left_top_leaves3": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
}
|
||||
}
|
||||
@@ -302,7 +301,7 @@
|
||||
"torso": {
|
||||
"rotation": [49.75757, -7.34759, 2.92368]
|
||||
},
|
||||
"torso2": {
|
||||
"upper_torso": {
|
||||
"rotation": [14.94548, 1.29256, -4.83045]
|
||||
},
|
||||
"neck": {
|
||||
@@ -311,68 +310,68 @@
|
||||
"head": {
|
||||
"rotation": [-55.48448, 3.48051, -3.55608]
|
||||
},
|
||||
"shoulder_right": {
|
||||
"right_shoulder": {
|
||||
"rotation": [-58.62702, 15.46973, -8.28342],
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"right_upper_arm": {
|
||||
"rotation": [-7.5, -1, -7.5]
|
||||
},
|
||||
"arm_right2": {
|
||||
"right_lower_arm": {
|
||||
"rotation": [0, -30, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"right_hand": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"right_index_finger": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"right_index_finger2": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"right_middle_finger": {
|
||||
"rotation": [0, 0, 22.5],
|
||||
"position": [0.5, 0, 0]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"right_middle_finger2": {
|
||||
"rotation": [0, 0, -35]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"right_pinky_finger": {
|
||||
"rotation": [0, 0, -37.5]
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"right_pinky_finger2": {
|
||||
"rotation": [0, 0, -42.5]
|
||||
},
|
||||
"shoulder_left": {
|
||||
"left_shoulder": {
|
||||
"rotation": [-59.92127, -18.02575, 12.77165],
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"left_upper_arm": {
|
||||
"rotation": [-7.5, 1, 7.5]
|
||||
},
|
||||
"arm_left2": {
|
||||
"left_lower_arm": {
|
||||
"rotation": [0, 42.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"left_hand": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"left_index_finger": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"left_index_finger2": {
|
||||
"rotation": [0, 0, 45]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"left_middle_finger": {
|
||||
"rotation": [0, 0, -22.5],
|
||||
"position": [-0.5, 0, 0]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"left_middle_finger2": {
|
||||
"rotation": [0, 0, 35]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"left_pinky_finger": {
|
||||
"rotation": [0, 0, 37.5]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"left_pinky_finger2": {
|
||||
"rotation": [0, 0, 42.5]
|
||||
},
|
||||
"tail": {
|
||||
@@ -391,170 +390,97 @@
|
||||
"tail5": {
|
||||
"rotation": [10.08453, -7.38542, -1.30962]
|
||||
},
|
||||
"leg_right": {
|
||||
"right_upper_leg": {
|
||||
"rotation": [-25.44458, 0.21572, -4.69162],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"leg_right2": {
|
||||
"right_lower_leg": {
|
||||
"rotation": [-5, -2.5, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"right_ankle": {
|
||||
"rotation": [35, 0, 0],
|
||||
"position": [0, 0, 0.6]
|
||||
},
|
||||
"foot_right": {
|
||||
"right_foot": {
|
||||
"rotation": [7.74222, 4.81281, 5.7589]
|
||||
},
|
||||
"toe_middle_right": {
|
||||
"right_middle_toe": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"toe_inner_right": {
|
||||
"right_inner_toe": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"toe_outer_right": {
|
||||
"right_outer_toe": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"left_upper_leg": {
|
||||
"rotation": [32.71776, -4.77227, -5.22233],
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"leg_left2": {
|
||||
"left_lower_leg": {
|
||||
"rotation": [4.96271, -0.86717, 4.92442]
|
||||
},
|
||||
"leg_left3": {
|
||||
"left_ankle": {
|
||||
"rotation": [42.5, 0, 0],
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"foot_left": {
|
||||
"left_foot": {
|
||||
"rotation": [85, 0, 0],
|
||||
"position": [0, 0.35, 1.2]
|
||||
},
|
||||
"toe_middle_left": {
|
||||
"left_middle_toe": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"toe_inner_left": {
|
||||
"left_inner_toe": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"toe_outer_left": {
|
||||
"left_outer_toe": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"tail_leaves_bottom_left": {
|
||||
"left_bottom_leaves": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"tail_leaves_bottom_left3": {
|
||||
"left_bottom_leaves3": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"toe_middle_left2": {
|
||||
"left_middle_toe2": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"toe_inner_left2": {
|
||||
"left_inner_toe2": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"toe_outer_left2": {
|
||||
"left_outer_toe2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"tail_leaves_top_right": {
|
||||
"right_top_leaves": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"tail_leaves_top_right3": {
|
||||
"right_top_leaves3": {
|
||||
"rotation": [-5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"right_eyelid": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.125": [-0.1, 0, 0],
|
||||
"0.125": {"pre": [-0.1, 0, 0], "post": [-0.1, 0, 0]},
|
||||
"0.1667": {"pre": [-0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"left_eyelid": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.125": [0.1, 0, 0],
|
||||
"0.125": {"pre": [0.1, 0, 0], "post": [0.1, 0, 0]},
|
||||
"0.1667": {"pre": [0.1, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.hurt_or_happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_hurt_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eyelid_hurt_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_brow_right": {
|
||||
"position": [0, -0.4, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, -0.4, 0]
|
||||
},
|
||||
"eye_brow_left2": {
|
||||
"position": [0, 0.4, 0]
|
||||
},
|
||||
"eye_brow_right2": {
|
||||
"position": [0, 0.4, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_right": {
|
||||
"position": [0, 0.1, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0, 0.1, 0]
|
||||
},
|
||||
"eye_brow_right": {
|
||||
"position": [0, 0.3, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, 0.3, 0]
|
||||
},
|
||||
"eye_brow_left2": {
|
||||
"position": [0, -0.4, 0]
|
||||
},
|
||||
"eye_brow_right2": {
|
||||
"position": [0, -0.4, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.shocked": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0.1, 0],
|
||||
"scale": [1, 0.5, 0.5]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0, 0.1, 0],
|
||||
"scale": [1, 0.5, 0.5]
|
||||
},
|
||||
"eye_brow_right": {
|
||||
"position": [0, 0.3, 0]
|
||||
},
|
||||
"eye_brow_left": {
|
||||
"position": [0, 0.3, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sceptile.cry": {
|
||||
"animation_length": 1.2,
|
||||
"animation_length": 1.33333,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.sceptile.cry"
|
||||
|
||||
@@ -788,30 +788,34 @@
|
||||
}
|
||||
},
|
||||
"animation.metagross.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eye_open_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.125": [0, 0, 0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_closed_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_open_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
"0.125": [0, 0, 0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_closed_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -968,6 +972,12 @@
|
||||
"eye_closed_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"eye_open_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_closed_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"leg_front_left": {
|
||||
"rotation": [-20.94102, 8.42106, -69.05898]
|
||||
},
|
||||
@@ -1003,12 +1013,6 @@
|
||||
},
|
||||
"hand_back_right": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"eye_open_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_closed_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1019,87 +1023,6 @@
|
||||
"position": [0, 0, "-q.anim_time*90*0.2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.metagross.shock": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
},
|
||||
"eye_shine_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"mouth": {
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"pupil_right": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
},
|
||||
"eye_shine_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.metagross.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_angry_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.metagross.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_sad_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"eye_sad_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.metagross.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"mouth": {
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"eye_open_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_happy_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"eye_open_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_happy_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.metagross.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_open_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_closed_left": {
|
||||
"rotation": [0, 0, -20],
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"eye_open_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"eye_closed_right": {
|
||||
"rotation": [0, 0, 20],
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -470,65 +470,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.magnezone.active": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"magnet_lights_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"magnet_lights_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"magnet_lights_back": {
|
||||
"position": [0, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.magnezone.shock": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.magnezone.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_happy_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"pupil_happy_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.magnezone.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_recoil_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"pupil_recoil_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.magnezone.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
|
||||
@@ -159,14 +159,6 @@
|
||||
"rotation": [-9.99762, -0.10901, 10.00238]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.leafeon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.leafeon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,14 +177,6 @@
|
||||
"rotation": [0, 0, -7.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.glaceon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.glaceon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,427 +0,0 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.druddigon.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"arm_right1": {
|
||||
"rotation": [-19.84214, -10.30464, -25.48972]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [7.5, 0, -22.5]
|
||||
},
|
||||
"arm_right3": {
|
||||
"rotation": [0, -40, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, -7.5, -12.5]
|
||||
},
|
||||
"finger_right1": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"claw_right1": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [0, 0, 0],
|
||||
"position": [0, -0.27716, -0.11481]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"tail_1": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"leg_left1": {
|
||||
"rotation": [-6.23088, -21.01584, -15.72279],
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [32.5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-43.40659, -12.60837, 8.19252]
|
||||
},
|
||||
"toe_left2": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"toe_left3": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"leg_right1": {
|
||||
"rotation": [-6.23088, 21.01584, 15.72279],
|
||||
"position": [0, -0.5, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [32.5, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [-43.40659, 12.60837, -8.19252]
|
||||
},
|
||||
"toe_right2": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"toe_right3": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"finger_right2": {
|
||||
"rotation": [10, 37.5, 0]
|
||||
},
|
||||
"claw_right2": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"finger_right3": {
|
||||
"rotation": [-5, -37.5, 0]
|
||||
},
|
||||
"claw_right3": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"arm_left1": {
|
||||
"rotation": [-19.84214, 10.30464, 25.48972]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [7.5, 0, 22.5]
|
||||
},
|
||||
"arm_left3": {
|
||||
"rotation": [0, 40, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 7.5, 12.5]
|
||||
},
|
||||
"finger_left1": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"claw_left1": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"finger_left2": {
|
||||
"rotation": [10, -37.5, 0]
|
||||
},
|
||||
"claw_left2": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"finger_left3": {
|
||||
"rotation": [-5, 37.5, 0]
|
||||
},
|
||||
"claw_left3": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.battle_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"arm_right1": {
|
||||
"rotation": [-35.0999, -18.72795, -13.41336]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [1.0804, -5.1849, -12.8416]
|
||||
},
|
||||
"arm_right3": {
|
||||
"rotation": [-29.5083, -47.382, -4.0162]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, -7.5, -12.5]
|
||||
},
|
||||
"finger_right1": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"claw_right1": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"finger_right2": {
|
||||
"rotation": [15, 40, 0]
|
||||
},
|
||||
"claw_right2": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"body": {
|
||||
"rotation": [0, -12.5, 0],
|
||||
"position": [0, 2, -0.6]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [9.9863, 0.22463, 0.3039],
|
||||
"position": [0, -1, 1]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": [-10.08226, 3.37738, -3.68895]
|
||||
},
|
||||
"wing_left": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [12.48609, 1.84353, -1.68884],
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"neck_mouth_closed": {
|
||||
"scale": 0
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-22.54365, 1.71046, -4.69895]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [20, 0, 0],
|
||||
"position": [0, -0.47716, -0.11481]
|
||||
},
|
||||
"leg_left1": {
|
||||
"rotation": [1.06967, -28.21899, -16.6831]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-8.00865, -10.6666, 5.52624]
|
||||
},
|
||||
"toe_left1": {
|
||||
"rotation": [-42.60882, -3.68425, 3.38262]
|
||||
},
|
||||
"toe_left3": {
|
||||
"rotation": [-30.96089, -12.57966, -9.31627]
|
||||
},
|
||||
"toe_left2": {
|
||||
"rotation": [-37.82102, 5.54652, 13.22471]
|
||||
},
|
||||
"toe_claw_left2": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"toe_claw_left3": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"leg_right1": {
|
||||
"rotation": [-1.23088, 21.01584, 15.72279]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [-8.00865, 10.6666, -5.52624]
|
||||
},
|
||||
"toe_right1": {
|
||||
"rotation": [-42.60882, 3.68425, -3.38262]
|
||||
},
|
||||
"toe_right2": {
|
||||
"rotation": [-37.82102, -5.54652, -13.22471]
|
||||
},
|
||||
"toe_claw_right2": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"toe_right3": {
|
||||
"rotation": [-30.96089, 12.57966, 9.31627]
|
||||
},
|
||||
"toe_claw_right3": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"head_hidden": {
|
||||
"scale": 0
|
||||
},
|
||||
"wing_right": {
|
||||
"rotation": [-6.76783, 4.83809, -1.4594]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"tail_4": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"wing_left2": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"finger_right3": {
|
||||
"rotation": [-7.5, -40, 0]
|
||||
},
|
||||
"claw_right3": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"arm_left1": {
|
||||
"rotation": [-9.21772, 22.54829, 25.90265]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [1.0804, 5.1849, 12.8416]
|
||||
},
|
||||
"arm_left3": {
|
||||
"rotation": [-40.89335, 59.21695, -14.63464]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 7.5, 12.5]
|
||||
},
|
||||
"finger_left1": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"claw_left1": {
|
||||
"rotation": [0, 0, 97.5],
|
||||
"position": [0, -1.8, 0]
|
||||
},
|
||||
"finger_left2": {
|
||||
"rotation": [10.07885, -31.4612, 2.60512]
|
||||
},
|
||||
"claw_left2": {
|
||||
"rotation": [100, 0, 0],
|
||||
"position": [0, -1.8, 0]
|
||||
},
|
||||
"finger_left3": {
|
||||
"rotation": [-20.94706, 24.49001, 0.53086]
|
||||
},
|
||||
"claw_left3": {
|
||||
"rotation": [-90, 0, 0],
|
||||
"position": [0, -2, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.mouth_test": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [22.5, 0, 0],
|
||||
"position": [0, -1, -0.5]
|
||||
},
|
||||
"neck_mouth_closed": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.new": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
},
|
||||
"head_hidden": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.angry": {
|
||||
"loop": true
|
||||
},
|
||||
"animation.druddigon.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_angry_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_sad_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_angry_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_sad_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.unamused": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_angry_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_unamused_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_angry_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_unamused_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_angry_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_angry_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
},
|
||||
"eyelid_happy_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.surpised": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"neck_mouth_closed": {
|
||||
"scale": 0
|
||||
},
|
||||
"pupil_left": {
|
||||
"scale": [1, 0.7, 0.7]
|
||||
},
|
||||
"head_hidden": {
|
||||
"scale": 0
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
},
|
||||
"eyelid_angry_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"scale": [1, 0.7, 0.7]
|
||||
},
|
||||
"eyelid_angry_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.rage": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"neck_mouth_closed": {
|
||||
"scale": 0
|
||||
},
|
||||
"pupil_left": {
|
||||
"scale": [1, 0.7, 0.7]
|
||||
},
|
||||
"head_hidden": {
|
||||
"scale": 0
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
},
|
||||
"eyelid_angry_left": {
|
||||
"position": [0, 0.4, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"scale": [1, 0.7, 0.7]
|
||||
},
|
||||
"eyelid_angry_right": {
|
||||
"position": [0, 0.4, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.druddigon.hold_item": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"claw_right1": {
|
||||
"rotation": [0, 0, -67.5],
|
||||
"position": [0, -2, 0]
|
||||
},
|
||||
"finger_right2": {
|
||||
"rotation": [20.11852, -67.56738, 9.02949],
|
||||
"position": [0.6, -0.3, 1.1]
|
||||
},
|
||||
"claw_right2": {
|
||||
"rotation": [82.5, 0, 0],
|
||||
"position": [0, -2, 0]
|
||||
},
|
||||
"claw_right3": {
|
||||
"rotation": [-70, 0, 0],
|
||||
"position": [0, -2, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,36 +4,112 @@
|
||||
"animation.braixen.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"torso": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
"torso_bottom": {
|
||||
"rotation": ["-math.sin(q.anim_time*90*2.5-45)*0.75", 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": ["10-math.sin(q.anim_time*90*2.5)*2", 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["2.5+math.sin(q.anim_time*90*2.5+45)*2", 0, 0]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, 5, "-1-math.sin(q.anim_time*90*2.5+45)*1"]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 10, "-math.sin(q.anim_time*90*2.5)*1"]
|
||||
},
|
||||
"ear_ruff_right3": {
|
||||
"rotation": [0, 10, "-math.sin(q.anim_time*90*2.5-45)*1"]
|
||||
},
|
||||
"ear_ruff_left": {
|
||||
"rotation": [0, -2.5, "1+math.sin(q.anim_time*90*2.5+45)*1"]
|
||||
},
|
||||
"ear_ruff_left2": {
|
||||
"rotation": [0, -10, "math.sin(q.anim_time*90*2.5)*1"]
|
||||
},
|
||||
"ear_ruff_left3": {
|
||||
"rotation": [0, -10, "math.sin(q.anim_time*90*2.5-45)*1"]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-1.56101, "12.3977-math.sin(q.anim_time*90*2.5+45)", -55.15982]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [-3.88714, -27.24513, 8.44236]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-1.465, "-12.404+math.sin(q.anim_time*90*2.5+45)*2", 55.14094]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [-6.31274, 31.94715, -11.80868]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["5+math.sin(q.anim_time*90*2.5)*2", "math.sin(q.anim_time*90*1.25-90)*4", "math.sin(q.anim_time*90*1.25-90)*2"],
|
||||
"position": [0, 0, 0.5]
|
||||
},
|
||||
"stick_tail": {
|
||||
"rotation": [0, 0, "-math.sin(q.anim_time*90*1.25-45)*4"]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*1.25-45)*4"]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": ["math.sin(q.anim_time*90*2.5-90)*2", 0, 0]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": ["math.sin(q.anim_time*90*2.5-135)*2", 0, 0]
|
||||
},
|
||||
"finger_index_right": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"finger_ring_right": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"finger_index_left": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"finger_ring_left": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [0, 7.5, 70]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [-5, 37.5, -2.5]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [57.5, -10, 7.5]
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [-5, 0, 0]
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [12.5, 0, 0]
|
||||
"finger_back_left": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"tail": {
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"stick_hand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"skirt_front2": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"stick_tail": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [0.88045, -9.96156, -5.07673]
|
||||
},
|
||||
@@ -49,78 +125,8 @@
|
||||
"leg_right3": {
|
||||
"rotation": [0.00039, 5.00185, -5.99069]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"rotation": [9.99527, 9.84653, 30.20756]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [-4.26175, -9.05478, 25.33761]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 27.5]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [65, 22.5, -45],
|
||||
"position": [0, 0, 0.5]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [-15, -82.5, 15]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [-10, -22.5, 70]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [9.99527, -9.84653, -30.20756]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, -27.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [-4.26175, 9.05478, -25.33761]
|
||||
},
|
||||
"ear_ruff_left2": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"ear_ruff_left3": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"ear_ruff_left4": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"skirt_front2": {
|
||||
"rotation": [-2.5, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [1, 0, 0]
|
||||
},
|
||||
"ear_ruff_left": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"ear_ruff_right3": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"skirt_front_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"skirt_front_right": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"wand": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -128,14 +134,13 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [0, -52.5, 0],
|
||||
"position": [-0.5, -2.05, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [15, -10, 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [-2.5, -2.5, 0]
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": [-5, 2.5, 0]
|
||||
@@ -162,10 +167,10 @@
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-60.09473, -14.92923, -20.56425]
|
||||
"rotation": [-35.09473, -47.42923, -40.56425]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -45, 0]
|
||||
"rotation": [0, -40, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 27.5, 15]
|
||||
@@ -180,10 +185,10 @@
|
||||
"rotation": [0, 0, -77.5]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [0, 32.5, -7.5]
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-7.5, 20, -5]
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"ear_ruff_left2": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
@@ -216,32 +221,28 @@
|
||||
"scale": 0
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-0.5, -35, -26],
|
||||
"position": [1, 0, 0]
|
||||
"rotation": [5.38152, -19.291, -15.91527]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [10, 0, 0]
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
"rotation": [-16.28567, 14.26008, -10.25103]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [29.78634, -18.01295, 11.28749],
|
||||
"position": [0, -0.5, 0]
|
||||
"rotation": [-12.32417, 1.61888, 12.39638]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-7.80674, 36.44232, 19.22515],
|
||||
"position": [-1, -0.75, -0.75]
|
||||
"rotation": [-27.5, 0, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [29.75489, -5.05904, 8.04401]
|
||||
"rotation": [27.25489, -5.05904, 5.54401]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-30.5, -2, -1]
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [22.5, 20, -10],
|
||||
"position": [0, -0.5, 0]
|
||||
"rotation": [24.78729, 3.74196, -6.50446]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
@@ -252,111 +253,24 @@
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, 17.5, 0]
|
||||
},
|
||||
"stick_hand": {
|
||||
"rotation": [90, 10, 0],
|
||||
"position": [6.5, -1, -0.5]
|
||||
},
|
||||
"skirt_front_left": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"skirt_front_right": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"fire": {
|
||||
"rotation": [-7.15656, 2.24944, 17.35932]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"skirt": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"body_wand": {
|
||||
"rotation": [0, -52.5, 0],
|
||||
"position": [-0.5, -2.05, 0]
|
||||
},
|
||||
"torso_wand": {
|
||||
"rotation": [15, -10, 0]
|
||||
},
|
||||
"waist_wand": {
|
||||
"rotation": [-2.5, -2.5, 0]
|
||||
},
|
||||
"chest_wand": {
|
||||
"rotation": [-5, 2.5, 0]
|
||||
},
|
||||
"arm_wand": {
|
||||
"rotation": [-60.09473, -14.92923, -20.56425]
|
||||
},
|
||||
"arm2_wand": {
|
||||
"rotation": [0, -45, 0]
|
||||
},
|
||||
"hand_wand": {
|
||||
"rotation": [0, 27.5, 15]
|
||||
},
|
||||
"wand": {
|
||||
"rotation": [90, 10, 0],
|
||||
"position": [6.5, -1, -0.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"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_right": {
|
||||
"position": {
|
||||
"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.braixen.cry": {
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [-2.05, 0, 0],
|
||||
"0.0833": [-2.7, 0, 0],
|
||||
"0.1667": [4, 0, 0],
|
||||
"0.2083": [3.72, 0, 0],
|
||||
"0.375": [-2.38, 0, 0],
|
||||
"0.4167": [-2.7, 0, 0],
|
||||
"0.5": [-2.4, 0, 0],
|
||||
"0.6667": [-0.3, 0, 0],
|
||||
"0.75": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [27.2, 0, 0],
|
||||
"0.0833": [30, 0, 0],
|
||||
"0.1667": [19, 0, 0],
|
||||
"0.2083": [17.65, 0, 0],
|
||||
"0.3333": [57.56, 0, 0],
|
||||
"0.375": [60, 0, 0],
|
||||
"0.4167": [56.99, 0, 0],
|
||||
"0.7083": [4.23, 0, 0],
|
||||
"0.7917": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"fangs": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [0, -0.5, 0],
|
||||
"0.625": [0, -0.5, 0],
|
||||
"0.6667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0": {
|
||||
"effect": "pokemon.braixen.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -478,7 +392,7 @@
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"wand": {
|
||||
"stick_hand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
@@ -494,6 +408,198 @@
|
||||
"rotation": [0, -12.5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.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.braixen.cry": {
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [-2.05, 0, 0],
|
||||
"0.0833": [-2.7, 0, 0],
|
||||
"0.1667": [4, 0, 0],
|
||||
"0.2083": [3.72, 0, 0],
|
||||
"0.375": [-2.38, 0, 0],
|
||||
"0.4167": [-2.7, 0, 0],
|
||||
"0.5": [-2.4, 0, 0],
|
||||
"0.6667": [-0.3, 0, 0],
|
||||
"0.75": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [27.2, 0, 0],
|
||||
"0.0833": [30, 0, 0],
|
||||
"0.1667": [19, 0, 0],
|
||||
"0.2083": [17.65, 0, 0],
|
||||
"0.3333": [57.56, 0, 0],
|
||||
"0.375": [60, 0, 0],
|
||||
"0.4167": [56.99, 0, 0],
|
||||
"0.7083": [4.23, 0, 0],
|
||||
"0.7917": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"fangs": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [0, -0.5, 0],
|
||||
"0.625": [0, -0.5, 0],
|
||||
"0.6667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0": {
|
||||
"effect": "pokemon.braixen.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.surprise_hair": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"ear_ruff_left": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"ear_ruff_left2": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"ear_ruff_side_left": {
|
||||
"rotation": [3.57152, 21.79524, -14.03271]
|
||||
},
|
||||
"ear_ruff_left3": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"ear_ruff_left4": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"ear_ruff_side_right": {
|
||||
"rotation": [3.57152, -21.79524, 14.03271]
|
||||
},
|
||||
"ear_ruff_right3": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"ear_ruff_shock_left2": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"ear_ruff_shock_right2": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.shock": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [47.5, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.1, 0, 0],
|
||||
"scale": [0.6, 0.6, 1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0.1, 0, 0],
|
||||
"scale": [0.6, 0.6, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_angry_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_sad_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eye_sad_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0.09, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [-0.09, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_happy_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [47.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.blush": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"blush_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"blush_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_recoil_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_recoil_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,443 +3,295 @@
|
||||
"animations": {
|
||||
"animation.delphox.ground_idle": {
|
||||
"loop": true,
|
||||
"animation_length": 8,
|
||||
"bones": {
|
||||
"arm_left": {
|
||||
"rotation": [0, -5, 60]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [0, 0, 30]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [0, 5, -60]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -30]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["5+math.sin(q.anim_time*90*1)*-1", 0, 0]
|
||||
},
|
||||
"ear_left_ruff_main": {
|
||||
"rotation": [0.18349, -15.01207, 0.11941]
|
||||
},
|
||||
"ear_ruff_top_left": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"ear_ruff_middle_left": {
|
||||
"rotation": [-5, 10, 0]
|
||||
},
|
||||
"ear_right_ruff_main": {
|
||||
"rotation": [0.18349, 15.01207, -0.11941]
|
||||
"rotation": ["10+math.sin(q.anim_time*90*1-15)*2", 0, 0]
|
||||
},
|
||||
"ear_ruff_top_right": {
|
||||
"rotation": [0, 5, 0]
|
||||
"rotation": [0, 7.5, -10],
|
||||
"position": [-0.3, 0, 0.5]
|
||||
},
|
||||
"ear_ruff_top_right2": {
|
||||
"rotation": [0, 15, "-math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"ear_ruff_top_right3": {
|
||||
"rotation": [0, 7.5, "10-math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"ear_ruff_middle_right": {
|
||||
"rotation": [-5, -10, 0]
|
||||
"rotation": [0, -2.5, -12.5]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-10.50431, -1.61684, -2.5578],
|
||||
"position": [0, 0, -0.5]
|
||||
"ear_ruff_middle_right2": {
|
||||
"rotation": [0, 20, "5-math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [1.5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [4.48529, -0.57217, 2.94498]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [1.10693, 12.45167, 5.12076]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [0, 0, -3]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["2.5+math.sin(q.anim_time*90*1)*1", 0, 0],
|
||||
"position": [0, "math.cos(q.anim_time*90*1)*0.2", 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["-1+math.sin(q.anim_time*90*1-30)*1", 0, 0]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-23, 0, 0]
|
||||
},
|
||||
"robe_left": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
},
|
||||
"robe_left_outer2": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": [-20, 0, 0]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"rotation": [0, -5, 0],
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"rotation": [0, 5, 0],
|
||||
"scale": 0
|
||||
},
|
||||
"body": {
|
||||
"position": [0, -0.2, 0]
|
||||
},
|
||||
"torso_cloak": {
|
||||
"rotation": [-1, 0, 0]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": ["-2.5+math.sin(q.anim_time*90*1-30)*-2", 0, 0]
|
||||
},
|
||||
"ear_ruff_bottom_left": {
|
||||
"rotation": [0, -2.5, 15]
|
||||
"ear_ruff_middle_right3": {
|
||||
"rotation": [0, 15, "7.5-math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"ear_ruff_bottom_right": {
|
||||
"rotation": [0, 2.5, -15]
|
||||
"rotation": [0, 10, -17.5],
|
||||
"position": [-0.1, 0, 0.25]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [5, 0, 0]
|
||||
"ear_ruff_bottom_right2": {
|
||||
"rotation": [0, 10, "12.5-math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
"ear_ruff_bottom_right3": {
|
||||
"rotation": [0, 17.5, "12.5-math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"robe_left_outer": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
"ear_ruff_top_left": {
|
||||
"rotation": [0, -7.5, 10],
|
||||
"position": [0.3, 0, 0.5]
|
||||
},
|
||||
"robe_left_outer3": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
"ear_ruff_top_left2": {
|
||||
"rotation": [0, -15, "math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": ["math.sin(q.anim_time*90*1)*-1", 0, 0]
|
||||
"ear_ruff_top_left3": {
|
||||
"rotation": [0, -7.5, "-10+math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*1-60)*2"]
|
||||
"ear_ruff_middle_left": {
|
||||
"rotation": [0, 2.5, 12.5]
|
||||
},
|
||||
"ear_right_main": {
|
||||
"rotation": [0, 0, "math.sin(q.anim_time*90*1-30)*1"]
|
||||
"ear_ruff_middle_left2": {
|
||||
"rotation": [0, -20, "-5+math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"robe_right": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
"ear_ruff_middle_left3": {
|
||||
"rotation": [0, -15, "-7.5+math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"robe_right_outer": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
"ear_ruff_bottom_left": {
|
||||
"rotation": [0, -10, 17.5],
|
||||
"position": [0.1, 0, 0.25]
|
||||
},
|
||||
"robe_right_outer2": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
"ear_ruff_bottom_left2": {
|
||||
"rotation": [0, -10, "-12.5+math.sin(q.anim_time*90*1-180)*3"]
|
||||
},
|
||||
"robe_right_outer3": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
},
|
||||
"wand": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.battle_idle": {
|
||||
"loop": true,
|
||||
"animation_length": 8,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [0, -10, 0],
|
||||
"position": [0, -3, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["30+math.sin(q.anim_time*90*1.5)*1", -17.5, -2.5],
|
||||
"position": [0.25, "0.25+math.cos(q.anim_time*90*1.5)*-0.2", -0.5]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*1.5-30)*1", -2.5, 5]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": ["-7.5+math.sin(q.anim_time*90*1.5-75)*1", -5, -2.5]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-10, -27.5, 25],
|
||||
"position": [1, -0.35, 1]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [-7.5, 75, -7.5]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 0, 47.5]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 62.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [0, 0, 75]
|
||||
"ear_ruff_bottom_left3": {
|
||||
"rotation": [0, -17.5, "-12.5+math.sin(q.anim_time*90*1-215)*3"]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-57.5, -30, -25],
|
||||
"position": [-1, -0.75, 0.25]
|
||||
"rotation": [0, "-12.5+math.sin(q.anim_time*90*1+30)*2", -52.5]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [7.5, -55, -17.5]
|
||||
},
|
||||
"arm_right_ruff": {
|
||||
"rotation": [-15, 15, -7.5]
|
||||
"rotation": [3.31914, "-14.6364+math.sin(q.anim_time*90*1+90)*2", -12.92638]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 22.5, 0],
|
||||
"position": [-0.25, 0, 0]
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"finger_index_right": {
|
||||
"rotation": [0, 0, -50]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, -55]
|
||||
"rotation": [0, 0, -52.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -65]
|
||||
"finger_ring_right": {
|
||||
"rotation": [0, 0, -60]
|
||||
},
|
||||
"ear_left_ruff_main": {
|
||||
"rotation": [0.18349, -15.01207, 0.11941]
|
||||
"arm_left": {
|
||||
"rotation": [1.36797, "-32.4703+math.sin(q.anim_time*90*1-15)*2", "57.0477+math.sin(q.anim_time*90*1-60)*3"]
|
||||
},
|
||||
"ear_ruff_top_left": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"ear_ruff_middle_left": {
|
||||
"rotation": [-5, 10, 0]
|
||||
},
|
||||
"ear_ruff_bottom_left": {
|
||||
"rotation": [0, -2.5, 15]
|
||||
},
|
||||
"ear_right_ruff_main": {
|
||||
"rotation": [0.18349, 15.01207, -0.11941]
|
||||
},
|
||||
"ear_ruff_top_right": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"ear_ruff_middle_right": {
|
||||
"rotation": [-5, -10, 0]
|
||||
},
|
||||
"ear_ruff_bottom_right": {
|
||||
"rotation": [0, 2.5, -15]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [7.5, -10, -15],
|
||||
"position": [0.25, -0.25, 1]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [22.5, 0, -7.5]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [-2.5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-21.5, 0, 20],
|
||||
"position": [-0.5, -1.5, -0.75]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-27.5, 0, 7.5],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-7.5, 7.5, 10]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [17.5, 17.5, -12.5],
|
||||
"position": [0.25, -0.25, 0]
|
||||
},
|
||||
"wand": {
|
||||
"rotation": [0, 0, 77.5],
|
||||
"position": [1, 0, 0]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"rotation": [0, -5, 0],
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"rotation": [0, 5, 0],
|
||||
"scale": 0
|
||||
},
|
||||
"body_wand": {
|
||||
"rotation": [0, -10, 0],
|
||||
"position": [0, -3, 0]
|
||||
},
|
||||
"torso_wand": {
|
||||
"rotation": ["30+math.sin(q.anim_time*90*1.5)*1", -17.5, -2.5],
|
||||
"position": [0.25, "0.25+math.cos(q.anim_time*90*1.5)*-0.2", -0.5]
|
||||
},
|
||||
"waist_wand": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*1.5-30)*1", -2.5, 5]
|
||||
},
|
||||
"chest_wand": {
|
||||
"rotation": ["-7.5+math.sin(q.anim_time*90*1.5-75)*1", -5, -2.5]
|
||||
},
|
||||
"arm_wand": {
|
||||
"rotation": [-57.5, -30, -25],
|
||||
"position": [-1, -0.75, 0.25]
|
||||
},
|
||||
"arm2_wand": {
|
||||
"rotation": [7.5, -55, -17.5]
|
||||
},
|
||||
"hand_wand": {
|
||||
"rotation": [0, 22.5, 0],
|
||||
"position": [-0.25, 0, 0]
|
||||
"arm_left2": {
|
||||
"rotation": [-0.82097, "60.3299+math.sin(q.anim_time*90*1-95)*4", "3.238+math.sin(q.anim_time*90*1-180)*4"]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [-12.5, 32.5, -15]
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"shoulder_right_ruff": {
|
||||
"rotation": [0, 10, 0]
|
||||
"finger_index_left": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"finger_ring_left": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*2)*4", "math.sin(q.anim_time*90*1-90)*8", "math.sin(q.anim_time*90*1-90)*2"]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [-15, "math.sin(q.anim_time*90*1-90-45)*8", 0]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": [-12.5, "math.sin(q.anim_time*90*1-90-90)*8", 0]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": [15, "math.sin(q.anim_time*90*1-90-135)*8", 0]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": [12.5, "math.sin(q.anim_time*90*1-90-180)*8", 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [0, 15, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [0, -17.5, 0]
|
||||
},
|
||||
"body": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["math.sin(q.anim_time*90*1-135)*1", 3.5, 0],
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": ["-2.5+math.sin(q.anim_time*90*1-90)*2", 8, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [0, 0, 0],
|
||||
"position": [0, 0, -0.25]
|
||||
},
|
||||
"head_ruff_right": {
|
||||
"rotation": [0, "7.5+math.sin(q.anim_time*90*1-90)*2", 0]
|
||||
},
|
||||
"head_ruff_left": {
|
||||
"rotation": [0, "-7.5-math.sin(q.anim_time*90*1-90)*2", 0]
|
||||
},
|
||||
"ear_right_main": {
|
||||
"rotation": ["-10+math.sin(q.anim_time*90*1-150)*3", 0, 0]
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, "2.55+math.sin(q.anim_time*90*1-150)*1"]
|
||||
},
|
||||
"ear_right_ruff_main": {
|
||||
"rotation": [0, "2.5+math.sin(q.anim_time*90*1-45)*3", "4-math.sin(q.anim_time*90*1-135)*1.5"],
|
||||
"position": [-0.2, 0, 0]
|
||||
},
|
||||
"ear_left_main": {
|
||||
"rotation": ["-10+math.sin(q.anim_time*90*1-150)*3", 0, 0]
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": [0, 0, "-2.55-math.sin(q.anim_time*90*1-150)*1"]
|
||||
},
|
||||
"ear_left_ruff_main": {
|
||||
"rotation": [0, "-2.5-math.sin(q.anim_time*90*1-45)*3", "-4+math.sin(q.anim_time*90*1-135)*1.5"],
|
||||
"position": [0.2, 0, 0]
|
||||
},
|
||||
"hand_stick": {
|
||||
"position": [4.9, -1, 0]
|
||||
},
|
||||
"finger_index_right2": {
|
||||
"rotation": [0, 0, -60]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"rotation": [0, 0, -57.5]
|
||||
},
|
||||
"finger_ring_right2": {
|
||||
"rotation": [0, 0, -42.5]
|
||||
},
|
||||
"arm_left_ruff": {
|
||||
"rotation": ["-15+math.sin(q.anim_time*90*1+45)*10", 0, 0]
|
||||
},
|
||||
"chest_ruff_top_right": {
|
||||
"rotation": [0, 0, -40]
|
||||
},
|
||||
"chest_ruff_top_left": {
|
||||
"rotation": [0, 0, 40]
|
||||
},
|
||||
"chest_ruff_right_top": {
|
||||
"rotation": [0, 0, "7.5+math.sin(q.anim_time*90*1)*2"]
|
||||
},
|
||||
"chest_ruff_right_bottom": {
|
||||
"rotation": [0, 0, "-2.5+math.sin(q.anim_time*90*1-45)*2"]
|
||||
},
|
||||
"chest_ruff_right_bottom2": {
|
||||
"rotation": [0, 0, "-20+math.sin(q.anim_time*90*1-90)*2"]
|
||||
},
|
||||
"chest_ruff_left_top": {
|
||||
"rotation": [0, 0, "-12.5-math.sin(q.anim_time*90*1)*2"]
|
||||
},
|
||||
"chest_ruff_left_bottom": {
|
||||
"rotation": [0, 0, "5-math.sin(q.anim_time*90*1-45)*2"]
|
||||
},
|
||||
"chest_ruff_left_bottom2": {
|
||||
"rotation": [0, 0, "15-math.sin(q.anim_time*90*1-90)*2"]
|
||||
},
|
||||
"leg_right_outer2": {
|
||||
"rotation": [0, 0, "-0.35+math.sin(q.anim_time*90*1-45)*0.5"]
|
||||
},
|
||||
"leg_right_outer4": {
|
||||
"rotation": [0, 0, "0+math.sin(q.anim_time*90*1-90)*2"]
|
||||
},
|
||||
"leg_right_outer5": {
|
||||
"rotation": [0, 0, "0+math.sin(q.anim_time*90*1-135)*2"]
|
||||
},
|
||||
"leg_right_outer6": {
|
||||
"rotation": [0, 0, "0+math.sin(q.anim_time*90*1-180)*2"]
|
||||
},
|
||||
"leg_right_outer7": {
|
||||
"rotation": [0, 0, "0+math.sin(q.anim_time*90*1-215)*2"]
|
||||
},
|
||||
"leg_left_outer": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"leg_left_outer2": {
|
||||
"rotation": [0, 0, "0.35-math.sin(q.anim_time*90*1-45)*0.5"]
|
||||
},
|
||||
"leg_left_outer4": {
|
||||
"rotation": [0, 0, "0-math.sin(q.anim_time*90*1-90)*2"]
|
||||
},
|
||||
"leg_left_outer5": {
|
||||
"rotation": [0, 0, "0-math.sin(q.anim_time*90*1-135)*2"]
|
||||
},
|
||||
"leg_left_outer6": {
|
||||
"rotation": [0, 0, "0-math.sin(q.anim_time*90*1-180)*2"]
|
||||
},
|
||||
"leg_left_outer7": {
|
||||
"rotation": [0, 0, "0-math.sin(q.anim_time*90*1-215)*2"]
|
||||
},
|
||||
"flame": {
|
||||
"rotation": [
|
||||
"-40+3*(math.sin(q.anim_time*90*3*2-90)*1-1)+6*(math.sin(q.anim_time*90*3/2-90)*1-1)",
|
||||
"-35+5*(math.sin(q.anim_time*90*3-150)*1-1)+6*(math.sin(q.anim_time*90*3/2-90)*1-1)",
|
||||
35
|
||||
]
|
||||
},
|
||||
"torso_cloak": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"shoulder_left_ruff": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"arm_left_ruff": {
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
"arm_left_ruff2": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": ["17.5+math.sin(q.anim_time*90*1.5-110)*-2", 20, 5],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["-20+math.sin(q.anim_time*90*1.5-90)*3", "15+math.sin(q.anim_time*90*1.5-90)*-2", -15]
|
||||
},
|
||||
"eye_angry_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
},
|
||||
"head_ruff_right": {
|
||||
"rotation": [-1.64071, -0.82614, -1.75664]
|
||||
},
|
||||
"shoulder_fur_left": {
|
||||
"rotation": [0, 0, -35]
|
||||
},
|
||||
"shoulder_fur_right": {
|
||||
"rotation": [0, 0, 35]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["-8+math.sin(q.anim_time*90*1.5-90)*10", "math.sin(q.anim_time*90*1-90)*20", 0],
|
||||
"position": [0, 1, 0]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*1.5-120)*12", "math.sin(q.anim_time*90*1-120)*25", 0]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*1.5-170)*13", "math.sin(q.anim_time*90*1-170)*30", 0]
|
||||
},
|
||||
"tail4": {
|
||||
"rotation": ["-12.5+math.sin(q.anim_time*90*1.5-210)*18", "math.sin(q.anim_time*90*1-200)*35", 0]
|
||||
},
|
||||
"tail5": {
|
||||
"rotation": ["10+math.sin(q.anim_time*90*1.5-260)*22", "math.sin(q.anim_time*90*1-250)*35", 0]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": ["5+math.sin(q.anim_time*90*1.5-260)*25", "math.sin(q.anim_time*90*1-290)*40", 0]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": ["math.sin(q.anim_time*90*1.5-290)*50", "math.sin(q.anim_time*90*1-310)*45", 0]
|
||||
},
|
||||
"robe_left": {
|
||||
"rotation": [20, -15, -15],
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"robe_left2_rotation": {
|
||||
"rotation": [-5, 0, 2.5]
|
||||
},
|
||||
"robe_left3_rotation": {
|
||||
"rotation": [-2.5, 0, 0]
|
||||
},
|
||||
"robe_left_outer": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
},
|
||||
"robe_left_outer2": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"robe_right": {
|
||||
"rotation": [-15, -2.5, 15],
|
||||
"position": [0, -0.75, -1]
|
||||
},
|
||||
"robe_right2_rotation": {
|
||||
"rotation": [5, 0, 2.5]
|
||||
},
|
||||
"robe_right3_rotation": {
|
||||
"rotation": [5, 0, -2.5]
|
||||
},
|
||||
"robe_right_outer": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
},
|
||||
"robe_right_outer2": {
|
||||
"rotation": [2.5, 5, 0]
|
||||
},
|
||||
"robe_right_outer3": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"robe_front_middle": {
|
||||
"rotation": [-7.5, -20, -5],
|
||||
"position": [1.5, 0, -1.65]
|
||||
},
|
||||
"robe_front_middle2_rotation": {
|
||||
"rotation": [-2.5, -7.5, -0.5],
|
||||
"position": [-1, -1, 0]
|
||||
},
|
||||
"robe_front_middle3_rotation": {
|
||||
"rotation": [5, 7.5, -5],
|
||||
"position": [-1.86367, 0.85692, -0.23757]
|
||||
},
|
||||
"robe_middle_front_fur": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"robe_front_middle3": {
|
||||
"rotation": [0, -10, 7.5]
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [0, 0, 35]
|
||||
},
|
||||
"arm_right_ruff": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"arm_right_ruff2": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, 0, -40]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -60]
|
||||
},
|
||||
"stick_hand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_top_left4": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"ear_ruff_middle_left4": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_top_right4": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
},
|
||||
"ear_ruff_middle_right4": {
|
||||
"rotation": [0, 10, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.battle_idle2_wip": {
|
||||
"animation.delphox.battle_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"robe_left": {
|
||||
@@ -629,6 +481,20 @@
|
||||
"foot_right2": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"robe_right": {
|
||||
"rotation": [-34.35188, 12.84924, 4.16618],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"robe_right2": {
|
||||
"rotation": [32.62765, -10.18372, 3.05577],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"robe_right2_rotation": {
|
||||
"rotation": [2.41492, 0.64686, -14.98637]
|
||||
},
|
||||
"robe_right3_rotation": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [-17.56274, -4.76804, 1.50701]
|
||||
},
|
||||
@@ -647,7 +513,7 @@
|
||||
"tail7": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
},
|
||||
"wand": {
|
||||
"stick_hand": {
|
||||
"rotation": [115.18907, -6.79382, 69.31542],
|
||||
"position": [7.5, -2, -2]
|
||||
},
|
||||
@@ -664,34 +530,6 @@
|
||||
"ear_ruff_shock_right": {
|
||||
"rotation": [0, 5, 0],
|
||||
"scale": 0
|
||||
},
|
||||
"robe_right": {
|
||||
"rotation": [28.44706, -2.60661, -11.92606],
|
||||
"position": [1, 0, 0]
|
||||
},
|
||||
"robe_right2_rotation": {
|
||||
"rotation": [-17.10967, 3.73172, 11.93845],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"robe_right3_rotation": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_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.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -979,7 +817,7 @@
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"wand": {
|
||||
"stick_hand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
@@ -1028,6 +866,25 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.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.delphox.cry": {
|
||||
"animation_length": 1.75,
|
||||
"bones": {
|
||||
@@ -1095,6 +952,170 @@
|
||||
"effect": "pokemon.delphox.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.surprise_hair": {
|
||||
"animation_length": 0.0417,
|
||||
"bones": {
|
||||
"ear_ruff_top_left": {
|
||||
"rotation": [0.86996, -0.48705, -9.93723]
|
||||
},
|
||||
"ear_ruff_top_left2": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"ear_ruff_top_left3": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"ear_ruff_top_left4": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"ear_ruff_middle_left": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"ear_ruff_middle_left2": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"ear_ruff_middle_left3": {
|
||||
"rotation": [-1.63786, -2.36303, 19.89762]
|
||||
},
|
||||
"ear_ruff_middle_left4": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"ear_ruff_bottom_left": {
|
||||
"rotation": {
|
||||
"0.0": [0.1467, 0.51916, 9.98614],
|
||||
"0.0417": [0.23463, 0.48579, 19.98647]
|
||||
}
|
||||
},
|
||||
"ear_ruff_bottom_left2": {
|
||||
"rotation": [-0.08929, 0.02949, 17.49954]
|
||||
},
|
||||
"ear_ruff_bottom_left3": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"ear_ruff_top_right": {
|
||||
"rotation": [0.86996, 0.48705, 9.93723]
|
||||
},
|
||||
"ear_ruff_top_right2": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"ear_ruff_top_right3": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"ear_ruff_top_right4": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"ear_ruff_middle_right2": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"ear_ruff_middle_right3": {
|
||||
"rotation": [-1.63786, 2.36303, -19.89762]
|
||||
},
|
||||
"ear_ruff_middle_right4": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"ear_ruff_middle_right": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"ear_ruff_bottom_right": {
|
||||
"rotation": [0.1467, -0.51916, -9.98614]
|
||||
},
|
||||
"ear_ruff_bottom_right2": {
|
||||
"rotation": [-0.08929, -0.02949, -17.49954]
|
||||
},
|
||||
"ear_ruff_bottom_right3": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"ear_ruff_shock_left_top": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"ear_ruff_shock_left_middle": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"ear_ruff_shock_left_bottom": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"ear_ruff_shock_right_top": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"ear_ruff_shock_right_middle": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"ear_ruff_shock_right_bottom": {
|
||||
"rotation": [0, 0, -25]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.shock": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"jaw": {
|
||||
"rotation": [62.5, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"scale": [0.6, 0.6, 1]
|
||||
},
|
||||
"pupil_right": {
|
||||
"scale": [0.6, 0.6, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.angry": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_angry_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.sad": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_sad_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eye_sad_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.happy": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_happy_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [62.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.blush": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"blush_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"blush_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.delphox.hurt": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eyelid_recoil_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"eyelid_recoil_right": {
|
||||
"position": [-0.1, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -280,14 +280,6 @@
|
||||
"rotation": [-5, 10, -7.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sylveon.cry": {
|
||||
"animation_length": 1.2,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.sylveon.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,20 +5,20 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -0.6, 0]
|
||||
"position": [0, -0.7, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-3, 5, 1.5],
|
||||
"waist": {
|
||||
"rotation": [0, 0, 9],
|
||||
"position": [0, -0.2, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [4, 0, -1.5]
|
||||
"torso": {
|
||||
"rotation": [0, 0, -9]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [0, -5, 0]
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"feather": {
|
||||
"rotation": [-47.5, 28, 0]
|
||||
"rotation": [-47.5, 22.5, 0]
|
||||
},
|
||||
"feather2": {
|
||||
"rotation": [-35, 0, 0]
|
||||
@@ -30,13 +30,13 @@
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [30, 22.5, -52]
|
||||
"rotation": [30, 22.5, -46.5]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [45, -90, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [20, 10, -15]
|
||||
"rotation": [10, 5, -15]
|
||||
},
|
||||
"arm_claw_back_right": {
|
||||
"rotation": [0, 0, -30]
|
||||
@@ -63,14 +63,14 @@
|
||||
"rotation": [-20, 0, 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [5, 15, 8],
|
||||
"rotation": [1.5, 5, 8],
|
||||
"position": [0, 0.4, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [0, 0, 0]
|
||||
"rotation": [3, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [0, 0, 0]
|
||||
"rotation": [-3.5, 0, 0]
|
||||
},
|
||||
"feather5": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
@@ -85,14 +85,14 @@
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-12.5, -15, -8],
|
||||
"rotation": [-15, -15, -8],
|
||||
"position": [0, -0.8, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-2.5, 0, -7]
|
||||
"rotation": [0, 0, -8]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [0, 0, 8]
|
||||
@@ -102,317 +102,62 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sneasler.battle_idle": {
|
||||
"loop": true,
|
||||
"animation.sneasler.mouth_test": {
|
||||
"animation_length": 2,
|
||||
"bones": {
|
||||
"locator_top": {
|
||||
"position": [0, -4, 0]
|
||||
},
|
||||
"body": {
|
||||
"rotation": [0, 20, 0],
|
||||
"position": [0, -4.6, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-5, 15, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [12, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [20, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-26, -31, 18],
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"feather": {
|
||||
"rotation": [-47.5, 28, 0]
|
||||
},
|
||||
"feather2": {
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
"feather3": {
|
||||
"rotation": [-50, 0, 0]
|
||||
},
|
||||
"feather4": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"feather5": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
},
|
||||
"feather6": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"feather7": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"feather8": {
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-32.5, 50, -65]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -70, 0]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [5, -5, -5]
|
||||
},
|
||||
"arm_claw_back_right": {
|
||||
"rotation": [0, 5, -10]
|
||||
},
|
||||
"arm_claw_middle_right": {
|
||||
"rotation": [0, 0, -2]
|
||||
},
|
||||
"arm_claw_front_right": {
|
||||
"rotation": [0, -5, 5]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [-5, 85, 0]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [-5, 10, 0]
|
||||
},
|
||||
"arm_claw_back_left": {
|
||||
"rotation": [0, -10, 15]
|
||||
},
|
||||
"arm_claw_middle_left": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"arm_claw_front_left": {
|
||||
"rotation": [0, 10, -5]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-14.5, 40, 45],
|
||||
"position": [-0.5, 0, 1]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [64, 0, 0],
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-9.5, -2.5, -33.5],
|
||||
"position": [0, -0.4, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [-4.5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-30, -35, -32],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [25, 0, 5]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [15.5, 0, 24.5]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [5.5, 0, 0],
|
||||
"position": [0, 0.6, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sneasler.ground_idle_basket": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -0.2, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-2.5, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [3, 0, 0]
|
||||
},
|
||||
"basketstrap_right": {
|
||||
"rotation": [-17.5, 10, 5]
|
||||
},
|
||||
"basketstrap_right3": {
|
||||
"rotation": [-22, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_right": {
|
||||
"rotation": [0, 0, -15],
|
||||
"position": [-0.5, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_left": {
|
||||
"rotation": [0, 0, 15],
|
||||
"position": [0.5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [2, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-1, 0, 0]
|
||||
},
|
||||
"feather": {
|
||||
"rotation": [-47.5, 33, 0]
|
||||
},
|
||||
"feather2": {
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
"feather3": {
|
||||
"rotation": [-50, 0, 0]
|
||||
},
|
||||
"feather4": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"feather5": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
},
|
||||
"feather6": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"feather7": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"feather8": {
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-12, 7.5, -62]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -15, -2.5]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
},
|
||||
"arm_claw_middle_right": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"arm_claw_front_right": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-12, -7.5, 62]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 15, 2.5]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"arm_claw_middle_left": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"arm_claw_front_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-2.5, 12, 5.5],
|
||||
"position": [-0.3, 0, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-1, 0, -5]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-2.5, -12, -5.5],
|
||||
"position": [0.3, 0, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [-1, 0, 5]
|
||||
},
|
||||
"basketstrap_right4": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_back_right": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_front_right": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_back_left": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"shoulder_fluff_front_left": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"basketstrap_right2": {
|
||||
"rotation": [52, 0, 0]
|
||||
},
|
||||
"basketstrap_left": {
|
||||
"rotation": [-17.5, -10, -5]
|
||||
},
|
||||
"basketstrap_left2": {
|
||||
"rotation": [52, 0, 0]
|
||||
},
|
||||
"basketstrap_left3": {
|
||||
"rotation": [-22, 0, 0]
|
||||
},
|
||||
"basketstrap_left4": {
|
||||
"rotation": [35, 0, 0]
|
||||
"fang": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, 11.5]},
|
||||
"1.5": {"pre": [0, 0, 11.5], "post": [0, 0, 11.5]},
|
||||
"1.5417": {"pre": [0, 0, 11.5], "post": [0, 0, 0]}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0.7, 0.4]},
|
||||
"1.5": {"pre": [0, 0.7, 0.4], "post": [0, 0.7, 0.4]},
|
||||
"1.5417": {"pre": [0, 0.7, 0.4], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, 0.61]},
|
||||
"1.5": {"pre": [0, 0, 0.61], "post": [0, 0, 0.61]},
|
||||
"1.5417": {"pre": [0, 0, 0.61], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sneasler.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"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]
|
||||
}
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"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]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelashes_right": {
|
||||
"position": {
|
||||
"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]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelashes_left": {
|
||||
"position": {
|
||||
"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]
|
||||
}
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sneasler.cry": {
|
||||
"animation_length": 1,
|
||||
"sound_effects": {
|
||||
"0.04": {
|
||||
"effect": "pokemon.sneasler.cry"
|
||||
}
|
||||
},
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
@@ -426,25 +171,24 @@
|
||||
"0.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"fang_closed": {
|
||||
"fang": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, 11.5]},
|
||||
"0.1667": {"pre": [0, 0, 11.5], "post": [0, 0, 11.5]},
|
||||
"0.2083": {"pre": [0, 0, 11.5], "post": [0, 0, 0]},
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 11.5]},
|
||||
"0.4583": {"pre": [0, 0, 11.5], "post": [0, 0, 11.5]},
|
||||
"0.5": {"pre": [0, 0, 11.5], "post": [0, 0, 0]}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0.1, 1.1]
|
||||
},
|
||||
"0.2083": {
|
||||
"pre": [0, 0.1, 1.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.25": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0.1, 1.1]
|
||||
},
|
||||
"0.5": {
|
||||
"pre": [0, 0.1, 1.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0.7, 0.4]},
|
||||
"0.1667": {"pre": [0, 0.7, 0.4], "post": [0, 0.7, 0.4]},
|
||||
"0.2083": {"pre": [0, 0.7, 0.4], "post": [0, 0, 0]},
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0.7, 0.4]},
|
||||
"0.4583": {"pre": [0, 0.7, 0.4], "post": [0, 0.7, 0.4]},
|
||||
"0.5": {"pre": [0, 0.7, 0.4], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"feather": {
|
||||
@@ -462,63 +206,13 @@
|
||||
"jaw": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 1.1]
|
||||
},
|
||||
"0.2083": {
|
||||
"pre": [0, 0, 1.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.25": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 1.1]
|
||||
},
|
||||
"0.5": {
|
||||
"pre": [0, 0, 1.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, 0.61]},
|
||||
"0.1667": {"pre": [0, 0, 0.61], "post": [0, 0, 0.61]},
|
||||
"0.2083": {"pre": [0, 0, 0.61], "post": [0, 0, 0]},
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.61]},
|
||||
"0.4583": {"pre": [0, 0, 0.61], "post": [0, 0, 0.61]},
|
||||
"0.5": {"pre": [0, 0, 0.61], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.3, -0.1]
|
||||
},
|
||||
"0.2083": {
|
||||
"pre": [0, -0.3, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.25": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.3, -0.1]
|
||||
},
|
||||
"0.5": {
|
||||
"pre": [0, -0.3, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0": {
|
||||
"effect": "pokemon.sneasler.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.sneasler.item_hold": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"arm_claw_back_right": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"arm_claw_middle_right": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"arm_claw_front_right": {
|
||||
"rotation": [0, 0, -45]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,14 @@
|
||||
"name": "lapras",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "lapras",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "lapras",
|
||||
@@ -29,11 +37,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"name": "locator_body",
|
||||
"parent": "body",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"middle": [0, 14, 0]
|
||||
"body": [0, 14, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -60,14 +68,6 @@
|
||||
{"origin": [-15.25, 13.5, -7], "size": [3, 3, 3], "pivot": [-12.5, 13.5, -4.5], "rotation": [0, -15, 5], "uv": [12, 120], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "shell",
|
||||
"pivot": [0, 24, 0],
|
||||
"locators": {
|
||||
"seat_1": [0, 24, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "shell2",
|
||||
"parent": "shell",
|
||||
@@ -138,31 +138,6 @@
|
||||
{"origin": [-5.5, 30, -14.5], "size": [11, 10, 8], "inflate": 0.01, "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 37.25, -21],
|
||||
"rotation": [-22.5, 0, 0],
|
||||
"locators": {
|
||||
"item_face": [0, 37.25, -21]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 36, -24.1],
|
||||
"locators": {
|
||||
"face": [0, 36, -24.1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 40, -12],
|
||||
"locators": {
|
||||
"item_hat": [0, 40, -12]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
@@ -185,6 +160,14 @@
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 30.75, -11.15]
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "eyes",
|
||||
"pivot": [0, 36, -24.1],
|
||||
"locators": {
|
||||
"face": [0, 36, -24.1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
@@ -323,14 +306,6 @@
|
||||
"jaw_lower": [0, 32.15, -21.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "jaw",
|
||||
"pivot": [0, 32, -22.5],
|
||||
"locators": {
|
||||
"item": [0, 32, -22.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tongue",
|
||||
"parent": "jaw",
|
||||
@@ -370,15 +345,6 @@
|
||||
{"origin": [-6.5, 1.5, 11], "size": [13, 10, 7], "uv": [78, 40]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 5, 17],
|
||||
"rotation": [0, 180, 0],
|
||||
"locators": {
|
||||
"tail": [0, 5, 17]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
@@ -533,19 +499,26 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "lapras",
|
||||
"name": "bone2",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone4",
|
||||
"parent": "bone2",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "bone",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
"locator5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "lapras",
|
||||
"pivot": [0, 45.2, -6],
|
||||
"name": "bone5",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"top": [0, 45.2, -6]
|
||||
"locator6": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"parent": "torso",
|
||||
"pivot": [0, 13, -1.5],
|
||||
"locators": {
|
||||
"seat_1": [0, 12.25, -1.5]
|
||||
"seat_1": [0, 13, -1.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -812,4 +812,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -7,675 +7,468 @@
|
||||
"texture_width": 256,
|
||||
"texture_height": 128,
|
||||
"visible_bounds_width": 6,
|
||||
"visible_bounds_height": 4.5,
|
||||
"visible_bounds_offset": [0, 1.75, 0]
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "metagross",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "metagross",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "metagross",
|
||||
"pivot": [0, 35.5, 0],
|
||||
"locators": {
|
||||
"top": [0, 35.5, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "metagross",
|
||||
"pivot": [0, 26, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 25.5, 0],
|
||||
"locators": {
|
||||
"middle": [0, 25.5, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 25.5, -19],
|
||||
"locators": {
|
||||
"target": [0, 25.5, -19]
|
||||
}
|
||||
"pivot": [0, 28, 0]
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [-0.5, 18, 0],
|
||||
"pivot": [-0.5, 20, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-10.5, 16.5, -10.5], "size": [21, 5, 21], "uv": [0, 36]},
|
||||
{"origin": [-16, 21.5, -16], "size": [32, 4, 32], "uv": [0, 0]},
|
||||
{"origin": [-12, 25, -13], "size": [24, 6, 3], "uv": [156, 0]},
|
||||
{"origin": [-13, 25, -3.5], "size": [26, 6, 7], "inflate": 0.01, "uv": [63, 36]},
|
||||
{"origin": [-12, 25, 10], "size": [24, 6, 3], "uv": [156, 12]},
|
||||
{"origin": [-9.5, 23.5, -10.5], "size": [19, 8, 21], "uv": [97, 0]},
|
||||
{"origin": [-10.5, 31, -10.5], "size": [21, 3, 21], "inflate": 0.01, "uv": [0, 62]}
|
||||
{"origin": [-10, 18.5, -9.5], "size": [20, 5, 20], "uv": [0, 64]},
|
||||
{"origin": [-15, 23.5, -14.5], "size": [30, 4, 30], "uv": [0, 30]},
|
||||
{"origin": [-12, 27.25, -11.5], "size": [24, 6, 24], "uv": [0, 0]},
|
||||
{"origin": [-9.5, 32.75, -9], "size": [19, 3, 19], "uv": [72, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 26.5, -16.5],
|
||||
"locators": {
|
||||
"face": [0, 26.5, -16.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 27, -16.1],
|
||||
"locators": {
|
||||
"item_face": [0, 27, -16.1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 19.5, -10.5],
|
||||
"locators": {
|
||||
"mouth": [0, 19.5, -10.5],
|
||||
"special": [0, 19.5, -10.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 34, 0],
|
||||
"locators": {
|
||||
"item_hat": [0, 34, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 34, -8],
|
||||
"locators": {
|
||||
"head": [0, 34, -8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 37, 5],
|
||||
"locators": {
|
||||
"seat_1": [0, 37, 5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "torso",
|
||||
"pivot": [-0.5, 18, -1]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [5.9, 27.15, -13.01],
|
||||
"cubes": [
|
||||
{"origin": [2.25, 25.25, -13.01], "size": [6, 4, 0], "uv": [1, 63]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_open_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [5.5, 27.4, -12.72],
|
||||
"cubes": [
|
||||
{"origin": [4.5, 26.4, -12.72], "size": [2, 2, 0], "inflate": 0.3, "uv": [1, 71]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_angry_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [4.5, 28.3, -12.93],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 27.3, -12.93], "size": [2, 2, 0], "inflate": 0.01, "uv": [1, 75]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_sad_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [6.5, 28.3, -12.93],
|
||||
"cubes": [
|
||||
{"origin": [5.5, 27.3, -12.93], "size": [2, 2, 0], "inflate": 0.01, "uv": [1, 73]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [5.5, 27.4, -13.03],
|
||||
"cubes": [
|
||||
{"origin": [5, 26.9, -13.03], "size": [1, 1, 0], "uv": [9, 71]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [5.5, 27.4, -13],
|
||||
"locators": {
|
||||
"eye2": [5.5, 27.4, -13]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_shine_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [6.3, 28.4, -13.025],
|
||||
"cubes": [
|
||||
{"origin": [5.8, 27.9, -13.025], "size": [1, 1, 0], "uv": [11, 71]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_closed_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [5.3, 27.3, -12.92],
|
||||
"cubes": [
|
||||
{"origin": [4.3, 26.8, -12.92], "size": [2, 1, 0], "uv": [9, 73]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_happy_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [5.3, 27.3, -12.92],
|
||||
"cubes": [
|
||||
{"origin": [3.8, 26.55, -12.92], "size": [3, 1, 0], "uv": [13, 71]},
|
||||
{"origin": [4.8, 27.05, -12.92], "size": [1, 1, 0], "uv": [13, 73]}
|
||||
]
|
||||
"pivot": [-0.5, 20, 0.5]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-5.25, 27.25, -13.01],
|
||||
"pivot": [-6.65, 29.15, -11.51],
|
||||
"cubes": [
|
||||
{"origin": [-8.25, 25.25, -13.01], "size": [6, 4, 0], "uv": [1, 67], "mirror": true}
|
||||
{"origin": [-9, 27.25, -11.51], "size": [5, 4, 0], "uv": [72, 4], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_open_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-5.5, 27.4, -12.72],
|
||||
"pivot": [-6.65, 29.15, -11.51],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, 26.4, -12.72], "size": [2, 2, 0], "inflate": 0.3, "uv": [5, 71], "mirror": true}
|
||||
{"origin": [-7.8, 28.05, -11.52], "size": [2, 2, 0], "uv": [86, 0], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_angry_right",
|
||||
"name": "eye_shine_right",
|
||||
"parent": "eye_open_right",
|
||||
"pivot": [-4.5, 28.3, -12.93],
|
||||
"pivot": [-7.3, 29.55, -11.525],
|
||||
"cubes": [
|
||||
{"origin": [-5.5, 27.3, -12.93], "size": [2, 2, 0], "inflate": 0.01, "uv": [5, 75], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_sad_right",
|
||||
"parent": "eye_open_right",
|
||||
"pivot": [-6.5, 28.3, -12.93],
|
||||
"cubes": [
|
||||
{"origin": [-7.5, 27.3, -12.93], "size": [2, 2, 0], "inflate": 0.01, "uv": [5, 73], "mirror": true}
|
||||
{"origin": [-7.8, 29.05, -11.525], "size": [1, 1, 0], "uv": [88, 2], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_open_right",
|
||||
"pivot": [-5.5, 27.4, -13.03],
|
||||
"pivot": [-6.8, 29.05, -11.53],
|
||||
"cubes": [
|
||||
{"origin": [-6, 26.9, -13.03], "size": [1, 1, 0], "uv": [9, 72], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-5.5, 27.4, -13],
|
||||
"locators": {
|
||||
"eye1": [-5.5, 27.4, -13]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_shine_right",
|
||||
"parent": "eye_open_right",
|
||||
"pivot": [-6.3, 28.4, -13.025],
|
||||
"cubes": [
|
||||
{"origin": [-6.8, 27.9, -13.025], "size": [1, 1, 0], "uv": [11, 72], "mirror": true}
|
||||
{"origin": [-7.3, 28.55, -11.53], "size": [1, 1, 0], "uv": [86, 2], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_closed_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-5.3, 27.3, -12.92],
|
||||
"pivot": [-6.8, 29.05, -11.42],
|
||||
"cubes": [
|
||||
{"origin": [-6.3, 26.8, -12.92], "size": [2, 1, 0], "uv": [9, 74], "mirror": true}
|
||||
{"origin": [-7.8, 28.55, -11.42], "size": [2, 1, 0], "uv": [86, 3], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_happy_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-5.3, 27.3, -12.92],
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [6.65, 29.15, -11.51],
|
||||
"cubes": [
|
||||
{"origin": [-6.8, 26.55, -12.92], "size": [3, 1, 0], "uv": [13, 72], "mirror": true},
|
||||
{"origin": [-5.8, 27.05, -12.92], "size": [1, 1, 0], "uv": [13, 74], "mirror": true}
|
||||
{"origin": [4, 27.25, -11.51], "size": [5, 4, 0], "uv": [72, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_open_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [6.65, 29.15, -11.51],
|
||||
"cubes": [
|
||||
{"origin": [5.8, 28.05, -11.52], "size": [2, 2, 0], "uv": [82, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_shine_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [7.3, 29.55, -11.525],
|
||||
"cubes": [
|
||||
{"origin": [6.8, 29.05, -11.525], "size": [1, 1, 0], "uv": [84, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_open_left",
|
||||
"pivot": [6.8, 29.05, -11.53],
|
||||
"cubes": [
|
||||
{"origin": [6.3, 28.55, -11.53], "size": [1, 1, 0], "uv": [82, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_closed_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [6.8, 29.05, -11.42],
|
||||
"cubes": [
|
||||
{"origin": [5.8, 28.55, -11.42], "size": [2, 1, 0], "uv": [82, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 19.5, -10.41],
|
||||
"pivot": [0, 21.5, -9.41],
|
||||
"cubes": [
|
||||
{"origin": [-8, 17.5, -10.41], "size": [16, 4, 0], "uv": [64, 50]}
|
||||
{"origin": [-8, 19.5, -9.41], "size": [16, 4, 0], "uv": [0, 89]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "torso_spikes",
|
||||
"parent": "torso",
|
||||
"pivot": [-0.5, 21.5, 0],
|
||||
"pivot": [-0.5, 23.5, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [11.4, 19, -2], "size": [4, 3, 4], "uv": [97, 7]},
|
||||
{"origin": [11.9, 16.5, -1.5], "size": [3, 3, 3], "inflate": -0.1, "uv": [16, 12]},
|
||||
{"origin": [-15.4, 19, -2], "size": [4, 3, 4], "uv": [97, 0], "mirror": true},
|
||||
{"origin": [-14.9, 16.5, -1.5], "size": [3, 3, 3], "inflate": -0.1, "uv": [16, 6], "mirror": true}
|
||||
{"origin": [-13.9, 19, -1], "size": [3, 2, 3], "uv": [18, 40], "mirror": true},
|
||||
{"origin": [-14.4, 21, -1.5], "size": [4, 3, 4], "uv": [14, 33], "mirror": true},
|
||||
{"origin": [10.4, 21, -1.5], "size": [4, 3, 4], "uv": [0, 30]},
|
||||
{"origin": [10.9, 19, -1], "size": [3, 2, 3], "uv": [0, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_metal",
|
||||
"parent": "torso",
|
||||
"pivot": [-0.5, 29.5, -12.15],
|
||||
"rotation": [-40, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_left",
|
||||
"parent": "head_metal",
|
||||
"pivot": [9.5, 31.5, -13.4],
|
||||
"rotation": [-2, -10, 55],
|
||||
"cubes": [
|
||||
{"origin": [8, 21.5, -13.4], "size": [3, 10, 1], "pivot": [9.5, 21.5, -13.4], "rotation": [4.5, 0, 0], "uv": [8, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_left2",
|
||||
"parent": "head_metal_left",
|
||||
"pivot": [9.5, 21.5, -13.4],
|
||||
"rotation": [15, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [8, 13.5, -13.4], "size": [3, 8, 1], "inflate": 0.01, "uv": [8, 11]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_left3",
|
||||
"parent": "head_metal_left2",
|
||||
"pivot": [9.5, 13.5, -13.4],
|
||||
"rotation": [20, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [8, 8.5, -13.4], "size": [3, 5, 1], "inflate": 0.02, "uv": [0, 20]},
|
||||
{"origin": [5, 8.5, -13.4], "size": [6, 2, 1], "pivot": [11, 8.5, -12.9], "rotation": [0, 0, -15], "uv": [16, 0]}
|
||||
]
|
||||
"pivot": [-0.5, 30.5, -12.1],
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_right",
|
||||
"parent": "head_metal",
|
||||
"pivot": [-9.5, 31.5, -13.4],
|
||||
"rotation": [-2, 10, -55],
|
||||
"pivot": [-9.5, 32.5, -13.35],
|
||||
"rotation": [-2, 10, -60],
|
||||
"cubes": [
|
||||
{"origin": [-11, 21.5, -13.4], "size": [3, 10, 1], "pivot": [-9.5, 21.5, -13.4], "rotation": [4.5, 0, 0], "uv": [0, 0], "mirror": true}
|
||||
{"origin": [-11, 22.5, -13.35], "size": [3, 10, 1], "uv": [0, 11], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_right2",
|
||||
"parent": "head_metal_right",
|
||||
"pivot": [-9.5, 21.5, -13.4],
|
||||
"pivot": [-9.5, 22.5, -13.35],
|
||||
"rotation": [15, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-11, 13.5, -13.4], "size": [3, 8, 1], "inflate": 0.01, "uv": [0, 11], "mirror": true}
|
||||
{"origin": [-11, 14.5, -13.35], "size": [3, 8, 1], "inflate": 0.01, "uv": [8, 9], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_metal_right3",
|
||||
"parent": "head_metal_right2",
|
||||
"pivot": [-9.5, 13.5, -13.4],
|
||||
"pivot": [-9.5, 14.5, -13.35],
|
||||
"rotation": [20, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-11, 8.5, -13.4], "size": [3, 5, 1], "inflate": 0.02, "uv": [8, 20], "mirror": true},
|
||||
{"origin": [-11, 8.5, -13.4], "size": [6, 2, 1], "pivot": [-11, 8.5, -12.9], "rotation": [0, 0, 15], "uv": [16, 3], "mirror": true}
|
||||
{"origin": [-11, 9.5, -13.35], "size": [3, 5, 1], "inflate": 0.02, "uv": [16, 6], "mirror": true},
|
||||
{"origin": [-8, 9.5, -13.35], "size": [3, 2, 1], "uv": [16, 12], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "legs",
|
||||
"parent": "body",
|
||||
"pivot": [0, 27, 0]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left",
|
||||
"parent": "legs",
|
||||
"pivot": [10.85, 27, -6.8],
|
||||
"name": "head_metal_left",
|
||||
"parent": "head_metal",
|
||||
"pivot": [9.5, 32.5, -13.35],
|
||||
"rotation": [-2, -10, 60],
|
||||
"cubes": [
|
||||
{"origin": [8.35, 23.75, -9.75], "size": [5, 6, 6], "inflate": 0.01, "uv": [22, 86]},
|
||||
{"origin": [11.85, 25.25, -8.25], "size": [13, 3, 3], "uv": [32, 110]},
|
||||
{"origin": [21.75, 24.75, -8.75], "size": [4, 4, 4], "pivot": [24.75, 24.75, -7.25], "rotation": [0, 0, 2.5], "uv": [60, 86]}
|
||||
{"origin": [8, 22.5, -13.35], "size": [3, 10, 1], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left2",
|
||||
"parent": "leg_front_left",
|
||||
"pivot": [23.7981, 27.53724, -6.75],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"name": "head_metal_left2",
|
||||
"parent": "head_metal_left",
|
||||
"pivot": [9.5, 22.5, -13.35],
|
||||
"rotation": [15, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [23.2, 30.25, -9.25], "size": [2, 5, 5], "pivot": [21.2, 25.75, -7.25], "rotation": [0, 0, -2.5], "uv": [209, 90]},
|
||||
{"origin": [23.2, 25.75, -9.25], "size": [4, 5, 5], "inflate": 0.01, "pivot": [23.2, 25.75, -7.25], "rotation": [0, 0, -2.5], "uv": [196, 95]},
|
||||
{"origin": [24.75, 14.75, -8.75], "size": [6, 8, 4], "inflate": 0.01, "pivot": [29.25, 13.75, -7.25], "rotation": [0, 0, 2.5], "uv": [224, 93]},
|
||||
{"origin": [26.2, 22.75, -9.25], "size": [5, 7, 5], "inflate": 0.02, "pivot": [31.2, 22.75, -7.25], "rotation": [0, 0, -35], "uv": [209, 100]},
|
||||
{"origin": [20.75, 6.15, -11.25], "size": [9, 11, 9], "uv": [220, 105]},
|
||||
{"origin": [22.5, 14.7, -8.75], "size": [8, 3, 4], "pivot": [23.25, 16.2, -6.25], "rotation": [0, 0, -62.5], "uv": [185, 105]},
|
||||
{"origin": [28.75, 5.7, -9.25], "size": [3, 10, 5], "pivot": [30.75, 6.2, -6.25], "rotation": [0, 0, 2.5], "uv": [174, 107]}
|
||||
{"origin": [8, 14.5, -13.35], "size": [3, 8, 1], "inflate": 0.01, "uv": [8, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_front_left",
|
||||
"parent": "leg_front_left2",
|
||||
"pivot": [30.25, 6.17602, -6.25],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"name": "head_metal_left3",
|
||||
"parent": "head_metal_left2",
|
||||
"pivot": [9.5, 14.5, -13.35],
|
||||
"rotation": [20, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [19.25, 3.2, -13.25], "size": [13, 3, 13], "inflate": 0.01, "uv": [181, 112]}
|
||||
{"origin": [8, 9.5, -13.35], "size": [3, 5, 1], "inflate": 0.02, "uv": [16, 0]},
|
||||
{"origin": [5, 9.5, -13.35], "size": [3, 2, 1], "uv": [16, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary1",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [25.75, 4.7, -6.75],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"hand_secondary1": [25.75, 4.7, -6.75]
|
||||
}
|
||||
"name": "leg_holes",
|
||||
"parent": "torso",
|
||||
"pivot": [-0.5, 2.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left1",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [29.75, 3.25, -6.75],
|
||||
"name": "leg_hole_right",
|
||||
"parent": "leg_holes",
|
||||
"pivot": [-0.5, 2.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [30.25, -0.25, -8.75], "size": [0, 4, 4], "uv": [227, 29]}
|
||||
{"origin": [-9, 27.25, -8], "size": [0, 6, 17], "uv": [90, 19], "mirror": true},
|
||||
{"origin": [-12, 27.25, -8], "size": [3, 6, 0], "uv": [90, 48], "mirror": true},
|
||||
{"origin": [-12, 27.25, -2], "size": [3, 6, 0], "uv": [96, 48], "mirror": true},
|
||||
{"origin": [-12, 27.25, 3], "size": [3, 6, 0], "uv": [102, 48], "mirror": true},
|
||||
{"origin": [-12, 27.25, 9], "size": [3, 6, 0], "uv": [108, 48], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left2",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [23.25, 3.25, -11.15],
|
||||
"rotation": [0, 27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left2_rotaiton",
|
||||
"parent": "finger_front_left2",
|
||||
"pivot": [23.25, 3.25, -11.15],
|
||||
"name": "leg_hole_left",
|
||||
"parent": "leg_holes",
|
||||
"pivot": [0.5, 2.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [21.25, -0.25, -11.15], "size": [4, 4, 0], "uv": [227, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left3",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [23.25, 3.25, -2.65],
|
||||
"rotation": [0, -27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left3_rotation",
|
||||
"parent": "finger_front_left3",
|
||||
"pivot": [23.25, 3.25, -2.65],
|
||||
"cubes": [
|
||||
{"origin": [21.25, -0.25, -2.65], "size": [4, 4, 0], "uv": [227, 45]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left",
|
||||
"parent": "legs",
|
||||
"pivot": [10.85, 27, 6.7],
|
||||
"cubes": [
|
||||
{"origin": [8.35, 23.75, 3.75], "size": [5, 6, 6], "inflate": 0.01, "uv": [22, 98]},
|
||||
{"origin": [11.85, 25.25, 5.25], "size": [13, 3, 3], "uv": [32, 116]},
|
||||
{"origin": [21.75, 24.75, 4.75], "size": [4, 4, 4], "pivot": [24.75, 24.75, 6.25], "rotation": [0, 0, 2.5], "uv": [60, 94]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left2",
|
||||
"parent": "leg_back_left",
|
||||
"pivot": [23.7981, 27.53724, 6.75],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"cubes": [
|
||||
{"origin": [23.2, 30.25, 4.25], "size": [2, 5, 5], "pivot": [21.2, 25.75, 6.25], "rotation": [0, 0, -2.5], "uv": [209, 51]},
|
||||
{"origin": [23.2, 25.75, 4.25], "size": [4, 5, 5], "inflate": 0.01, "pivot": [23.2, 25.75, 6.25], "rotation": [0, 0, -2.5], "uv": [196, 56]},
|
||||
{"origin": [24.75, 14.75, 4.75], "size": [6, 8, 4], "inflate": 0.01, "pivot": [29.25, 13.75, 6.25], "rotation": [0, 0, 2.5], "uv": [224, 54]},
|
||||
{"origin": [26.2, 22.75, 4.25], "size": [5, 7, 5], "inflate": 0.02, "pivot": [31.2, 22.75, 6.25], "rotation": [0, 0, -35], "uv": [209, 61]},
|
||||
{"origin": [20.75, 6.15, 2.25], "size": [9, 11, 9], "uv": [220, 66]},
|
||||
{"origin": [22.5, 14.7, 4.75], "size": [8, 3, 4], "pivot": [23.25, 16.2, 7.25], "rotation": [0, 0, -62.5], "uv": [185, 66]},
|
||||
{"origin": [28.75, 5.7, 4.25], "size": [3, 10, 5], "pivot": [30.75, 6.2, 7.25], "rotation": [0, 0, 2.5], "uv": [174, 68]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_back_left",
|
||||
"parent": "leg_back_left2",
|
||||
"pivot": [30.25, 6.17602, 7.25],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [19.25, 3.2, 0.25], "size": [13, 3, 13], "inflate": 0.01, "uv": [181, 73]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary2",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [25.75, 4.7, 6.75],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"hand_secondary2": [25.75, 4.7, 6.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left1",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [29.75, 3.25, 6.75],
|
||||
"cubes": [
|
||||
{"origin": [30.25, -0.25, 4.75], "size": [0, 4, 4], "uv": [246, 29]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left2",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [23.25, 3.25, 2.35],
|
||||
"rotation": [0, 27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left2_rotaiton",
|
||||
"parent": "finger_back_left2",
|
||||
"pivot": [23.25, 3.25, 2.35],
|
||||
"cubes": [
|
||||
{"origin": [21.25, -0.25, 2.35], "size": [4, 4, 0], "uv": [246, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left3",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [23.25, 3.25, 10.85],
|
||||
"rotation": [0, -27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left3_rotation",
|
||||
"parent": "finger_back_left3",
|
||||
"pivot": [23.25, 3.25, 10.85],
|
||||
"cubes": [
|
||||
{"origin": [21.25, -0.25, 10.85], "size": [4, 4, 0], "uv": [246, 45]}
|
||||
{"origin": [9, 27.25, -8], "size": [0, 6, 17], "uv": [90, 13]},
|
||||
{"origin": [9, 27.25, -8], "size": [3, 6, 0], "uv": [90, 42]},
|
||||
{"origin": [9, 27.25, -2], "size": [3, 6, 0], "uv": [96, 42]},
|
||||
{"origin": [9, 27.25, 3], "size": [3, 6, 0], "uv": [102, 42]},
|
||||
{"origin": [9, 27.25, 9], "size": [3, 6, 0], "uv": [108, 42]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-10.85, 27, -6.8],
|
||||
"parent": "body",
|
||||
"pivot": [-10.85, 29.5, -5.05],
|
||||
"cubes": [
|
||||
{"origin": [-13.35, 23.75, -9.75], "size": [5, 6, 6], "inflate": 0.01, "uv": [0, 86], "mirror": true},
|
||||
{"origin": [-24.85, 25.25, -8.25], "size": [13, 3, 3], "uv": [0, 110], "mirror": true},
|
||||
{"origin": [-25.75, 24.75, -8.75], "size": [4, 4, 4], "pivot": [-24.75, 24.75, -7.25], "rotation": [0, 0, -2.5], "uv": [44, 86], "mirror": true}
|
||||
{"origin": [-12.85, 27.5, -7], "size": [4, 4, 4], "inflate": 0.01, "uv": [0, 101], "mirror": true},
|
||||
{"origin": [-22.85, 28.5, -6], "size": [11, 2, 2], "uv": [12, 101], "mirror": true},
|
||||
{"origin": [-24.29905, 27.94362, -6.5], "size": [3, 3, 3], "pivot": [-24.29905, 27.94362, -5], "rotation": [0, 0, -2.5], "uv": [36, 103], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right2",
|
||||
"parent": "leg_front_right",
|
||||
"pivot": [-23.7981, 27.53724, -6.75],
|
||||
"pivot": [-22.79905, 29.49362, -5],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [-25.2, 30.25, -9.25], "size": [2, 5, 5], "pivot": [-21.2, 25.75, -7.25], "rotation": [0, 0, 2.5], "uv": [126, 90], "mirror": true},
|
||||
{"origin": [-27.2, 25.75, -9.25], "size": [4, 5, 5], "inflate": 0.01, "pivot": [-23.2, 25.75, -7.25], "rotation": [0, 0, 2.5], "uv": [113, 95], "mirror": true},
|
||||
{"origin": [-30.75, 14.75, -8.75], "size": [6, 8, 4], "inflate": 0.01, "pivot": [-29.25, 13.75, -7.25], "rotation": [0, 0, -2.5], "uv": [141, 93], "mirror": true},
|
||||
{"origin": [-31.2, 22.75, -9.25], "size": [5, 7, 5], "inflate": 0.02, "pivot": [-31.2, 22.75, -7.25], "rotation": [0, 0, 35], "uv": [126, 100], "mirror": true},
|
||||
{"origin": [-29.75, 6.15, -11.25], "size": [9, 11, 9], "uv": [137, 105], "mirror": true},
|
||||
{"origin": [-30.5, 14.7, -8.75], "size": [8, 3, 4], "pivot": [-23.25, 16.2, -6.25], "rotation": [0, 0, 62.5], "uv": [102, 105], "mirror": true},
|
||||
{"origin": [-31.75, 5.7, -9.25], "size": [3, 10, 5], "pivot": [-30.75, 6.2, -6.25], "rotation": [0, 0, -2.5], "uv": [91, 107], "mirror": true}
|
||||
{"origin": [-27.57171, 16.5824, -6.5], "size": [6, 3, 3], "pivot": [-22.27171, 18.1324, -4.5], "rotation": [0, 0, 62.5], "uv": [193, 79], "mirror": true},
|
||||
{"origin": [-27.77171, 6.1324, -9], "size": [8, 13, 8], "uv": [153, 93], "mirror": true},
|
||||
{"origin": [-24.17171, 33.1824, -7], "size": [2, 4, 4], "pivot": [-22.17171, 28.7324, -5], "rotation": [0, 0, -2.5], "uv": [199, 106], "mirror": true},
|
||||
{"origin": [-25.17171, 28.6824, -7], "size": [3, 5, 4], "inflate": 0.01, "pivot": [-22.17171, 28.7324, -5], "rotation": [0, 0, -2.5], "uv": [197, 97], "mirror": true},
|
||||
{"origin": [-29.17171, 24.6324, -7], "size": [5, 7, 4], "inflate": 0.02, "pivot": [-29.17171, 24.6324, -5], "rotation": [0, 0, 30], "uv": [193, 86], "mirror": true},
|
||||
{"origin": [-28.77171, 16.6324, -6.5], "size": [6, 8, 3], "inflate": 0.01, "pivot": [-28.27171, 15.6324, -5], "rotation": [0, 0, -2.5], "uv": [193, 114], "mirror": true},
|
||||
{"origin": [-29.27171, 5.6324, -7], "size": [2, 11, 4], "pivot": [-29.27171, 6.1324, -4], "rotation": [0, 0, -2.5], "uv": [185, 99], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_front_right",
|
||||
"parent": "leg_front_right2",
|
||||
"pivot": [-30.25, 6.17602, -6.25],
|
||||
"pivot": [-29.27171, 6.1324, -4.5],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"cubes": [
|
||||
{"origin": [-32.25, 3.2, -13.25], "size": [13, 3, 13], "inflate": 0.01, "uv": [98, 112], "mirror": true}
|
||||
{"origin": [-29.27171, 3.1324, -10.5], "size": [11, 3, 11], "inflate": 0.01, "uv": [160, 114], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary1",
|
||||
"parent": "hand_front_right",
|
||||
"pivot": [-25.75, 4.7, -6.75],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"hand_primary": [-25.75, 4.7, -6.75],
|
||||
"physical": [-25.75, 4.7, -6.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "hand_front_right",
|
||||
"pivot": [-25.75, 3.2, -6.75],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"item": [-25.75, 3.2, -6.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "finger_front_right1",
|
||||
"parent": "hand_front_right",
|
||||
"pivot": [-29.75, 3.25, -6.75],
|
||||
"pivot": [-27.77171, 3.1324, -4.5],
|
||||
"cubes": [
|
||||
{"origin": [-30.25, -0.25, -8.75], "size": [0, 4, 4], "uv": [217, 29], "mirror": true}
|
||||
{"origin": [-27.77171, -0.3676, -6.5], "size": [0, 4, 4], "uv": [153, 89], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bone",
|
||||
"parent": "finger_front_right1",
|
||||
"pivot": [-27.77171, 3.1324, -4.5]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_right2",
|
||||
"parent": "hand_front_right",
|
||||
"pivot": [-23.25, 3.25, -11.15],
|
||||
"rotation": [0, -27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_right2_rotation",
|
||||
"parent": "finger_front_right2",
|
||||
"pivot": [-23.25, 3.25, -11.15],
|
||||
"pivot": [-21.32171, 3.1324, -8.65],
|
||||
"rotation": [0, -120, 0],
|
||||
"cubes": [
|
||||
{"origin": [-25.25, -0.25, -11.15], "size": [4, 4, 0], "uv": [217, 39], "mirror": true}
|
||||
{"origin": [-21.39671, -0.3676, -10.65], "size": [0, 4, 4], "uv": [153, 93], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_right3",
|
||||
"parent": "hand_front_right",
|
||||
"pivot": [-23.25, 3.25, -2.65],
|
||||
"rotation": [0, 27.5, 0]
|
||||
"pivot": [-21.32171, 3.1324, -1.25],
|
||||
"rotation": [0, 120, 0],
|
||||
"cubes": [
|
||||
{"origin": [-21.39671, -0.3676, -3.25], "size": [0, 4, 4], "uv": [177, 93], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_right3_rotation",
|
||||
"parent": "finger_front_right3",
|
||||
"pivot": [-23.25, 3.25, -2.65],
|
||||
"name": "leg_front_left",
|
||||
"parent": "body",
|
||||
"pivot": [10.85, 29.5, -5.05],
|
||||
"cubes": [
|
||||
{"origin": [-25.25, -0.25, -2.65], "size": [4, 4, 0], "uv": [217, 45], "mirror": true}
|
||||
{"origin": [8.85, 27.5, -7], "size": [4, 4, 4], "inflate": 0.01, "uv": [0, 109]},
|
||||
{"origin": [11.85, 28.5, -6], "size": [11, 2, 2], "uv": [12, 109]},
|
||||
{"origin": [21.29905, 27.94362, -6.5], "size": [3, 3, 3], "pivot": [24.29905, 27.94362, -5], "rotation": [0, 0, 2.5], "uv": [48, 103]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left2",
|
||||
"parent": "leg_front_left",
|
||||
"pivot": [22.79905, 29.49362, -5],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"cubes": [
|
||||
{"origin": [21.57171, 16.5824, -6.5], "size": [6, 3, 3], "pivot": [22.27171, 18.1324, -4.5], "rotation": [0, 0, -62.5], "uv": [95, 76]},
|
||||
{"origin": [19.77171, 6.1324, -9], "size": [8, 13, 8], "uv": [73, 93]},
|
||||
{"origin": [22.17171, 33.1824, -7], "size": [2, 4, 4], "pivot": [22.17171, 28.7324, -5], "rotation": [0, 0, 2.5], "uv": [73, 74]},
|
||||
{"origin": [22.17171, 28.6824, -7], "size": [3, 5, 4], "inflate": 0.01, "pivot": [22.17171, 28.7324, -5], "rotation": [0, 0, 2.5], "uv": [81, 69]},
|
||||
{"origin": [24.17171, 24.6324, -7], "size": [5, 7, 4], "inflate": 0.02, "pivot": [29.17171, 24.6324, -5], "rotation": [0, 0, -30], "uv": [95, 65]},
|
||||
{"origin": [22.77171, 16.6324, -6.5], "size": [6, 8, 3], "inflate": 0.01, "pivot": [28.27171, 15.6324, -5], "rotation": [0, 0, 2.5], "uv": [93, 82]},
|
||||
{"origin": [27.27171, 5.6324, -7], "size": [2, 11, 4], "pivot": [29.27171, 6.1324, -4], "rotation": [0, 0, 2.5], "uv": [81, 78]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_front_left",
|
||||
"parent": "leg_front_left2",
|
||||
"pivot": [29.27171, 6.1324, -4.5],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [18.27171, 3.1324, -10.5], "size": [11, 3, 11], "inflate": 0.01, "uv": [73, 114]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left1",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [27.77171, 3.1324, -4.5],
|
||||
"cubes": [
|
||||
{"origin": [27.77171, -0.3676, -6.5], "size": [0, 4, 4], "uv": [73, 89]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left2",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [21.32171, 3.1324, -8.65],
|
||||
"rotation": [0, 120, 0],
|
||||
"cubes": [
|
||||
{"origin": [21.39671, -0.3676, -10.65], "size": [0, 4, 4], "uv": [73, 93]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_front_left3",
|
||||
"parent": "hand_front_left",
|
||||
"pivot": [21.32171, 3.1324, -1.25],
|
||||
"rotation": [0, -120, 0],
|
||||
"cubes": [
|
||||
{"origin": [21.39671, -0.3676, -3.25], "size": [0, 4, 4], "uv": [97, 93]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-10.85, 27, 6.7],
|
||||
"parent": "body",
|
||||
"pivot": [-10.85, 29.5, 5.95],
|
||||
"cubes": [
|
||||
{"origin": [-13.35, 23.75, 3.75], "size": [5, 6, 6], "inflate": 0.01, "uv": [0, 98], "mirror": true},
|
||||
{"origin": [-24.85, 25.25, 5.25], "size": [13, 3, 3], "uv": [0, 116], "mirror": true},
|
||||
{"origin": [-25.75, 24.75, 4.75], "size": [4, 4, 4], "pivot": [-24.75, 24.75, 6.25], "rotation": [0, 0, -2.5], "uv": [44, 94], "mirror": true}
|
||||
{"origin": [-12.85, 27.5, 4], "size": [4, 4, 4], "inflate": 0.01, "uv": [0, 93], "mirror": true},
|
||||
{"origin": [-22.85, 28.5, 5], "size": [11, 2, 2], "uv": [12, 93], "mirror": true},
|
||||
{"origin": [-24.29905, 27.94362, 4.5], "size": [3, 3, 3], "pivot": [-24.29905, 27.94362, 6], "rotation": [0, 0, -2.5], "uv": [36, 110], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_right2",
|
||||
"parent": "leg_back_right",
|
||||
"pivot": [-23.7981, 27.53724, 6.75],
|
||||
"pivot": [-22.79905, 29.49362, 6],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [-25.2, 30.25, 4.25], "size": [2, 5, 5], "pivot": [-21.2, 25.75, 6.25], "rotation": [0, 0, 2.5], "uv": [126, 51], "mirror": true},
|
||||
{"origin": [-27.2, 25.75, 4.25], "size": [4, 5, 5], "inflate": 0.01, "pivot": [-23.2, 25.75, 6.25], "rotation": [0, 0, 2.5], "uv": [113, 56], "mirror": true},
|
||||
{"origin": [-30.75, 14.75, 4.75], "size": [6, 8, 4], "inflate": 0.01, "pivot": [-29.25, 13.75, 6.25], "rotation": [0, 0, -2.5], "uv": [141, 54], "mirror": true},
|
||||
{"origin": [-31.2, 22.75, 4.25], "size": [5, 7, 5], "inflate": 0.02, "pivot": [-31.2, 22.75, 6.25], "rotation": [0, 0, 35], "uv": [126, 61], "mirror": true},
|
||||
{"origin": [-29.75, 6.15, 2.25], "size": [9, 11, 9], "uv": [137, 66], "mirror": true},
|
||||
{"origin": [-30.5, 14.7, 4.75], "size": [8, 3, 4], "pivot": [-23.25, 16.2, 7.25], "rotation": [0, 0, 62.5], "uv": [102, 66], "mirror": true},
|
||||
{"origin": [-31.75, 5.7, 4.25], "size": [3, 10, 5], "pivot": [-30.75, 6.2, 7.25], "rotation": [0, 0, -2.5], "uv": [91, 68], "mirror": true}
|
||||
{"origin": [-27.57171, 16.5824, 4.5], "size": [6, 3, 3], "pivot": [-22.27171, 18.1324, 5.5], "rotation": [0, 0, 62.5], "uv": [188, 0], "mirror": true},
|
||||
{"origin": [-27.77171, 6.1324, 2], "size": [8, 13, 8], "uv": [148, 14], "mirror": true},
|
||||
{"origin": [-24.17171, 33.1824, 4], "size": [2, 4, 4], "pivot": [-22.17171, 28.7324, 6], "rotation": [0, 0, -2.5], "uv": [194, 27], "mirror": true},
|
||||
{"origin": [-25.17171, 28.6824, 4], "size": [3, 5, 4], "inflate": 0.01, "pivot": [-22.17171, 28.7324, 6], "rotation": [0, 0, -2.5], "uv": [192, 18], "mirror": true},
|
||||
{"origin": [-29.17171, 24.6324, 4], "size": [5, 7, 4], "inflate": 0.02, "pivot": [-29.17171, 24.6324, 6], "rotation": [0, 0, 30], "uv": [188, 7], "mirror": true},
|
||||
{"origin": [-28.77171, 16.6324, 4.5], "size": [6, 8, 3], "inflate": 0.01, "pivot": [-28.27171, 15.6324, 6], "rotation": [0, 0, -2.5], "uv": [188, 35], "mirror": true},
|
||||
{"origin": [-29.27171, 5.6324, 4], "size": [2, 11, 4], "pivot": [-29.27171, 6.1324, 5], "rotation": [0, 0, -2.5], "uv": [180, 20], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_back_right",
|
||||
"parent": "leg_back_right2",
|
||||
"pivot": [-30.25, 6.17602, 7.25],
|
||||
"pivot": [-29.27171, 6.1324, 5.5],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"cubes": [
|
||||
{"origin": [-32.25, 3.2, 0.25], "size": [13, 3, 13], "inflate": 0.01, "uv": [98, 73], "mirror": true}
|
||||
{"origin": [-29.27171, 3.1324, 0.5], "size": [11, 3, 11], "inflate": 0.01, "uv": [155, 35], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary2",
|
||||
"name": "finger_back_right",
|
||||
"parent": "hand_back_right",
|
||||
"pivot": [-25.75, 4.7, 6.75],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"hand_primary2": [-25.75, 4.7, 6.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "finger_back_right1",
|
||||
"parent": "hand_back_right",
|
||||
"pivot": [-29.75, 3.25, 6.75],
|
||||
"pivot": [-27.77171, 3.1324, 5.5],
|
||||
"cubes": [
|
||||
{"origin": [-30.25, -0.25, 4.75], "size": [0, 4, 4], "uv": [237, 29], "mirror": true}
|
||||
{"origin": [-27.77171, -0.3676, 3.5], "size": [0, 4, 4], "uv": [148, 10], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_right2",
|
||||
"parent": "hand_back_right",
|
||||
"pivot": [-23.25, 3.25, 2.35],
|
||||
"rotation": [0, -27.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_right2_rotaiton",
|
||||
"parent": "finger_back_right2",
|
||||
"pivot": [-23.25, 3.25, 2.35],
|
||||
"pivot": [-21.32171, 3.1324, 9.65],
|
||||
"rotation": [0, 120, 0],
|
||||
"cubes": [
|
||||
{"origin": [-25.25, -0.25, 2.35], "size": [4, 4, 0], "uv": [237, 39], "mirror": true}
|
||||
{"origin": [-21.39671, -0.3676, 7.65], "size": [0, 4, 4], "uv": [148, 14], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_right3",
|
||||
"parent": "hand_back_right",
|
||||
"pivot": [-23.25, 3.25, 10.85],
|
||||
"rotation": [0, 27.5, 0]
|
||||
"pivot": [-21.32171, 3.1324, 2.25],
|
||||
"rotation": [0, -120, 0],
|
||||
"cubes": [
|
||||
{"origin": [-21.39671, -0.3676, 0.25], "size": [0, 4, 4], "uv": [172, 14], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_right3_rotation",
|
||||
"parent": "finger_back_right3",
|
||||
"pivot": [-23.25, 3.25, 10.85],
|
||||
"name": "leg_back_left",
|
||||
"parent": "body",
|
||||
"pivot": [10.85, 29.5, 5.95],
|
||||
"cubes": [
|
||||
{"origin": [-25.25, -0.25, 10.85], "size": [4, 4, 0], "uv": [237, 45], "mirror": true}
|
||||
{"origin": [8.85, 27.5, 4], "size": [4, 4, 4], "inflate": 0.01, "uv": [0, 117]},
|
||||
{"origin": [11.85, 28.5, 5], "size": [11, 2, 2], "uv": [12, 117]},
|
||||
{"origin": [21.29905, 27.94362, 4.5], "size": [3, 3, 3], "pivot": [24.29905, 27.94362, 6], "rotation": [0, 0, 2.5], "uv": [48, 110]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left2",
|
||||
"parent": "leg_back_left",
|
||||
"pivot": [22.79905, 29.49362, 6],
|
||||
"rotation": [0, 0, -2.5],
|
||||
"cubes": [
|
||||
{"origin": [21.57171, 16.5824, 4.5], "size": [6, 3, 3], "pivot": [22.27171, 18.1324, 6.5], "rotation": [0, 0, -62.5], "uv": [139, 76]},
|
||||
{"origin": [19.77171, 6.1324, 2], "size": [8, 13, 8], "uv": [117, 93]},
|
||||
{"origin": [22.17171, 33.1824, 4], "size": [2, 4, 4], "pivot": [22.17171, 28.7324, 6], "rotation": [0, 0, 2.5], "uv": [117, 74]},
|
||||
{"origin": [22.17171, 28.6824, 4], "size": [3, 5, 4], "inflate": 0.01, "pivot": [22.17171, 28.7324, 6], "rotation": [0, 0, 2.5], "uv": [125, 69]},
|
||||
{"origin": [24.17171, 24.6324, 4], "size": [5, 7, 4], "inflate": 0.02, "pivot": [29.17171, 24.6324, 6], "rotation": [0, 0, -30], "uv": [139, 65]},
|
||||
{"origin": [22.77171, 16.6324, 4.5], "size": [6, 8, 3], "inflate": 0.01, "pivot": [28.27171, 15.6324, 6], "rotation": [0, 0, 2.5], "uv": [137, 82]},
|
||||
{"origin": [27.27171, 5.6324, 4], "size": [2, 11, 4], "pivot": [29.27171, 6.1324, 7], "rotation": [0, 0, 2.5], "uv": [125, 78]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_back_left",
|
||||
"parent": "leg_back_left2",
|
||||
"pivot": [29.27171, 6.1324, 6.5],
|
||||
"rotation": [0, 0, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [18.27171, 3.1324, 0.5], "size": [11, 3, 11], "inflate": 0.01, "uv": [117, 114]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [27.77171, 3.1324, 6.5],
|
||||
"cubes": [
|
||||
{"origin": [27.77171, -0.3676, 4.5], "size": [0, 4, 4], "uv": [117, 89]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left2",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [21.32171, 3.1324, 2.35],
|
||||
"rotation": [0, 120, 0],
|
||||
"cubes": [
|
||||
{"origin": [21.39671, -0.3676, 0.35], "size": [0, 4, 4], "uv": [117, 93]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_back_left3",
|
||||
"parent": "hand_back_left",
|
||||
"pivot": [21.32171, 3.1324, 9.75],
|
||||
"rotation": [0, -120, 0],
|
||||
"cubes": [
|
||||
{"origin": [21.39671, -0.3676, 7.75], "size": [0, 4, 4], "uv": [141, 93]}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -18,22 +18,6 @@
|
||||
"collapse": [0, 0.25, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "magnezone",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "magnezone",
|
||||
"pivot": [0, 27.5, 0],
|
||||
"locators": {
|
||||
"top": [0, 27.5, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "magnezone",
|
||||
@@ -50,63 +34,6 @@
|
||||
"sparks3": [-1.5, 5.5, -11.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, -18],
|
||||
"locators": {
|
||||
"target": [0, 10, -18]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, 0],
|
||||
"locators": {
|
||||
"middle": [0, 10, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "body",
|
||||
"pivot": [0, 15.5, -9.5],
|
||||
"locators": {
|
||||
"head": [0, 15.5, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "body",
|
||||
"pivot": [0, 21, 6],
|
||||
"locators": {
|
||||
"seat1": [0, 21, 6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, -15],
|
||||
"locators": {
|
||||
"face": [0, 10, -15],
|
||||
"physical": [0, 10, -15]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "body",
|
||||
"pivot": [0, 13.5, -11.5],
|
||||
"locators": {
|
||||
"item_face": [0, 13.5, -11.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_tera_hat",
|
||||
"parent": "body",
|
||||
"pivot": [0, 18, 0],
|
||||
"locators": {
|
||||
"tera_hat": [0, 18, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "red_light",
|
||||
"parent": "body",
|
||||
@@ -116,15 +43,6 @@
|
||||
{"origin": [-1.5, 12, -11.52], "size": [3, 3, 0], "uv": [0, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_center",
|
||||
"parent": "red_light",
|
||||
"pivot": [0, 13.5, -11.5],
|
||||
"locators": {
|
||||
"eye1": [0, 13.5, -11.5],
|
||||
"special3": [0, 13.5, -11.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "antenna",
|
||||
"parent": "body",
|
||||
@@ -135,14 +53,6 @@
|
||||
{"origin": [-1.5, 24.5, -1.5], "size": [3, 3, 3], "uv": [70, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "antenna",
|
||||
"pivot": [0, 27.5, 0],
|
||||
"locators": {
|
||||
"item_hat": [0, 27.5, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body_left",
|
||||
"parent": "body",
|
||||
@@ -160,14 +70,6 @@
|
||||
{"origin": [13.5, 10.1, -4.51], "size": [4, 4, 0], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [15.5, 12.1, -4.5],
|
||||
"locators": {
|
||||
"eye3": [15.5, 12.1, -4.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_left",
|
||||
@@ -184,23 +86,6 @@
|
||||
{"origin": [14, 11.6, -4.42], "size": [3, 1, 0], "uv": [8, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_happy_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [15.5, 12.1, -4.42],
|
||||
"cubes": [
|
||||
{"origin": [14, 11.1, -4.42], "size": [3, 2, 0], "uv": [14, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_recoil_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [15.5, 12.1, -4.42],
|
||||
"rotation": [0, 0, -45],
|
||||
"cubes": [
|
||||
{"origin": [14, 10.6, -4.42], "size": [3, 3, 0], "uv": [8, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "magnet_left",
|
||||
"parent": "body_left",
|
||||
@@ -212,26 +97,9 @@
|
||||
"parent": "magnet_left",
|
||||
"pivot": [13.5, 8, -5],
|
||||
"cubes": [
|
||||
{"origin": [8.5, 6.5, -9], "size": [10, 3, 4], "inflate": 0.02, "uv": [0, 82]},
|
||||
{"origin": [8.5, 6.5, -19], "size": [4, 3, 10], "inflate": 0.01, "uv": [0, 89]},
|
||||
{"origin": [14.5, 6.5, -19], "size": [4, 3, 10], "inflate": 0.01, "uv": [0, 102]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_cannon_left",
|
||||
"parent": "magnet_left_rotation",
|
||||
"pivot": [13.5, 8, -19],
|
||||
"locators": {
|
||||
"cannon2": [13.5, 8, -19],
|
||||
"special2": [13.5, 8, -19]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "magnet_lights_left",
|
||||
"parent": "magnet_left_rotation",
|
||||
"pivot": [13.5, 8, -18.92],
|
||||
"cubes": [
|
||||
{"origin": [8.5, 6.5, -18.92], "size": [10, 3, 0], "uv": [18, 96]}
|
||||
{"origin": [8.5, 6.5, -9], "size": [10, 3, 4], "uv": [0, 82]},
|
||||
{"origin": [8.5, 6.5, -19], "size": [4, 3, 10], "uv": [0, 89]},
|
||||
{"origin": [14.5, 6.5, -19], "size": [4, 3, 10], "uv": [0, 102]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -267,14 +135,6 @@
|
||||
{"origin": [-17.5, 10.1, -4.51], "size": [4, 4, 0], "uv": [0, 4], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-15.5, 12.1, -4.5],
|
||||
"locators": {
|
||||
"eye2": [-15.5, 12.1, -4.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
@@ -291,23 +151,6 @@
|
||||
{"origin": [-17, 11.6, -4.42], "size": [3, 1, 0], "uv": [8, 1], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_happy_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-15.5, 12.1, -4.42],
|
||||
"cubes": [
|
||||
{"origin": [-17, 11.1, -4.42], "size": [3, 2, 0], "uv": [10, 2], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_recoil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-15.5, 12.1, -4.42],
|
||||
"rotation": [0, 0, 45],
|
||||
"cubes": [
|
||||
{"origin": [-17, 10.6, -4.42], "size": [3, 3, 0], "uv": [8, 7], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "magnet_right",
|
||||
"parent": "body_right",
|
||||
@@ -319,34 +162,9 @@
|
||||
"parent": "magnet_right",
|
||||
"pivot": [-13.5, 8, -5],
|
||||
"cubes": [
|
||||
{"origin": [-18.5, 6.5, -9], "size": [10, 3, 4], "inflate": 0.02, "uv": [28, 82], "mirror": true},
|
||||
{"origin": [-12.5, 6.5, -19], "size": [4, 3, 10], "inflate": 0.01, "uv": [28, 89], "mirror": true},
|
||||
{"origin": [-18.5, 6.5, -19], "size": [4, 3, 10], "inflate": 0.01, "uv": [28, 102], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_cannon_right",
|
||||
"parent": "magnet_right_rotation",
|
||||
"pivot": [-13.5, 8, -19],
|
||||
"locators": {
|
||||
"cannon1": [-13.5, 8, -19],
|
||||
"special1": [-13.5, 8, -19]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "magnet_right_rotation",
|
||||
"pivot": [-13.5, 8, -19],
|
||||
"locators": {
|
||||
"item": [-13.5, 8, -19]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "magnet_lights_right",
|
||||
"parent": "magnet_right_rotation",
|
||||
"pivot": [-13.5, 8, -18.92],
|
||||
"cubes": [
|
||||
{"origin": [-18.5, 6.5, -18.92], "size": [10, 3, 0], "uv": [18, 109], "mirror": true}
|
||||
{"origin": [-18.5, 6.5, -9], "size": [10, 3, 4], "uv": [28, 82], "mirror": true},
|
||||
{"origin": [-12.5, 6.5, -19], "size": [4, 3, 10], "uv": [28, 89], "mirror": true},
|
||||
{"origin": [-18.5, 6.5, -19], "size": [4, 3, 10], "uv": [28, 102], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -368,42 +186,17 @@
|
||||
{
|
||||
"name": "magnet_back",
|
||||
"parent": "body",
|
||||
"pivot": [0, 8, 12]
|
||||
"pivot": [0, 8, 12],
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "magnet_back_rotation",
|
||||
"parent": "magnet_back",
|
||||
"pivot": [0, 8, 12],
|
||||
"cubes": [
|
||||
{"origin": [-5, 6.5, 12], "size": [10, 3, 4], "inflate": 0.02, "uv": [69, 0]},
|
||||
{"origin": [-5, 6.5, 16], "size": [4, 3, 10], "inflate": 0.01, "uv": [87, 0]},
|
||||
{"origin": [1, 6.5, 16], "size": [4, 3, 10], "inflate": 0.01, "uv": [92, 13]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "magnet_back_rotation",
|
||||
"pivot": [0, 8, 19.5],
|
||||
"rotation": [180, 0, -180],
|
||||
"locators": {
|
||||
"locator": [0, 8, 19.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "magnet_back_rotation",
|
||||
"pivot": [0, 8, 26],
|
||||
"rotation": [180, 0, -180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 8, 26]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "magnet_lights_back",
|
||||
"parent": "magnet_back_rotation",
|
||||
"pivot": [0, 8, 25.92],
|
||||
"cubes": [
|
||||
{"origin": [-5, 6.5, 25.92], "size": [10, 3, 0], "uv": [77, 7]}
|
||||
{"origin": [-5, 6.5, 12], "size": [10, 3, 4], "uv": [69, 0]},
|
||||
{"origin": [-5, 6.5, 16], "size": [4, 3, 10], "uv": [87, 0]},
|
||||
{"origin": [1, 6.5, 16], "size": [4, 3, 10], "uv": [92, 13]}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,936 +0,0 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 256,
|
||||
"texture_height": 256,
|
||||
"visible_bounds_width": 5,
|
||||
"visible_bounds_height": 4.5,
|
||||
"visible_bounds_offset": [0, 1.75, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "druddigon",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "druddigon",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "druddigon",
|
||||
"pivot": [0, 35, 0],
|
||||
"locators": {
|
||||
"top": [0, 35, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "druddigon",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 15, 0],
|
||||
"locators": {
|
||||
"middle": [0, 15, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 15, -8],
|
||||
"locators": {
|
||||
"target": [0, 15, -8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 11, 0],
|
||||
"rotation": [37.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-5, 6, -3.4], "size": [10, 12, 10.8], "uv": [34, 0]},
|
||||
{"origin": [-5, 6, -3.4], "size": [10, 12, 10.8], "inflate": 0.4, "uv": [34, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_1",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 7.95, 2],
|
||||
"rotation": [-60, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 3.45, 0], "size": [8, 8, 12], "uv": [34, 44]},
|
||||
{"origin": [0, 9.45, 7], "size": [0, 7, 4], "uv": [26, 83]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_2",
|
||||
"parent": "tail_1",
|
||||
"pivot": [0, 7.45, 12],
|
||||
"rotation": [17.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3, 4.45, 10], "size": [6, 6, 9], "uv": [74, 17]},
|
||||
{"origin": [0, 9.95, 13], "size": [0, 7, 5], "pivot": [0, 10.45, 16], "rotation": [-5, 0, 0], "uv": [116, 100]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 8, 18],
|
||||
"locators": {
|
||||
"tail": [0, 8, 18]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail_3",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 7.95, 19],
|
||||
"rotation": [10, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-2, 5.95, 17], "size": [4, 4, 8], "uv": [100, 43]},
|
||||
{"origin": [0, 8.95, 19], "size": [0, 5, 4], "pivot": [0, 9.95, 21], "rotation": [-7.5, 0, 0], "uv": [76, 95]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_4",
|
||||
"parent": "tail_3",
|
||||
"pivot": [0, 7.95, 25],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 6.45, 23], "size": [3, 3, 6], "uv": [52, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail_4",
|
||||
"pivot": [0, 8, 29],
|
||||
"locators": {
|
||||
"tail_tip": [0, 8, 29]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "chest",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 18, 4],
|
||||
"rotation": [5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 17, -2], "size": [8, 9, 8], "uv": [0, 66]},
|
||||
{"origin": [-4, 17, -2], "size": [8, 9, 8], "inflate": 0.4, "uv": [74, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wing_left",
|
||||
"parent": "chest",
|
||||
"pivot": [3, 24.5, 5.5],
|
||||
"rotation": [-7.5, 32.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [3, 14.5, 4.5], "size": [0, 18, 13], "uv": [34, 64]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_wing_left",
|
||||
"parent": "wing_left",
|
||||
"pivot": [3, 29, 15.5],
|
||||
"locators": {
|
||||
"wing2": [3, 29, 15.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wing_left2",
|
||||
"parent": "wing_left",
|
||||
"pivot": [3, 24.5, 17.5],
|
||||
"cubes": [
|
||||
{"origin": [3, 15.5, 17.5], "size": [0, 16, 17], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wing_right",
|
||||
"parent": "chest",
|
||||
"pivot": [-3, 24.5, 5.5],
|
||||
"rotation": [-7.5, -32.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3, 14.5, 4.5], "size": [0, 18, 13], "uv": [60, 64]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_wing_right",
|
||||
"parent": "wing_right",
|
||||
"pivot": [-3, 29, 15.5],
|
||||
"locators": {
|
||||
"wing1": [-3, 29, 15.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wing_right2",
|
||||
"parent": "wing_right",
|
||||
"pivot": [-3, 24.5, 17.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 15.5, 17.5], "size": [0, 16, 17], "uv": [0, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "chest",
|
||||
"pivot": [0.25, 23.1, 1.3]
|
||||
},
|
||||
{
|
||||
"name": "arm_right1",
|
||||
"parent": "arms",
|
||||
"pivot": [-3.25, 23.1, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [-7.25, 22.1, -0.2], "size": [5, 3, 3], "uv": [48, 117]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "shoulder_spike_right",
|
||||
"parent": "arm_right1",
|
||||
"pivot": [-5.95, 24.6, 0.8],
|
||||
"rotation": [0, 0, -17.5],
|
||||
"cubes": [
|
||||
{"origin": [-7.45, 23.6, 1.3], "size": [3, 5, 0], "pivot": [-5.95, 24.6, 1.3], "rotation": [0, 0, -9], "uv": [128, 6]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right2",
|
||||
"parent": "arm_right1",
|
||||
"pivot": [-5, 23.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [-13, 22.2, 0.3], "size": [9, 2, 2], "uv": [112, 66]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right3",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-12, 23.2, 2.3],
|
||||
"cubes": [
|
||||
{"origin": [-18, 21.2, -0.7], "size": [6, 4, 4], "uv": [76, 106]},
|
||||
{"origin": [-16.5, 25.2, 1.3], "size": [2, 3, 0], "uv": [42, 129]},
|
||||
{"origin": [-23, 21.7, -0.2], "size": [5, 3, 3], "uv": [118, 112]},
|
||||
{"origin": [-20.5, 24.7, 1.3], "size": [3, 4, 0], "uv": [46, 128]},
|
||||
{"origin": [-23, 24.7, 1.3], "size": [2, 2, 0], "uv": [86, 130]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_right",
|
||||
"parent": "arm_right3",
|
||||
"pivot": [-23, 23.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [-25, 22.2, -0.2], "size": [2, 2, 3], "inflate": 0.01, "uv": [102, 121]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_blade_primary",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-24, 23.2, 1.3],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"blade_primary": [-24, 23.2, 1.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-24, 23.2, 1.3],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"hand_primary": [-24, 23.2, 0.3],
|
||||
"physical": [-24, 23.2, 1.3],
|
||||
"item": [-24, 23.2, 1.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "finger_right1",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-25, 24.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [-28, 22.2, 0.3], "size": [3, 2, 2], "uv": [0, 123]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_right1",
|
||||
"parent": "finger_right1",
|
||||
"pivot": [-28, 24.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [-29.9, 22.2, 0.3], "size": [2, 2, 2], "inflate": -0.1, "uv": [86, 126]},
|
||||
{"origin": [-31.4, 21.7, 1.3], "size": [2, 2, 0], "inflate": 0.01, "uv": [90, 130]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_right2",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-23, 24.2, -0.2],
|
||||
"cubes": [
|
||||
{"origin": [-25, 22.2, -3.2], "size": [2, 2, 3], "uv": [1, 162]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_right2",
|
||||
"parent": "finger_right2",
|
||||
"pivot": [-24, 24.2, -3.2],
|
||||
"cubes": [
|
||||
{"origin": [-25, 22.2, -5.1], "size": [2, 2, 2], "inflate": -0.1, "uv": [127, 88]},
|
||||
{"origin": [-23.9, 21.7, -6.7], "size": [0, 2, 2], "uv": [130, 90]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_right3",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-23, 24.2, 2.8],
|
||||
"cubes": [
|
||||
{"origin": [-25, 22.2, 2.8], "size": [2, 2, 3], "uv": [21, 162]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_right3",
|
||||
"parent": "finger_right3",
|
||||
"pivot": [-24, 24.2, 5.8],
|
||||
"cubes": [
|
||||
{"origin": [-25, 22.2, 5.7], "size": [2, 2, 2], "inflate": -0.1, "uv": [27, 154]},
|
||||
{"origin": [-23.9, 21.7, 7.3], "size": [0, 2, 2], "uv": [117, 145]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left1",
|
||||
"parent": "arms",
|
||||
"pivot": [3.25, 23.1, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [2.25, 22.1, -0.2], "size": [5, 3, 3], "uv": [48, 117], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "shoulder_spike_left",
|
||||
"parent": "arm_left1",
|
||||
"pivot": [5.95, 24.6, 0.8],
|
||||
"rotation": [0, 0, 17.5],
|
||||
"cubes": [
|
||||
{"origin": [4.45, 23.6, 1.3], "size": [3, 5, 0], "pivot": [5.95, 24.6, 1.3], "rotation": [0, 0, 9], "uv": [128, 6], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left2",
|
||||
"parent": "arm_left1",
|
||||
"pivot": [5, 23.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [4, 22.2, 0.3], "size": [9, 2, 2], "uv": [112, 66], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left3",
|
||||
"parent": "arm_left2",
|
||||
"pivot": [12, 23.2, 2.3],
|
||||
"cubes": [
|
||||
{"origin": [12, 21.2, -0.7], "size": [6, 4, 4], "uv": [76, 106], "mirror": true},
|
||||
{"origin": [14.5, 25.2, 1.3], "size": [2, 3, 0], "uv": [42, 129], "mirror": true},
|
||||
{"origin": [18, 21.7, -0.2], "size": [5, 3, 3], "uv": [118, 112], "mirror": true},
|
||||
{"origin": [17.5, 24.7, 1.3], "size": [3, 4, 0], "uv": [46, 128], "mirror": true},
|
||||
{"origin": [21, 24.7, 1.3], "size": [2, 2, 0], "uv": [86, 130], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_left",
|
||||
"parent": "arm_left3",
|
||||
"pivot": [23, 23.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [23, 22.2, -0.2], "size": [2, 2, 3], "inflate": 0.01, "uv": [102, 121], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_blade_secondary",
|
||||
"parent": "hand_left",
|
||||
"pivot": [24, 23.2, 1.3],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"blade_secondary": [24, 23.2, 1.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "hand_left",
|
||||
"pivot": [24, 23.2, 1.3],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"hand_secondary": [24, 23.2, 1.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "finger_left1",
|
||||
"parent": "hand_left",
|
||||
"pivot": [25, 24.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [25, 22.2, 0.3], "size": [3, 2, 2], "uv": [0, 123], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_left1",
|
||||
"parent": "finger_left1",
|
||||
"pivot": [28, 24.2, 1.3],
|
||||
"cubes": [
|
||||
{"origin": [27.9, 22.2, 0.3], "size": [2, 2, 2], "inflate": -0.1, "uv": [86, 126], "mirror": true},
|
||||
{"origin": [29.4, 21.7, 1.3], "size": [2, 2, 0], "inflate": 0.01, "uv": [90, 130], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_left2",
|
||||
"parent": "hand_left",
|
||||
"pivot": [23, 24.2, -0.2],
|
||||
"cubes": [
|
||||
{"origin": [23, 22.2, -3.2], "size": [2, 2, 3], "uv": [1, 162], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_left2",
|
||||
"parent": "finger_left2",
|
||||
"pivot": [24, 24.2, -3.2],
|
||||
"cubes": [
|
||||
{"origin": [23, 22.2, -5.1], "size": [2, 2, 2], "inflate": -0.1, "uv": [127, 88], "mirror": true},
|
||||
{"origin": [23.9, 21.7, -6.7], "size": [0, 2, 2], "uv": [130, 90], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "finger_left3",
|
||||
"parent": "hand_left",
|
||||
"pivot": [23, 24.2, 2.8],
|
||||
"cubes": [
|
||||
{"origin": [23, 22.2, 2.8], "size": [2, 2, 3], "uv": [21, 162], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "claw_left3",
|
||||
"parent": "finger_left3",
|
||||
"pivot": [24, 24.2, 5.8],
|
||||
"cubes": [
|
||||
{"origin": [23, 22.2, 5.7], "size": [2, 2, 2], "inflate": -0.1, "uv": [27, 154], "mirror": true},
|
||||
{"origin": [23.9, 21.7, 7.3], "size": [0, 2, 2], "uv": [117, 145], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "chest",
|
||||
"pivot": [0, 26, 3],
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "neck_mouth_closed",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 26, 3],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 24, -0.5], "size": [7, 9, 6], "uv": [86, 91]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_mouth_open",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 26, 3],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 24, -0.5], "size": [7, 9, 6], "inflate": -0.01, "uv": [26, 95]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_flair_top",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 32, 5.5],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 26.5, 5.5], "size": [8, 7, 0], "uv": [102, 114]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_flair_bottom",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 32, -0.5],
|
||||
"rotation": [-7.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 27.5, -0.5], "size": [8, 5, 0], "pivot": [0, 32, -0.5], "rotation": [-10, 0, 0], "uv": [118, 118]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_flair_left",
|
||||
"parent": "neck",
|
||||
"pivot": [3.5, 32, 2.5],
|
||||
"rotation": [0, 0, -8],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 27.5, -1], "size": [0, 5, 7], "uv": [112, 70]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_flair_right",
|
||||
"parent": "neck",
|
||||
"pivot": [-3.5, 32, 2.5],
|
||||
"rotation": [0, 0, 8],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 27.5, -1], "size": [0, 5, 7], "uv": [112, 82]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 33, 2],
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 33, 2]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 33, 2],
|
||||
"cubes": [
|
||||
{"origin": [-4, 33, -3], "size": [8, 3, 8], "uv": [74, 32]},
|
||||
{"origin": [3.99, 35.5, -3], "size": [0, 3, 8], "uv": [0, 112]},
|
||||
{"origin": [-4, 35.5, -2.99], "size": [1, 1, 0], "uv": [32, 82]},
|
||||
{"origin": [-3.99, 35.5, -3], "size": [0, 3, 8], "uv": [112, 55]},
|
||||
{"origin": [3, 35.5, -2.99], "size": [1, 1, 0], "uv": [84, 61]},
|
||||
{"origin": [-3, 33, -7], "size": [6, 3, 4], "uv": [24, 110]},
|
||||
{"origin": [1, 35.5, -6.99], "size": [2, 2, 0], "uv": [82, 130]},
|
||||
{"origin": [2.99, 35.5, -7], "size": [0, 2, 4], "uv": [30, 123]},
|
||||
{"origin": [-3, 35.5, -6.99], "size": [2, 2, 0], "uv": [130, 94]},
|
||||
{"origin": [-2.99, 35.5, -7], "size": [0, 2, 4], "uv": [38, 123]},
|
||||
{"origin": [-4, 31, 1], "size": [8, 2, 4], "uv": [106, 0]},
|
||||
{"origin": [2.29, 31.2, -6.6], "size": [0, 2, 3], "pivot": [2.29, 33.2, -5.1], "rotation": [0, 25, 0], "uv": [126, 127]},
|
||||
{"origin": [-2.29, 31.2, -6.6], "size": [0, 2, 3], "pivot": [-2.29, 33.2, -5.1], "rotation": [0, -25, 0], "uv": [128, 11]},
|
||||
{"origin": [3.99, 31, -3], "size": [0, 2, 4], "uv": [44, 110]},
|
||||
{"origin": [-3.99, 31, -3], "size": [0, 2, 4], "uv": [70, 122]},
|
||||
{"origin": [-3.99, 32, -3], "size": [1, 1, 0], "uv": [32, 80]},
|
||||
{"origin": [2.99, 32, -3], "size": [1, 1, 0], "uv": [32, 81]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 36, -1.5],
|
||||
"locators": {
|
||||
"head": [0, 36, -1.5],
|
||||
"item_hat": [0, 36, -1.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 34.4, -7],
|
||||
"locators": {
|
||||
"face": [0, 34.4, -7],
|
||||
"item_face": [0, 34.4, -7]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 33, 1],
|
||||
"locators": {
|
||||
"mouth": [0, 33, 1],
|
||||
"special": [0, 33, 1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_upper",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 33, -6.4],
|
||||
"locators": {
|
||||
"jaw1": [0, 33, -6.4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head_angle",
|
||||
"pivot": [4, 34.2, -1.5]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [4, 34.2, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [4, 33.2, -3], "size": [0, 2, 3], "inflate": 0.01, "uv": [70, 108]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [4, 34.2, -2],
|
||||
"locators": {
|
||||
"eye2": [4, 34.2, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [3.5, 34.2, -2.1],
|
||||
"cubes": [
|
||||
{"origin": [3, 33.2, -2.4], "size": [1, 2, 1], "inflate": 0.02, "uv": [128, 63]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [126, 28]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_angry_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [3, 34.2, -3], "size": [1, 1, 1], "inflate": 0.03, "uv": [82, 104]},
|
||||
{"origin": [3, 34.7, -2.5], "size": [1, 1, 2], "inflate": 0.03, "uv": [128, 25]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_sad_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [0.9, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 34.7, -2], "size": [1, 1, 2], "inflate": 0.03, "uv": [128, 53]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_unamused_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [0.9, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 34.7, -2.89], "size": [1, 1, 3], "inflate": 0.03, "uv": [8, 127]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [126, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_recoil_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [2.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [126, 38]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-4, 34.2, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 33.2, -3], "size": [0, 2, 3], "inflate": 0.01, "uv": [128, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-4, 34.2, -2],
|
||||
"locators": {
|
||||
"eye1": [-4, 34.2, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-3.5, 34.2, -2.1],
|
||||
"cubes": [
|
||||
{"origin": [-4, 33.2, -2.4], "size": [1, 2, 1], "inflate": 0.02, "uv": [130, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [62, 126]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_angry_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 34.2, -3], "size": [1, 1, 1], "inflate": 0.03, "uv": [130, 96]},
|
||||
{"origin": [-4, 34.7, -2.5], "size": [1, 1, 2], "inflate": 0.03, "uv": [56, 128]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_sad_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-0.9, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.9, 34.7, -2], "size": [1, 1, 2], "inflate": 0.03, "uv": [128, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_unamused_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-0.9, 32.7, 2.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.9, 34.7, -2.89], "size": [1, 1, 3], "inflate": 0.03, "uv": [16, 127]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [126, 70]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_recoil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-0.9, 32.2, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.9, 33.2, -2.9], "size": [1, 2, 3], "inflate": 0.03, "uv": [126, 75]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_hidden",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 32.5, 3],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 29.5, 0], "size": [7, 6, 5], "inflate": -0.02, "uv": [104, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "jaw",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 33, 2.5],
|
||||
"rotation": [-27.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4, 29, 0.5], "size": [8, 5, 2], "inflate": 0.01, "uv": [106, 36]},
|
||||
{"origin": [3.8, 28, 0.5], "size": [0, 6, 3], "inflate": 0.01, "pivot": [3.8, 31.5, 1], "rotation": [-2.81797, 27.47162, -1.30078], "uv": [64, 117]},
|
||||
{"origin": [-3.8, 28, 0.5], "size": [0, 6, 3], "inflate": 0.01, "pivot": [-3.8, 31.5, 1], "rotation": [-2.81797, -27.47162, 1.30078], "uv": [112, 121]},
|
||||
{"origin": [-3.5, 28.8, -1], "size": [7, 2, 4], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [106, 6]},
|
||||
{"origin": [-2, 30.3, -3], "size": [4, 2, 6], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [96, 106]},
|
||||
{"origin": [-2.5, 28.8, -4.5], "size": [5, 2, 4], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [112, 94]},
|
||||
{"origin": [2.5, 30.8, -3], "size": [0, 2, 2], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [98, 122]},
|
||||
{"origin": [2.5, 30.8, -1], "size": [1, 1, 0], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [84, 59]},
|
||||
{"origin": [3.5, 30.8, -1], "size": [0, 1, 1], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [32, 76]},
|
||||
{"origin": [-3.5, 30.8, -1], "size": [1, 1, 0], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [84, 60]},
|
||||
{"origin": [-3.5, 30.8, -1], "size": [0, 1, 1], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [32, 78]},
|
||||
{"origin": [-2.5, 30.8, -3], "size": [0, 2, 2], "inflate": 0.01, "pivot": [0, 29, 2.5], "rotation": [27.5, 0, 0], "uv": [128, 59]},
|
||||
{"origin": [2.5, 26.24473, -1.8992], "size": [0, 1, 1], "pivot": [2.5, 26.74473, -1.3992], "rotation": [-17.5, 0, 0], "uv": [32, 72]},
|
||||
{"origin": [-2.5, 26.24473, -1.8992], "size": [0, 1, 1], "pivot": [-2.5, 26.74473, -1.3992], "rotation": [-17.5, 0, 0], "uv": [32, 74]},
|
||||
{"origin": [-1.5, 27.36438, -4.54022], "size": [3, 2, 0], "pivot": [0, 27.36438, -4.54022], "rotation": [37.5, 0, 0], "uv": [76, 104]},
|
||||
{"origin": [1.5, 26.36438, -4.54022], "size": [0, 2, 1], "pivot": [0, 27.36438, -4.54022], "rotation": [37.5, 0, 0], "uv": [32, 66]},
|
||||
{"origin": [-1.5, 26.36438, -4.54022], "size": [0, 2, 1], "pivot": [0, 27.36438, -4.54022], "rotation": [37.5, 0, 0], "uv": [32, 69]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_lower",
|
||||
"parent": "jaw",
|
||||
"pivot": [0, 27.59235, -4.11544],
|
||||
"rotation": [27.5, 0, 0],
|
||||
"locators": {
|
||||
"jaw2": {
|
||||
"offset": [0, 27.59235, -4.11544],
|
||||
"rotation": [-90, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_left1",
|
||||
"parent": "body",
|
||||
"pivot": [4.5, 11, 0],
|
||||
"rotation": [-37.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [2.5, 3.5, -4], "size": [6, 9, 7], "uv": [74, 43]},
|
||||
{"origin": [2.5, 3.5, -4], "size": [6, 9, 7], "inflate": 0.25, "uv": [0, 83]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left2",
|
||||
"parent": "leg_left1",
|
||||
"pivot": [5.5, 3.6, -0.5],
|
||||
"rotation": [-32.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [4, 1.6, -2.5], "size": [3, 4, 9], "uv": [52, 95]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_left",
|
||||
"parent": "leg_left2",
|
||||
"pivot": [5.5, 5.6, 6],
|
||||
"rotation": [2.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [3, 0.6, 6], "size": [5, 5, 3], "inflate": -0.01, "uv": [70, 114]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "foot_left",
|
||||
"pivot": [5.5, 2.6, 7.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary": [5.5, 2.6, 7.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toe_left1",
|
||||
"parent": "foot_left",
|
||||
"pivot": [5.5, 0.6, 8],
|
||||
"cubes": [
|
||||
{"origin": [4.5, -1.9, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [16, 112]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_left1",
|
||||
"parent": "toe_left1",
|
||||
"pivot": [5.5, -2, 7],
|
||||
"cubes": [
|
||||
{"origin": [4.5, -4, 6.9], "size": [2, 2, 2], "uv": [126, 100]},
|
||||
{"origin": [5.5, -5.5, 6.9], "size": [0, 2, 2], "uv": [70, 128]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_left2",
|
||||
"parent": "foot_left",
|
||||
"pivot": [3.5, 1.1, 8],
|
||||
"cubes": [
|
||||
{"origin": [2.5, -1.4, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [46, 123]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_left2",
|
||||
"parent": "toe_left2",
|
||||
"pivot": [3.5, -1.5, 7],
|
||||
"cubes": [
|
||||
{"origin": [2.5, -3.5, 6.9], "size": [2, 2, 2], "uv": [102, 126]},
|
||||
{"origin": [3.5, -5, 6.9], "size": [0, 2, 2], "uv": [74, 128]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_left3",
|
||||
"parent": "foot_left",
|
||||
"pivot": [7.5, 1.1, 8],
|
||||
"cubes": [
|
||||
{"origin": [6.5, -1.4, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [54, 123]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_left3",
|
||||
"parent": "toe_left3",
|
||||
"pivot": [7.5, -1.5, 7],
|
||||
"cubes": [
|
||||
{"origin": [6.5, -3.5, 6.9], "size": [2, 2, 2], "uv": [126, 104]},
|
||||
{"origin": [7.5, -5, 6.9], "size": [0, 2, 2], "uv": [118, 128]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spike_foot_left",
|
||||
"parent": "foot_left",
|
||||
"pivot": [5.5, 5.6, 7],
|
||||
"rotation": [27.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [5.5, 5.1, 6], "size": [0, 4, 2], "uv": [112, 100]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right1",
|
||||
"parent": "body",
|
||||
"pivot": [-4.5, 11, 0],
|
||||
"rotation": [-37.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-8.5, 3.5, -4], "size": [6, 9, 7], "uv": [86, 59]},
|
||||
{"origin": [-8.5, 3.5, -4], "size": [6, 9, 7], "inflate": 0.25, "uv": [86, 75]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right2",
|
||||
"parent": "leg_right1",
|
||||
"pivot": [-5.5, 3.6, -0.5],
|
||||
"rotation": [-32.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-7, 1.6, -2.5], "size": [3, 4, 9], "uv": [0, 99]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_right",
|
||||
"parent": "leg_right2",
|
||||
"pivot": [-5.5, 5.6, 6],
|
||||
"rotation": [2.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-8, 0.6, 6], "size": [5, 5, 3], "inflate": -0.01, "uv": [86, 114]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-5.5, 2.6, 7.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_primary": [-5.5, 2.6, 7.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toe_right1",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-5.5, 0.6, 8],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, -1.9, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [118, 123]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_right1",
|
||||
"parent": "toe_right1",
|
||||
"pivot": [-5.5, -2, 7],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, -4, 6.9], "size": [2, 2, 2], "uv": [126, 108]},
|
||||
{"origin": [-5.5, -5.5, 6.9], "size": [0, 2, 2], "uv": [122, 128]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_right2",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-3.5, 1.1, 8],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, -1.4, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [124, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_right2",
|
||||
"parent": "toe_right2",
|
||||
"pivot": [-3.5, -1.5, 7],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, -3.5, 6.9], "size": [2, 2, 2], "uv": [126, 123]},
|
||||
{"origin": [-3.5, -5, 6.9], "size": [0, 2, 2], "uv": [30, 129]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_right3",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-7.5, 1.1, 8],
|
||||
"cubes": [
|
||||
{"origin": [-8.5, -1.4, 6.9], "size": [2, 3, 2], "inflate": 0.1, "uv": [124, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "toe_claw_right3",
|
||||
"parent": "toe_right3",
|
||||
"pivot": [-7.5, -1.5, 7],
|
||||
"cubes": [
|
||||
{"origin": [-8.5, -3.5, 6.9], "size": [2, 2, 2], "uv": [0, 127]},
|
||||
{"origin": [-7.5, -5, 6.9], "size": [0, 2, 2], "uv": [34, 129]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spike_foot_right",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-5.5, 5.6, 7],
|
||||
"rotation": [27.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-5.5, 5.1, 6], "size": [0, 4, 2], "uv": [52, 128]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -69,13 +69,13 @@
|
||||
{"origin": [-25.5, 35.75, 5.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [236, 85]},
|
||||
{"origin": [-25.5, 36.75, 6.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [242, 85]},
|
||||
{"origin": [-25.5, 38.75, 8.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [242, 89]},
|
||||
{"origin": [-25.5, 40.75, 9.5], "size": [1, 1, 1], "pivot": [-27, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [240, 77]},
|
||||
{"origin": [-26, 40.75, 9.5], "size": [1, 1, 1], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [240, 77]},
|
||||
{"origin": [-25.5, 39.75, 10.5], "size": [1, 5, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [236, 93]},
|
||||
{"origin": [-25.5, 39.75, 12.5], "size": [1, 3, 1], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [248, 95]},
|
||||
{"origin": [-25.5, 40.75, 13.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [248, 77]},
|
||||
{"origin": [-25.5, 41.75, 14.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [248, 81]},
|
||||
{"origin": [-25.5, 42.75, 15.5], "size": [1, 4, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [242, 93]},
|
||||
{"origin": [-25.5, 44.75, 11.5], "size": [1, 1, 1], "pivot": [-27, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [246, 77]},
|
||||
{"origin": [-26, 44.75, 11.5], "size": [1, 1, 1], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [246, 77]},
|
||||
{"origin": [-25.5, 32.75, 3.5], "size": [1, 3, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [248, 85]},
|
||||
{"origin": [-25.5, 37.75, 7.5], "size": [1, 2, 2], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [236, 89]},
|
||||
{"origin": [-25.5, 38.75, 4.5], "size": [1, 2, 3], "pivot": [-27.5, 28.75, -0.5], "rotation": [45, 0, 0], "uv": [247, 117]},
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 1.94,
|
||||
"portraitTranslation": [-0.32, -0.41, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.6, 0],
|
||||
"rootBone": "eevee",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('eevee', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('eevee', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('eevee', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('eevee', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('eevee', 'blink')"
|
||||
]
|
||||
"portraitScale": 1.94,
|
||||
"portraitTranslation": [-0.32, -0.41, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.6, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('eevee', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('eevee', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('eevee', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('eevee', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.08,
|
||||
"portraitTranslation": [-0.7, -0.37, 0],
|
||||
"profileScale": 0.85,
|
||||
"profileTranslation": [0, 0.45, 0],
|
||||
"rootBone": "vaporeon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('vaporeon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('vaporeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('vaporeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('vaporeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'frontleg_left', 'frontleg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('vaporeon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.08,
|
||||
"portraitTranslation": [-0.7, -0.37, 0],
|
||||
"profileScale": 0.85,
|
||||
"profileTranslation": [0, 0.45, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('vaporeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('vaporeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('vaporeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'frontleg_left', 'frontleg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('vaporeon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,54 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.14,
|
||||
"portraitTranslation": [-0.75, -0.11, 0],
|
||||
"profileScale": 0.75,
|
||||
"profileTranslation": [0, 0.62, 0],
|
||||
"rootBone": "jolteon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('jolteon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('jolteon', 'ground_idle')",
|
||||
{
|
||||
"condition": "q.is_holding_item",
|
||||
"animation": "q.bedrock('jolteon', 'hold_item')"
|
||||
}
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('jolteon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('jolteon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'backleg_left', 'backleg_right')",
|
||||
{
|
||||
"condition": "q.is_holding_item",
|
||||
"animation": "q.bedrock('jolteon', 'hold_item')"
|
||||
}
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('jolteon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.14,
|
||||
"portraitTranslation": [-0.75, -0.11, 0],
|
||||
"profileScale": 0.75,
|
||||
"profileTranslation": [0, 0.62, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('jolteon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('jolteon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('jolteon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'backleg_left', 'backleg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('jolteon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.16,
|
||||
"portraitTranslation": [-0.85, -0.28, 0],
|
||||
"profileScale": 0.8,
|
||||
"profileTranslation": [0, 0.55, 0],
|
||||
"rootBone": "flareon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('flareon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('flareon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('flareon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('flareon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('flareon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.16,
|
||||
"portraitTranslation": [-0.85, -0.28, 0],
|
||||
"profileScale": 0.8,
|
||||
"profileTranslation": [0, 0.55, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('flareon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('flareon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('flareon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('flareon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.14,
|
||||
"portraitTranslation": [-0.68, 0.25, 0],
|
||||
"profileScale": 0.76,
|
||||
"profileTranslation": [0, 0.62, 0],
|
||||
"rootBone": "espeon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('espeon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('espeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('espeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('espeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('espeon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.14,
|
||||
"portraitTranslation": [-0.68, 0.25, 0],
|
||||
"profileScale": 0.76,
|
||||
"profileTranslation": [0, 0.62, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('espeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('espeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('espeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('espeon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.18,
|
||||
"portraitTranslation": [-0.71, 0.13, 0],
|
||||
"profileScale": 0.8,
|
||||
"profileTranslation": [0, 0.55, 0],
|
||||
"rootBone": "umbreon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('umbreon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('umbreon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('umbreon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('umbreon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('umbreon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.18,
|
||||
"portraitTranslation": [-0.71, 0.13, 0],
|
||||
"profileScale": 0.8,
|
||||
"profileTranslation": [0, 0.55, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('umbreon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('umbreon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('umbreon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('umbreon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
{
|
||||
"portraitScale": 1.95,
|
||||
"portraitTranslation": [-0.08, 0.23, 0],
|
||||
"profileScale": 0.74,
|
||||
"profileTranslation": [0, 0.66, 0],
|
||||
"rootBone": "treecko",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('treecko', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseName": "standing",
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"FLOAT",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"SLEEP"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('treecko', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('treecko', 'blink')"
|
||||
]
|
||||
},
|
||||
"walk": {
|
||||
"poseName": "walk",
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('treecko', 'ground_idle')",
|
||||
"q.biped_walk(0.6, 0.9, 'leg_left', 'leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('treecko', 'blink')"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"portraitScale": 2.31,
|
||||
"portraitTranslation": [-0.55, 1.41, 0],
|
||||
"profileScale": 0.66,
|
||||
"profileTranslation": [0, 0.81, 0],
|
||||
"rootBone": "grovyle",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('grovyle', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseName": "standing",
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"FLOAT",
|
||||
"PORTRAIT",
|
||||
"PROFILE"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('grovyle', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('grovyle', 'blink')"
|
||||
]
|
||||
},
|
||||
"walk": {
|
||||
"poseName": "walk",
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('grovyle', 'ground_idle')",
|
||||
"q.biped_walk(0.6, 0.9, 'leg_left', 'leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('grovyle', 'blink')"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"portraitScale": 2.27,
|
||||
"portraitTranslation": [-0.69, 2.22, 0],
|
||||
"profileScale": 0.63,
|
||||
"profileTranslation": [0.06, 0.91, 0],
|
||||
"rootBone": "sceptile",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('sceptile', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseName": "standing",
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"FLOAT",
|
||||
"PORTRAIT",
|
||||
"PROFILE"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('sceptile', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sceptile', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseName": "walking",
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
"q.bedrock('sceptile', 'ground_idle')",
|
||||
"q.biped_walk(0.6, 0.9, 'leg_left', 'leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sceptile', 'blink')"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
{
|
||||
"portraitScale": 1.1,
|
||||
"portraitTranslation": [-0.45, 0.5, 0],
|
||||
"profileScale": 0.4,
|
||||
"profileTranslation": [0, 1, 0],
|
||||
"rootBone": "metagross",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('metagross', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"stand": {
|
||||
"poseName": "stand",
|
||||
"isBattle": false,
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'ground_idle')"
|
||||
],
|
||||
"transformTicks": 10,
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('metagross', 'blink')"
|
||||
]
|
||||
},
|
||||
"battle_idle": {
|
||||
"poseName": "battle_idle",
|
||||
"isBattle": true,
|
||||
"poseTypes": [
|
||||
"STAND"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'battle_idle')"
|
||||
],
|
||||
"transformTicks": 10,
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('metagross', 'blink')"
|
||||
]
|
||||
},
|
||||
"walk": {
|
||||
"poseName": "walk",
|
||||
"poseTypes": [
|
||||
"WALK"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'ground_walk')"
|
||||
],
|
||||
"transformTicks": 5,
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('metagross', 'blink')"
|
||||
]
|
||||
},
|
||||
"hover": {
|
||||
"poseName": "hover",
|
||||
"poseTypes": [
|
||||
"HOVER",
|
||||
"FLOAT"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'air_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('metagross', 'blink')"
|
||||
]
|
||||
},
|
||||
"fly": {
|
||||
"poseName": "fly",
|
||||
"poseTypes": [
|
||||
"FLY",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'air_fly')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('metagross', 'blink')"
|
||||
]
|
||||
},
|
||||
"sleep": {
|
||||
"poseName": "sleep",
|
||||
"poseTypes": [
|
||||
"SLEEP"
|
||||
],
|
||||
"animations": [
|
||||
"q.bedrock('metagross', 'sleep')"
|
||||
],
|
||||
"namedAnimations": {
|
||||
"cry": "q.bedrock_stateful('dummy', 'cry')"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 1.94,
|
||||
"portraitTranslation": [-0.62, 0.3, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.59, 0],
|
||||
"rootBone": "leafeon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('leafeon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('leafeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('leafeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('leafeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('leafeon', 'blink')"
|
||||
]
|
||||
"portraitScale": 1.94,
|
||||
"portraitTranslation": [-0.62, 0.3, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.59, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('leafeon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('leafeon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('leafeon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('leafeon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 2.06,
|
||||
"portraitTranslation": [-0.69, 0.2, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.58, 0],
|
||||
"rootBone": "glaceon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('glaceon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('glaceon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('glaceon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('glaceon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('glaceon', 'blink')"
|
||||
]
|
||||
"portraitScale": 2.06,
|
||||
"portraitTranslation": [-0.69, 0.2, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.58, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('glaceon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('glaceon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('glaceon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('glaceon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
"portraitScale": 1.75,
|
||||
"portraitTranslation": [-0.79, 1.43, 0],
|
||||
"profileScale": 0.59,
|
||||
"profileTranslation": [0.01, 0.81, 0],
|
||||
"poses": {
|
||||
"battle-standing": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.bedrock('druddigon', 'battle_idle')",
|
||||
{
|
||||
"condition": "q.is_holding_item",
|
||||
"animation": "q.bedrock('druddigon', 'hold_item')"
|
||||
}
|
||||
]
|
||||
},
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.bedrock('druddigon', 'ground_idle')",
|
||||
{
|
||||
"condition": "q.is_holding_item",
|
||||
"animation": "q.bedrock('druddigon', 'hold_item')"
|
||||
}
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK"],
|
||||
"animations": [
|
||||
"q.bedrock('druddigon', 'ground_idle')",
|
||||
{
|
||||
"condition": "q.is_holding_item",
|
||||
"animation": "q.bedrock('druddigon', 'hold_item')"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,7 @@
|
||||
"quirks": ["q.bedrock_quirk('braixen', 'blink')"],
|
||||
"transformedParts": [
|
||||
{
|
||||
"part": "wand",
|
||||
"part": "stick_hand",
|
||||
"isVisible": false
|
||||
}
|
||||
]
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"quirks": ["q.bedrock_quirk('delphox', 'blink')"],
|
||||
"transformedParts": [
|
||||
{
|
||||
"part": "wand",
|
||||
"part": "stick_hand",
|
||||
"isVisible": false
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
{
|
||||
"portraitScale": 1.97,
|
||||
"portraitTranslation": [-0.51, 0.33, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.57, 0],
|
||||
"rootBone": "sylveon",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('sylveon', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"NONE",
|
||||
"PORTRAIT",
|
||||
"PROFILE",
|
||||
"FLOAT"
|
||||
],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('sylveon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sylveon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('sylveon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sylveon', 'blink')"
|
||||
]
|
||||
"portraitScale": 1.97,
|
||||
"portraitTranslation": [-0.51, 0.33, 0],
|
||||
"profileScale": 0.77,
|
||||
"profileTranslation": [0, 0.57, 0],
|
||||
"animations": {},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE", "FLOAT"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('sylveon', 'ground_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sylveon', 'blink')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK", "SWIM"],
|
||||
"animations": [
|
||||
"q.look('head', 1, 1, 70, -45, 45, -45)",
|
||||
"q.bedrock('sylveon', 'ground_idle')",
|
||||
"q.quadruped_walk(0.66, 1.4, 'front_leg_left', 'front_leg_right', 'back_leg_left', 'back_leg_right')"
|
||||
],
|
||||
"quirks": ["q.bedrock_quirk('sylveon', 'blink')"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"portraitScale": 2.03,
|
||||
"portraitTranslation": [-0.44, 2.41, 0],
|
||||
"profileScale": 0.52,
|
||||
"profileTranslation": [0, 0.94, 0],
|
||||
"rootBone": "sneasler",
|
||||
"animations": {
|
||||
"cry": "q.bedrock_stateful('sneasler', 'cry')"
|
||||
},
|
||||
"poses": {
|
||||
"standing": {
|
||||
"poseName": "standing",
|
||||
"isBattle": false,
|
||||
"poseTypes": [
|
||||
"STAND",
|
||||
"FLOAT",
|
||||
"PORTRAIT",
|
||||
"PROFILE"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
{
|
||||
"condition": "!q.has_aspect('cosmetic_item-composter')",
|
||||
"animation": "q.bedrock('sneasler', 'ground_idle')"
|
||||
},
|
||||
{
|
||||
"condition": "q.has_aspect('cosmetic_item-composter')",
|
||||
"animation": "q.bedrock('sneasler', 'ground_idle_basket')"
|
||||
}
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sneasler', 'blink')"
|
||||
]
|
||||
},
|
||||
"battle-standing": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.look('head_ai')",
|
||||
"q.bedrock('sneasler', 'battle_idle')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sneasler', 'blink')"
|
||||
]
|
||||
},
|
||||
"walk": {
|
||||
"poseName": "walk",
|
||||
"poseTypes": [
|
||||
"WALK",
|
||||
"SWIM"
|
||||
],
|
||||
"animations": [
|
||||
"q.look('head')",
|
||||
{
|
||||
"condition": "!q.has_aspect('cosmetic_item-composter')",
|
||||
"animation": "q.bedrock('sneasler', 'ground_idle')"
|
||||
},
|
||||
{
|
||||
"condition": "q.has_aspect('cosmetic_item-composter')",
|
||||
"animation": "q.bedrock('sneasler', 'ground_idle_basket')"
|
||||
},
|
||||
"q.biped_walk(0.6, 0.9, 'leg_left', 'leg_right')",
|
||||
"q.bimanual_swing(0.6, 0.9, 'arm_left', 'arm_right')"
|
||||
],
|
||||
"quirks": [
|
||||
"q.bedrock_quirk('sneasler', 'blink')"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@
|
||||
"layers": [
|
||||
{
|
||||
"name": "emissive_shiny",
|
||||
"texture": "cobblemon:textures/pokemon/0462_magnezone/magnezone_shiny_emissive.png",
|
||||
"texture": "cobblemon:textures/pokemon/0462_magnezone/magnezone_emissive_shiny.png",
|
||||
"emissive": true
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"species": "cobblemon:druddigon",
|
||||
"order": 0,
|
||||
"variations": [
|
||||
{
|
||||
"aspects": [],
|
||||
"poser": "cobblemon:druddigon",
|
||||
"model": "cobblemon:druddigon.geo",
|
||||
"texture": "cobblemon:textures/pokemon/0621_druddigon/druddigon.png"
|
||||
},
|
||||
{
|
||||
"aspects": ["shiny"],
|
||||
"texture": "cobblemon:textures/pokemon/0621_druddigon/druddigon_shiny.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 584 B After Width: | Height: | Size: 463 B |
|
After Width: | Height: | Size: 471 B |