mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-20 14:16:26 -04:00
Compare commits
201
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69a4ac41e3 | ||
|
|
24c123405e | ||
|
|
78b94e4fad | ||
|
|
5ff907c5ae | ||
|
|
b6d12e64d9 | ||
|
|
94c863910c | ||
|
|
df155cf2cb | ||
|
|
b44bda602e | ||
|
|
01d0047c36 | ||
|
|
90dc489547 | ||
|
|
b2142fed1d | ||
|
|
fef21516e9 | ||
|
|
95d43de79f | ||
|
|
c803cfe22d | ||
|
|
2b8713ce02 | ||
|
|
92bccf620f | ||
|
|
15f8a9ee71 | ||
|
|
dfb9ee755e | ||
|
|
68f4117e29 | ||
|
|
f74a24a056 | ||
|
|
e5750cbba0 | ||
|
|
c6482c82cd | ||
|
|
b4c23a9132 | ||
|
|
c470894bd3 | ||
|
|
a940e32f8d | ||
|
|
b6b59eccad | ||
|
|
b520b94fae | ||
|
|
9af99d16f7 | ||
|
|
2cc17d3280 | ||
|
|
20b2bcaa5a | ||
|
|
d1ada605fd | ||
|
|
d37f73626d | ||
|
|
73a94cb02e | ||
|
|
5a48945e50 | ||
|
|
476448a2ce | ||
|
|
bcba4f7fb7 | ||
|
|
20e9608ff3 | ||
|
|
3e5733ceaf | ||
|
|
af29c99b03 | ||
|
|
60d596a24f | ||
|
|
3f993e0466 | ||
|
|
9e3d22ee54 | ||
|
|
e86cb1981f | ||
|
|
e94f265adb | ||
|
|
b3fc35240a | ||
|
|
d74618bddb | ||
|
|
8b54a8d459 | ||
|
|
c17104a0fd | ||
|
|
88ca3ebbf3 | ||
|
|
4003456e5c | ||
|
|
1d21a52d28 | ||
|
|
2d49c62f85 | ||
|
|
20fac724f6 | ||
|
|
0807d73646 | ||
|
|
3013302f35 | ||
|
|
879e7bef21 | ||
|
|
557623dfe2 | ||
|
|
a28d1e176d | ||
|
|
f3c52db70d | ||
|
|
525575b0ba | ||
|
|
a55efeb378 | ||
|
|
da18b082a6 | ||
|
|
7511facebc | ||
|
|
1486f5cfc2 | ||
|
|
f8a16e5081 | ||
|
|
558e2d89ff | ||
|
|
ea7b688655 | ||
|
|
fdafa3435c | ||
|
|
f17c90f6ea | ||
|
|
1dc45669bb | ||
|
|
f3658614a4 | ||
|
|
cad39d8802 | ||
|
|
422f60f587 | ||
|
|
8190ddf0e9 | ||
|
|
af281d0bde | ||
|
|
00905b8c32 | ||
|
|
79b3cb8611 | ||
|
|
797e908621 | ||
|
|
3df3c395de | ||
|
|
b2f682ebb1 | ||
|
|
754e9bc158 | ||
|
|
2df8504139 | ||
|
|
2838f97c56 | ||
|
|
68c75deeeb | ||
|
|
3bc2659740 | ||
|
|
89bba8a67a | ||
|
|
cbd5cdaf92 | ||
|
|
6d6e13be83 | ||
|
|
899bec77b6 | ||
|
|
6dd8325772 | ||
|
|
e9bffd3ad7 | ||
|
|
460c472c55 | ||
|
|
69c3b6142d | ||
|
|
0fbe206893 | ||
|
|
2aa4ab4b52 | ||
|
|
113977990e | ||
|
|
3bd3ce5688 | ||
|
|
881a87216b | ||
|
|
1d473b82af | ||
|
|
6e0c005587 | ||
|
|
e0d0c38232 | ||
|
|
217d4cda42 | ||
|
|
08daa43aae | ||
|
|
184d889831 | ||
|
|
c6e0f431ae | ||
|
|
93daeab840 | ||
|
|
f132b297c6 | ||
|
|
c0a524a718 | ||
|
|
f445c05333 | ||
|
|
a62485fc1f | ||
|
|
044f3080ff | ||
|
|
28b0cab906 | ||
|
|
82f34d651c | ||
|
|
92b0ef84e9 | ||
|
|
dc8d18384c | ||
|
|
44c056ecd5 | ||
|
|
dcc707c20d | ||
|
|
07b1b22c2c | ||
|
|
23078eccba | ||
|
|
8a82f35edf | ||
|
|
bec664c073 | ||
|
|
3e61424d8f | ||
|
|
c1606c6fc9 | ||
|
|
e0108cc99f | ||
|
|
c0de8a2591 | ||
|
|
b8733eed52 | ||
|
|
4aa30efec7 | ||
|
|
7930ec52fa | ||
|
|
57eb306e4f | ||
|
|
bd0511a9fb | ||
|
|
c14f3292aa | ||
|
|
8fb2b1cf3d | ||
|
|
5c7d1cbe10 | ||
|
|
3348bfc362 | ||
|
|
8db9252434 | ||
|
|
d9d4fe15cc | ||
|
|
8453e2d514 | ||
|
|
4d3070c0c2 | ||
|
|
15f273a9ef | ||
|
|
007c079cd6 | ||
|
|
9851b1e8ad | ||
|
|
c65c2610cd | ||
|
|
2be08a3fcc | ||
|
|
4cdf440eee | ||
|
|
1545ee8fc2 | ||
|
|
a009fabfe4 | ||
|
|
46e4bfdd13 | ||
|
|
e24c82860d | ||
|
|
1291dee1e1 | ||
|
|
69732be09b | ||
|
|
8ce4ed7dee | ||
|
|
33d3cc0104 | ||
|
|
33b6b519ed | ||
|
|
5ec849f4e3 | ||
|
|
6f4a2d2cd5 | ||
|
|
0bca89e77d | ||
|
|
8f9f162011 | ||
|
|
ac3bea3d5e | ||
|
|
178d4f199b | ||
|
|
933819380d | ||
|
|
d68131e1b9 | ||
|
|
ffbc379c0b | ||
|
|
7053d12508 | ||
|
|
d41442200f | ||
|
|
d2564c343e | ||
|
|
d1c19e8837 | ||
|
|
0ec3bfabad | ||
|
|
43ffb04621 | ||
|
|
eeaedf76a9 | ||
|
|
120fb4829a | ||
|
|
12b93e53a7 | ||
|
|
00b17b9764 | ||
|
|
06192f809d | ||
|
|
d09eb0d3ff | ||
|
|
416321679c | ||
|
|
72c4e6e54f | ||
|
|
d3738e3424 | ||
|
|
2e183db903 | ||
|
|
fa174b88dd | ||
|
|
0b4abe6d16 | ||
|
|
759fb0ecd8 | ||
|
|
429e927c3f | ||
|
|
643aed9133 | ||
|
|
e701642de2 | ||
|
|
a3a03e3da6 | ||
|
|
5dd3d5b552 | ||
|
|
1bae246e6c | ||
|
|
c94ef10189 | ||
|
|
dfacf1f9df | ||
|
|
06c5e34f48 | ||
|
|
1ab8b35e98 | ||
|
|
261b61ee6c | ||
|
|
5abf8e1bab | ||
|
|
7c0b463637 | ||
|
|
e156ab2432 | ||
|
|
0b46a7163b | ||
|
|
21b76c008a | ||
|
|
b7e9f8248d | ||
|
|
8b21e76a36 | ||
|
|
515471185f | ||
|
|
628e8f4e5e |
+52
-3
@@ -3,8 +3,8 @@
|
||||
|
||||
### Additions
|
||||
- The following items can now be placed on the ground as blocks:
|
||||
- King's Rock, Galarica Cuff, Unremarkable Teacup, Masterpiece Teacup, Chipped Pot, Cracked Pot, Sachet, Metal Powder, Quick Powder, Bright Powder, Icy Rock, Heat Rock, Smooth Rock, Damp Rock, Destiny Knot, Luminous Moss, Never-Melt Ice, Wide Lens, Scope Lens, and Zoom Lens.
|
||||
- Iron Ball, Metal Coat, Throat Spray, HP Up, Protein, Iron, Carbos, Calcium, Zinc, PP Up, PP Max, Upgrade, Dubious Disc, and Loaded Dice.
|
||||
- King's Rock, Galarica Cuff, Unremarkable Teacup, Masterpiece Teacup, Chipped Pot, Cracked Pot, Sachet, Metal Powder, Quick Powder, Bright Powder, Soft Sand, Electirizer, Magmarizer, Icy Rock, Heat Rock, Smooth Rock, Damp Rock, Destiny Knot, Luminous Moss, Never-Melt Ice, Wide Lens, Scope Lens, and Zoom Lens.
|
||||
- Iron Ball, Metal Coat, Throat Spray, Terrain Extender, Medicinal Brew, Moomoo Milk, HP Up, Protein, Iron, Carbos, Calcium, Zinc, PP Up, PP Max, Upgrade, Dubious Disc, and Loaded Dice.
|
||||
- The following items can now be placed on various surfaces:
|
||||
- Galarica Wreath, Magnet, Flame Orb, Life Orb, Toxic Orb, Light Ball, and Smoke Ball.
|
||||
- The following items can now be placed as blocks and have additional functionality:
|
||||
@@ -13,9 +13,20 @@
|
||||
- Galarica Wreath, Cleanse Tag, Spell Tag, Sharp Beak, Covert Cloak, Shell Helmet, and Never-Melt Ice.
|
||||
- Wearable items can now be equipped by a player by holding it and right-clicking (or rebound use/interact)
|
||||
- Wearable items that can be placed down are exempt from this behaviour.
|
||||
- Mint Leaves can now be placed on the ground as Leaf Litter, or in Flower Pots
|
||||
- Added Oricorio Flowers
|
||||
- Added Terrain Plants
|
||||
- Berries can now be placed in Flower Pots
|
||||
- The evolution tree can now be viewed on the Pokédex, showing a Pokémon's full family line and what's needed to evolve into each stage.
|
||||
- Added custom sounds to a bunch of items that can be placed as blocks: liquid bottles, pill bottles, powders and dice.
|
||||
- New Cosmetic Item for Pikachu: Paper
|
||||
- Burmy changes its cloak after a battle it took part in, based on the biome: Trash Cloak in the Deep Dark, Nether and End, Plant Cloak in lush biomes such as forests, jungles, plains and swamps, and Sandy Cloak in sandy biomes, beaches and caves.
|
||||
- The evolution tree can now be viewed on the Pokédex, showing a Pokémon's full family line and what's needed to evolve into each stage.
|
||||
- Added custom sounds to a bunch of items that can be placed as blocks: liquid bottles, pill bottles, powders and dice.
|
||||
|
||||
### Fixes
|
||||
- Fixed #updateMovesOnFormChange not properly initializing a form-swapped Pokemon's non-form_change moves.
|
||||
### TEST
|
||||
### Pokémon Added
|
||||
#### Generation 4
|
||||
- Snover
|
||||
@@ -66,6 +77,21 @@
|
||||
- Vileplume
|
||||
- Bellossom
|
||||
- Shroomish
|
||||
- Chespin
|
||||
- Quilladin
|
||||
- Chesnaught
|
||||
- Fennekin
|
||||
- Braixen
|
||||
- Delphox
|
||||
- Froakie
|
||||
- Frogadier
|
||||
- Greninja
|
||||
- Shinx
|
||||
- Luxio
|
||||
- Luxray
|
||||
- Slakoth
|
||||
- Riolu
|
||||
- Lucario
|
||||
|
||||
### Animation updates for the following Pokémon
|
||||
- Treecko (New Shoulder Mount!)
|
||||
@@ -79,17 +105,35 @@
|
||||
- Gloom
|
||||
- Vileplume
|
||||
- Bellossom
|
||||
- Pichu
|
||||
- Pikachu
|
||||
- Raichu (+ Alolan)
|
||||
- Greninja
|
||||
- Slakoth
|
||||
|
||||
### Changes
|
||||
- Terrain Seeds can now be planted
|
||||
- Terrain Seeds are now consumed during PvP and NPC battles
|
||||
- Glow Item Frames can be crafted using Bright Powder as an alternative to Glow Ink Sacs
|
||||
- Bright Powder can be used on Signs and Hanging Signs to make text glow, as an alternative to Glow Ink Sacs
|
||||
- Updated various recipes to display in Recipe Groups within the Recipe Book
|
||||
- Updated most recipes to display more logically/consistently within the Recipe Book's categories
|
||||
- Updated the following recipes
|
||||
- Never-Melt Ice, Focus Sash, Blunder Policy, Weakness Policy, Blank TM
|
||||
- Make ride rotations less jittery in multiplayer.
|
||||
- Changes tm shelf discs to use textures instead of tinting and overlays to line up with item display
|
||||
- Changes Disc Shelf TMs to use textures instead of tinting and overlays to line up with item display
|
||||
- Blank TM can now be inserted into the Disc Shelf
|
||||
- Added TM creative tab
|
||||
- Recall animation now renders ball in hand with the player arm raised.
|
||||
- Made regional and Vivillon split-evo locations now mutually exclusive
|
||||
- Vivillon's patterns are now viewable as forms with form names and unique Pokedex entries displayed.
|
||||
- Item evolutions now unlock **all** locked evolutions whose requirements are met instead of stopping after the first.
|
||||
- Exceptions being "forced" evolutions which will continue to stop after the first one
|
||||
- Removed Mega Drain as a TM
|
||||
- Vivillon's patterns are now viewable as forms with form names and unique Pokedex entries displayed.
|
||||
- Slowed the speed of Type Gem growth, and revamped their generation to grow in a more crystal-like shape
|
||||
- PokeSnacks (and other area spawns) will now start the vertical offset checking from the center rather than base coordinate
|
||||
- This will help PokeSnacks to work inside caves or tighter spaces better
|
||||
|
||||
### Fixes
|
||||
- Correctly grants "They're Minerals!" advancement when planting a type gem
|
||||
@@ -120,6 +164,7 @@
|
||||
- Fixed certain Pokémon sounds sometimes being doubled when played at specific times in their animations
|
||||
- Fixed ball capture beam origin coming from behind the ball.
|
||||
- Fixed Safari Ball catch rate outside of battle
|
||||
- Fixed alpha eye (and other) particles not respecting client particle density setting in video options
|
||||
|
||||
### Developer
|
||||
- Evolution requirements can now set `pokedexIcon` and `pokedexTooltip` directly in their JSON to control how they're shown on the Pokédex's evolution tree, for example:
|
||||
@@ -136,6 +181,10 @@
|
||||
### Molang & Datapacks
|
||||
- A new `negate` variant for evolution requirements has been added, which will negate (invert) the provided inner condition.
|
||||
- Added Molang functions for individual Pokédex ids, wherein a subdex is passed in as a string to `dex_caught_count` etc.
|
||||
- Added a `battle_ended` callback, backed by the new `BATTLE_ENDED` event, which fires whenever a battle ends for any reason, alongside a multitude of flags not previously covered by `BATTLE_VICTORY`.
|
||||
- Added `battle_pokemon` to battle actor structs and `has_faced_opponents` to battle Pokémon structs.
|
||||
- Added the `cobblemon:form_change/bagworm_cloak/plant_cloak`, `sandy_cloak` and `trash_cloak` biome tags, which control Burmy's cloak after battle.
|
||||
- Added a `battlingEyeHeight` field to set the eye height of a Pokémon while battling
|
||||
|
||||
### Particles
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
import net.minecraft.SharedConstants;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.IntTag;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
@@ -45,4 +46,24 @@ public class ChunkStorageMixin {
|
||||
int curVersion = vanillaFixed.contains(VERSION_KEY) ? vanillaFixed.getInt(VERSION_KEY) : 0;
|
||||
return DataFixTypes.CHUNK.update(CobblemonSchemas.getDATA_FIXER(), vanillaFixed, curVersion, CobblemonSchemas.DATA_VERSION);
|
||||
}
|
||||
|
||||
// Our update on the same MC version still needs its own fixes so run them here in that case.
|
||||
@Inject(
|
||||
method = "upgradeChunkTag(Lnet/minecraft/resources/ResourceKey;Ljava/util/function/Supplier;Lnet/minecraft/nbt/CompoundTag;Ljava/util/Optional;)Lnet/minecraft/nbt/CompoundTag;",
|
||||
at = @At("HEAD"),
|
||||
cancellable = true
|
||||
)
|
||||
private void cobblemon$doChunkFixOnCurrentVersion(
|
||||
ResourceKey<Level> levelKey,
|
||||
Supplier<DimensionDataStorage> storage,
|
||||
CompoundTag chunkData,
|
||||
Optional<ResourceKey<MapCodec<? extends ChunkGenerator>>> chunkGeneratorKey,
|
||||
CallbackInfoReturnable<CompoundTag> cir
|
||||
) {
|
||||
if (ChunkStorage.getVersion(chunkData) != SharedConstants.getCurrentVersion().getDataVersion().getVersion()) {
|
||||
return;
|
||||
}
|
||||
int curVersion = chunkData.contains(VERSION_KEY) ? chunkData.getInt(VERSION_KEY) : 0;
|
||||
cir.setReturnValue(DataFixTypes.CHUNK.update(CobblemonSchemas.getDATA_FIXER(), chunkData, curVersion, CobblemonSchemas.DATA_VERSION));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,4 +109,21 @@ object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, R
|
||||
"poke_snack",
|
||||
BlockEntityType.Builder.of(::PokeSnackBlockEntity, CobblemonBlocks.POKE_SNACK, CobblemonBlocks.POKE_CAKE).build(null)
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val TERRAIN_PLANT: BlockEntityType<TerrainPlantBlockEntity> = this.create(
|
||||
"terrain_plant",
|
||||
BlockEntityType.Builder.of(::TerrainPlantBlockEntity,
|
||||
CobblemonBlocks.VOLTACONIA,
|
||||
CobblemonBlocks.LUCIBELL,
|
||||
CobblemonBlocks.VERDROOT
|
||||
).build(null)
|
||||
)
|
||||
@JvmField
|
||||
val MISTLEAF_FLOWER: BlockEntityType<MistleafFlowerBlockEntity> = this.create(
|
||||
"mistleaf",
|
||||
BlockEntityType.Builder.of(::MistleafFlowerBlockEntity,
|
||||
CobblemonBlocks.MISTLEAF
|
||||
).build(null)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,8 +16,7 @@ import com.cobblemon.mod.common.block.MintBlock.MintType
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfireBlock
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfirePotBlock
|
||||
import com.cobblemon.mod.common.block.chest.GildedChestBlock
|
||||
import com.cobblemon.mod.common.block.decor.ActivatableDecorationBlock
|
||||
import com.cobblemon.mod.common.block.decor.RingTargetBlock
|
||||
import com.cobblemon.mod.common.block.decor.*
|
||||
import com.cobblemon.mod.common.block.general.BaleBlock
|
||||
import com.cobblemon.mod.common.block.general.HorizontalRotationCarpetBlock
|
||||
import com.cobblemon.mod.common.block.general.HorizontalRotationalBlock
|
||||
@@ -28,6 +27,7 @@ import com.cobblemon.mod.common.block.sign.CobblemonSignBlock
|
||||
import com.cobblemon.mod.common.block.sign.CobblemonWallHangingSignBlock
|
||||
import com.cobblemon.mod.common.block.sign.CobblemonWallSignBlock
|
||||
import com.cobblemon.mod.common.block.tmmachine.TMMachineBlock
|
||||
import com.cobblemon.mod.common.block.general.MintLitterBlock
|
||||
import com.cobblemon.mod.common.mixin.invoker.BlocksInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.DoorBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.FireBlockInvoker
|
||||
@@ -653,6 +653,10 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
val CHIPPED_POT = create("chipped_pot", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DECORATED_POT).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.TEAPOT))
|
||||
@JvmField
|
||||
val CRACKED_POT = create("cracked_pot", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.DECORATED_POT).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.TEAPOT))
|
||||
@JvmField
|
||||
val ELECTIRIZER = create("electirizer", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.IZER))
|
||||
@JvmField
|
||||
val MAGMARIZER = create("magmarizer", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.IZER))
|
||||
|
||||
@JvmField
|
||||
val SACHET = create("sachet", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.WOOL).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.POUCH))
|
||||
@@ -662,6 +666,8 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
val QUICK_POWDER = create("quick_powder", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_POWDER_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.POUCH))
|
||||
@JvmField
|
||||
val BRIGHT_POWDER = create("bright_powder", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_POWDER_SOUNDS).mapColor(MapColor.NONE).noOcclusion().lightLevel{3}, DecorativeItemBlock.DecorativeItemBlockType.POUCH))
|
||||
@JvmField
|
||||
val SOFT_SAND = create("soft_sand", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_POWDER_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), DecorativeItemBlock.DecorativeItemBlockType.POUCH))
|
||||
|
||||
@JvmField
|
||||
val NEVER_MELT_ICE = create("never_melt_ice", DecorativeItemBlock(BlockBehaviour.Properties.of().sound(SoundType.GLASS).mapColor(MapColor.NONE).noOcclusion().friction(0.989F), DecorativeItemBlock.DecorativeItemBlockType.NEVERMELT))
|
||||
@@ -703,6 +709,12 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
|
||||
@JvmField
|
||||
val THROAT_SPRAY = create("throat_spray", StackableItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_BOTTLE_LIQUID_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), StackableItemBlock.StackableItemBlockType.THROAT_SPRAY))
|
||||
@JvmField
|
||||
val TERRAIN_EXTENDER = create("terrain_extender", StackableItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_METAL_CAN_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), StackableItemBlock.StackableItemBlockType.EXTENDER))
|
||||
@JvmField
|
||||
val MOOMOO_MILK = create("moomoo_milk", StackableItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_JAR_GLASS_LIQUID_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), StackableItemBlock.StackableItemBlockType.GLASS_BOTTLE))
|
||||
@JvmField
|
||||
val MEDICINAL_BREW = create("medicinal_brew", StackableItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_JAR_GLASS_LIQUID_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), StackableItemBlock.StackableItemBlockType.GLASS_BOTTLE))
|
||||
|
||||
@JvmField
|
||||
val FULL_HEAL = create("full_heal", StackableItemBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.ITEM_BLOCK_BOTTLE_LIQUID_SOUNDS).mapColor(MapColor.NONE).noOcclusion(), StackableItemBlock.StackableItemBlockType.STATUS_RESTORE))
|
||||
@@ -857,6 +869,64 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
@JvmField
|
||||
val POTTED_SACCHARINE_SAPLING = this.create("potted_saccharine_sapling", BlocksInvoker.createFlowerPotBlock(SACCHARINE_SAPLING))
|
||||
|
||||
@JvmField
|
||||
val RED_MINT_LEAF_LITTER = this.mintLitter("red_mint_leaf_litter", MapColor.COLOR_RED)
|
||||
@JvmField
|
||||
val POTTED_RED_MINT = this.pottedPlant("potted_red_mint", RED_MINT_LEAF_LITTER)
|
||||
@JvmField
|
||||
val BLUE_MINT_LEAF_LITTER = this.mintLitter("blue_mint_leaf_litter", MapColor.COLOR_BLUE)
|
||||
@JvmField
|
||||
val POTTED_BLUE_MINT = this.pottedPlant("potted_blue_mint", BLUE_MINT_LEAF_LITTER)
|
||||
@JvmField
|
||||
val CYAN_MINT_LEAF_LITTER = this.mintLitter("cyan_mint_leaf_litter", MapColor.COLOR_CYAN)
|
||||
@JvmField
|
||||
val POTTED_CYAN_MINT = this.pottedPlant("potted_cyan_mint", CYAN_MINT_LEAF_LITTER)
|
||||
@JvmField
|
||||
val PINK_MINT_LEAF_LITTER = this.mintLitter("pink_mint_leaf_litter", MapColor.COLOR_PINK)
|
||||
@JvmField
|
||||
val POTTED_PINK_MINT = this.pottedPlant("potted_pink_mint", PINK_MINT_LEAF_LITTER)
|
||||
@JvmField
|
||||
val GREEN_MINT_LEAF_LITTER = this.mintLitter("green_mint_leaf_litter", MapColor.COLOR_GREEN)
|
||||
@JvmField
|
||||
val POTTED_GREEN_MINT = this.pottedPlant("potted_green_mint", GREEN_MINT_LEAF_LITTER)
|
||||
@JvmField
|
||||
val WHITE_MINT_LEAF_LITTER = this.mintLitter("white_mint_leaf_litter", MapColor.SNOW)
|
||||
@JvmField
|
||||
val POTTED_WHITE_MINT = this.pottedPlant("potted_white_mint", WHITE_MINT_LEAF_LITTER)
|
||||
|
||||
@JvmField
|
||||
val LOBAILA = this.create("lobaila", LobailaFlowerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().instabreak().sound(SoundType.GRASS).offsetType(BlockBehaviour.OffsetType.XZ).ignitedByLava().pushReaction(PushReaction.DESTROY)))
|
||||
@JvmField
|
||||
val POMOHANA = this.create("pomohana", PomohanaFlowerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().instabreak().sound(SoundType.GRASS).ignitedByLava().pushReaction(PushReaction.DESTROY)))
|
||||
@JvmField
|
||||
val PAUVILLEA = this.create("pauvillea",PauvilleaFlowerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().sound(SoundType.GRASS).instabreak().ignitedByLava().pushReaction(PushReaction.DESTROY)))
|
||||
@JvmField
|
||||
val WISTENSU = this.create("wistensu", WistensuFlowerHeadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().sound(SoundType.GRASS).instabreak().ignitedByLava().pushReaction(PushReaction.DESTROY).lightLevel{11}))
|
||||
@JvmField
|
||||
val WISTENSU_VINE = this.create("wistensu_vine", WistensuFlowerVineBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().sound(SoundType.GRASS).instabreak().ignitedByLava().pushReaction(PushReaction.DESTROY)))
|
||||
|
||||
@JvmField
|
||||
val ELECTRIC_SEED = this.terrainSeed("electric_seed", TerrainSeedBlock.TerrainSeedType.ELECTRIC)
|
||||
@JvmField
|
||||
val PSYCHIC_SEED = this.terrainSeed("psychic_seed", TerrainSeedBlock.TerrainSeedType.PSYCHIC)
|
||||
@JvmField
|
||||
val MISTY_SEED = this.terrainSeed("misty_seed", TerrainSeedBlock.TerrainSeedType.MISTY)
|
||||
@JvmField
|
||||
val GRASSY_SEED = this.terrainSeed("grassy_seed", TerrainSeedBlock.TerrainSeedType.GRASSY)
|
||||
@JvmField
|
||||
val VOLTACONIA = this.terrainPlant("voltaconia") { state -> if (state.getValue(TerrainPlantBlock.GLOWING)) 8 else 0 }
|
||||
@JvmField
|
||||
val VERDROOT = this.terrainPlant("verdroot") { state -> if (state.getValue(TerrainPlantBlock.GLOWING)) 5 else 0 }
|
||||
@JvmField
|
||||
val LUCIBELL = this.terrainPlant("lucibell") { state -> if (state.getValue(TerrainPlantBlock.GLOWING)) 8 else 0 }
|
||||
@JvmField
|
||||
val MISTLEAF = this.create(
|
||||
"mistleaf",
|
||||
MistleafFlowerBlock {
|
||||
if ((it.getValue(MistleafFlowerBlock.GLOWING) >= 1)) it.getValue(MistleafFlowerBlock.GLOWING) + 2 else 0
|
||||
}
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val HEARTY_GRAIN_BALE = this.create("hearty_grain_bale", BaleBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).instrument(NoteBlockInstrument.BANJO).strength(0.5F).sound(CobblemonSounds.HEARTY_GRAIN_BALE_SOUNDS)))
|
||||
@JvmField
|
||||
@@ -1033,6 +1103,147 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
val YACHE_BERRY = this.berryBlock("yache")
|
||||
//val BINDING_SOIL = this.create("binding_soil", BindingSoilBlock(BlockBehaviour.Properties.of()))
|
||||
|
||||
@JvmField
|
||||
val POTTED_AGUAV_BERRY = this.create("potted_aguav_berry", BlocksInvoker.createFlowerPotBlock(AGUAV_BERRY))
|
||||
@JvmField
|
||||
val POTTED_APICOT_BERRY = this.create("potted_apicot_berry", BlocksInvoker.createFlowerPotBlock(APICOT_BERRY))
|
||||
@JvmField
|
||||
val POTTED_ASPEAR_BERRY = this.create("potted_aspear_berry", BlocksInvoker.createFlowerPotBlock(ASPEAR_BERRY))
|
||||
@JvmField
|
||||
val POTTED_BABIRI_BERRY = this.create("potted_babiri_berry", BlocksInvoker.createFlowerPotBlock(BABIRI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_BELUE_BERRY = this.create("potted_belue_berry", BlocksInvoker.createFlowerPotBlock(BELUE_BERRY))
|
||||
@JvmField
|
||||
val POTTED_BLUK_BERRY = this.create("potted_bluk_berry", BlocksInvoker.createFlowerPotBlock(BLUK_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CHARTI_BERRY = this.create("potted_charti_berry", BlocksInvoker.createFlowerPotBlock(CHARTI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CHERI_BERRY = this.create("potted_cheri_berry", BlocksInvoker.createFlowerPotBlock(CHERI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CHESTO_BERRY = this.create("potted_chesto_berry", BlocksInvoker.createFlowerPotBlock(CHESTO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CHILAN_BERRY = this.create("potted_chilan_berry", BlocksInvoker.createFlowerPotBlock(CHILAN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CHOPLE_BERRY = this.create("potted_chople_berry", BlocksInvoker.createFlowerPotBlock(CHOPLE_BERRY))
|
||||
@JvmField
|
||||
val POTTED_COBA_BERRY = this.create("potted_coba_berry", BlocksInvoker.createFlowerPotBlock(COBA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_COLBUR_BERRY = this.create("potted_colbur_berry", BlocksInvoker.createFlowerPotBlock(COLBUR_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CORNN_BERRY = this.create("potted_cornn_berry", BlocksInvoker.createFlowerPotBlock(CORNN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_CUSTAP_BERRY = this.create("potted_custap_berry", BlocksInvoker.createFlowerPotBlock(CUSTAP_BERRY))
|
||||
@JvmField
|
||||
val POTTED_DURIN_BERRY = this.create("potted_durin_berry", BlocksInvoker.createFlowerPotBlock(DURIN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_EGGANT_BERRY = this.create("potted_eggant_berry", BlocksInvoker.createFlowerPotBlock(EGGANT_BERRY))
|
||||
@JvmField
|
||||
val POTTED_ENIGMA_BERRY = this.create("potted_enigma_berry", BlocksInvoker.createFlowerPotBlock(ENIGMA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_FIGY_BERRY = this.create("potted_figy_berry", BlocksInvoker.createFlowerPotBlock(FIGY_BERRY))
|
||||
@JvmField
|
||||
val POTTED_GANLON_BERRY = this.create("potted_ganlon_berry", BlocksInvoker.createFlowerPotBlock(GANLON_BERRY))
|
||||
@JvmField
|
||||
val POTTED_GREPA_BERRY = this.create("potted_grepa_berry", BlocksInvoker.createFlowerPotBlock(GREPA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_HABAN_BERRY = this.create("potted_haban_berry", BlocksInvoker.createFlowerPotBlock(HABAN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_HONDEW_BERRY = this.create("potted_hondew_berry", BlocksInvoker.createFlowerPotBlock(HONDEW_BERRY))
|
||||
@JvmField
|
||||
val POTTED_HOPO_BERRY = this.create("potted_hopo_berry", BlocksInvoker.createFlowerPotBlock(HOPO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_IAPAPA_BERRY = this.create("potted_iapapa_berry", BlocksInvoker.createFlowerPotBlock(IAPAPA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_JABOCA_BERRY = this.create("potted_jaboca_berry", BlocksInvoker.createFlowerPotBlock(JABOCA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_KASIB_BERRY = this.create("potted_kasib_berry", BlocksInvoker.createFlowerPotBlock(KASIB_BERRY))
|
||||
@JvmField
|
||||
val POTTED_KEBIA_BERRY = this.create("potted_kebia_berry", BlocksInvoker.createFlowerPotBlock(KEBIA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_KEE_BERRY = this.create("potted_kee_berry", BlocksInvoker.createFlowerPotBlock(KEE_BERRY))
|
||||
@JvmField
|
||||
val POTTED_KELPSY_BERRY = this.create("potted_kelpsy_berry", BlocksInvoker.createFlowerPotBlock(KELPSY_BERRY))
|
||||
@JvmField
|
||||
val POTTED_LANSAT_BERRY = this.create("potted_lansat_berry", BlocksInvoker.createFlowerPotBlock(LANSAT_BERRY))
|
||||
@JvmField
|
||||
val POTTED_LEPPA_BERRY = this.create("potted_leppa_berry", BlocksInvoker.createFlowerPotBlock(LEPPA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_LIECHI_BERRY = this.create("potted_liechi_berry", BlocksInvoker.createFlowerPotBlock(LIECHI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_LUM_BERRY = this.create("potted_lum_berry", BlocksInvoker.createFlowerPotBlock(LUM_BERRY))
|
||||
@JvmField
|
||||
val POTTED_MAGO_BERRY = this.create("potted_mago_berry", BlocksInvoker.createFlowerPotBlock(MAGO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_MAGOST_BERRY = this.create("potted_magost_berry", BlocksInvoker.createFlowerPotBlock(MAGOST_BERRY))
|
||||
@JvmField
|
||||
val POTTED_MARANGA_BERRY = this.create("potted_maranga_berry", BlocksInvoker.createFlowerPotBlock(MARANGA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_MICLE_BERRY = this.create("potted_micle_berry", BlocksInvoker.createFlowerPotBlock(MICLE_BERRY))
|
||||
@JvmField
|
||||
val POTTED_NANAB_BERRY = this.create("potted_nanab_berry", BlocksInvoker.createFlowerPotBlock(NANAB_BERRY))
|
||||
@JvmField
|
||||
val POTTED_NOMEL_BERRY = this.create("potted_nomel_berry", BlocksInvoker.createFlowerPotBlock(NOMEL_BERRY))
|
||||
@JvmField
|
||||
val POTTED_OCCA_BERRY = this.create("potted_occa_berry", BlocksInvoker.createFlowerPotBlock(OCCA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_ORAN_BERRY = this.create("potted_oran_berry", BlocksInvoker.createFlowerPotBlock(ORAN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PAMTRE_BERRY = this.create("potted_pamtre_berry", BlocksInvoker.createFlowerPotBlock(PAMTRE_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PASSHO_BERRY = this.create("potted_passho_berry", BlocksInvoker.createFlowerPotBlock(PASSHO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PAYAPA_BERRY = this.create("potted_payapa_berry", BlocksInvoker.createFlowerPotBlock(PAYAPA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PECHA_BERRY = this.create("potted_pecha_berry", BlocksInvoker.createFlowerPotBlock(PECHA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PERSIM_BERRY = this.create("potted_persim_berry", BlocksInvoker.createFlowerPotBlock(PERSIM_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PETAYA_BERRY = this.create("potted_petaya_berry", BlocksInvoker.createFlowerPotBlock(PETAYA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_PINAP_BERRY = this.create("potted_pinap_berry", BlocksInvoker.createFlowerPotBlock(PINAP_BERRY))
|
||||
@JvmField
|
||||
val POTTED_POMEG_BERRY = this.create("potted_pomeg_berry", BlocksInvoker.createFlowerPotBlock(POMEG_BERRY))
|
||||
@JvmField
|
||||
val POTTED_QUALOT_BERRY = this.create("potted_qualot_berry", BlocksInvoker.createFlowerPotBlock(QUALOT_BERRY))
|
||||
@JvmField
|
||||
val POTTED_RABUTA_BERRY = this.create("potted_rabuta_berry", BlocksInvoker.createFlowerPotBlock(RABUTA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_RAWST_BERRY = this.create("potted_rawst_berry", BlocksInvoker.createFlowerPotBlock(RAWST_BERRY))
|
||||
@JvmField
|
||||
val POTTED_RAZZ_BERRY = this.create("potted_razz_berry", BlocksInvoker.createFlowerPotBlock(RAZZ_BERRY))
|
||||
@JvmField
|
||||
val POTTED_RINDO_BERRY = this.create("potted_rindo_berry", BlocksInvoker.createFlowerPotBlock(RINDO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_ROSELI_BERRY = this.create("potted_roseli_berry", BlocksInvoker.createFlowerPotBlock(ROSELI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_ROWAP_BERRY = this.create("potted_rowap_berry", BlocksInvoker.createFlowerPotBlock(ROWAP_BERRY))
|
||||
@JvmField
|
||||
val POTTED_SALAC_BERRY = this.create("potted_salac_berry", BlocksInvoker.createFlowerPotBlock(SALAC_BERRY))
|
||||
@JvmField
|
||||
val POTTED_SHUCA_BERRY = this.create("potted_shuca_berry", BlocksInvoker.createFlowerPotBlock(SHUCA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_SITRUS_BERRY = this.create("potted_sitrus_berry", BlocksInvoker.createFlowerPotBlock(SITRUS_BERRY))
|
||||
@JvmField
|
||||
val POTTED_SPELON_BERRY = this.create("potted_spelon_berry", BlocksInvoker.createFlowerPotBlock(SPELON_BERRY))
|
||||
@JvmField
|
||||
val POTTED_STARF_BERRY = this.create("potted_starf_berry", BlocksInvoker.createFlowerPotBlock(STARF_BERRY))
|
||||
@JvmField
|
||||
val POTTED_TAMATO_BERRY = this.create("potted_tamato_berry", BlocksInvoker.createFlowerPotBlock(TAMATO_BERRY))
|
||||
@JvmField
|
||||
val POTTED_TANGA_BERRY = this.create("potted_tanga_berry", BlocksInvoker.createFlowerPotBlock(TANGA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_TOUGA_BERRY = this.create("potted_touga_berry", BlocksInvoker.createFlowerPotBlock(TOUGA_BERRY))
|
||||
@JvmField
|
||||
val POTTED_WACAN_BERRY = this.create("potted_wacan_berry", BlocksInvoker.createFlowerPotBlock(WACAN_BERRY))
|
||||
@JvmField
|
||||
val POTTED_WATMEL_BERRY = this.create("potted_watmel_berry", BlocksInvoker.createFlowerPotBlock(WATMEL_BERRY))
|
||||
@JvmField
|
||||
val POTTED_WEPEAR_BERRY = this.create("potted_wepear_berry", BlocksInvoker.createFlowerPotBlock(WEPEAR_BERRY))
|
||||
@JvmField
|
||||
val POTTED_WIKI_BERRY = this.create("potted_wiki_berry", BlocksInvoker.createFlowerPotBlock(WIKI_BERRY))
|
||||
@JvmField
|
||||
val POTTED_YACHE_BERRY = this.create("potted_yache_berry", BlocksInvoker.createFlowerPotBlock(YACHE_BERRY))
|
||||
|
||||
init {
|
||||
/**
|
||||
* Makes all blocks in array flammable by adding them to FireBlock's flammableRegistry.
|
||||
@@ -1134,4 +1345,48 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
}
|
||||
|
||||
fun typeGemClusters() = typeGemClusters.toMap()
|
||||
|
||||
private fun pottedPlant(name: String, flower: Block) = this.create(name, BlocksInvoker.createFlowerPotBlock(flower))
|
||||
|
||||
private fun mintLitter(name: String, color: MapColor) = this.create(
|
||||
name,
|
||||
MintLitterBlock(
|
||||
BlockBehaviour.Properties.of()
|
||||
.sound(CobblemonSounds.MINT_SOUNDS)
|
||||
.mapColor(color)
|
||||
.noOcclusion()
|
||||
.noCollission()
|
||||
.pushReaction(PushReaction.DESTROY)
|
||||
)
|
||||
)
|
||||
|
||||
private fun terrainSeed(name: String, type: TerrainSeedBlock.TerrainSeedType) = this.create(
|
||||
name,
|
||||
TerrainSeedBlock(
|
||||
type,
|
||||
BlockBehaviour.Properties.of()
|
||||
.pushReaction(PushReaction.DESTROY)
|
||||
.ignitedByLava()
|
||||
.mapColor(MapColor.PLANT)
|
||||
.offsetType(BlockBehaviour.OffsetType.XZ)
|
||||
.noCollission()
|
||||
.randomTicks()
|
||||
.instabreak()
|
||||
)
|
||||
)
|
||||
|
||||
private fun terrainPlant(name: String, lightLevel: (BlockState) -> Int) = this.create(
|
||||
name,
|
||||
TerrainPlantBlock(
|
||||
BlockBehaviour.Properties.of()
|
||||
.mapColor(MapColor.PLANT)
|
||||
.noCollission()
|
||||
.instabreak()
|
||||
.sound(SoundType.GRASS)
|
||||
.offsetType(BlockBehaviour.OffsetType.XZ)
|
||||
.ignitedByLava()
|
||||
.pushReaction(PushReaction.DESTROY)
|
||||
.lightLevel(lightLevel)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -477,8 +477,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val DUBIOUS_DISC = itemNameBlockItem("dubious_disc", CobblemonBlocks.DUBIOUS_DISC)
|
||||
@JvmField val DEEP_SEA_SCALE = noSettingsItem("deep_sea_scale")
|
||||
@JvmField val DEEP_SEA_TOOTH = noSettingsItem("deep_sea_tooth")
|
||||
@JvmField val ELECTIRIZER = noSettingsItem("electirizer")
|
||||
@JvmField val MAGMARIZER = noSettingsItem("magmarizer")
|
||||
@JvmField val ELECTIRIZER = itemNameBlockItem("electirizer", CobblemonBlocks.ELECTIRIZER)
|
||||
@JvmField val MAGMARIZER = itemNameBlockItem("magmarizer", CobblemonBlocks.MAGMARIZER)
|
||||
@JvmField val OVAL_STONE = noSettingsItem("oval_stone")
|
||||
@JvmField val PROTECTOR = noSettingsItem("protector")
|
||||
@JvmField val REAPER_CLOTH = noSettingsItem("reaper_cloth")
|
||||
@@ -711,7 +711,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val PEP_UP_FLOWER = compostableBlockItem("pep_up_flower", CobblemonBlocks.PEP_UP_FLOWER)
|
||||
@JvmField
|
||||
val MEDICINAL_BREW = noSettingsItem("medicinal_brew")
|
||||
val MEDICINAL_BREW = itemNameBlockItem("medicinal_brew", CobblemonBlocks.MEDICINAL_BREW)
|
||||
@JvmField
|
||||
val REMEDY = compostableItem("remedy", RemedyItem(RemedyItem.NORMAL), 0.65f)
|
||||
@JvmField
|
||||
@@ -719,7 +719,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SUPERB_REMEDY = compostableItem("superb_remedy", RemedyItem(RemedyItem.SUPERB), 1f)
|
||||
@JvmField
|
||||
val MOOMOO_MILK = create("moomoo_milk", MoomooMilk(Item.Properties().craftRemainder(Items.GLASS_BOTTLE).stacksTo((16))))
|
||||
val MOOMOO_MILK = create("moomoo_milk", MoomooMilk(Item.Properties().craftRemainder(Items.GLASS_BOTTLE).stacksTo((16)), CobblemonBlocks.MOOMOO_MILK))
|
||||
|
||||
@JvmField
|
||||
val POTION = create("potion", PotionItem(PotionType.POTION, CobblemonBlocks.POTION))
|
||||
@@ -748,27 +748,27 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val RED_MINT_SEEDS = mintSeed("red", MintType.RED.getCropBlock())
|
||||
@JvmField
|
||||
val RED_MINT_LEAF = mintLeaf("red", MintLeafItem(MintType.RED))
|
||||
val RED_MINT_LEAF = compostableItemNameBlockItem("red_mint_leaf", CobblemonBlocks.RED_MINT_LEAF_LITTER, 0.50f)
|
||||
@JvmField
|
||||
val BLUE_MINT_SEEDS = mintSeed("blue", MintType.BLUE.getCropBlock())
|
||||
@JvmField
|
||||
val BLUE_MINT_LEAF = mintLeaf("blue", MintLeafItem(MintType.BLUE))
|
||||
val BLUE_MINT_LEAF = compostableItemNameBlockItem("blue_mint_leaf", CobblemonBlocks.BLUE_MINT_LEAF_LITTER, 0.50f)
|
||||
@JvmField
|
||||
val CYAN_MINT_SEEDS = mintSeed("cyan", MintType.CYAN.getCropBlock())
|
||||
@JvmField
|
||||
val CYAN_MINT_LEAF = mintLeaf("cyan", MintLeafItem(MintType.CYAN))
|
||||
val CYAN_MINT_LEAF = compostableItemNameBlockItem("cyan_mint_leaf", CobblemonBlocks.CYAN_MINT_LEAF_LITTER, 0.50f)
|
||||
@JvmField
|
||||
val PINK_MINT_SEEDS = mintSeed("pink", MintType.PINK.getCropBlock())
|
||||
@JvmField
|
||||
val PINK_MINT_LEAF = mintLeaf("pink", MintLeafItem(MintType.PINK))
|
||||
val PINK_MINT_LEAF = compostableItemNameBlockItem("pink_mint_leaf", CobblemonBlocks.PINK_MINT_LEAF_LITTER, 0.50f)
|
||||
@JvmField
|
||||
val GREEN_MINT_SEEDS = mintSeed("green", MintType.GREEN.getCropBlock())
|
||||
@JvmField
|
||||
val GREEN_MINT_LEAF = mintLeaf("green", MintLeafItem(MintType.GREEN))
|
||||
val GREEN_MINT_LEAF = compostableItemNameBlockItem("green_mint_leaf", CobblemonBlocks.GREEN_MINT_LEAF_LITTER, 0.50f)
|
||||
@JvmField
|
||||
val WHITE_MINT_SEEDS = mintSeed("white", MintType.WHITE.getCropBlock())
|
||||
@JvmField
|
||||
val WHITE_MINT_LEAF = mintLeaf("white", MintLeafItem(MintType.WHITE))
|
||||
val WHITE_MINT_LEAF = compostableItemNameBlockItem("white_mint_leaf", CobblemonBlocks.WHITE_MINT_LEAF_LITTER, 0.50f)
|
||||
|
||||
val mints = mutableMapOf<String, MintItem>()
|
||||
|
||||
@@ -969,7 +969,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val EJECT_PACK = heldItem("eject_pack")
|
||||
@JvmField
|
||||
val ELECTRIC_SEED = heldItem("electric_seed")
|
||||
val ELECTRIC_SEED = itemNameBlockItem("electric_seed", CobblemonBlocks.ELECTRIC_SEED)
|
||||
@JvmField
|
||||
val EVERSTONE = heldItem("everstone")
|
||||
@JvmField
|
||||
@@ -985,7 +985,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val FOCUS_SASH = heldItem("focus_sash")
|
||||
@JvmField
|
||||
val GRASSY_SEED = heldItem("grassy_seed")
|
||||
val GRASSY_SEED = itemNameBlockItem("grassy_seed", CobblemonBlocks.GRASSY_SEED)
|
||||
@JvmField
|
||||
val GRIP_CLAW = heldItem("grip_claw")
|
||||
@JvmField
|
||||
@@ -1033,7 +1033,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val POWER_WEIGHT = heldItem("power_weight")
|
||||
@JvmField
|
||||
val PSYCHIC_SEED = heldItem("psychic_seed")
|
||||
val PSYCHIC_SEED = itemNameBlockItem("psychic_seed", CobblemonBlocks.PSYCHIC_SEED)
|
||||
@JvmField
|
||||
val PROTECTIVE_PADS = heldItem("protective_pads")
|
||||
@JvmField
|
||||
@@ -1057,7 +1057,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val SILVER_POWDER = heldItem("silver_powder")
|
||||
@JvmField
|
||||
val SOFT_SAND = heldItem("soft_sand")
|
||||
val SOFT_SAND = itemNameBlockItem("soft_sand", CobblemonBlocks.SOFT_SAND)
|
||||
@JvmField
|
||||
val SMOKE_BALL = itemNameBlockItem("smoke_ball", CobblemonBlocks.SMOKE_BALL)
|
||||
@JvmField
|
||||
@@ -1065,7 +1065,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val STICKY_BARB = heldItem("sticky_barb")
|
||||
@JvmField
|
||||
val TERRAIN_EXTENDER = heldItem("terrain_extender")
|
||||
val TERRAIN_EXTENDER = itemNameBlockItem("terrain_extender", CobblemonBlocks.TERRAIN_EXTENDER)
|
||||
@JvmField
|
||||
val THROAT_SPRAY = itemNameBlockItem("throat_spray", CobblemonBlocks.THROAT_SPRAY)
|
||||
@JvmField
|
||||
@@ -1085,13 +1085,13 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val MIRROR_HERB = compostableHeldItem("mirror_herb", null, 0.85F)
|
||||
@JvmField
|
||||
val MISTY_SEED = heldItem("misty_seed")
|
||||
val MISTY_SEED = itemNameBlockItem("misty_seed", CobblemonBlocks.MISTY_SEED)
|
||||
@JvmField
|
||||
val POWER_HERB = compostableHeldItem("power_herb", null, 0.85F)
|
||||
@JvmField
|
||||
val WHITE_HERB = compostableHeldItem("white_herb", null, 0.85F)
|
||||
@JvmField
|
||||
val BRIGHT_POWDER = itemNameBlockItem("bright_powder", CobblemonBlocks.BRIGHT_POWDER)
|
||||
val BRIGHT_POWDER = glowItem("bright_powder", CobblemonBlocks.BRIGHT_POWDER)
|
||||
@JvmField
|
||||
val METAL_POWDER = itemNameBlockItem("metal_powder", CobblemonBlocks.METAL_POWDER)
|
||||
@JvmField
|
||||
@@ -1558,6 +1558,25 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
//@JvmField
|
||||
//val BINDING_SOIL = blockItem("binding_soil", CobblemonBlocks.BINDING_SOIL)
|
||||
|
||||
// Plants, Flora, and Flowers
|
||||
@JvmField
|
||||
val LOBAILA = compostableBlockItem("lobaila", CobblemonBlocks.LOBAILA, 0.65f)
|
||||
@JvmField
|
||||
val POMOHANA = compostableBlockItem("pomohana", CobblemonBlocks.POMOHANA, 0.3f)
|
||||
@JvmField
|
||||
val PAUVILLEA = compostableBlockItem("pauvillea", CobblemonBlocks.PAUVILLEA, 0.65f)
|
||||
@JvmField
|
||||
val WISTENSU = compostableBlockItem("wistensu", CobblemonBlocks.WISTENSU, 0.5f)
|
||||
|
||||
@JvmField
|
||||
val VOLTACONIA = compostableBlockItem("voltaconia", CobblemonBlocks.VOLTACONIA, 0.85f)
|
||||
@JvmField
|
||||
val VERDROOT = compostableBlockItem("verdroot", CobblemonBlocks.VERDROOT, 0.85f)
|
||||
@JvmField
|
||||
val MISTLEAF = compostableBlockItem("mistleaf", CobblemonBlocks.MISTLEAF, 0.85f)
|
||||
@JvmField
|
||||
val LUCIBELL = compostableBlockItem("lucibell", CobblemonBlocks.LUCIBELL, 0.85f)
|
||||
|
||||
private fun blockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): BlockItem = this.create(name, BlockItem(block, Item.Properties().rarity(rarity)))
|
||||
|
||||
private fun itemNameBlockItem(name: String, block: Block, rarity: Rarity = Rarity.COMMON): ItemNameBlockItem = this.create(name, ItemNameBlockItem(block, Item.Properties().rarity(rarity)))
|
||||
@@ -1760,4 +1779,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
private fun foodItem(nutrition: Int, saturationModifier: Float): Item {
|
||||
return CobblemonItem(Item.Properties().food(FoodProperties.Builder().nutrition(nutrition).saturationModifier(saturationModifier).build()))
|
||||
}
|
||||
|
||||
private fun glowItem(name: String, block: Block): GlowItem = this.create(name, GlowItem(block, Item.Properties()))
|
||||
}
|
||||
|
||||
@@ -148,6 +148,9 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, ResourceKey<Regi
|
||||
@JvmField
|
||||
val MONITOR_GLITCHING = this.create("block.monitor.glitching")
|
||||
|
||||
@JvmField
|
||||
val BRIGHT_POWDER_USE = this.create("block.bright_powder.use")
|
||||
|
||||
@JvmField
|
||||
val FOSSIL_MACHINE_ACTIVATE = this.create("block.fossil_machine.activate")
|
||||
@JvmField
|
||||
@@ -717,5 +720,35 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, ResourceKey<Regi
|
||||
ITEM_BLOCK_DICE_STEP
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val ITEM_BLOCK_METAL_CAN_PLACE = this.create("block.item_block.metal_can.place")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_METAL_CAN_BREAK = this.create("block.item_block.metal_can.break")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_METAL_CAN_STEP = this.create("block.item_block.metal_can.step")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_METAL_CAN_SOUNDS = SoundType(1f, 1.1f,
|
||||
ITEM_BLOCK_METAL_CAN_BREAK,
|
||||
ITEM_BLOCK_METAL_CAN_STEP,
|
||||
ITEM_BLOCK_METAL_CAN_PLACE,
|
||||
ITEM_BLOCK_METAL_CAN_STEP,
|
||||
ITEM_BLOCK_METAL_CAN_STEP
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val ITEM_BLOCK_JAR_GLASS_LIQUID_PLACE = this.create("block.item_block.jar_glass_liquid.place")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_JAR_GLASS_LIQUID_BREAK = this.create("block.item_block.jar_glass_liquid.break")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_JAR_GLASS_LIQUID_STEP = this.create("block.item_block.jar_glass_liquid.step")
|
||||
@JvmField
|
||||
val ITEM_BLOCK_JAR_GLASS_LIQUID_SOUNDS = SoundType(1f, 1.1f,
|
||||
ITEM_BLOCK_JAR_GLASS_LIQUID_BREAK,
|
||||
ITEM_BLOCK_JAR_GLASS_LIQUID_STEP,
|
||||
ITEM_BLOCK_JAR_GLASS_LIQUID_PLACE,
|
||||
ITEM_BLOCK_JAR_GLASS_LIQUID_STEP,
|
||||
ITEM_BLOCK_JAR_GLASS_LIQUID_STEP
|
||||
)
|
||||
|
||||
private fun create(name: String): SoundEvent = this.create(name, SoundEvent.createVariableRangeEvent(cobblemonResource(name)))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.api.battles.model
|
||||
|
||||
/**
|
||||
* How a [PokemonBattle] came to an end.
|
||||
*/
|
||||
enum class BattleEndResult {
|
||||
/** One side defeated the other. */
|
||||
VICTORY,
|
||||
/** A wild Pokémon was captured, ending the battle. */
|
||||
CAPTURE,
|
||||
/** An actor forfeited, giving the victory to the other side. */
|
||||
FORFEIT,
|
||||
/** A player fled from a wild Pokémon. */
|
||||
FLED,
|
||||
/** The battle was stopped without a winner, such as by a command, a player disconnecting or an error. */
|
||||
STOPPED
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.EntityBackedBattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.FleeableBattleActor
|
||||
import com.cobblemon.mod.common.api.events.CobblemonEvents
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleEndedEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleFledEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleFleeAttemptEvent
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMoLangValue
|
||||
@@ -124,6 +125,12 @@ open class PokemonBattle(
|
||||
var winners = listOf<BattleActor>()
|
||||
var losers = listOf<BattleActor>()
|
||||
var ended = false
|
||||
/** How the battle ended, or null if it hasn't ended yet. */
|
||||
var endResult: BattleEndResult? = null
|
||||
/** The actor that forfeited the battle, if any. */
|
||||
var forfeitedBy: BattleActor? = null
|
||||
/** Whether a player fled from the battle. */
|
||||
var fled = false
|
||||
// TEMP battle showcase stuff
|
||||
var announcingRules = false
|
||||
var turn: Int = 0
|
||||
@@ -251,6 +258,14 @@ open class PokemonBattle(
|
||||
|
||||
fun end() {
|
||||
ended = true
|
||||
val result = when {
|
||||
winners.isNotEmpty() && showdownMessages.any { "capture" in it } -> BattleEndResult.CAPTURE
|
||||
winners.isNotEmpty() && forfeitedBy != null -> BattleEndResult.FORFEIT
|
||||
winners.isNotEmpty() -> BattleEndResult.VICTORY
|
||||
fled -> BattleEndResult.FLED
|
||||
else -> BattleEndResult.STOPPED
|
||||
}
|
||||
endResult = result
|
||||
val awardToFainted = Cobblemon.config.awardExperienceToFaintedPokemon
|
||||
val awardOnLoss = Cobblemon.config.awardExperienceOnBattleLoss
|
||||
this.actors.forEach { actor ->
|
||||
@@ -332,6 +347,7 @@ open class PokemonBattle(
|
||||
}
|
||||
}
|
||||
}
|
||||
CobblemonEvents.BATTLE_ENDED.post(BattleEndedEvent(this, result, forfeitedBy.takeIf { result == BattleEndResult.FORFEIT }))
|
||||
sendUpdate(BattleEndPacket())
|
||||
BattleRegistry.closeBattle(this)
|
||||
}
|
||||
@@ -502,6 +518,7 @@ open class PokemonBattle(
|
||||
.forEach{it.pokemon.heal()}
|
||||
CobblemonEvents.BATTLE_FLED.post(BattleFledEvent(this, actors.asSequence().filterIsInstance<PlayerBattleActor>().iterator().next()))
|
||||
actors.filterIsInstance<EntityBackedBattleActor<*>>().mapNotNull { it.entity }.forEach { it.sendSystemMessage(battleLang("flee").yellow()) }
|
||||
fled = true
|
||||
stop()
|
||||
}
|
||||
}
|
||||
@@ -539,6 +556,7 @@ open class PokemonBattle(
|
||||
private fun checkForfeit(): Boolean {
|
||||
val forfeit = actors.find { it.responses.any { it is ForfeitActionResponse } }
|
||||
return forfeit?.let {
|
||||
forfeitedBy = it
|
||||
this.dispatchWaiting { this.broadcastChatMessage(battleLang("forfeit", it.getName()).red()) }
|
||||
writeShowdownAction(">forcelose ${it.showdownId}")
|
||||
true
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.cobblemon.mod.common.api.events.battles.BattleFaintedEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleFledEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleFleeAttemptEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleStartedEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleEndedEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.BattleVictoryEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.instruction.FormeChangeEvent
|
||||
import com.cobblemon.mod.common.api.events.battles.instruction.MegaEvolutionEvent
|
||||
@@ -139,6 +140,9 @@ object CobblemonEvents {
|
||||
@JvmField
|
||||
val BATTLE_FAINTED = EventObservable<BattleFaintedEvent>()
|
||||
|
||||
@JvmField
|
||||
val BATTLE_ENDED = EventObservable<BattleEndedEvent>()
|
||||
|
||||
// instructions
|
||||
@JvmField
|
||||
val MEGA_EVOLUTION = EventObservable<MegaEvolutionEvent>()
|
||||
|
||||
+69
@@ -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.api.events.battles
|
||||
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.bedrockk.molang.runtime.value.MoValue
|
||||
import com.bedrockk.molang.runtime.value.StringValue
|
||||
import com.cobblemon.mod.common.api.battles.model.BattleEndResult
|
||||
import com.cobblemon.mod.common.api.battles.model.PokemonBattle
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.api.battles.model.actor.ActorType
|
||||
import com.cobblemon.mod.common.util.asArrayValue
|
||||
|
||||
/**
|
||||
* Event fired whenever a [PokemonBattle] ends, regardless of how it ended (victory, fleeing, being stopped, etc).
|
||||
*
|
||||
* [PokemonBattle.winners] and [PokemonBattle.losers] are only populated if the [result] has a winner,
|
||||
* that is [BattleEndResult.VICTORY], [BattleEndResult.CAPTURE] or [BattleEndResult.FORFEIT].
|
||||
*
|
||||
* @param result How the battle ended.
|
||||
* @param forfeitedBy The actor that forfeited, if the [result] is [BattleEndResult.FORFEIT].
|
||||
*/
|
||||
data class BattleEndedEvent(
|
||||
override val battle: PokemonBattle,
|
||||
val result: BattleEndResult,
|
||||
val forfeitedBy: BattleActor?
|
||||
) : BattleEvent {
|
||||
/** Whether one side won the battle, which includes captures and forfeits. */
|
||||
val hasWinner = battle.winners.isNotEmpty()
|
||||
val wasVictory = result == BattleEndResult.VICTORY
|
||||
val wasCapture = result == BattleEndResult.CAPTURE
|
||||
val wasForfeit = result == BattleEndResult.FORFEIT
|
||||
val wasFled = result == BattleEndResult.FLED
|
||||
val wasStopped = result == BattleEndResult.STOPPED
|
||||
|
||||
/** Whether the battle was between players and wild Pokémon. */
|
||||
val isPvW = battle.isPvW
|
||||
/** Whether the battle was between players and NPCs. */
|
||||
val isPvN = battle.isPvN
|
||||
/** Whether the battle was between players. */
|
||||
val isPvP = battle.isPvP
|
||||
|
||||
val context = mutableMapOf<String, MoValue>(
|
||||
"battle" to battle.struct,
|
||||
"result" to StringValue(result.name.lowercase()),
|
||||
"has_winner" to DoubleValue(hasWinner),
|
||||
"was_victory" to DoubleValue(wasVictory),
|
||||
"was_capture" to DoubleValue(wasCapture),
|
||||
"was_forfeit" to DoubleValue(wasForfeit),
|
||||
"was_fled" to DoubleValue(wasFled),
|
||||
"was_stopped" to DoubleValue(wasStopped),
|
||||
"is_pvw" to DoubleValue(isPvW),
|
||||
"is_pvn" to DoubleValue(isPvN),
|
||||
"is_pvp" to DoubleValue(isPvP),
|
||||
"winners" to battle.winners.asArrayValue { it.struct },
|
||||
"losers" to battle.losers.asArrayValue { it.struct },
|
||||
"players" to battle.actors.filter { it.type == ActorType.PLAYER }.asArrayValue { it.struct },
|
||||
"npcs" to battle.actors.filter { it.type == ActorType.NPC }.asArrayValue { it.struct },
|
||||
"wild_pokemon" to battle.actors.filter { it.type == ActorType.WILD }.asArrayValue { it.struct }
|
||||
).apply {
|
||||
forfeitedBy?.let { put("forfeited_by", it.struct) }
|
||||
}
|
||||
}
|
||||
+2
@@ -16,6 +16,7 @@ import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMoLangValue
|
||||
import com.cobblemon.mod.common.battles.actor.PlayerBattleActor
|
||||
import com.cobblemon.mod.common.battles.actor.PokemonBattleActor
|
||||
import com.cobblemon.mod.common.entity.npc.NPCBattleActor
|
||||
import com.cobblemon.mod.common.util.asArrayValue
|
||||
|
||||
object BattleActorMoLangFunctions : AbstractMoLangFunctionHolder<BattleActor>() {
|
||||
override fun BattleActor.moLangFunctions(): MutableMap<String, (MoParams) -> Any> {
|
||||
@@ -25,6 +26,7 @@ object BattleActorMoLangFunctions : AbstractMoLangFunctionHolder<BattleActor>()
|
||||
functions["is_npc"] = { DoubleValue(actor.type == ActorType.NPC) }
|
||||
functions["is_player"] = { DoubleValue(actor.type == ActorType.PLAYER) }
|
||||
functions["is_wild"] = { DoubleValue(actor.type == ActorType.WILD) }
|
||||
functions["battle_pokemon"] = { actor.pokemonList.asArrayValue { it.struct } }
|
||||
|
||||
when (actor) {
|
||||
is NPCBattleActor -> {
|
||||
|
||||
+16
-2
@@ -15,6 +15,8 @@ import com.cobblemon.mod.common.block.entity.PokeSnackBlockEntity
|
||||
import com.cobblemon.mod.common.client.entity.PokemonClientDelegate
|
||||
import com.cobblemon.mod.common.client.render.MatrixWrapper
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.ParticleStatus
|
||||
import net.minecraft.core.particles.BlockParticleOption
|
||||
import net.minecraft.core.particles.ParticleOptions
|
||||
import net.minecraft.core.particles.ParticleTypes
|
||||
@@ -40,13 +42,25 @@ sealed class ParticleData {
|
||||
val chance: Double,
|
||||
val amount: Int,
|
||||
val locatorResolver: (Map<String, MatrixWrapper>) -> List<String>
|
||||
): ParticleData()
|
||||
): ParticleData() {
|
||||
fun amount(): Int = when(Minecraft.getInstance().options.particles().get()) {
|
||||
ParticleStatus.ALL -> amount
|
||||
ParticleStatus.DECREASED -> amount / 2
|
||||
ParticleStatus.MINIMAL -> amount / 4
|
||||
}
|
||||
}
|
||||
|
||||
data class MinecraftParticle(
|
||||
val particle: ParticleOptions,
|
||||
val chance: Double,
|
||||
val amount: Int
|
||||
): ParticleData()
|
||||
): ParticleData() {
|
||||
fun amount(): Int = when(Minecraft.getInstance().options.particles().get()) {
|
||||
ParticleStatus.ALL -> amount
|
||||
ParticleStatus.DECREASED -> amount / 2
|
||||
ParticleStatus.MINIMAL -> amount / 4
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.isBoxLoaded
|
||||
import com.cobblemon.mod.common.util.removeIf
|
||||
import com.cobblemon.mod.common.util.squeezeWithinBounds
|
||||
import com.cobblemon.mod.common.util.toBlockPos
|
||||
import com.cobblemon.mod.common.util.toVec3f
|
||||
import com.cobblemon.mod.common.util.weightedSelection
|
||||
import kotlin.math.max
|
||||
@@ -190,74 +191,61 @@ interface Spawner {
|
||||
}
|
||||
|
||||
fun isValidStartPoint(world: Level, chunk: ChunkAccess, startPos: BlockPos.MutableBlockPos): Boolean {
|
||||
val y = startPos.y
|
||||
if (!world.isLoaded(startPos) || !world.isLoaded(startPos.setY(y + 1))) {
|
||||
val abovePos = startPos.above()
|
||||
if (!world.isLoaded(startPos) || !world.isLoaded(abovePos)) {
|
||||
return false
|
||||
}
|
||||
val mid = chunk.getBlockState(startPos)
|
||||
val above = chunk.getBlockState(abovePos)
|
||||
|
||||
val mid = chunk.getBlockState(startPos.setY(y))
|
||||
val above = chunk.getBlockState(startPos.setY(y + 1))
|
||||
|
||||
// Above must be non-solid
|
||||
if (!above.isPathfindable(PathComputationType.AIR)) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Position must be non-air
|
||||
if (mid.isAir) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
return above.isPathfindable(PathComputationType.AIR) && mid.isAir
|
||||
}
|
||||
|
||||
fun constrainArea(area: SpawningZoneInput): SpawningZoneInput? {
|
||||
val basePos = BlockPos.MutableBlockPos(area.baseX, area.baseY, area.baseZ)
|
||||
val originalY = area.baseY
|
||||
|
||||
val (chunkX, chunkZ) = Pair(SectionPos.blockToSectionCoord(area.baseX), SectionPos.blockToSectionCoord(area.baseZ))
|
||||
val world = area.world
|
||||
val centerPos = area.getCenter().toBlockPos()
|
||||
|
||||
val (centerChunkX, centerChunkZ) = Pair(SectionPos.blockToSectionCoord(centerPos.x), SectionPos.blockToSectionCoord(centerPos.z))
|
||||
// if the chunk isn't loaded, we don't want to go further & we don't want the getChunk function below to load/create the chunk.
|
||||
if (!area.world.areEntitiesLoaded(ChunkPos.asLong(chunkX, chunkZ))) return null
|
||||
if (!world.areEntitiesLoaded(ChunkPos.asLong(centerChunkX, centerChunkZ))) return null
|
||||
|
||||
val chunk = area.world.getChunk(chunkX, chunkZ, ChunkStatus.FULL) ?: return null
|
||||
val chunk = world.getChunk(centerChunkX, centerChunkZ, ChunkStatus.FULL) ?: return null
|
||||
|
||||
var valid = isValidStartPoint(area.world, chunk, basePos)
|
||||
val probePos = centerPos.mutable()
|
||||
var validY = if (isValidStartPoint(world, chunk, probePos)) centerPos.y else null
|
||||
|
||||
if (!valid) {
|
||||
var offset = 1
|
||||
do {
|
||||
if (isValidStartPoint(area.world, chunk, basePos.setY(originalY + offset))) {
|
||||
valid = true
|
||||
basePos.y = originalY + offset
|
||||
if (validY == null) {
|
||||
for (offset in 1..Cobblemon.config.maxVerticalCorrectionBlocks) {
|
||||
if (isValidStartPoint(world, chunk, probePos.set(centerPos.x, centerPos.y + offset, centerPos.z))) {
|
||||
validY = centerPos.y + offset
|
||||
break
|
||||
} else if (isValidStartPoint(area.world, chunk, basePos.setY(originalY - offset))) {
|
||||
valid = true
|
||||
basePos.y = originalY - offset
|
||||
} else if (isValidStartPoint(world, chunk, probePos.set(centerPos.x, centerPos.y - offset, centerPos.z))) {
|
||||
validY = centerPos.y - offset
|
||||
break
|
||||
}
|
||||
offset++
|
||||
} while (offset <= Cobblemon.config.maxVerticalCorrectionBlocks)
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
val min = area.world.squeezeWithinBounds(basePos)
|
||||
val max = area.world.squeezeWithinBounds(basePos.move(area.length, area.height, area.width))
|
||||
if (area.world.isLoaded(min) && area.world.isLoaded(max) &&
|
||||
min.x < max.x && min.y < max.y && min.z < max.z
|
||||
) {
|
||||
return SpawningZoneInput(
|
||||
cause = area.cause,
|
||||
world = area.world,
|
||||
baseX = min.x,
|
||||
baseY = min.y,
|
||||
baseZ = min.z,
|
||||
length = max.x - min.x,
|
||||
height = max.y - min.y,
|
||||
width = max.z - min.z
|
||||
)
|
||||
}
|
||||
}
|
||||
val targetY = validY ?: return null
|
||||
val newBaseY = (targetY - (area.height / 2)).coerceIn(world.minBuildHeight, world.maxBuildHeight)
|
||||
val minPos = world.squeezeWithinBounds(BlockPos(area.baseX, newBaseY, area.baseZ))
|
||||
val maxPos = world.squeezeWithinBounds(BlockPos(area.baseX + area.length, newBaseY + area.height, area.baseZ + area.width))
|
||||
|
||||
val finalBox = AABB(
|
||||
minPos.x.toDouble(), minPos.y.toDouble(), minPos.z.toDouble(),
|
||||
maxPos.x.toDouble(), maxPos.y.toDouble(), maxPos.z.toDouble()
|
||||
)
|
||||
if (minPos.x < maxPos.x && minPos.y < maxPos.y && minPos.z < maxPos.z && world.isBoxLoaded(finalBox)) {
|
||||
return SpawningZoneInput(
|
||||
cause = area.cause,
|
||||
world = world,
|
||||
baseX = minPos.x,
|
||||
baseY = minPos.y,
|
||||
baseZ = minPos.z,
|
||||
length = maxPos.x - minPos.x,
|
||||
height = maxPos.y - minPos.y,
|
||||
width = maxPos.z - minPos.z
|
||||
)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ class ElementalType(
|
||||
val resourceLocation: ResourceLocation = ResourceLocation.fromNamespaceAndPath(Cobblemon.MODID, "ui/types.png"),
|
||||
val showdownId: String = ShowdownIdentifiable.REGEX.replace(name.lowercase(), ""),
|
||||
val typeGem: ResourceLocation = ResourceLocation.fromNamespaceAndPath(Cobblemon.MODID, showdownId + "_gem"),
|
||||
val order: Int = 1000
|
||||
) : ShowdownIdentifiable {
|
||||
|
||||
override fun showdownId(): String {
|
||||
|
||||
@@ -25,7 +25,8 @@ object ElementalTypes {
|
||||
hue = 0xE8E8DA,
|
||||
textureXMultiplier = 0,
|
||||
primaryColor = 0x8FA689,
|
||||
secondaryColor = 0xFFFBE2
|
||||
secondaryColor = 0xFFFBE2,
|
||||
order = 0
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -35,7 +36,8 @@ object ElementalTypes {
|
||||
hue = 0xFF6E21,
|
||||
textureXMultiplier = 1,
|
||||
primaryColor = 0xF92D2D,
|
||||
secondaryColor = 0xF99B1D
|
||||
secondaryColor = 0xF99B1D,
|
||||
order = 1
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -45,7 +47,8 @@ object ElementalTypes {
|
||||
hue = 0x3FA5FF,
|
||||
textureXMultiplier = 2,
|
||||
primaryColor = 0x377AF6,
|
||||
secondaryColor = 0x50DDF9
|
||||
secondaryColor = 0x50DDF9,
|
||||
order = 2
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -55,7 +58,8 @@ object ElementalTypes {
|
||||
hue = 0x62D14F,
|
||||
textureXMultiplier = 3,
|
||||
primaryColor = 0x0EAE95,
|
||||
secondaryColor = 0xC6F554
|
||||
secondaryColor = 0xC6F554,
|
||||
order = 3
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -65,7 +69,8 @@ object ElementalTypes {
|
||||
hue = 0xFFD314,
|
||||
textureXMultiplier = 4,
|
||||
primaryColor = 0xF7AB19,
|
||||
secondaryColor = 0xFFF257
|
||||
secondaryColor = 0xFFF257,
|
||||
order = 4
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -75,7 +80,8 @@ object ElementalTypes {
|
||||
hue = 0x54F2F2,
|
||||
textureXMultiplier = 5,
|
||||
primaryColor = 0x41BAED,
|
||||
secondaryColor = 0x91F4F9
|
||||
secondaryColor = 0x91F4F9,
|
||||
order = 5
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -85,7 +91,8 @@ object ElementalTypes {
|
||||
hue = 0xEF565D,
|
||||
textureXMultiplier = 6,
|
||||
primaryColor = 0xC8356B,
|
||||
secondaryColor = 0xF36A3F
|
||||
secondaryColor = 0xF36A3F,
|
||||
order = 6
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -95,7 +102,8 @@ object ElementalTypes {
|
||||
hue = 0xD651FF,
|
||||
textureXMultiplier = 7,
|
||||
primaryColor = 0x7B41DD,
|
||||
secondaryColor = 0xE568F4
|
||||
secondaryColor = 0xE568F4,
|
||||
order = 7
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -105,7 +113,8 @@ object ElementalTypes {
|
||||
hue = 0xF4A453,
|
||||
textureXMultiplier = 8,
|
||||
primaryColor = 0xE08835,
|
||||
secondaryColor = 0xFFD057
|
||||
secondaryColor = 0xFFD057,
|
||||
order = 8
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -115,7 +124,8 @@ object ElementalTypes {
|
||||
hue = 0xB8B2FF,
|
||||
textureXMultiplier = 9,
|
||||
primaryColor = 0x6083F6,
|
||||
secondaryColor = 0xD5CCFA
|
||||
secondaryColor = 0xD5CCFA,
|
||||
order = 9
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -125,7 +135,8 @@ object ElementalTypes {
|
||||
hue = 0xFF5E9E,
|
||||
textureXMultiplier = 10,
|
||||
primaryColor = 0xE553CE,
|
||||
secondaryColor = 0xF69DD5
|
||||
secondaryColor = 0xF69DD5,
|
||||
order = 10
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -135,7 +146,8 @@ object ElementalTypes {
|
||||
hue = 0xD3D319,
|
||||
textureXMultiplier = 11,
|
||||
primaryColor = 0x9FBE1B,
|
||||
secondaryColor = 0xE9FB5B
|
||||
secondaryColor = 0xE9FB5B,
|
||||
order = 11
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -145,7 +157,8 @@ object ElementalTypes {
|
||||
hue = 0xB7A16E,
|
||||
textureXMultiplier = 12,
|
||||
primaryColor = 0x9F814A,
|
||||
secondaryColor = 0xEECB7A
|
||||
secondaryColor = 0xEECB7A,
|
||||
order = 12
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -155,7 +168,8 @@ object ElementalTypes {
|
||||
hue = 0x9C80F7,
|
||||
textureXMultiplier = 13,
|
||||
primaryColor = 0x4F57DD,
|
||||
secondaryColor = 0xC182F1
|
||||
secondaryColor = 0xC182F1,
|
||||
order = 13
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -165,7 +179,8 @@ object ElementalTypes {
|
||||
hue = 0x7580FF,
|
||||
textureXMultiplier = 14,
|
||||
primaryColor = 0x4E68E2,
|
||||
secondaryColor = 0x47C7F7
|
||||
secondaryColor = 0x47C7F7,
|
||||
order = 14
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -175,7 +190,8 @@ object ElementalTypes {
|
||||
hue = 0x587DA0,
|
||||
textureXMultiplier = 15,
|
||||
primaryColor = 0x465B99,
|
||||
secondaryColor = 0x689EBF
|
||||
secondaryColor = 0x689EBF,
|
||||
order = 15
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -185,7 +201,8 @@ object ElementalTypes {
|
||||
hue = 0xABD1F4,
|
||||
textureXMultiplier = 16,
|
||||
primaryColor = 0x628CB9,
|
||||
secondaryColor = 0xD6F7F3
|
||||
secondaryColor = 0xD6F7F3,
|
||||
order = 16
|
||||
)
|
||||
|
||||
@JvmField
|
||||
@@ -195,18 +212,21 @@ object ElementalTypes {
|
||||
hue = 0xFF7FE5,
|
||||
textureXMultiplier = 17,
|
||||
primaryColor = 0xE2678C,
|
||||
secondaryColor = 0xF5A7B7
|
||||
secondaryColor = 0xF5A7B7,
|
||||
order = 17
|
||||
)
|
||||
|
||||
@JvmStatic
|
||||
fun register(name: String, displayName: MutableComponent, hue: Int, textureXMultiplier: Int, primaryColor: Int, secondaryColor: Int): ElementalType {
|
||||
@JvmOverloads
|
||||
fun register(name: String, displayName: MutableComponent, hue: Int, textureXMultiplier: Int, primaryColor: Int, secondaryColor: Int, order: Int = 1000): ElementalType {
|
||||
return ElementalType(
|
||||
name = name,
|
||||
displayName = displayName,
|
||||
hue = hue,
|
||||
textureXMultiplier = textureXMultiplier,
|
||||
primaryColor = primaryColor,
|
||||
secondaryColor = secondaryColor
|
||||
secondaryColor = secondaryColor,
|
||||
order = order
|
||||
).also {
|
||||
allTypes.add(it)
|
||||
}
|
||||
|
||||
@@ -83,7 +83,8 @@ open class BattlePokemon(
|
||||
"max_health" to Function { DoubleValue(maxHealth.toDouble()) },
|
||||
"ivs" to Function { effectedPokemon.ivs.struct },
|
||||
"nature" to Function { StringValue(effectedPokemon.nature.name.toString()) },
|
||||
"moveset" to Function { effectedPokemon.moveSet.toStruct() }
|
||||
"moveset" to Function { effectedPokemon.moveSet.toStruct() },
|
||||
"has_faced_opponents" to Function { DoubleValue(facedOpponents.isNotEmpty()) }
|
||||
))
|
||||
|
||||
val uuid: UUID
|
||||
|
||||
@@ -48,7 +48,8 @@ class DecorativeItemBlock(settings: Properties, val type: DecorativeItemBlockTyp
|
||||
NEVERMELT,
|
||||
SCOPE,
|
||||
WIDE,
|
||||
ZOOM;
|
||||
ZOOM,
|
||||
IZER;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
@@ -76,6 +77,7 @@ class DecorativeItemBlock(settings: Properties, val type: DecorativeItemBlockTyp
|
||||
val SCOPE_HITBOX = Shapes.box(0.625, 0.0, 0.4375, 0.9375, 0.125, 0.75)
|
||||
val WIDE_HITBOX = Shapes.box(0.625, 0.0, 0.125, 0.9375, 0.0625, 0.625)
|
||||
val ZOOM_HITBOX = Shapes.box(0.125, 0.0, 0.1875, 0.375, 0.1875, 0.5)
|
||||
val IZER_HITBOX = Shapes.box(0.25, 0.0, 0.25, 0.75, 0.375, 0.75)
|
||||
|
||||
fun getShape(type: DecorativeItemBlockType): VoxelShape {
|
||||
return when (type) {
|
||||
@@ -87,6 +89,7 @@ class DecorativeItemBlock(settings: Properties, val type: DecorativeItemBlockTyp
|
||||
DecorativeItemBlockType.SCOPE -> SCOPE_HITBOX
|
||||
DecorativeItemBlockType.WIDE -> WIDE_HITBOX
|
||||
DecorativeItemBlockType.ZOOM -> ZOOM_HITBOX
|
||||
DecorativeItemBlockType.IZER -> IZER_HITBOX
|
||||
DecorativeItemBlockType.FLATTENED_10x4 -> SMOOSHED4_HITBOX
|
||||
DecorativeItemBlockType.FLATTENED_8x4 -> FLAT4_HITBOX
|
||||
DecorativeItemBlockType.FLATTENED_8x6 -> FLAT6_HITBOX
|
||||
|
||||
@@ -103,15 +103,15 @@ class MintBlock(private val mintType: MintType, settings: Properties) : CropBloc
|
||||
GREEN -> CobblemonItems.GREEN_MINT_SEEDS
|
||||
WHITE -> CobblemonItems.WHITE_MINT_SEEDS
|
||||
}
|
||||
|
||||
fun getLeaf(): MintLeafItem = when (this) {
|
||||
RED -> CobblemonItems.RED_MINT_LEAF
|
||||
BLUE -> CobblemonItems.BLUE_MINT_LEAF
|
||||
CYAN -> CobblemonItems.CYAN_MINT_LEAF
|
||||
PINK -> CobblemonItems.PINK_MINT_LEAF
|
||||
GREEN -> CobblemonItems.GREEN_MINT_LEAF
|
||||
WHITE -> CobblemonItems.WHITE_MINT_LEAF
|
||||
}
|
||||
// These don't seem to get called to anywhere besides the direct item, and since I'm trying to do funny stuff there, just commenting this out
|
||||
// fun getLeaf(): MintLeafItem = when (this) {
|
||||
// RED -> CobblemonItems.RED_MINT_LEAF
|
||||
// BLUE -> CobblemonItems.BLUE_MINT_LEAF
|
||||
// CYAN -> CobblemonItems.CYAN_MINT_LEAF
|
||||
// PINK -> CobblemonItems.PINK_MINT_LEAF
|
||||
// GREEN -> CobblemonItems.GREEN_MINT_LEAF
|
||||
// WHITE -> CobblemonItems.WHITE_MINT_LEAF
|
||||
// }
|
||||
|
||||
fun getCropBlock(): MintBlock = when (this) {
|
||||
RED -> CobblemonBlocks.RED_MINT
|
||||
|
||||
@@ -45,7 +45,9 @@ class StackableItemBlock(settings: Properties, val type: StackableItemBlockType)
|
||||
IRON_BALL,
|
||||
THROAT_SPRAY,
|
||||
UPGRADE,
|
||||
DICE;
|
||||
DICE,
|
||||
GLASS_BOTTLE,
|
||||
EXTENDER;
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
@@ -133,6 +135,18 @@ class StackableItemBlock(settings: Properties, val type: StackableItemBlockType)
|
||||
Shapes.box(0.125, 0.0, 0.625, 0.5625, 0.1875, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.4375, 0.5625, 0.1875, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.4375, 0.5625, 0.375, 0.875)
|
||||
),
|
||||
StackableItemBlockType.GLASS_BOTTLE to listOf(
|
||||
Shapes.box(0.375, 0.0, 0.375, 0.625, 0.375, 0.625),
|
||||
Shapes.box(0.1875, 0.0, 0.1875, 0.8125, 0.375, 0.6875),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.8125, 0.375, 0.875),
|
||||
Shapes.box(0.125, 0.0, 0.125, 0.875, 0.375, 0.875)
|
||||
),
|
||||
StackableItemBlockType.EXTENDER to listOf(
|
||||
Shapes.box(0.25, 0.0, 0.375, 0.625, 0.5625, 0.625),
|
||||
Shapes.box(0.125, 0.0, 0.25, 0.875, 0.5625, 0.75),
|
||||
Shapes.box(0.0625, 0.0, 0.0625, 0.875, 0.5625, 0.875),
|
||||
Shapes.box(0.0625, 0.0, 0.0625, 0.9375, 0.5625, 0.9375)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.BlockItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.component.BlockItemStateProperties
|
||||
@@ -33,8 +34,8 @@ import net.minecraft.world.level.block.Mirror
|
||||
import net.minecraft.world.level.block.Rotation
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.block.state.properties.DirectionProperty
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.level.material.PushReaction
|
||||
import net.minecraft.world.level.storage.loot.LootParams
|
||||
@@ -61,22 +62,27 @@ class TypeGemClusterBlock(
|
||||
}
|
||||
val gemToClusterMap: MutableMap<Block, TypeGemClusterBlock> = mutableMapOf()
|
||||
|
||||
val SHOULD_GROW: BooleanProperty = BooleanProperty.create("should_grow")
|
||||
val FACING: DirectionProperty = DirectionalBlock.FACING
|
||||
val STAGE: IntegerProperty = IntegerProperty.create("stage", 0, 3)
|
||||
val STUNTED: BooleanProperty = BooleanProperty.create("stunted")
|
||||
val GROWTH_TYPE: EnumProperty<GrowthType> = EnumProperty.create("growth_type", GrowthType::class.java)
|
||||
|
||||
fun clusterFromGemBlock(gemBlock: Block): TypeGemClusterBlock? {
|
||||
return gemToClusterMap[gemBlock]
|
||||
}
|
||||
}
|
||||
|
||||
enum class GrowthType(private val label: String, val chance: Float): StringRepresentable {
|
||||
DECORATION("none", 0.25f),
|
||||
FULL("full", 0.5f),
|
||||
STUNTED("stunted", 0.25f);
|
||||
override fun getSerializedName(): String = label
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.UP)
|
||||
.setValue(SHOULD_GROW, true)
|
||||
.setValue(STAGE, 0)
|
||||
.setValue(STUNTED, false)
|
||||
.setValue(GROWTH_TYPE, GrowthType.FULL)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -89,15 +95,19 @@ class TypeGemClusterBlock(
|
||||
|
||||
return defaultBlockState()
|
||||
.setValue(FACING, facing)
|
||||
.setValue(SHOULD_GROW, shouldGrow)
|
||||
.setValue(STAGE, 0)
|
||||
.setValue(STUNTED, false)
|
||||
.setValue(GROWTH_TYPE, if(shouldGrow) GrowthType.FULL else GrowthType.DECORATION)
|
||||
}
|
||||
|
||||
public override fun isRandomlyTicking(state: BlockState): Boolean = state.getValue(SHOULD_GROW)
|
||||
public override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
// if growth type is either stunted or full, we need to tick
|
||||
return state.getValue(GROWTH_TYPE) != GrowthType.DECORATION
|
||||
}
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
/*
|
||||
advanceGrowth(state, level, pos, random)
|
||||
*/
|
||||
}
|
||||
|
||||
fun advanceGrowth(state: BlockState, level: LevelAccessor, pos: BlockPos, random: RandomSource) {
|
||||
@@ -111,15 +121,8 @@ class TypeGemClusterBlock(
|
||||
return
|
||||
}
|
||||
|
||||
// At STAGE_3
|
||||
val isStunted = state.getValue(STUNTED)
|
||||
val facing = state.getValue(FACING)
|
||||
|
||||
if (isStunted) {
|
||||
level.setBlock(pos, state.setValue(SHOULD_GROW, false), UPDATE_ALL)
|
||||
return
|
||||
}
|
||||
|
||||
// Check neighboring gem blocks
|
||||
val hasConflict = Direction.entries
|
||||
.filter { it != facing.opposite }
|
||||
@@ -132,61 +135,36 @@ class TypeGemClusterBlock(
|
||||
if (hasConflict) {
|
||||
level.setBlock(
|
||||
pos,
|
||||
state.setValue(STUNTED, true).setValue(SHOULD_GROW, false),
|
||||
state.setValue(GROWTH_TYPE, GrowthType.STUNTED),
|
||||
UPDATE_ALL
|
||||
)
|
||||
} else {
|
||||
}
|
||||
var nextState = nextStage.defaultBlockState()
|
||||
if (nextState.hasProperty(FACING)) {
|
||||
nextState = nextState.setValue(FACING, facing)
|
||||
}
|
||||
level.setBlock(pos, nextState, UPDATE_ALL)
|
||||
attachDecorativeClusters(level, pos, random)
|
||||
}
|
||||
if (isGem(nextState)) {
|
||||
TypeGemCoreBlock.addClustersToBlock(state, pos, level, random)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isGem(state: BlockState): Boolean {
|
||||
return state.`is`(CobblemonBlockTags.TYPE_GEM_BLOCKS)
|
||||
}
|
||||
|
||||
private fun attachDecorativeClusters(level: LevelAccessor, gemPos: BlockPos, random: RandomSource) {
|
||||
val openDirections = Direction.entries.filter { direction ->
|
||||
level.getBlockState(gemPos.relative(direction)).isAir
|
||||
}.toMutableList()
|
||||
|
||||
if (openDirections.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
val minClusters = maxOf(1, (openDirections.size * 0.75f).toInt())
|
||||
val clusterCount = random.nextInt(minClusters, openDirections.size + 1)
|
||||
|
||||
repeat(clusterCount) {
|
||||
if (openDirections.isEmpty()) return@repeat
|
||||
|
||||
val index = random.nextInt(openDirections.size)
|
||||
val direction = openDirections.removeAt(index)
|
||||
val clusterPos = gemPos.relative(direction)
|
||||
val stage = random.nextInt(0, 4)
|
||||
|
||||
val clusterState = defaultBlockState()
|
||||
.setValue(FACING, direction)
|
||||
.setValue(STAGE, stage)
|
||||
.setValue(SHOULD_GROW, false) // so we can reduce lag... hopefully
|
||||
.setValue(STUNTED, false)
|
||||
|
||||
level.setBlock(clusterPos, clusterState, UPDATE_ALL)
|
||||
}
|
||||
}
|
||||
|
||||
fun gemClusterCanGrow(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
if (!state.getValue(SHOULD_GROW)) return false
|
||||
if (state.getValue(GROWTH_TYPE) == GrowthType.DECORATION) return false
|
||||
if (state.getValue(GROWTH_TYPE) == GrowthType.STUNTED
|
||||
&& state.getValue(STAGE) == 3) return false
|
||||
|
||||
val supportPos = pos.relative(state.getValue(FACING).opposite)
|
||||
val supportBlock = level.getBlockState(supportPos).block
|
||||
return CobblemonBlocks.typeGemBlocks().containsValue(supportBlock) || (supportBlock == CobblemonBlocks.TYPE_GEM_CORE) // Cannot grow if not on any gem blocks
|
||||
}
|
||||
|
||||
|
||||
override fun getDrops(state: BlockState, params: LootParams.Builder): List<ItemStack> {
|
||||
val drops = super.getDrops(state, params)
|
||||
|
||||
@@ -200,8 +178,7 @@ class TypeGemClusterBlock(
|
||||
DataComponents.BLOCK_STATE,
|
||||
BlockItemStateProperties.EMPTY
|
||||
.with(STAGE, state.getValue(STAGE))
|
||||
.with(SHOULD_GROW, false)
|
||||
.with(STUNTED, false)
|
||||
.with(GROWTH_TYPE, GrowthType.DECORATION)
|
||||
)
|
||||
stack.set(
|
||||
DataComponents.CUSTOM_MODEL_DATA,
|
||||
@@ -272,7 +249,7 @@ class TypeGemClusterBlock(
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
super.createBlockStateDefinition(builder)
|
||||
builder.add(FACING, SHOULD_GROW, STAGE, STUNTED)
|
||||
builder.add(FACING, STAGE, GROWTH_TYPE)
|
||||
}
|
||||
|
||||
override fun getCloneItemStack(level: LevelReader, pos: BlockPos, state: BlockState): ItemStack {
|
||||
@@ -283,8 +260,7 @@ class TypeGemClusterBlock(
|
||||
DataComponents.BLOCK_STATE,
|
||||
BlockItemStateProperties.EMPTY
|
||||
.with(STAGE, state.getValue(STAGE))
|
||||
.with(SHOULD_GROW, false)
|
||||
.with(STUNTED, false)
|
||||
.with(GROWTH_TYPE, GrowthType.DECORATION)
|
||||
)
|
||||
stack.set(
|
||||
DataComponents.CUSTOM_MODEL_DATA,
|
||||
|
||||
@@ -11,8 +11,10 @@ package com.cobblemon.mod.common.block
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.api.tags.CobblemonBlockTags
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.Companion.SHOULD_GROW
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.Companion.STUNTED
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.Companion.FACING
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.Companion.GROWTH_TYPE
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.Companion.STAGE
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock.GrowthType
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
@@ -21,8 +23,8 @@ import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.WorldGenLevel
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraft.world.level.block.DirectionalBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import java.util.*
|
||||
@@ -30,13 +32,6 @@ import java.util.*
|
||||
class TypeGemCoreBlock(properties: Properties) : Block(properties) {
|
||||
|
||||
companion object {
|
||||
const val MAX_CONNECTED_GEMS = 7
|
||||
const val MIN_DISTANCE_BETWEEN_GEMS = 1
|
||||
const val CONTINUATION_CHANCE = 0.8f
|
||||
|
||||
// Upper safety check to prevent infinite loops
|
||||
const val MAX_FORCE_GROW_ATTEMPTS = 64
|
||||
|
||||
val BLOCK_TO_CLUSTER: Map<ResourceLocation, Block> by lazy {
|
||||
mapOf(
|
||||
ResourceLocation.parse("cobblemon:normal_gem_block") to CobblemonBlocks.TYPE_GEM_CLUSTER_NORMAL,
|
||||
@@ -60,28 +55,6 @@ class TypeGemCoreBlock(properties: Properties) : Block(properties) {
|
||||
)
|
||||
}
|
||||
|
||||
fun setStuntState(level: LevelAccessor, gemBlocks: List<Pair<BlockState, BlockPos>>, stunted: Boolean) {
|
||||
for ((_, gemPos) in gemBlocks) {
|
||||
for (dir in Direction.entries) {
|
||||
val neighborPos = gemPos.relative(dir)
|
||||
val neighborState = level.getBlockState(neighborPos)
|
||||
|
||||
if (neighborState.block is TypeGemClusterBlock) {
|
||||
if (neighborState.hasProperty(STUNTED) && neighborState.getValue(STUNTED) != stunted) {
|
||||
|
||||
var updatedState = neighborState.setValue(STUNTED, stunted)
|
||||
|
||||
if (updatedState.hasProperty(SHOULD_GROW)) {
|
||||
updatedState = updatedState.setValue(SHOULD_GROW, !stunted)
|
||||
}
|
||||
|
||||
level.setBlock(neighborPos, updatedState, 3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getConnectedGemBlocks(level: BlockGetter, pos: BlockPos): List<Pair<BlockState, BlockPos>> {
|
||||
val connectedGems = mutableListOf<Pair<BlockState, BlockPos>>()
|
||||
val visited = mutableSetOf<BlockPos>()
|
||||
@@ -107,119 +80,159 @@ class TypeGemCoreBlock(properties: Properties) : Block(properties) {
|
||||
}
|
||||
return connectedGems
|
||||
}
|
||||
|
||||
fun addClustersToBlock(state: BlockState, pos: BlockPos, level: LevelAccessor, random: RandomSource) {
|
||||
Direction.entries.forEach {
|
||||
if (random.nextFloat() < Cobblemon.config.typeGemGrowthChance) {
|
||||
val faceState = level.getBlockState(pos.relative(it))
|
||||
val randomGrowthType = decideClusterGrowthType(level, pos)
|
||||
val newState = BLOCK_TO_CLUSTER[BuiltInRegistries.BLOCK.getKey(state.block)]?.defaultBlockState()
|
||||
?.setValue(DirectionalBlock.FACING, it)
|
||||
?.setValue(GROWTH_TYPE, randomGrowthType)
|
||||
?: return
|
||||
|
||||
if (faceState.`is`(Blocks.AIR)) {
|
||||
level.setBlock(pos.relative(it), newState, 3)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private fun decideClusterGrowthType(level: LevelAccessor, pos: BlockPos, random: RandomSource = RandomSource.create()): GrowthType {
|
||||
val growthTypes = if (getConnectedGemBlocks(level, pos).size > Cobblemon.config.typeGemMaxConnected) {
|
||||
listOf(GrowthType.DECORATION, GrowthType.STUNTED)
|
||||
} else {
|
||||
GrowthType.entries
|
||||
}
|
||||
val totalChance = growthTypes.sumOf { it.chance.toDouble() }
|
||||
var roll = random.nextDouble() * totalChance
|
||||
|
||||
for (type in growthTypes) {
|
||||
roll -= type.chance.toDouble()
|
||||
if (roll <= 0.0) {
|
||||
return type
|
||||
}
|
||||
}
|
||||
|
||||
return GrowthType.DECORATION
|
||||
}
|
||||
}
|
||||
|
||||
private fun getConnectedClusters(level: LevelAccessor, pos: BlockPos): List<Pair<BlockState, BlockPos>> {
|
||||
val gemBlocks = getConnectedGemBlocks(level, pos)
|
||||
val clusters = mutableListOf<Pair<BlockState, BlockPos>>()
|
||||
val visited = mutableSetOf<BlockPos>()
|
||||
|
||||
for ((gemState, gemPos) in gemBlocks) {
|
||||
val expectedCluster = BLOCK_TO_CLUSTER[BuiltInRegistries.BLOCK.getKey(gemState.block)] ?: continue
|
||||
|
||||
for (direction in Direction.entries) {
|
||||
val clusterPos = gemPos.relative(direction)
|
||||
if (!visited.add(clusterPos)) continue
|
||||
|
||||
val clusterState = level.getBlockState(clusterPos)
|
||||
if (clusterState.block == expectedCluster) {
|
||||
clusters += clusterState to clusterPos
|
||||
}
|
||||
}
|
||||
}
|
||||
return clusters
|
||||
}
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
grow(level, pos, random)
|
||||
}
|
||||
// should we tick at all?
|
||||
if (random.nextFloat() >= Cobblemon.config.typeGemTickChance) {
|
||||
return
|
||||
}
|
||||
val gemCount = getConnectedGemBlocks(level, pos).size
|
||||
|
||||
fun forceGrow(level: WorldGenLevel, pos: BlockPos, random: RandomSource, percentage: Float) {
|
||||
val desiredLength = MAX_CONNECTED_GEMS * percentage
|
||||
|
||||
repeat(MAX_FORCE_GROW_ATTEMPTS) {
|
||||
val (grown, clusterSize) = grow(level, pos, random, true)
|
||||
if (!grown || clusterSize >= desiredLength) return
|
||||
// if growth has stopped fully but min growth hasn't been reached, randomly set a stopped bud to GROWTH_TYPE full
|
||||
val clusters = getConnectedClusters(level, pos)
|
||||
val fullClusterCount = clusters.count { (clusterState, _) ->
|
||||
clusterState.getValue(GROWTH_TYPE) == GrowthType.FULL
|
||||
}
|
||||
|
||||
Cobblemon.LOGGER.warn(
|
||||
"Forced type gem growth at {} stopped after {} attempts without reaching its target size; keeping the partial formation.",
|
||||
pos,
|
||||
MAX_FORCE_GROW_ATTEMPTS
|
||||
)
|
||||
}
|
||||
|
||||
private fun grow(
|
||||
level: WorldGenLevel,
|
||||
pos: BlockPos,
|
||||
random: RandomSource,
|
||||
forced: Boolean = false
|
||||
): Pair<Boolean, Int> {
|
||||
val connectedGems = getConnectedGemBlocks(level, pos) // maybe we can store this and access it for better performance? check for changes in list rather than checking each time grow is called? idk
|
||||
val gemCount = connectedGems.size
|
||||
val overLimit = gemCount >= MAX_CONNECTED_GEMS
|
||||
|
||||
if (overLimit) {
|
||||
// if there is no open air pockets to grow any new clusters then exit early
|
||||
if (!hasBreathingRoom(level, connectedGems)) {
|
||||
return Pair(false, gemCount)
|
||||
}
|
||||
// max type gem block count met, tell clusters to grow but not turn into blocks
|
||||
setStuntState(level, connectedGems, true)
|
||||
//return Pair(false, gemCount)
|
||||
} else {
|
||||
// make sure connected clusters know they can grow and turn into blocks
|
||||
setStuntState(level, connectedGems, false)
|
||||
}
|
||||
|
||||
val javaRandom = java.util.Random(random.nextLong())
|
||||
|
||||
for ((gemState, gemPos) in connectedGems.shuffled(javaRandom)) {
|
||||
val registryKey = BuiltInRegistries.BLOCK.getKey(gemState.block)
|
||||
val clusterBlock = BLOCK_TO_CLUSTER[registryKey] ?: continue // If there is no block to grow, skip the block
|
||||
|
||||
for (dir in Direction.entries.shuffled(javaRandom)) {
|
||||
val targetPos = gemPos.relative(dir)
|
||||
val targetState = level.getBlockState(targetPos)
|
||||
|
||||
if (!targetState.isAir) continue
|
||||
if (!isPositionValidForGrowth(level, targetPos)) continue
|
||||
|
||||
// Place gem cluster
|
||||
val placeState = clusterBlock.defaultBlockState()
|
||||
.setValue(DirectionalBlock.FACING, dir)
|
||||
.setValue(TypeGemClusterBlock.STAGE, 0)
|
||||
.setValue(SHOULD_GROW, true)
|
||||
|
||||
level.setBlock(targetPos, placeState, UPDATE_ALL)
|
||||
|
||||
// During world gen, the region silently discards writes into neighboring chunks that are already fully generated.
|
||||
// Through ImposterProtoChunk with writes set to disabled. Checks if the block is still air after the write and skips if so as it can't be filled.
|
||||
// Preventing infinite loops.
|
||||
if (!level.getBlockState(targetPos).`is`(clusterBlock)) continue
|
||||
|
||||
if (forced) {
|
||||
forceAdvanceClusterGrowth(level, targetPos, random)
|
||||
}
|
||||
|
||||
val updatedGemCount = if (forced) getConnectedGemBlocks(level, pos).size else connectedGems.size
|
||||
return Pair(true, updatedGemCount)
|
||||
if (fullClusterCount == 0) {
|
||||
if (gemCount < Cobblemon.config.typeGemMinGrowth && clusters.isNotEmpty()) {
|
||||
println("Force set a cluster to FULL at size $gemCount")
|
||||
val randomCluster = clusters.random()
|
||||
level.setBlockAndUpdate(randomCluster.second, randomCluster.first.setValue(GROWTH_TYPE, GrowthType.FULL))
|
||||
}
|
||||
}
|
||||
|
||||
// println("[TypeGemCoreBlock] No valid spot found for gem placement.")
|
||||
return Pair(false, connectedGems.size)
|
||||
|
||||
expand(level, pos, random)
|
||||
}
|
||||
|
||||
private fun forceAdvanceClusterGrowth(level: WorldGenLevel, clusterPos: BlockPos, random: RandomSource) {
|
||||
repeat(5) {
|
||||
val clusterState = level.getBlockState(clusterPos)
|
||||
val clusterBlock = clusterState.block as? TypeGemClusterBlock ?: return
|
||||
clusterBlock.advanceGrowth(clusterState, level, clusterPos, random)
|
||||
fun expand(level: LevelAccessor, pos: BlockPos, random: RandomSource) {
|
||||
getConnectedGemBlocks(level, pos).forEach {
|
||||
val state = it.first
|
||||
val pos = it.second
|
||||
addClustersToBlock(state, pos, level, random)
|
||||
growClusters(pos, level, random)
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasBreathingRoom(level: WorldGenLevel, gems: List<Pair<BlockState, BlockPos>>): Boolean {
|
||||
for ((_, gemPos) in gems) {
|
||||
for (dir in Direction.entries) {
|
||||
if (level.getBlockState(gemPos.relative(dir)).isAir) {
|
||||
return true
|
||||
}
|
||||
private fun growClusters(pos: BlockPos, level: LevelAccessor, random: RandomSource) {
|
||||
Direction.entries.forEach { direction ->
|
||||
val relativePos = pos.relative(direction)
|
||||
val relativeState = level.getBlockState(relativePos)
|
||||
val clusterBlock = relativeState.block as? TypeGemClusterBlock ?: return@forEach
|
||||
|
||||
if (relativeState.getValue(DirectionalBlock.FACING) == direction &&
|
||||
random.nextFloat() < Cobblemon.config.typeGemGrowthChance
|
||||
) {
|
||||
clusterBlock.advanceGrowth(relativeState, level, relativePos, random)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private fun isPositionValidForGrowth(level: WorldGenLevel, pos: BlockPos): Boolean {
|
||||
return Direction.entries.none { dir ->
|
||||
val nearby = pos.relative(dir)
|
||||
isGem(level.getBlockState(nearby)) &&
|
||||
pos.distManhattan(nearby) < MIN_DISTANCE_BETWEEN_GEMS
|
||||
private fun addInitialClusters(pos: BlockPos, level: ServerLevel, clusterType: TypeGemClusterBlock) {
|
||||
Direction.entries.forEach {
|
||||
val faceState = level.getBlockState(pos.relative(it))
|
||||
|
||||
if (faceState.`is`(Blocks.AIR)) {
|
||||
level.setBlockAndUpdate(pos.relative(it), clusterType.defaultBlockState().setValue(
|
||||
DirectionalBlock.FACING, it)
|
||||
.setValue(GROWTH_TYPE, GrowthType.FULL)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isGem(state: BlockState): Boolean {
|
||||
return state.`is`(CobblemonBlockTags.TYPE_GEM_BLOCKS)
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean = true
|
||||
}
|
||||
|
||||
private fun attachDecorativeClusters(level: LevelAccessor, gemPos: BlockPos, random: RandomSource) {
|
||||
val openDirections = Direction.entries.filter { direction ->
|
||||
level.getBlockState(gemPos.relative(direction)).isAir
|
||||
}.toMutableList()
|
||||
|
||||
if (openDirections.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
val gemState = level.getBlockState(gemPos)
|
||||
val clusterBlock = BLOCK_TO_CLUSTER[BuiltInRegistries.BLOCK.getKey(gemState.block)] ?: return
|
||||
|
||||
val minClusters = maxOf(1, (openDirections.size * 0.75f).toInt())
|
||||
val clusterCount = random.nextInt(minClusters, openDirections.size + 1)
|
||||
|
||||
repeat(clusterCount) {
|
||||
if (openDirections.isEmpty()) return@repeat
|
||||
|
||||
val index = random.nextInt(openDirections.size)
|
||||
val direction = openDirections.removeAt(index)
|
||||
val clusterPos = gemPos.relative(direction)
|
||||
val stage = random.nextInt(0, 4)
|
||||
|
||||
val clusterState = clusterBlock.defaultBlockState()
|
||||
.setValue(FACING, direction)
|
||||
.setValue(STAGE, stage)
|
||||
.setValue(GROWTH_TYPE, GrowthType.DECORATION)
|
||||
|
||||
level.setBlock(clusterPos, clusterState, UPDATE_ALL)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.SimpleWaterloggedBlock
|
||||
import net.minecraft.world.level.block.TallFlowerBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
|
||||
class LobailaFlowerBlock(properties: Properties?) : TallFlowerBlock(properties), SimpleWaterloggedBlock {
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
.setValue(WATERLOGGED, false))
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? {
|
||||
return if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState);
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HALF, WATERLOGGED)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
return this.defaultBlockState()
|
||||
.setValue(
|
||||
WATERLOGGED,
|
||||
fluidState.type === Fluids.WATER
|
||||
)
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, world: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = AABB
|
||||
|
||||
companion object {
|
||||
private val AABB = Shapes.box(0.125, 0.0, 0.125, 0.875, 1.0, 0.875)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.block.entity.MistleafFlowerBlockEntity
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.BaseEntityBlock
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.EntityBlock
|
||||
import net.minecraft.world.level.block.SoundType
|
||||
import net.minecraft.world.level.block.TallFlowerBlock
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.level.material.MapColor
|
||||
import net.minecraft.world.level.material.PushReaction
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class MistleafFlowerBlock(lightLevel: (BlockState) -> Int) :
|
||||
EntityBlock,
|
||||
TallFlowerBlock(
|
||||
Properties.of()
|
||||
.mapColor(MapColor.PLANT)
|
||||
.noCollission()
|
||||
.instabreak()
|
||||
.sound(SoundType.GRASS)
|
||||
.offsetType(OffsetType.XZ)
|
||||
.ignitedByLava()
|
||||
.pushReaction(PushReaction.DESTROY)
|
||||
.lightLevel(lightLevel)
|
||||
) {
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
.setValue(GLOWING, 0))
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HALF, GLOWING)
|
||||
}
|
||||
override fun isValidBonemealTarget(level: LevelReader, pos: BlockPos, state: BlockState): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, world: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = AABB
|
||||
|
||||
override fun newBlockEntity(pos: BlockPos, state: BlockState): BlockEntity? {
|
||||
return MistleafFlowerBlockEntity(pos, state)
|
||||
}
|
||||
|
||||
override fun <T : BlockEntity?> getTicker(
|
||||
level: Level,
|
||||
state: BlockState,
|
||||
blockEntityType: BlockEntityType<T?>
|
||||
): BlockEntityTicker<T?>? {
|
||||
return if (level.isClientSide) null else BaseEntityBlock.createTickerHelper(blockEntityType as BlockEntityType<*>,
|
||||
CobblemonBlockEntities.MISTLEAF_FLOWER, MistleafFlowerBlockEntity::serverTick) as BlockEntityTicker<T?>?
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val AABB = Shapes.box(0.125, 0.0, 0.125, 0.875, 1.0, 0.875)
|
||||
val GLOWING = IntegerProperty.create("glowing", 0, 8)
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState): Boolean { return true }
|
||||
override fun getAnalogOutputSignal(state: BlockState, level: Level, pos: BlockPos): Int {
|
||||
return state.getValue(GLOWING) as Int
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraft.world.level.block.BonemealableBlock
|
||||
import net.minecraft.world.level.block.DirectionalBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class PauvilleaFlowerBlock(properties: Properties?) : DirectionalBlock(properties), BonemealableBlock {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.DOWN))
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(ctx: BlockPlaceContext): BlockState? {
|
||||
var blockState = defaultBlockState()
|
||||
val worldView = ctx.level
|
||||
val blockPos = ctx.clickedPos
|
||||
blockState = blockState.setValue(FACING, ctx.clickedFace) as BlockState
|
||||
if (blockState.canSurvive(worldView, blockPos)) {
|
||||
return blockState
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, level: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
val facing = state.getValue(FACING)
|
||||
if (direction == facing.opposite && !canSurvive(state, level, pos)) {
|
||||
return Blocks.AIR.defaultBlockState()
|
||||
}
|
||||
return super.updateShape(state, direction, neighborState, level, pos, neighborPos)
|
||||
}
|
||||
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
val direction = state.getValue(FACING) as Direction
|
||||
val blockState = level.getBlockState(pos.relative(direction.opposite))
|
||||
return blockState.isCollisionShapeFullBlock(level, pos) or blockState.canOcclude()
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<PauvilleaFlowerBlock> = CODEC
|
||||
|
||||
override fun getShape(state: BlockState, blockGetter: BlockGetter, pos: BlockPos, collisionContext: CollisionContext): VoxelShape {
|
||||
return when (state.getValue(FACING)) {
|
||||
Direction.DOWN -> CEILING
|
||||
Direction.NORTH -> WALL_NORTH
|
||||
Direction.EAST -> WALL_EAST
|
||||
Direction.SOUTH -> WALL_SOUTH
|
||||
Direction.WEST -> WALL_WEST
|
||||
Direction.UP -> FLOOR
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<PauvilleaFlowerBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::PauvilleaFlowerBlock)
|
||||
}
|
||||
val FLOOR = Shapes.box(0.075, 0.0, 0.075, 0.925, 0.4375, 0.925)
|
||||
val WALL_NORTH = Shapes.box(0.0, 0.0, 0.8125, 1.0, 1.0, 1.0)
|
||||
val WALL_EAST = Shapes.box(0.0, 0.0, 0.0, 0.1875, 1.0, 1.0)
|
||||
val WALL_SOUTH = Shapes.box(0.0, 0.0, 0.0, 1.0, 1.0, 0.1875)
|
||||
val WALL_WEST = Shapes.box(0.8125, 0.0, 0.0, 1.0, 1.0, 1.0)
|
||||
val CEILING = Shapes.box(0.075, 0.0, 0.075, 0.925, 1.0, 0.925)
|
||||
}
|
||||
|
||||
override fun isValidBonemealTarget(level: LevelReader?, pos: BlockPos?, state: BlockState?): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun isBonemealSuccess(level: Level?, random: RandomSource?, pos: BlockPos?, state: BlockState?): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun performBonemeal(level: ServerLevel, random: RandomSource?, pos: BlockPos, state: BlockState?) {
|
||||
popResource(level, pos, ItemStack(this))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.block.PinkPetalsBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
|
||||
class PomohanaFlowerBlock(properties: Properties?) : PinkPetalsBlock(properties) {
|
||||
|
||||
override fun getShape(state: BlockState, world: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = AABB
|
||||
|
||||
companion object {
|
||||
private val AABB = Shapes.box(0.125, 0.0, 0.125, 0.875, 1.0, 0.875)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.block.entity.TerrainPlantBlockEntity
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.BaseEntityBlock
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.EntityBlock
|
||||
import net.minecraft.world.level.block.TallFlowerBlock
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class TerrainPlantBlock(properties: Properties) : TallFlowerBlock(properties), EntityBlock {
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
.setValue(GLOWING, false))
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HALF, GLOWING)
|
||||
}
|
||||
override fun isValidBonemealTarget(level: LevelReader, pos: BlockPos, state: BlockState): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun tick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
if (state.`is`(CobblemonBlocks.LUCIBELL)) { this.checkInside(level, pos, state) }
|
||||
}
|
||||
|
||||
private fun checkInside(level: Level, pos: BlockPos, state: BlockState) {
|
||||
// Only lower will handle this
|
||||
val upperState = level.getBlockState(pos.above()).takeIf { it.`is`(CobblemonBlocks.LUCIBELL) && it.getValue(HALF) == DoubleBlockHalf.UPPER }
|
||||
|
||||
val entityInside = level.getEntities(null, state.getShape(level, pos).bounds().move(pos)).isNotEmpty()
|
||||
|| upperState?.let { level.getEntities(null, it.getShape(level, pos.above()).bounds().move(pos.above())).isNotEmpty() } ?: false
|
||||
|
||||
val glowingState = state.getValue(GLOWING)
|
||||
if (glowingState != entityInside) {
|
||||
level.setBlock(pos, state.setValue(GLOWING, entityInside), UPDATE_CLIENTS)
|
||||
upperState?.let { level.setBlock(pos.above(), it.setValue(GLOWING, entityInside), UPDATE_CLIENTS) }
|
||||
}
|
||||
if (entityInside) level.scheduleTick(pos, this, 30) // tick occasionally to check if player inside
|
||||
}
|
||||
|
||||
override fun entityInside(state: BlockState, level: Level, pos: BlockPos, entity: Entity) {
|
||||
// Lucibell lower block will be our 'driver'
|
||||
if (!level.isClientSide && !state.getValue(GLOWING) && state.`is`(CobblemonBlocks.LUCIBELL)) {
|
||||
val halfState = state.getValue(HALF)
|
||||
if (halfState == DoubleBlockHalf.UPPER) {
|
||||
val lowerState = level.getBlockState(pos.below())
|
||||
.takeIf { it.`is`(CobblemonBlocks.LUCIBELL) && it.getValue(HALF) == DoubleBlockHalf.LOWER }
|
||||
?: return
|
||||
(lowerState.block as TerrainPlantBlock).checkInside(level, pos.below(), lowerState)
|
||||
} else {
|
||||
checkInside(level, pos, state)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, world: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = AABB
|
||||
|
||||
override fun newBlockEntity(pos: BlockPos, state: BlockState): BlockEntity {
|
||||
return TerrainPlantBlockEntity(pos, state)
|
||||
}
|
||||
|
||||
override fun <T : BlockEntity> getTicker(
|
||||
level: Level,
|
||||
state: BlockState,
|
||||
blockEntityType: BlockEntityType<T?>
|
||||
): BlockEntityTicker<T?>? {
|
||||
return if (level.isClientSide) null else BaseEntityBlock.createTickerHelper(blockEntityType as BlockEntityType<*>,
|
||||
CobblemonBlockEntities.TERRAIN_PLANT, TerrainPlantBlockEntity::serverTick) as BlockEntityTicker<T?>?
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val AABB = Shapes.box(0.125, 0.0, 0.125, 0.875, 1.0, 0.875)
|
||||
val GLOWING = BooleanProperty.create("glowing")
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,273 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.CobblemonItems
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.*
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
class TerrainSeedBlock(private val terrainSeedType: TerrainSeedType, settings: Properties) : CropBlock(settings) {
|
||||
companion object {
|
||||
val CODEC: MapCodec<TerrainSeedBlock> = RecordCodecBuilder.mapCodec { it.group(
|
||||
TerrainSeedType.CODEC.fieldOf("terrainSeedType").forGetter(TerrainSeedBlock::terrainSeedType),
|
||||
propertiesCodec()
|
||||
).apply(it, ::TerrainSeedBlock) }
|
||||
const val MATURE_AGE = 4
|
||||
val AGE: IntegerProperty = IntegerProperty.create("age", 0, MATURE_AGE)
|
||||
val HALF: EnumProperty<DoubleBlockHalf> = BlockStateProperties.DOUBLE_BLOCK_HALF
|
||||
|
||||
val AGE_TO_SHAPE = arrayOf(
|
||||
box(2.0, 0.0, 2.0, 14.0, 6.0, 14.0), // Stage 0
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 1
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 2
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 3
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 4
|
||||
)
|
||||
|
||||
val AGE_TO_SHAPE_TOP = arrayOf(
|
||||
box(2.0, 0.0, 2.0, 14.0, 1.0, 14.0), // Stage 0
|
||||
box(2.0, 0.0, 2.0, 14.0, 1.0, 14.0), // Stage 1
|
||||
box(2.0, 0.0, 2.0, 14.0, 8.0, 14.0), // Stage 2
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 3
|
||||
box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0), // Stage 4
|
||||
)
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<out CropBlock> {
|
||||
return CODEC
|
||||
}
|
||||
|
||||
init {
|
||||
this.registerDefaultState(
|
||||
this.stateDefinition.any()
|
||||
.setValue(AGE, 0)
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getAgeProperty(): IntegerProperty = AGE
|
||||
|
||||
override fun getMaxAge(): Int = MATURE_AGE
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(AGE, HALF)
|
||||
}
|
||||
|
||||
override fun getBaseSeedId(): ItemLike = this.terrainSeedType.getSeed()
|
||||
|
||||
override fun getShape(state: BlockState, world: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape =
|
||||
if (state.getValue(HALF) == DoubleBlockHalf.UPPER) AGE_TO_SHAPE_TOP[getAge(state)] else AGE_TO_SHAPE[this.getAge(state)]
|
||||
|
||||
override fun randomTick(state: BlockState, world: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
if (state.getValue(HALF) == DoubleBlockHalf.UPPER || !canGrow(world, pos, state)) return
|
||||
|
||||
if (hasSufficientLight(world, pos) && random.nextInt(32) == 0) {
|
||||
grow(world, pos, state, 1)
|
||||
}
|
||||
}
|
||||
|
||||
private fun canGrow(world: LevelReader, pos: BlockPos, state: BlockState): Boolean {
|
||||
return !this.isMaxAge(state) && canSurvive(state, world, pos) && !(!canGrowInto(world, pos.above()) && state.getValue(AGE) >= 4)
|
||||
}
|
||||
|
||||
private fun canGrowInto(world: LevelReader, pos: BlockPos): Boolean {
|
||||
val blockState = world.getBlockState(pos)
|
||||
return blockState.isAir || blockState.`is`(this.terrainSeedType.getCropBlock())
|
||||
}
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
return if (state.getValue(AGE) >= 2) {
|
||||
super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
} else {
|
||||
if (state.canSurvive(world, pos)) state else Blocks.AIR.defaultBlockState()
|
||||
}
|
||||
}
|
||||
|
||||
override fun isValidBonemealTarget(level: LevelReader, pos: BlockPos, state: BlockState): Boolean {
|
||||
val posAndState = getLowerHalf(level, pos, state)
|
||||
return if (posAndState == null) false else this.canGrow(
|
||||
level,
|
||||
posAndState.first,
|
||||
posAndState.second
|
||||
)
|
||||
}
|
||||
|
||||
override fun performBonemeal(level: ServerLevel, random: RandomSource, pos: BlockPos, state: BlockState) {
|
||||
val posAndState = getLowerHalf(level, pos, state)
|
||||
if (posAndState != null) {
|
||||
grow(level, posAndState.first, posAndState.second, getBonemealAgeIncrease(level))
|
||||
}
|
||||
}
|
||||
|
||||
fun grow(world: Level, pos: BlockPos, state: BlockState, increment: Int) {
|
||||
if (!canGrow(world, pos, state)) return
|
||||
|
||||
val newAge = (this.getAge(state) + increment).coerceAtMost(this.maxAge)
|
||||
world.setBlock(pos, state.setValue(this.ageProperty, newAge), UPDATE_CLIENTS)
|
||||
|
||||
val abovePos = pos.above()
|
||||
val stateAbove = world.getBlockState(abovePos)
|
||||
// Set top half depending on age
|
||||
if (newAge >= (2)) {
|
||||
if (stateAbove.isAir) {
|
||||
world.setBlock(
|
||||
abovePos,
|
||||
this.defaultBlockState().setValue(AGE, newAge).setValue(HALF, DoubleBlockHalf.UPPER),
|
||||
UPDATE_CLIENTS
|
||||
)
|
||||
}
|
||||
else if (stateAbove.hasProperty(HALF) && stateAbove.getValue(HALF) == DoubleBlockHalf.UPPER) {
|
||||
world.setBlock(
|
||||
abovePos,
|
||||
stateAbove.setValue(AGE, newAge),
|
||||
UPDATE_CLIENTS
|
||||
)
|
||||
}
|
||||
}
|
||||
// Swaps blocks to the actual Flower when fully grown
|
||||
if (newAge == this.maxAge) {
|
||||
val nextStateLower = this.terrainSeedType.getFlowerBlock().defaultBlockState().setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
val nextStateUpper = this.terrainSeedType.getFlowerBlock().defaultBlockState().setValue(HALF, DoubleBlockHalf.UPPER)
|
||||
world.setBlock(abovePos, nextStateUpper, UPDATE_CLIENTS)
|
||||
world.setBlock(pos, nextStateLower, UPDATE_CLIENTS)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getBonemealAgeIncrease(level: Level): Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
override fun canSurvive(state: BlockState, world: LevelReader, pos: BlockPos): Boolean {
|
||||
return when (state.getValue(HALF)) {
|
||||
DoubleBlockHalf.LOWER -> {
|
||||
val floorBlock = pos.below()
|
||||
val floor = world.getBlockState(floorBlock)
|
||||
|
||||
floor.`is`(Blocks.FARMLAND)
|
||||
}
|
||||
DoubleBlockHalf.UPPER -> {
|
||||
getLowerHalf(world, pos, state) != null
|
||||
// Upper part survives only if the lower part is valid
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getLowerHalf(level: LevelReader, pos: BlockPos, state: BlockState): Pair<BlockPos, BlockState>? {
|
||||
if (isLower(state)) {
|
||||
return Pair(pos, state)
|
||||
} else {
|
||||
val blockPos = pos.below()
|
||||
val blockState = level.getBlockState(blockPos)
|
||||
return if (isLower(blockState)) Pair(
|
||||
blockPos,
|
||||
blockState
|
||||
) else null
|
||||
}
|
||||
}
|
||||
|
||||
private fun isLower(state: BlockState): Boolean =
|
||||
state.`is`(this.terrainSeedType.getCropBlock()) && state.getValue(HALF) == DoubleBlockHalf.LOWER
|
||||
|
||||
override fun getSoundType(state: BlockState): SoundType {
|
||||
return CobblemonSounds.HEARTY_GRAINS_SOUNDS
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
enum class TerrainSeedType : StringRepresentable {
|
||||
ELECTRIC,
|
||||
PSYCHIC,
|
||||
MISTY,
|
||||
GRASSY;
|
||||
fun getSeed(): Item = when (this) {
|
||||
ELECTRIC -> CobblemonItems.ELECTRIC_SEED
|
||||
PSYCHIC -> CobblemonItems.PSYCHIC_SEED
|
||||
MISTY -> CobblemonItems.MISTY_SEED
|
||||
GRASSY -> CobblemonItems.GRASSY_SEED
|
||||
}
|
||||
fun getCropBlock(): TerrainSeedBlock = when (this) {
|
||||
ELECTRIC -> CobblemonBlocks.ELECTRIC_SEED
|
||||
PSYCHIC -> CobblemonBlocks.PSYCHIC_SEED
|
||||
MISTY -> CobblemonBlocks.MISTY_SEED
|
||||
GRASSY -> CobblemonBlocks.GRASSY_SEED
|
||||
}
|
||||
fun getFlowerBlock(): Block = when (this) {
|
||||
ELECTRIC -> CobblemonBlocks.VOLTACONIA
|
||||
PSYCHIC -> CobblemonBlocks.LUCIBELL
|
||||
MISTY -> CobblemonBlocks.MISTLEAF
|
||||
GRASSY -> CobblemonBlocks.VERDROOT
|
||||
}
|
||||
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
|
||||
companion object {
|
||||
val CODEC = StringRepresentable.fromEnum(::values)
|
||||
}
|
||||
}
|
||||
|
||||
override fun playerWillDestroy(level: Level, pos: BlockPos, state: BlockState, player: Player): BlockState {
|
||||
if (!level.isClientSide) {
|
||||
if (player.isCreative()) {
|
||||
preventDropFromBottomPart(level, pos, state, player)
|
||||
} else {
|
||||
dropResources(state, level, pos, null as BlockEntity?, player, player.getMainHandItem())
|
||||
}
|
||||
}
|
||||
|
||||
return super.playerWillDestroy(level, pos, state, player)
|
||||
}
|
||||
|
||||
override fun playerDestroy(
|
||||
level: Level,
|
||||
player: Player,
|
||||
pos: BlockPos,
|
||||
state: BlockState,
|
||||
blockEntity: BlockEntity?,
|
||||
tool: ItemStack
|
||||
) {
|
||||
super.playerDestroy(level, player, pos, Blocks.AIR.defaultBlockState(), blockEntity, tool)
|
||||
}
|
||||
|
||||
fun preventDropFromBottomPart(level: Level, pos: BlockPos, state: BlockState, player: Player?) {
|
||||
val doubleblockhalf = state.getValue<DoubleBlockHalf?>(DoublePlantBlock.HALF) as DoubleBlockHalf
|
||||
if (doubleblockhalf == DoubleBlockHalf.UPPER) {
|
||||
val blockpos = pos.below()
|
||||
val blockstate = level.getBlockState(blockpos)
|
||||
if (blockstate.`is`(state.getBlock()) && blockstate.getValue<DoubleBlockHalf?>(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER) {
|
||||
val blockstate1 = if (blockstate.getFluidState()
|
||||
.`is`(Fluids.WATER)
|
||||
) Blocks.WATER.defaultBlockState() else Blocks.AIR.defaultBlockState()
|
||||
level.setBlock(blockpos, blockstate1, 35)
|
||||
level.levelEvent(player, 2001, blockpos, getId(blockstate))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
|
||||
interface WistensuFlowerBlock {
|
||||
fun additionalBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(BlockStateProperties.FACING)
|
||||
builder.add(ROOT)
|
||||
}
|
||||
|
||||
fun adjustStateForPlacement(context: BlockPlaceContext, defaultState: BlockState): BlockState {
|
||||
val upperBlock = context.level.getBlockState(context.clickedPos.relative(Direction.UP))
|
||||
if (upperBlock.`is`(CobblemonBlocks.WISTENSU) || upperBlock.`is`(CobblemonBlocks.WISTENSU_VINE)) {
|
||||
return defaultState
|
||||
.setValue(BlockStateProperties.FACING, Direction.DOWN)
|
||||
.setValue(ROOT, false)
|
||||
} else {
|
||||
var placeDirection = context.clickedFace
|
||||
if (placeDirection == Direction.UP) placeDirection = Direction.DOWN
|
||||
return defaultState
|
||||
.setValue(BlockStateProperties.FACING, placeDirection)
|
||||
.setValue(ROOT, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun copyStateValues(target: BlockState, source: BlockState): BlockState {
|
||||
return target
|
||||
.setValue(ROOT, source.getValue(ROOT))
|
||||
.setValue(BlockStateProperties.FACING, source.getValue(BlockStateProperties.FACING))
|
||||
}
|
||||
|
||||
fun wisternCanSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
if (state.getValue(ROOT)) {
|
||||
val facing = state.getValue(BlockStateProperties.FACING)
|
||||
val targetPos = pos.relative(facing.opposite)
|
||||
val directionState = level.getBlockState(targetPos)
|
||||
return directionState.isFaceSturdy(level, targetPos, facing)
|
||||
} else {
|
||||
val topState = level.getBlockState(pos.relative(Direction.UP))
|
||||
return topState.`is`(CobblemonBlocks.WISTENSU) || topState.`is`(CobblemonBlocks.WISTENSU_VINE)
|
||||
}
|
||||
}
|
||||
|
||||
fun wisternUpdateShape(state: BlockState, direction: Direction, neighborState: BlockState, level: LevelAccessor, pos: BlockPos, neighborPos: BlockPos, block: Block): BlockState? {
|
||||
if (!wisternCanSurvive(state, level, pos)) {
|
||||
level.scheduleTick(pos, block, 1)
|
||||
}
|
||||
|
||||
if (direction == Direction.UP &&
|
||||
(neighborState.`is`(CobblemonBlocks.WISTENSU) || neighborState.`is`(CobblemonBlocks.WISTENSU_VINE))) {
|
||||
return state
|
||||
.setValue(ROOT, false)
|
||||
.setValue(BlockStateProperties.FACING, Direction.DOWN)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
companion object {
|
||||
val ROOT = BooleanProperty.create("root")
|
||||
}
|
||||
}
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.GrowingPlantHeadBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
import kotlin.math.min
|
||||
|
||||
//TODO: Root/connection shit
|
||||
class WistensuFlowerHeadBlock(properties: Properties?) : GrowingPlantHeadBlock(properties, Direction.DOWN, SHAPE, false, 0.1), WistensuFlowerBlock {
|
||||
companion object {
|
||||
val CODEC: MapCodec<WistensuFlowerHeadBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::WistensuFlowerHeadBlock)
|
||||
}
|
||||
val SHAPE: VoxelShape = box(1.0, 2.0, 1.0, 15.0, 16.0, 15.0)
|
||||
}
|
||||
override fun codec(): MapCodec<WistensuFlowerHeadBlock> = CODEC
|
||||
|
||||
override fun getBlocksToGrowWhenBonemealed(random: RandomSource): Int {
|
||||
var d = 1.0
|
||||
var i = 0
|
||||
while (random.nextDouble() < d) {
|
||||
d *= 0.826
|
||||
++i
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
override fun canGrowInto(state: BlockState): Boolean {
|
||||
return state.isAir
|
||||
}
|
||||
|
||||
override fun getBodyBlock(): Block {
|
||||
return CobblemonBlocks.WISTENSU_VINE
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
super.createBlockStateDefinition(builder)
|
||||
additionalBlockStateDefinition(builder)
|
||||
}
|
||||
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
level: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
val updateState = wisternUpdateShape(state, direction, neighborState, level, pos, neighborPos, this)
|
||||
if (updateState != null) return updateState
|
||||
|
||||
if (direction == Direction.DOWN &&
|
||||
(neighborState.`is`(CobblemonBlocks.WISTENSU) || neighborState.`is`(CobblemonBlocks.WISTENSU_VINE))) {
|
||||
return updateBodyAfterConvertedFromHead(state, bodyBlock.defaultBlockState())
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState {
|
||||
val defaultState = super.getStateForPlacement(context)!!
|
||||
return adjustStateForPlacement(context, defaultState)
|
||||
}
|
||||
|
||||
override fun getGrowIntoState(state: BlockState, random: RandomSource): BlockState {
|
||||
return super.getGrowIntoState(state, random)
|
||||
.setValue(WistensuFlowerBlock.ROOT, false)
|
||||
.setValue(BlockStateProperties.FACING, Direction.DOWN)
|
||||
}
|
||||
|
||||
override fun updateBodyAfterConvertedFromHead(head: BlockState, body: BlockState): BlockState {
|
||||
return copyStateValues(body, head)
|
||||
}
|
||||
|
||||
override fun performBonemeal(level: ServerLevel, random: RandomSource, pos: BlockPos, state: BlockState) {
|
||||
var blockPos = pos.relative(growthDirection)
|
||||
var i = min(state.getValue(AGE), MAX_AGE)
|
||||
val j = getBlocksToGrowWhenBonemealed(random)
|
||||
var currentState = state
|
||||
|
||||
for (k in 0..<j) {
|
||||
if (!canGrowInto(level.getBlockState(blockPos))) break
|
||||
level.setBlockAndUpdate(blockPos, getGrowIntoState(currentState, random))
|
||||
currentState = level.getBlockState(blockPos)
|
||||
blockPos = blockPos.relative(growthDirection)
|
||||
i = min(i + 1, MAX_AGE)
|
||||
}
|
||||
}
|
||||
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
return wisternCanSurvive(state, level, pos)
|
||||
}
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* 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.block.decor
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.GrowingPlantBodyBlock
|
||||
import net.minecraft.world.level.block.GrowingPlantHeadBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
//TODO: Root/connection shit
|
||||
class WistensuFlowerVineBlock(properties: Properties?) : GrowingPlantBodyBlock(properties, Direction.DOWN, SHAPE, false), WistensuFlowerBlock
|
||||
{
|
||||
companion object {
|
||||
val CODEC: MapCodec<WistensuFlowerVineBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::WistensuFlowerVineBlock)
|
||||
}
|
||||
val SHAPE: VoxelShape = box(1.0, 0.0, 1.0, 15.0, 16.0, 15.0)
|
||||
}
|
||||
override fun codec(): MapCodec<WistensuFlowerVineBlock> = CODEC
|
||||
|
||||
override fun getHeadBlock(): GrowingPlantHeadBlock {
|
||||
return CobblemonBlocks.WISTENSU
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
super.createBlockStateDefinition(builder)
|
||||
additionalBlockStateDefinition(builder)
|
||||
}
|
||||
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction,
|
||||
neighborState: BlockState,
|
||||
level: LevelAccessor,
|
||||
pos: BlockPos,
|
||||
neighborPos: BlockPos
|
||||
): BlockState {
|
||||
val updateState = wisternUpdateShape(state, direction, neighborState, level, pos, neighborPos, this)
|
||||
if (updateState != null) return updateState
|
||||
|
||||
if (direction == Direction.DOWN &&
|
||||
!neighborState.`is`(CobblemonBlocks.WISTENSU) && !neighborState.`is`(CobblemonBlocks.WISTENSU_VINE)) {
|
||||
return updateHeadAfterConvertedFromBody(state, headBlock.getStateForPlacement(level))
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState {
|
||||
val defaultState = super.getStateForPlacement(context)!!
|
||||
return adjustStateForPlacement(context, defaultState)
|
||||
}
|
||||
|
||||
override fun updateHeadAfterConvertedFromBody(head: BlockState, body: BlockState): BlockState {
|
||||
return copyStateValues(body, head)
|
||||
}
|
||||
|
||||
override fun canSurvive(state: BlockState, level: LevelReader, pos: BlockPos): Boolean {
|
||||
return wisternCanSurvive(state, level, pos)
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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.block.entity
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.block.decor.MistleafFlowerBlock
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class MistleafFlowerBlockEntity(pos: BlockPos, state: BlockState): BlockEntity(CobblemonBlockEntities.MISTLEAF_FLOWER, pos, state) {
|
||||
companion object {
|
||||
fun serverTick(level: Level, pos: BlockPos, state: BlockState, mistleafFlowerBlockEntity: MistleafFlowerBlockEntity) {
|
||||
if (level.isClientSide) return
|
||||
if (state.block !is MistleafFlowerBlock) return
|
||||
|
||||
val glowing = state.getValue(MistleafFlowerBlock.GLOWING)
|
||||
|
||||
val wantedState = when (state.`is`(CobblemonBlocks.MISTLEAF)) {
|
||||
//The light level and comparator output increases on odds from New to Full, and decreases on the evens from Full to New
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 4) -> 1 //New Moon
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 5) -> 3 //Waxing Crescent
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 6) -> 5 //First Quarter
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 7) -> 7 //Waxing Gibbous
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 0) -> 8 //Full Moon
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 1) -> 6 //Waning Gibbous
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 2) -> 4 // Third Quarter
|
||||
((level.dayTime().toInt().mod(24000) in 12542..23459) && level.moonPhase == 3) -> 2 //Waning Crescent
|
||||
else -> 0 //Daytime, and likely dimensions with no concept of day/night cycle or moon phase
|
||||
}
|
||||
|
||||
if (glowing != wantedState) {
|
||||
level.setBlock(pos, state.setValue(MistleafFlowerBlock.GLOWING, wantedState), Block.UPDATE_ALL)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-5
@@ -171,11 +171,7 @@ open class PokeSnackBlockEntity(pos: BlockPos, state: BlockState) :
|
||||
fun attemptSpawn(player: Player) {
|
||||
val cause = SpawnCause(spawner = spawner, entity = player)
|
||||
val zoneInput = spawner.getZoneInput(cause)
|
||||
val spawnAction = spawner.calculateSpawnActionsForArea(zoneInput, 1).firstOrNull()
|
||||
|
||||
if (spawnAction == null) {
|
||||
return
|
||||
}
|
||||
val spawnAction = spawner.calculateSpawnActionsForArea(zoneInput, 1).firstOrNull() ?: return
|
||||
|
||||
CobblemonEvents.POKE_SNACK_SPAWN_POKEMON_PRE.postThen(
|
||||
PokeSnackSpawnPokemonEvent.Pre(this, spawnAction),
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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.block.entity
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.block.decor.TerrainPlantBlock
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class TerrainPlantBlockEntity(pos: BlockPos, state: BlockState): BlockEntity(CobblemonBlockEntities.TERRAIN_PLANT, pos, state) {
|
||||
companion object {
|
||||
fun serverTick(level: Level, pos: BlockPos, state: BlockState, terrainPlantBlockEntity: TerrainPlantBlockEntity) {
|
||||
if (level.isClientSide) return
|
||||
if (state.block !is TerrainPlantBlock) return
|
||||
|
||||
val glowing = state.getValue(TerrainPlantBlock.GLOWING)
|
||||
|
||||
val wantedState = if (state.`is`(CobblemonBlocks.VOLTACONIA)) level.isThundering
|
||||
else if (state.`is`(CobblemonBlocks.VERDROOT)) level.isRaining && !level.isThundering
|
||||
else null // We dont control glowing here
|
||||
|
||||
if (wantedState != null && glowing != wantedState) {
|
||||
level.setBlock(pos, state.setValue(TerrainPlantBlock.GLOWING, wantedState), Block.UPDATE_CLIENTS)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* 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.block.general
|
||||
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.IntegerProperty
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
import kotlin.math.min
|
||||
|
||||
class MintLitterBlock(properties: Properties?) : Block(properties) {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(FACING, Direction.NORTH)
|
||||
.setValue(AMOUNT, 1))
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val blockState = context.getLevel().getBlockState(context.getClickedPos())
|
||||
return if (blockState.`is`(this)) blockState.setValue<Int?, Int?>(
|
||||
AMOUNT,
|
||||
min(4, blockState.getValue<Int?>(AMOUNT) as Int + 1)
|
||||
) as BlockState else this.defaultBlockState().setValue<Direction?, Direction?>(
|
||||
FACING,
|
||||
context.getHorizontalDirection().getOpposite()
|
||||
) as BlockState
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(FACING)
|
||||
builder.add(AMOUNT)
|
||||
}
|
||||
|
||||
override fun updateShape(
|
||||
state: BlockState,
|
||||
direction: Direction?,
|
||||
neighborState: BlockState?,
|
||||
level: LevelAccessor?,
|
||||
pos: BlockPos?,
|
||||
neighborPos: BlockPos?
|
||||
): BlockState {
|
||||
return if (!state.canSurvive(level, pos)) Blocks.AIR.defaultBlockState() else super.updateShape(
|
||||
state,
|
||||
direction,
|
||||
neighborState,
|
||||
level,
|
||||
pos,
|
||||
neighborPos
|
||||
)
|
||||
}
|
||||
|
||||
override fun canSurvive(state: BlockState?, level: LevelReader, pos: BlockPos): Boolean {
|
||||
val posBelow = pos.below()
|
||||
return level.getBlockState(posBelow).isFaceSturdy(level, posBelow, Direction.UP)
|
||||
}
|
||||
|
||||
override fun propagatesSkylightDown(state: BlockState, level: BlockGetter?, pos: BlockPos?): Boolean {
|
||||
return state.getFluidState().isEmpty()
|
||||
}
|
||||
|
||||
public override fun canBeReplaced(state: BlockState, useContext: BlockPlaceContext): Boolean {
|
||||
return if (!useContext.isSecondaryUseActive && useContext.itemInHand.`is`(this.asItem()) && state.getValue(
|
||||
AMOUNT
|
||||
) <= MAX_AMOUNT
|
||||
) true else super.canBeReplaced(state, useContext)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun rotate(state: BlockState, rotation: Rotation): BlockState {
|
||||
return state.setValue(HORIZONTAL_FACING, rotation.rotate(state.getValue(HORIZONTAL_FACING)))
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape? {
|
||||
val litterBoxes = when (state.getValue(FACING)) {
|
||||
Direction.SOUTH -> SOUTH_SHAPES
|
||||
Direction.WEST -> WEST_SHAPES
|
||||
Direction.EAST -> EAST_SHAPES
|
||||
else -> NORTH_SHAPES
|
||||
}
|
||||
|
||||
var litterBox = litterBoxes[state.getValue(AMOUNT)]
|
||||
return litterBox
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<MintLitterBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
propertiesCodec()
|
||||
).apply(it, ::MintLitterBlock) }
|
||||
|
||||
val AMOUNT = IntegerProperty.create("amount", 1, 4)
|
||||
const val MAX_AMOUNT: Int = 4
|
||||
|
||||
private val NORTH_SHAPES = listOf(
|
||||
Shapes.box(0.0, 0.0, 0.0, 1.0, 0.125, 1.0),
|
||||
Shapes.box(0.0, 0.0, 0.0, 0.5, 0.0625, 0.5),
|
||||
Shapes.box(0.0, 0.0, 0.0, 0.5, 0.0625, 1.0),
|
||||
Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.0, 0.5, 0.0625, 1.0),
|
||||
Shapes.box(0.5, 0.0, 0.5, 1.0, 0.0625, 1.0)
|
||||
),
|
||||
Shapes.box(0.0, 0.0, 0.0, 1.0, 0.0625, 1.0)
|
||||
)
|
||||
|
||||
private val SOUTH_SHAPES = createShapes(Direction.SOUTH)
|
||||
private val WEST_SHAPES = createShapes(Direction.WEST)
|
||||
private val EAST_SHAPES = createShapes(Direction.EAST)
|
||||
|
||||
private fun createShapes(to: Direction): List<VoxelShape> {
|
||||
return NORTH_SHAPES.map { rotateShape(Direction.NORTH, to, it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -391,7 +391,7 @@ object CobblemonClient {
|
||||
CobblemonBlocks.X_SP_ATK,
|
||||
CobblemonBlocks.X_SP_DEF,
|
||||
CobblemonBlocks.X_SPEED,
|
||||
CobblemonBlocks.TM_MACHINE,
|
||||
CobblemonBlocks.TM_MACHINE,
|
||||
|
||||
CobblemonBlocks.GALARICA_CUFF,
|
||||
CobblemonBlocks.GALARICA_WREATH,
|
||||
@@ -415,7 +415,108 @@ object CobblemonClient {
|
||||
CobblemonBlocks.NEVER_MELT_ICE,
|
||||
CobblemonBlocks.WIDE_LENS,
|
||||
CobblemonBlocks.ZOOM_LENS,
|
||||
CobblemonBlocks.SCOPE_LENS
|
||||
CobblemonBlocks.SCOPE_LENS,
|
||||
CobblemonBlocks.MOOMOO_MILK,
|
||||
CobblemonBlocks.MEDICINAL_BREW,
|
||||
CobblemonBlocks.TERRAIN_EXTENDER,
|
||||
|
||||
CobblemonBlocks.RED_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_RED_MINT,
|
||||
CobblemonBlocks.BLUE_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_BLUE_MINT,
|
||||
CobblemonBlocks.CYAN_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_CYAN_MINT,
|
||||
CobblemonBlocks.PINK_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_PINK_MINT,
|
||||
CobblemonBlocks.GREEN_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_GREEN_MINT,
|
||||
CobblemonBlocks.WHITE_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_WHITE_MINT,
|
||||
|
||||
CobblemonBlocks.LOBAILA,
|
||||
CobblemonBlocks.POMOHANA,
|
||||
CobblemonBlocks.PAUVILLEA,
|
||||
CobblemonBlocks.WISTENSU,
|
||||
CobblemonBlocks.WISTENSU_VINE,
|
||||
CobblemonBlocks.ELECTRIC_SEED,
|
||||
CobblemonBlocks.VOLTACONIA,
|
||||
CobblemonBlocks.GRASSY_SEED,
|
||||
CobblemonBlocks.VERDROOT,
|
||||
CobblemonBlocks.MISTY_SEED,
|
||||
CobblemonBlocks.MISTLEAF,
|
||||
CobblemonBlocks.PSYCHIC_SEED,
|
||||
CobblemonBlocks.LUCIBELL,
|
||||
|
||||
CobblemonBlocks.POTTED_AGUAV_BERRY,
|
||||
CobblemonBlocks.POTTED_APICOT_BERRY,
|
||||
CobblemonBlocks.POTTED_ASPEAR_BERRY,
|
||||
CobblemonBlocks.POTTED_BABIRI_BERRY,
|
||||
CobblemonBlocks.POTTED_BELUE_BERRY,
|
||||
CobblemonBlocks.POTTED_BLUK_BERRY,
|
||||
CobblemonBlocks.POTTED_CHARTI_BERRY,
|
||||
CobblemonBlocks.POTTED_CHERI_BERRY,
|
||||
CobblemonBlocks.POTTED_CHESTO_BERRY,
|
||||
CobblemonBlocks.POTTED_CHILAN_BERRY,
|
||||
CobblemonBlocks.POTTED_CHOPLE_BERRY,
|
||||
CobblemonBlocks.POTTED_COBA_BERRY,
|
||||
CobblemonBlocks.POTTED_COLBUR_BERRY,
|
||||
CobblemonBlocks.POTTED_CORNN_BERRY,
|
||||
CobblemonBlocks.POTTED_CUSTAP_BERRY,
|
||||
CobblemonBlocks.POTTED_DURIN_BERRY,
|
||||
CobblemonBlocks.POTTED_EGGANT_BERRY,
|
||||
CobblemonBlocks.POTTED_ENIGMA_BERRY,
|
||||
CobblemonBlocks.POTTED_FIGY_BERRY,
|
||||
CobblemonBlocks.POTTED_GANLON_BERRY,
|
||||
CobblemonBlocks.POTTED_GREPA_BERRY,
|
||||
CobblemonBlocks.POTTED_HABAN_BERRY,
|
||||
CobblemonBlocks.POTTED_HONDEW_BERRY,
|
||||
CobblemonBlocks.POTTED_HOPO_BERRY,
|
||||
CobblemonBlocks.POTTED_IAPAPA_BERRY,
|
||||
CobblemonBlocks.POTTED_JABOCA_BERRY,
|
||||
CobblemonBlocks.POTTED_KASIB_BERRY,
|
||||
CobblemonBlocks.POTTED_KEBIA_BERRY,
|
||||
CobblemonBlocks.POTTED_KEE_BERRY,
|
||||
CobblemonBlocks.POTTED_KELPSY_BERRY,
|
||||
CobblemonBlocks.POTTED_LANSAT_BERRY,
|
||||
CobblemonBlocks.POTTED_LEPPA_BERRY,
|
||||
CobblemonBlocks.POTTED_LIECHI_BERRY,
|
||||
CobblemonBlocks.POTTED_LUM_BERRY,
|
||||
CobblemonBlocks.POTTED_MAGOST_BERRY,
|
||||
CobblemonBlocks.POTTED_MAGO_BERRY,
|
||||
CobblemonBlocks.POTTED_MARANGA_BERRY,
|
||||
CobblemonBlocks.POTTED_MICLE_BERRY,
|
||||
CobblemonBlocks.POTTED_NANAB_BERRY,
|
||||
CobblemonBlocks.POTTED_NOMEL_BERRY,
|
||||
CobblemonBlocks.POTTED_OCCA_BERRY,
|
||||
CobblemonBlocks.POTTED_ORAN_BERRY,
|
||||
CobblemonBlocks.POTTED_PAMTRE_BERRY,
|
||||
CobblemonBlocks.POTTED_PASSHO_BERRY,
|
||||
CobblemonBlocks.POTTED_PAYAPA_BERRY,
|
||||
CobblemonBlocks.POTTED_PECHA_BERRY,
|
||||
CobblemonBlocks.POTTED_PERSIM_BERRY,
|
||||
CobblemonBlocks.POTTED_PETAYA_BERRY,
|
||||
CobblemonBlocks.POTTED_PINAP_BERRY,
|
||||
CobblemonBlocks.POTTED_POMEG_BERRY,
|
||||
CobblemonBlocks.POTTED_QUALOT_BERRY,
|
||||
CobblemonBlocks.POTTED_RABUTA_BERRY,
|
||||
CobblemonBlocks.POTTED_RAWST_BERRY,
|
||||
CobblemonBlocks.POTTED_RAZZ_BERRY,
|
||||
CobblemonBlocks.POTTED_RINDO_BERRY,
|
||||
CobblemonBlocks.POTTED_ROSELI_BERRY,
|
||||
CobblemonBlocks.POTTED_ROWAP_BERRY,
|
||||
CobblemonBlocks.POTTED_SALAC_BERRY,
|
||||
CobblemonBlocks.POTTED_SHUCA_BERRY,
|
||||
CobblemonBlocks.POTTED_SITRUS_BERRY,
|
||||
CobblemonBlocks.POTTED_SPELON_BERRY,
|
||||
CobblemonBlocks.POTTED_STARF_BERRY,
|
||||
CobblemonBlocks.POTTED_TAMATO_BERRY,
|
||||
CobblemonBlocks.POTTED_TANGA_BERRY,
|
||||
CobblemonBlocks.POTTED_TOUGA_BERRY,
|
||||
CobblemonBlocks.POTTED_WACAN_BERRY,
|
||||
CobblemonBlocks.POTTED_WATMEL_BERRY,
|
||||
CobblemonBlocks.POTTED_WEPEAR_BERRY,
|
||||
CobblemonBlocks.POTTED_WIKI_BERRY,
|
||||
CobblemonBlocks.POTTED_YACHE_BERRY
|
||||
)
|
||||
|
||||
this.createBoatModelLayers()
|
||||
|
||||
+2
-2
@@ -475,7 +475,7 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
|
||||
val locators = particleData.locatorResolver(locatorStates).filter(::isLocatorVisible)
|
||||
if (particleData.chance > random.nextDouble()) {
|
||||
locators.forEach { locator ->
|
||||
repeat(particleData.amount) {
|
||||
repeat(particleData.amount()) {
|
||||
runtime.resolve("q.particle('${particleData.particle}', '$locator')".asExpressionLike())
|
||||
}
|
||||
}
|
||||
@@ -485,7 +485,7 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
|
||||
is ParticleData.MinecraftParticle -> {
|
||||
if (particleData.chance > random.nextDouble()) {
|
||||
val box = currentEntity.boundingBox
|
||||
repeat(particleData.amount) {
|
||||
repeat(particleData.amount()) {
|
||||
val x = box.minX + (box.maxX - box.minX) * random.nextDouble()
|
||||
val y = box.minY + (box.maxY - box.minY) * random.nextDouble()
|
||||
val z = box.minZ + (box.maxZ - box.minZ) * random.nextDouble()
|
||||
|
||||
-72
@@ -1,72 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class LuxioModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("luxio")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val foreLeftLeg = getPart("front_leg_left")
|
||||
override val foreRightLeg = getPart("front_leg_right")
|
||||
override val hindLeftLeg = getPart("back_leg_left")
|
||||
override val hindRightLeg = getPart("back_leg_right")
|
||||
|
||||
override var portraitScale = 1.8F
|
||||
override var portraitTranslation = Vec3(-0.6, -0.25, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var sleep: Pose
|
||||
|
||||
override fun registerPoses() {
|
||||
// val blink = quirk { bedrockStateful("luxio", "blink") }
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("luxio", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("luxio", "idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
QuadrupedWalkAnimation(this, periodMultiplier = 1.1F),
|
||||
singleBoneLook(),
|
||||
bedrock("luxio", "idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("luxio", "faint") else null
|
||||
}
|
||||
-67
@@ -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.client.render.models.blockbench.pokemon.gen4
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class LuxrayModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("luxray")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val foreLeftLeg = getPart("front_leg_left")
|
||||
override val foreRightLeg = getPart("front_leg_right")
|
||||
override val hindLeftLeg = getPart("back_leg_left")
|
||||
override val hindRightLeg = getPart("back_leg_right")
|
||||
|
||||
override var portraitScale = 1.8F
|
||||
override var portraitTranslation = Vec3(-0.9, 0.6, 0.0)
|
||||
|
||||
override var profileScale = 0.66F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
|
||||
override fun registerPoses() {
|
||||
// val blink = quirk { bedrockStateful("luxray", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("luxray", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
QuadrupedWalkAnimation(this, periodMultiplier = 1.1F),
|
||||
bedrock("luxray", "ground_idle"),
|
||||
singleBoneLook()
|
||||
// bedrock("luxray", "idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("luxray", "faint") else null
|
||||
}
|
||||
-66
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen4
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class ShinxModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("shinx")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val foreLeftLeg = getPart("leg_left")
|
||||
override val foreRightLeg = getPart("leg_right")
|
||||
override val hindLeftLeg = getPart("back_leg_left")
|
||||
override val hindRightLeg = getPart("back_leg_right")
|
||||
|
||||
override var portraitScale = 1.8F
|
||||
override var portraitTranslation = Vec3(-0.6, -0.25, 0.0)
|
||||
|
||||
override var profileScale = 0.66F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
|
||||
override fun registerPoses() {
|
||||
// val blink = quirk { bedrockStateful("shinx", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("shinx", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
// quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
QuadrupedWalkAnimation(this, periodMultiplier = 1.1F),
|
||||
singleBoneLook(),
|
||||
bedrock("shinx", "ground_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("shinx", "faint") else null
|
||||
}
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.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.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class ChesnaughtModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("chesnaught")
|
||||
override val head = getPart("head")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 2.2F
|
||||
override var portraitTranslation = Vec3(-1.0, 1.65, 0.0)
|
||||
|
||||
override var profileScale = 0.6F
|
||||
override var profileTranslation = Vec3(0.0, 0.85, 0.0)
|
||||
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("chesnaught", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("chesnaught", "blink")}
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("chesnaught", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
BimanualSwingAnimation(this),
|
||||
BipedWalkAnimation(this),
|
||||
bedrock("chesnaught", "ground_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.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.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class ChespinModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("chespin")
|
||||
override val head = getPart("head")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 2.03F
|
||||
override var portraitTranslation = Vec3(-0.12, -0.44, 0.0)
|
||||
|
||||
override var profileScale = 0.77F
|
||||
override var profileTranslation = Vec3(0.0, 0.6, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var sleep: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("chespin", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("chespin", "blink")}
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("chespin", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("chespin", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(bedrock("chespin", "sleep"))
|
||||
)
|
||||
}
|
||||
}
|
||||
-118
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
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.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 FroakieModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("froakie")
|
||||
override val head = getPart("head")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
|
||||
override var portraitScale = 1.86F
|
||||
override var portraitTranslation = Vec3(-0.25, -0.51, 0.0)
|
||||
|
||||
override var profileScale = 0.75F
|
||||
override var profileTranslation = Vec3(0.0, 0.56, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
lateinit var float: Pose
|
||||
lateinit var swim: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var battleidle: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("froakie", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("froakie", "blink")}
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(bedrock("froakie", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES - PoseType.FLOAT,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("froakie", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.WALK,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("froakie", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
float = registerPose(
|
||||
poseName = "swim_idle",
|
||||
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("froakie", "water_idle")
|
||||
)
|
||||
)
|
||||
|
||||
swim = registerPose(
|
||||
poseName = "swim",
|
||||
poseTypes = setOf(PoseType.SWIM, PoseType.FLY),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("froakie", "water_swim")
|
||||
)
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("froakie", "battle_idle")
|
||||
)
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, swim, float, sleep)) bedrockStateful("froakie", "faint") else null
|
||||
}
|
||||
-118
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
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.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 FrogadierModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("frogadier")
|
||||
override val head = getPart("head")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
|
||||
override var portraitScale = 1.9F
|
||||
override var portraitTranslation = Vec3(-0.1, 1.4, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
lateinit var float: Pose
|
||||
lateinit var swim: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var battleidle: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("frogadier", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("frogadier", "blink")}
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(bedrock("frogadier", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES - PoseType.FLOAT,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("frogadier", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.WALK,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("frogadier", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
float = registerPose(
|
||||
poseName = "swim_idle",
|
||||
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("frogadier", "water_idle")
|
||||
)
|
||||
)
|
||||
|
||||
swim = registerPose(
|
||||
poseName = "swim",
|
||||
poseTypes = setOf(PoseType.SWIM, PoseType.FLY),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("frogadier", "water_swim")
|
||||
)
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("frogadier", "battle_idle")
|
||||
)
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, swim, float, sleep)) bedrockStateful("frogadier", "faint") else null
|
||||
}
|
||||
-142
@@ -1,142 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
|
||||
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.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 GreninjaModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("greninja")
|
||||
override val head = getPart("head")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
val shurikenright = getPart("hand_shuriken_right")
|
||||
val shurikenleft = getPart("hand_shuriken_left")
|
||||
|
||||
override var portraitScale = 2.2F
|
||||
override var portraitTranslation = Vec3(-0.1, 1.34, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
lateinit var float: Pose
|
||||
lateinit var swim: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var battleidle: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("greninja", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("greninja", "blink")}
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
transformTicks = 10,
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(bedrock("greninja", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.UI_POSES + PoseType.STATIONARY_POSES - PoseType.FLOAT,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("greninja", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.WALK,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("greninja", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
float = registerPose(
|
||||
poseName = "swim_idle",
|
||||
poseTypes = setOf(PoseType.FLOAT, PoseType.HOVER),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("greninja", "water_idle")
|
||||
)
|
||||
)
|
||||
|
||||
swim = registerPose(
|
||||
poseName = "swim",
|
||||
poseTypes = setOf(PoseType.SWIM, PoseType.FLY),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { !it.isBattling },
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("greninja", "water_swim")
|
||||
)
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling },
|
||||
transformedParts = arrayOf(
|
||||
shurikenleft.createTransformation().withVisibility(visibility = false),
|
||||
shurikenright.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("greninja", "battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = if (state.isPosedIn(standing, walk, battleidle, swim, float, sleep)) bedrockStateful("greninja", "faint") else null
|
||||
}
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen6
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.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.Pose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class QuilladinModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("quilladin")
|
||||
override val head = getPart("torso")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 2F
|
||||
override var portraitTranslation = Vec3(-0.3, 0.1, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var sleep: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("quilladin", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("quilladin", "blink")}
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("quilladin", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("quilladin", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(bedrock("quilladin", "sleep"))
|
||||
)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -29,7 +29,7 @@ class VivillonModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, B
|
||||
override var portraitTranslation = Vec3(-0.3, 0.2, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.1, 0.8, 0.0)
|
||||
override var profileTranslation = Vec3(0.0, 0.8, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
|
||||
-9
@@ -311,9 +311,6 @@ object VaryingModelRepository {
|
||||
inbuilt("morelull", :: MorelullModel)
|
||||
inbuilt("shiinotic", :: ShiinoticModel)
|
||||
inbuilt("spiritomb", :: SpiritombModel)
|
||||
inbuilt("chespin", :: ChespinModel)
|
||||
inbuilt("quilladin", :: QuilladinModel)
|
||||
inbuilt("chesnaught", :: ChesnaughtModel)
|
||||
inbuilt("pineco", :: PinecoModel)
|
||||
inbuilt("lotad", :: LotadModel)
|
||||
inbuilt("lombre", :: LombreModel)
|
||||
@@ -341,9 +338,6 @@ object VaryingModelRepository {
|
||||
inbuilt("walkingwake", ::WalkingwakeModel)
|
||||
inbuilt("ironleaves", ::IronleavesModel)
|
||||
inbuilt("miltank", ::MiltankModel)
|
||||
inbuilt("froakie", ::FroakieModel)
|
||||
inbuilt("frogadier", ::FrogadierModel)
|
||||
inbuilt("greninja", ::GreninjaModel)
|
||||
inbuilt("grookey", ::GrookeyModel)
|
||||
inbuilt("thwackey", ::ThwackeyModel)
|
||||
inbuilt("rillaboom", ::RillaboomModel)
|
||||
@@ -396,9 +390,6 @@ object VaryingModelRepository {
|
||||
inbuilt("hoothoot", ::HoothootModel)
|
||||
inbuilt("wingull", ::WingullModel)
|
||||
inbuilt("pelipper", ::PelipperModel)
|
||||
inbuilt("shinx", ::ShinxModel)
|
||||
inbuilt("luxio", ::LuxioModel)
|
||||
inbuilt("luxray", ::LuxrayModel)
|
||||
inbuilt("numel", ::NumelModel)
|
||||
inbuilt("roggenrola", ::RoggenrolaModel)
|
||||
inbuilt("boldore", ::BoldoreModel)
|
||||
|
||||
@@ -37,7 +37,12 @@ object ChangeEyeHeight {
|
||||
.then(
|
||||
Commands.literal("swimming").then(Commands.argument("height", FloatArgumentType.floatArg())
|
||||
.executes { setEyeHeight(it) { species, height -> species.swimmingEyeHeight = height } })
|
||||
))
|
||||
)
|
||||
.then(
|
||||
Commands.literal("battling").then(Commands.argument("height", FloatArgumentType.floatArg())
|
||||
.executes { setEyeHeight(it) { species, height -> species.battlingEyeHeight = height } })
|
||||
)
|
||||
)
|
||||
dispatcher.register(command)
|
||||
}
|
||||
|
||||
|
||||
@@ -392,6 +392,21 @@ class CobblemonConfig {
|
||||
@CobblemonConfigField(Category.Spawning, lang = "data_monitor_shiny_rate", SERVER)
|
||||
var monitorShinyRate = 200
|
||||
|
||||
@CobblemonConfigField(Category.World, lang = "type_gem_max_connected", SERVER)
|
||||
var typeGemMaxConnected = 16
|
||||
|
||||
@CobblemonConfigField(Category.World, lang = "type_gem_min_growth", SERVER)
|
||||
var typeGemMinGrowth = 5
|
||||
|
||||
@CobblemonConfigField(Category.World, lang = "type_gem_growth_chance", SERVER)
|
||||
var typeGemGrowthChance = 0.1f
|
||||
|
||||
@CobblemonConfigField(Category.World, lang = "type_gem_initial_expansion_cycles", SERVER)
|
||||
var typeGemInitialExpansionCycles = 20
|
||||
|
||||
@CobblemonConfigField(Category.World, lang = "type_gem_tick_chance", SERVER)
|
||||
var typeGemTickChance = 0.1f
|
||||
|
||||
fun clone(): CobblemonConfig {
|
||||
val newConfig = CobblemonConfig()
|
||||
CobblemonConfig::class.memberProperties.forEach { property ->
|
||||
|
||||
@@ -30,7 +30,7 @@ object CobblemonSchemas {
|
||||
private val SAME: (Int, Schema) -> Schema = ::Schema
|
||||
private val RESULT: DataFixerBuilder.Result = this.create()
|
||||
|
||||
const val DATA_VERSION = 2
|
||||
const val DATA_VERSION = 3
|
||||
|
||||
/**
|
||||
* The Cobblemon [DataFixer].
|
||||
@@ -85,6 +85,8 @@ object CobblemonSchemas {
|
||||
builder.addFixer(RaisedPPStagesFix(schema1))
|
||||
val schema2 = builder.addSchema(2, SAME)
|
||||
builder.addFixer(HypertrainIVFix(schema2))
|
||||
val schema3 = builder.addSchema(3, SAME)
|
||||
builder.addFixer(TypeGemGrowthTypeFix(schema3))
|
||||
}
|
||||
|
||||
private class CobblemonDataFixerCodec<R>(private val baseCodec: Codec<R>, private val typeReference: TypeReference) : Codec<R> {
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* 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.datafixer.fix
|
||||
|
||||
import com.mojang.datafixers.DSL
|
||||
import com.mojang.datafixers.DataFix
|
||||
import com.mojang.datafixers.TypeRewriteRule
|
||||
import com.mojang.datafixers.schemas.Schema
|
||||
import com.mojang.serialization.Dynamic
|
||||
import net.minecraft.util.datafix.fixes.References
|
||||
|
||||
/**
|
||||
* Merges the old `should_grow` and `stunted` type gem cluster properties into `growth_type`.
|
||||
*/
|
||||
class TypeGemGrowthTypeFix(outputSchema: Schema) : DataFix(outputSchema, false) {
|
||||
|
||||
override fun makeRule(): TypeRewriteRule {
|
||||
return fixTypeEverywhereTyped("TypeGemGrowthTypeFix", inputSchema.getType(References.CHUNK)) { chunk ->
|
||||
chunk.update(DSL.remainderFinder(), ::fixChunk)
|
||||
}
|
||||
}
|
||||
|
||||
private fun fixChunk(chunk: Dynamic<*>): Dynamic<*> {
|
||||
return chunk.update("sections") { sections ->
|
||||
sections.createList(sections.asStream().map(::fixSection))
|
||||
}
|
||||
}
|
||||
|
||||
private fun fixSection(section: Dynamic<*>): Dynamic<*> {
|
||||
return section.update("block_states") { blockStates ->
|
||||
blockStates.update("palette") { palette ->
|
||||
palette.createList(palette.asStream().map(::fixPaletteEntry))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fixPaletteEntry(entry: Dynamic<*>): Dynamic<*> {
|
||||
if (entry.get("Name").asString("") !in CLUSTER_IDS) return entry
|
||||
|
||||
return entry.update("Properties") { properties ->
|
||||
if (properties.get(GROWTH_TYPE).result().isPresent) return@update properties
|
||||
|
||||
val shouldGrow = properties.get(SHOULD_GROW).asString(OLD_SHOULD_GROW_DEFAULT) == "true"
|
||||
val stunted = properties.get(STUNTED).asString(OLD_STUNTED_DEFAULT) == "true"
|
||||
|
||||
properties
|
||||
.remove(SHOULD_GROW)
|
||||
.remove(STUNTED)
|
||||
.set(GROWTH_TYPE, properties.createString(growthTypeFor(shouldGrow, stunted)))
|
||||
}
|
||||
}
|
||||
|
||||
private fun growthTypeFor(shouldGrow: Boolean, stunted: Boolean): String {
|
||||
return when {
|
||||
stunted -> GROWTH_TYPE_STUNTED
|
||||
shouldGrow -> GROWTH_TYPE_FULL
|
||||
else -> GROWTH_TYPE_NONE
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val SHOULD_GROW = "should_grow"
|
||||
private const val STUNTED = "stunted"
|
||||
private const val GROWTH_TYPE = "growth_type"
|
||||
|
||||
private const val OLD_SHOULD_GROW_DEFAULT = "true"
|
||||
private const val OLD_STUNTED_DEFAULT = "false"
|
||||
|
||||
private const val GROWTH_TYPE_FULL = "full"
|
||||
private const val GROWTH_TYPE_STUNTED = "stunted"
|
||||
private const val GROWTH_TYPE_NONE = "none"
|
||||
|
||||
// ID's as they were when this fix was made.
|
||||
private val CLUSTER_IDS = setOf(
|
||||
"cobblemon:normal_gem_cluster",
|
||||
"cobblemon:fire_gem_cluster",
|
||||
"cobblemon:water_gem_cluster",
|
||||
"cobblemon:electric_gem_cluster",
|
||||
"cobblemon:grass_gem_cluster",
|
||||
"cobblemon:ice_gem_cluster",
|
||||
"cobblemon:fighting_gem_cluster",
|
||||
"cobblemon:poison_gem_cluster",
|
||||
"cobblemon:ground_gem_cluster",
|
||||
"cobblemon:flying_gem_cluster",
|
||||
"cobblemon:psychic_gem_cluster",
|
||||
"cobblemon:bug_gem_cluster",
|
||||
"cobblemon:rock_gem_cluster",
|
||||
"cobblemon:ghost_gem_cluster",
|
||||
"cobblemon:dragon_gem_cluster",
|
||||
"cobblemon:dark_gem_cluster",
|
||||
"cobblemon:steel_gem_cluster",
|
||||
"cobblemon:fairy_gem_cluster"
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -485,6 +485,8 @@ open class PokemonEntity(
|
||||
}
|
||||
|
||||
BATTLE_ID -> {
|
||||
// refresh dimensions in case this pokemon has a battlingEyeHeight
|
||||
refreshDimensions()
|
||||
if (battleId != null) {
|
||||
busyLocks.remove(BATTLE_LOCK) // Remove in case it's hopped across to another battle, don't want extra battle locks
|
||||
busyLocks.add(BATTLE_LOCK)
|
||||
|
||||
@@ -26,6 +26,7 @@ object CallbackHandler {
|
||||
CobblemonEvents.POKEMON_CAPTURED.subscribe { CobblemonCallbacks.run(cobblemonResource("pokemon_captured"), it.context) }
|
||||
CobblemonEvents.POKEMON_ENTITY_SPAWN.subscribe { entity -> CobblemonCallbacks.run(cobblemonResource("pokemon_entity_spawn"), mutableMapOf<String, MoValue>("pokemon_entity" to entity.entity.asMoLangValue()), functions = moLangFunctionMap("pokemon" to { entity.entity.pokemon.struct })) }
|
||||
CobblemonEvents.BATTLE_VICTORY.subscribe { CobblemonCallbacks.run(cobblemonResource("battle_victory"), it.context) }
|
||||
CobblemonEvents.BATTLE_ENDED.subscribe { CobblemonCallbacks.run(cobblemonResource("battle_ended"), it.context) }
|
||||
CobblemonEvents.POKEDEX_DATA_CHANGED_PRE.subscribe { CobblemonCallbacks.run(cobblemonResource("pokedex_data_changed_pre"), it.getContext(), it.functions) }
|
||||
CobblemonEvents.POKEDEX_DATA_CHANGED_POST.subscribe { CobblemonCallbacks.run(cobblemonResource("pokedex_data_changed_post"), it.getContext()) }
|
||||
CobblemonEvents.FORME_CHANGE.subscribe { CobblemonCallbacks.run(cobblemonResource("forme_change"), it.context) }
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.item
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.SignApplicator
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.entity.SignBlockEntity
|
||||
import net.minecraft.world.level.block.entity.SignText
|
||||
|
||||
class GlowItem(block: Block, settings: Properties) : ItemNameBlockItem(block, settings), SignApplicator {
|
||||
|
||||
override fun tryApplyToSign(level: Level, sign: SignBlockEntity, isFront: Boolean, player: Player?): Boolean {
|
||||
if (sign.updateText({ signText: SignText? -> signText!!.setHasGlowingText(true) }, isFront)) {
|
||||
level.playSound(
|
||||
null as Player?,
|
||||
sign.blockPos,
|
||||
CobblemonSounds.BRIGHT_POWDER_USE,
|
||||
SoundSource.BLOCKS,
|
||||
1.0f,
|
||||
1.0f
|
||||
)
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,10 +13,12 @@ import com.cobblemon.mod.common.api.battles.model.actor.BattleActor
|
||||
import com.cobblemon.mod.common.battles.pokemon.BattlePokemon
|
||||
import com.cobblemon.mod.common.item.battle.BagItem
|
||||
import com.cobblemon.mod.common.item.battle.SimpleBagItemLike
|
||||
import net.minecraft.world.item.ItemNameBlockItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.level.block.Block
|
||||
|
||||
class MoomooMilk(properties: Properties) : CobblemonItem(properties), SimpleBagItemLike {
|
||||
class MoomooMilk(properties: Properties, block: Block) : ItemNameBlockItem(block, properties), SimpleBagItemLike {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = "item.cobblemon.moomoo_milk"
|
||||
override val returnItem = Items.GLASS_BOTTLE
|
||||
|
||||
+134
-38
@@ -12,9 +12,11 @@ import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonItemComponents
|
||||
import com.cobblemon.mod.common.CobblemonItems
|
||||
import com.cobblemon.mod.common.api.riding.stats.RidingStat
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachines
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock
|
||||
import com.cobblemon.mod.common.item.AprijuiceItem
|
||||
import com.cobblemon.mod.common.item.components.RideBoostsComponent
|
||||
import com.cobblemon.mod.common.item.components.TMMoveComponent
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.component.DataComponents
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
@@ -40,44 +42,111 @@ object CobblemonItemGroups {
|
||||
private val ALL = arrayListOf<ItemGroupHolder>()
|
||||
private val INJECTORS = hashMapOf<ResourceKey<CreativeModeTab>, (injector: Injector) -> Unit>()
|
||||
|
||||
@JvmStatic val BLOCKS_KEY = this.create("blocks", this::blockEntries) {
|
||||
@JvmStatic
|
||||
val BLOCKS_KEY = this.create("blocks", this::blockEntries) {
|
||||
ItemStack(CobblemonItems.PC)
|
||||
}
|
||||
@JvmStatic val UTILITY_ITEMS_KEY = this.create("utility_item", this::utilityItemEntries) {
|
||||
@JvmStatic
|
||||
val UTILITY_ITEMS_KEY = this.create("utility_item", this::utilityItemEntries) {
|
||||
ItemStack(CobblemonItems.POKE_BALL)
|
||||
}
|
||||
@JvmStatic val AGRICULTURE_KEY = this.create("agriculture", this::agricultureEntries) {
|
||||
@JvmStatic
|
||||
val AGRICULTURE_KEY = this.create("agriculture", this::agricultureEntries) {
|
||||
ItemStack(CobblemonItems.MEDICINAL_LEEK)
|
||||
}
|
||||
@JvmStatic val ARCHAEOLOGY_KEY = this.create("archaeology", this::archaeologyEntries) {
|
||||
@JvmStatic
|
||||
val ARCHAEOLOGY_KEY = this.create("archaeology", this::archaeologyEntries) {
|
||||
ItemStack(CobblemonItems.HELIX_FOSSIL)
|
||||
}
|
||||
@JvmStatic val CONSUMABLES_KEY = this.create("consumables", this::consumableEntries) {
|
||||
@JvmStatic
|
||||
val CONSUMABLES_KEY = this.create("consumables", this::consumableEntries) {
|
||||
ItemStack(CobblemonItems.ROASTED_LEEK)
|
||||
}
|
||||
@JvmStatic val HELD_ITEMS_KEY = this.create("held_item", this::heldItemEntries) {
|
||||
@JvmStatic
|
||||
val HELD_ITEMS_KEY = this.create("held_item", this::heldItemEntries) {
|
||||
ItemStack(CobblemonItems.EXP_SHARE)
|
||||
}
|
||||
@JvmStatic val EVOLUTION_ITEMS_KEY = this.create("evolution_item", this::evolutionItemEntries) {
|
||||
@JvmStatic
|
||||
val EVOLUTION_ITEMS_KEY = this.create("evolution_item", this::evolutionItemEntries) {
|
||||
ItemStack(CobblemonItems.BLACK_AUGURITE)
|
||||
}
|
||||
|
||||
@JvmStatic val BLOCKS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(BLOCKS_KEY)
|
||||
@JvmStatic val UTILITY_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(UTILITY_ITEMS_KEY)
|
||||
@JvmStatic val AGRICULTURE get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(AGRICULTURE_KEY)
|
||||
@JvmStatic val ARCHAEOLOGY get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(ARCHAEOLOGY_KEY)
|
||||
@JvmStatic val CONSUMABLES get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(CONSUMABLES_KEY)
|
||||
@JvmStatic val HELD_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(HELD_ITEMS_KEY)
|
||||
@JvmStatic val EVOLUTION_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(EVOLUTION_ITEMS_KEY)
|
||||
@JvmStatic
|
||||
val TM_ITEMS_KEY = this.create("tm_item", this::tmItemEntries) {
|
||||
ItemStack(CobblemonItems.BLANK_TM)
|
||||
}
|
||||
|
||||
@JvmStatic val BUILDING_BLOCKS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("building_blocks")), this::blocksInjections)
|
||||
@JvmStatic val COLORED_BLOCKS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("colored_blocks")), this::coloredBlocksInjections)
|
||||
@JvmStatic val FUNCTIONAL_BLOCKS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("functional_blocks")), this::functionalBlocksInjections)
|
||||
@JvmStatic val REDSTONE_BLOCKS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("redstone_blocks")), this::redstoneBlocksInjections)
|
||||
@JvmStatic val FOOD_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("food_and_drinks")), this::foodInjections)
|
||||
@JvmStatic val TOOLS_AND_UTILITIES_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("tools_and_utilities")), this::toolsAndUtilitiesInjections)
|
||||
@JvmStatic val INGREDIENTS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("ingredients")), this::ingredientsInjections)
|
||||
@JvmStatic val OP_BLOCKS_INJECTIONS = this.inject(ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("op_blocks")), this::opBlocksInjections)
|
||||
@JvmStatic
|
||||
val BLOCKS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(BLOCKS_KEY)
|
||||
@JvmStatic
|
||||
val UTILITY_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(UTILITY_ITEMS_KEY)
|
||||
@JvmStatic
|
||||
val AGRICULTURE get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(AGRICULTURE_KEY)
|
||||
@JvmStatic
|
||||
val ARCHAEOLOGY get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(ARCHAEOLOGY_KEY)
|
||||
@JvmStatic
|
||||
val CONSUMABLES get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(CONSUMABLES_KEY)
|
||||
@JvmStatic
|
||||
val HELD_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(HELD_ITEMS_KEY)
|
||||
@JvmStatic
|
||||
val EVOLUTION_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(EVOLUTION_ITEMS_KEY)
|
||||
@JvmStatic
|
||||
val TM_ITEMS get() = BuiltInRegistries.CREATIVE_MODE_TAB.get(TM_ITEMS_KEY)
|
||||
|
||||
@JvmStatic
|
||||
val BUILDING_BLOCKS_INJECTIONS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("building_blocks")
|
||||
), this::blocksInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val COLORED_BLOCKS_INJECTIONS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("colored_blocks")
|
||||
), this::coloredBlocksInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val FUNCTIONAL_BLOCKS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("functional_blocks")
|
||||
), this::functionalBlocksInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val REDSTONE_BLOCKS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("redstone_blocks")
|
||||
), this::redstoneBlocksInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val FOOD_INJECTIONS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("food_and_drinks")
|
||||
), this::foodInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val TOOLS_AND_UTILITIES_INJECTIONS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("tools_and_utilities")
|
||||
), this::toolsAndUtilitiesInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val INGREDIENTS_INJECTIONS = this.inject(
|
||||
ResourceKey.create(
|
||||
BuiltInRegistries.CREATIVE_MODE_TAB.key(),
|
||||
ResourceLocation.parse("ingredients")
|
||||
), this::ingredientsInjections
|
||||
)
|
||||
@JvmStatic
|
||||
val OP_BLOCKS_INJECTIONS = this.inject(
|
||||
ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ResourceLocation.parse("op_blocks")),
|
||||
this::opBlocksInjections
|
||||
)
|
||||
|
||||
fun register(consumer: (holder: ItemGroupHolder) -> CreativeModeTab) {
|
||||
ALL.forEach(consumer::invoke)
|
||||
@@ -96,13 +165,20 @@ object CobblemonItemGroups {
|
||||
val displayName: Component = Component.translatable("itemGroup.${key.location().namespace}.${key.location().path}")
|
||||
)
|
||||
|
||||
private fun create(name: String, entryCollector: DisplayItemsGenerator, displayIconProvider: () -> ItemStack): ResourceKey<CreativeModeTab> {
|
||||
private fun create(
|
||||
name: String,
|
||||
entryCollector: DisplayItemsGenerator,
|
||||
displayIconProvider: () -> ItemStack
|
||||
): ResourceKey<CreativeModeTab> {
|
||||
val key = ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), cobblemonResource(name))
|
||||
this.ALL += ItemGroupHolder(key, displayIconProvider, entryCollector)
|
||||
return key
|
||||
}
|
||||
|
||||
private fun inject(key: ResourceKey<CreativeModeTab>, consumer: (injector: Injector) -> Unit): (injector: Injector) -> Unit {
|
||||
private fun inject(
|
||||
key: ResourceKey<CreativeModeTab>,
|
||||
consumer: (injector: Injector) -> Unit
|
||||
): (injector: Injector) -> Unit {
|
||||
this.INJECTORS[key] = consumer
|
||||
return consumer
|
||||
}
|
||||
@@ -122,6 +198,14 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.GALARICA_NUTS)
|
||||
entries.accept(CobblemonItems.HEARTY_GRAINS)
|
||||
entries.accept(CobblemonItems.TASTY_TAIL)
|
||||
entries.accept(CobblemonItems.POMOHANA)
|
||||
entries.accept(CobblemonItems.PAUVILLEA)
|
||||
entries.accept(CobblemonItems.LOBAILA)
|
||||
entries.accept(CobblemonItems.WISTENSU)
|
||||
entries.accept(CobblemonItems.VOLTACONIA)
|
||||
entries.accept(CobblemonItems.VERDROOT)
|
||||
entries.accept(CobblemonItems.MISTLEAF)
|
||||
entries.accept(CobblemonItems.LUCIBELL)
|
||||
// entries.accept(CobblemonItems.BUGWORT) // TODO after 1.7
|
||||
|
||||
entries.accept(CobblemonItems.RED_APRICORN)
|
||||
@@ -295,8 +379,7 @@ object CobblemonItemGroups {
|
||||
DataComponents.BLOCK_STATE,
|
||||
BlockItemStateProperties.EMPTY
|
||||
.with(TypeGemClusterBlock.STAGE, i)
|
||||
.with(TypeGemClusterBlock.SHOULD_GROW, false)
|
||||
.with(TypeGemClusterBlock.STUNTED, false)
|
||||
.with(TypeGemClusterBlock.GROWTH_TYPE, TypeGemClusterBlock.GrowthType.DECORATION)
|
||||
)
|
||||
stack.set(
|
||||
DataComponents.CUSTOM_MODEL_DATA,
|
||||
@@ -631,8 +714,6 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.ABILITY_CAPSULE)
|
||||
entries.accept(CobblemonItems.ABILITY_PATCH)
|
||||
|
||||
entries.accept(CobblemonItems.BLANK_TM)
|
||||
|
||||
entries.accept(CobblemonItems.POKE_BAIT)
|
||||
entries.accept(CobblemonItems.POKE_SNACK)
|
||||
entries.accept(CobblemonItems.POKE_CAKE)
|
||||
@@ -649,15 +730,17 @@ object CobblemonItemGroups {
|
||||
|
||||
private fun defaultAprijuice(item: AprijuiceItem): ItemStack {
|
||||
return ItemStack(item).apply {
|
||||
this.set(CobblemonItemComponents.RIDE_BOOST, RideBoostsComponent(
|
||||
mapOf(
|
||||
RidingStat.ACCELERATION to 1,
|
||||
RidingStat.JUMP to 1,
|
||||
RidingStat.SPEED to 1,
|
||||
RidingStat.STAMINA to 1,
|
||||
RidingStat.SKILL to 1
|
||||
this.set(
|
||||
CobblemonItemComponents.RIDE_BOOST, RideBoostsComponent(
|
||||
mapOf(
|
||||
RidingStat.ACCELERATION to 1,
|
||||
RidingStat.JUMP to 1,
|
||||
RidingStat.SPEED to 1,
|
||||
RidingStat.STAMINA to 1,
|
||||
RidingStat.SKILL to 1
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -848,6 +931,16 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.PSYCHIC_SEED)
|
||||
}
|
||||
|
||||
private fun tmItemEntries(displayContext: ItemDisplayParameters, entries: Output) {
|
||||
entries.accept(CobblemonItems.BLANK_TM)
|
||||
TechnicalMachines
|
||||
.tmMap
|
||||
.entries
|
||||
.sortedBy { it.value.moveName.name }
|
||||
.sortedBy { it.value.moveName.elementalType.order }
|
||||
.forEach { entries.accept(TMMoveComponent.createStack(it.value.moveName)) }
|
||||
}
|
||||
|
||||
private fun utilityItemEntries(displayContext: ItemDisplayParameters, entries: Output) {
|
||||
CobblemonItems.pokeBalls.forEach(entries::accept)
|
||||
CobblemonItems.pokeRods.forEach(entries::accept)
|
||||
@@ -855,7 +948,7 @@ object CobblemonItemGroups {
|
||||
}
|
||||
|
||||
private fun blocksInjections(injector: Injector) {
|
||||
if(Cobblemon.implementation.isModInstalled("adorn")) { //adorn modifies vanilla block tab and if we don't follow suit we crash the game
|
||||
if (Cobblemon.implementation.isModInstalled("adorn")) { //adorn modifies vanilla block tab and if we don't follow suit we crash the game
|
||||
injector.putLast(CobblemonItems.APRICORN_LOG)
|
||||
injector.putLast(CobblemonItems.APRICORN_WOOD)
|
||||
injector.putLast(CobblemonItems.STRIPPED_APRICORN_LOG)
|
||||
@@ -974,7 +1067,10 @@ object CobblemonItemGroups {
|
||||
injector.putAfter(CobblemonItems.NOSTALGIC_SHERD, CobblemonItems.HELIX_SHERD)
|
||||
injector.putAfter(CobblemonItems.SUSPICIOUS_SHERD, CobblemonItems.NOSTALGIC_SHERD)
|
||||
|
||||
injector.putAfter(CobblemonItems.AUTOMATON_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE)
|
||||
injector.putAfter(
|
||||
CobblemonItems.AUTOMATON_ARMOR_TRIM_SMITHING_TEMPLATE,
|
||||
Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE
|
||||
)
|
||||
injector.putAfter(CobblemonItems.POKEROD_SMITHING_TEMPLATE, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)
|
||||
}
|
||||
|
||||
|
||||
@@ -211,8 +211,9 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
// Species updates already update HP but just a form change may require it
|
||||
// Moved to before the field was set else it won't actually do the hp calc proper <3
|
||||
val quotient = clamp(currentHealth / maxHealth.toFloat(), 0F, 1F)
|
||||
val oldForm = field
|
||||
field = value
|
||||
this.updateMovesOnFormChange(value)
|
||||
this.updateMovesOnFormChange(oldForm)
|
||||
// Evo proxy is already cleared on species update but the form may be changed by itself, this is fine and no unnecessary packets will be sent out
|
||||
this.evolutionProxy.current().clear()
|
||||
checkGender()
|
||||
@@ -2301,15 +2302,16 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
*
|
||||
* E.g, Removing Overheat from Rotom when it is no longer Rotom-Heat and the target form is not compatible with Overheat.
|
||||
*/
|
||||
private fun updateMovesOnFormChange(newForm: FormData) {
|
||||
private fun updateMovesOnFormChange(oldForm: FormData) {
|
||||
if (this.isClient) return
|
||||
|
||||
val oldFormChangeMoves = this.form.moves.formChangeMoves.toSet()
|
||||
val newForm = this.form
|
||||
val oldFormChangeMoves = oldForm.moves.formChangeMoves.toSet()
|
||||
|
||||
// Only remove moves that were provided by the old form's form-change moves AND are not learnable by the new form
|
||||
for (i in 0 until MoveSet.MOVE_COUNT) {
|
||||
val move = this.moveSet[i]
|
||||
if (move != null && move.template in oldFormChangeMoves) {
|
||||
if (move != null && move.template in oldFormChangeMoves && !LearnsetQuery.ANY.canLearn(move.template, newForm.moves)) {
|
||||
this.moveSet.setMove(i, null)
|
||||
}
|
||||
}
|
||||
@@ -2322,16 +2324,8 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
}
|
||||
}
|
||||
|
||||
// Add new form's form-change moves
|
||||
newForm.moves.formChangeMoves.forEach { move ->
|
||||
if (this.moveSet.filterNotNull().none { it.template == move }) {
|
||||
if (this.moveSet.hasSpace()) {
|
||||
this.moveSet.add(move.create())
|
||||
} else {
|
||||
this.benchedMoves.add(BenchedMove(move, 0))
|
||||
}
|
||||
}
|
||||
}
|
||||
// Add the new form's form-change moves (skipping any the Pokémon isn't high enough level for yet).
|
||||
grantEligibleFormChangeMoves()
|
||||
|
||||
// If moveset is empty try to find one valid move to fill it
|
||||
if (this.moveSet.filterNotNull().isEmpty()) {
|
||||
@@ -2343,6 +2337,30 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Grants any of the current form's `form_change` moves that this Pokémon doesn't already know and is high
|
||||
* enough level for (form-change moves that are also level-up moves, e.g. Glaciate on Kyurem, shouldn't be
|
||||
* granted until that level is reached).
|
||||
*/
|
||||
private fun grantEligibleFormChangeMoves() {
|
||||
if (this.isClient) return
|
||||
|
||||
this.form.moves.formChangeMoves.forEach { move ->
|
||||
if (this.moveSet.filterNotNull().none { it.template == move } && this.benchedMoves.none { it.moveTemplate == move }) {
|
||||
val requiredLevel = this.form.moves.levelUpMoves.entries.firstOrNull { move in it.value }?.key
|
||||
if (requiredLevel != null && this.level < requiredLevel) {
|
||||
return@forEach
|
||||
}
|
||||
|
||||
if (this.moveSet.hasSpace()) {
|
||||
this.moveSet.add(move.create())
|
||||
} else {
|
||||
this.benchedMoves.add(BenchedMove(move, 0))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* The [FriendshipMutationCalculator] used when a Pokémon levels up.
|
||||
|
||||
@@ -91,6 +91,7 @@ class Species : ShowdownIdentifiable {
|
||||
var standingEyeHeight: Float? = null
|
||||
var swimmingEyeHeight: Float? = null
|
||||
var flyingEyeHeight: Float? = null
|
||||
var battlingEyeHeight: Float? = null
|
||||
var behaviour = PokemonBehaviour()
|
||||
private set
|
||||
var pokedex = mutableListOf<String>()
|
||||
@@ -221,6 +222,7 @@ class Species : ShowdownIdentifiable {
|
||||
private fun resolveEyeHeight(entity: PokemonEntity): Float? = when {
|
||||
entity.getCurrentPoseType() in SWIMMING_POSES -> this.swimmingEyeHeight ?: standingEyeHeight
|
||||
entity.getCurrentPoseType() in FLYING_POSES -> this.flyingEyeHeight ?: standingEyeHeight
|
||||
entity.isBattling -> this.battlingEyeHeight ?: standingEyeHeight
|
||||
else -> this.standingEyeHeight
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
package com.cobblemon.mod.common.world.feature
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonBlocks.TYPE_GEM_CORE
|
||||
import com.cobblemon.mod.common.CobblemonBlocks.typeGemBlocks
|
||||
import com.cobblemon.mod.common.block.TypeGemCoreBlock
|
||||
@@ -51,7 +52,9 @@ class TypeGemFeature : Feature<BlockStateConfiguration>(BlockStateConfiguration.
|
||||
|
||||
// Trigger forced growth with clusters
|
||||
val coreBlock = coreState.block as TypeGemCoreBlock
|
||||
coreBlock.forceGrow(worldGenLevel, origin, random, 0.5f)
|
||||
repeat(Cobblemon.config.typeGemInitialExpansionCycles) {
|
||||
coreBlock.expand(worldGenLevel, origin, random)
|
||||
}
|
||||
|
||||
// println("[TypeGemFeature] Placed ${gemId.path} at $chosenPos")
|
||||
return true
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:greninja_cloud",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particle/vanilla/big_smoke_white"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"cloudfade": {
|
||||
"particle_effect": {
|
||||
"effect": "cobblemon:greninja_cloud_fade",
|
||||
"type": "particle_with_velocity"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": "math.random_integer(10,12)"
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_box": {
|
||||
"offset": [0, 1, 0],
|
||||
"half_dimensions": [0.35, 0.75, 0.35],
|
||||
"direction": ["math.round(math.random(-1,1))", 0, "math.round(math.random(-1,1))"]
|
||||
},
|
||||
"minecraft:particle_initialization": {
|
||||
"per_render_expression": "v.smoke_color = v.particle_random_3;v.smoke_rotation = math.round(v.particle_random_2)*90;"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "0.7+(0.1*math.round(v.particle_random_4))"
|
||||
},
|
||||
"minecraft:particle_lifetime_events": {
|
||||
"expiration_event": "cloudfade"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "v.smoke_rotation"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0.85,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, "0.75+(0.75*math.round(v.particle_random_4))", 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.4, 0.4],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 16,
|
||||
"texture_height": 192,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 160],
|
||||
"size_UV": [16, 16],
|
||||
"step_UV": [0, -16],
|
||||
"frames_per_second": 28,
|
||||
"max_frame": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.smoke_color",
|
||||
"gradient": {
|
||||
"0.0": "#FFE8E8E8",
|
||||
"1.0": "#FFC1C1C1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:greninja_cloud_fade",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particle/vanilla/big_smoke_white"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 1
|
||||
},
|
||||
"minecraft:emitter_shape_point": {},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": 0.2
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "v.smoke_rotation"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 0.85,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 1.5, 0],
|
||||
"linear_drag_coefficient": 2
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": [0.3, 0.3],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 16,
|
||||
"texture_height": 192,
|
||||
"flipbook": {
|
||||
"base_UV": [0, 80],
|
||||
"size_UV": [16, 16],
|
||||
"step_UV": [0, 16],
|
||||
"frames_per_second": 32,
|
||||
"max_frame": 7
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.smoke_color",
|
||||
"gradient": {
|
||||
"0.0": "#FFE8E8E8",
|
||||
"1.0": "#FFC1C1C1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:greninja_smoke",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_alpha",
|
||||
"texture": "textures/particle/vanilla/generic"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.smokesize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0.37, 0.85, 1, 1, 1, 0.88, 0.55, 0]
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"cloud": {
|
||||
"particle_effect": {
|
||||
"effect": "cobblemon:greninja_cloud",
|
||||
"type": "particle"
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_steady": {
|
||||
"spawn_rate": 150,
|
||||
"max_particles": 200
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.15
|
||||
},
|
||||
"minecraft:emitter_lifetime_events": {
|
||||
"creation_event": "cloud"
|
||||
},
|
||||
"minecraft:emitter_shape_disc": {
|
||||
"offset": [0, "v.particle_random_4*0.75", 0],
|
||||
"radius": 0.35,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(0.55,0.65)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.round(v.particle_random_4*3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": 2,
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, "math.random(0.75,1)", 0],
|
||||
"linear_drag_coefficient": 0.85
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["(0.13*v.smokesize)-(v.particle_random_3*0.07)", "(0.13*v.smokesize)-(v.particle_random_3*0.07)"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 10,
|
||||
"max_frame": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": {
|
||||
"interpolant": "v.particle_random_3",
|
||||
"gradient": {
|
||||
"0.0": "#FFBDBDBD",
|
||||
"0.5": "#FF8F8F8F",
|
||||
"1.0": "#FF666666"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+8404
-7122
File diff suppressed because it is too large
Load Diff
+15718
File diff suppressed because it is too large
Load Diff
+14958
File diff suppressed because it is too large
Load Diff
+12726
-656
File diff suppressed because it is too large
Load Diff
+353
-449
File diff suppressed because it is too large
Load Diff
+8096
File diff suppressed because it is too large
Load Diff
+12431
File diff suppressed because it is too large
Load Diff
+923
-2713
File diff suppressed because it is too large
Load Diff
+6903
File diff suppressed because it is too large
Load Diff
+6579
File diff suppressed because it is too large
Load Diff
+9141
-173
File diff suppressed because it is too large
Load Diff
+65
-61
@@ -1,67 +1,6 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.shinx.new": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"waist": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"tail_1": {
|
||||
"rotation": [-9.00717, 20.70481, 65.85133]
|
||||
},
|
||||
"tail_2": {
|
||||
"rotation": [67.5, 0, 0]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [45, 45, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-4.11405, -22.13991, 10.80524]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": [0, 0, -3]
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"fluff": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"open_mouth": {
|
||||
"position": [0, 0, -2]
|
||||
},
|
||||
"closed_mouth": {
|
||||
"position": [0, 0, 1]
|
||||
},
|
||||
"back_leg_right": {
|
||||
"rotation": [-40.08019, 31.37238, 1.3824],
|
||||
"position": [0, -1.5, -1]
|
||||
},
|
||||
"knee_right": {
|
||||
"rotation": [45, 0, 0]
|
||||
},
|
||||
"front_foot_right": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"back_leg_left": {
|
||||
"rotation": [-40.08019, -31.37238, -1.3824],
|
||||
"position": [0, -1.5, -1]
|
||||
},
|
||||
"knee_left": {
|
||||
"rotation": [45, 0, 0]
|
||||
},
|
||||
"front_foot_left": {
|
||||
"rotation": [0, 5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.shinx.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
@@ -75,6 +14,71 @@
|
||||
"tail_3": {
|
||||
"rotation": [-37.5, 0, 0],
|
||||
"position": [0, 0.1, -0.3]
|
||||
},
|
||||
"leg_front_right": {
|
||||
"rotation": [0, 2.5, 0]
|
||||
},
|
||||
"leg_front_left": {
|
||||
"rotation": [0, -2.5, 0]
|
||||
},
|
||||
"leg_back_right": {
|
||||
"rotation": [0, 7.5, 2.5]
|
||||
},
|
||||
"leg_back_left": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.shinx.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, -0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, -0.1],
|
||||
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.shinx.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"position": [0, 0, 0.1],
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+74
-113
@@ -1,133 +1,94 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.luxio.idle": {
|
||||
"animation.luxio.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"cheek_fluff_left": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"cheek_fluff_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [37.5, 0, 0]
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"tail_2": {
|
||||
"rotation": [-17.5, 0, 0]
|
||||
"tail2": {
|
||||
"rotation": [-30, 0, 0]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
"tail3": {
|
||||
"rotation": [-30, 0, 0]
|
||||
},
|
||||
"tail_4": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
"tail4": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"tail_fluff_top": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"leg_back_right": {
|
||||
"rotation": [0, 7.5, 5]
|
||||
},
|
||||
"foot_back_right2": {
|
||||
"rotation": [0, 0, -5]
|
||||
},
|
||||
"leg_back_left": {
|
||||
"rotation": [0, -7.5, -5]
|
||||
},
|
||||
"foot_back_left2": {
|
||||
"rotation": [0, 0, 5]
|
||||
},
|
||||
"leg_front_right": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"leg_front_left": {
|
||||
"rotation": [0, -5, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.luxio.sleep": {
|
||||
"loop": true,
|
||||
"animation.luxio.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -4, 0]
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"back_leg_right": {
|
||||
"rotation": [-90, 45, 0],
|
||||
"position": [4, 1, 1]
|
||||
},
|
||||
"knee_right": {
|
||||
"rotation": [90, 0, 0],
|
||||
"position": [0, 1, 1]
|
||||
},
|
||||
"back_paw_right": {
|
||||
"position": [0, 1, 0]
|
||||
},
|
||||
"back_leg_left": {
|
||||
"rotation": [-90, 45, 0],
|
||||
"position": [4, 1, -3]
|
||||
},
|
||||
"knee_left": {
|
||||
"rotation": [90, 0, 0],
|
||||
"position": [0, 1, 1]
|
||||
},
|
||||
"back_paw_left": {
|
||||
"position": [0, 1, 0]
|
||||
},
|
||||
"front_leg_right": {
|
||||
"rotation": [-45, 0, 0]
|
||||
},
|
||||
"elbow_right": {
|
||||
"rotation": [-42.73421, -15.69986, -16.32495]
|
||||
},
|
||||
"front_paw_right": {
|
||||
"rotation": [90, 0, 0]
|
||||
},
|
||||
"front_leg_left": {
|
||||
"rotation": [-47.41981, -31.37238, 1.3824]
|
||||
},
|
||||
"elbow_left": {
|
||||
"rotation": [-42.73421, 15.69986, 16.32495]
|
||||
},
|
||||
"front_paw_left": {
|
||||
"rotation": [90, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-7.5, -22.5, 0],
|
||||
"position": [0, -1.25, -1.25]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [0, 45, 0]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-22.5, 22.5, 0],
|
||||
"position": [0, -0.75, 0]
|
||||
},
|
||||
"tail_2": {
|
||||
"rotation": [0, 67.5, 0]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [7.86119, 40.78947, 20.94102]
|
||||
},
|
||||
"tail_4": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"tail_5": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"head_fluff_top": {
|
||||
"rotation": [0, 0, -45]
|
||||
},
|
||||
"eyelid_l": {
|
||||
"position": [0, 0, -3]
|
||||
},
|
||||
"eyelid_r": {
|
||||
"position": [0, 0, -2]
|
||||
},
|
||||
"cheek_fluff_left": {
|
||||
"rotation": [0, 22.5, 22.5]
|
||||
},
|
||||
"cheek_fluff_right": {
|
||||
"rotation": [22.5, 0, -22.5]
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [0, 0, 1]
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0, 0, 1]
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.luxio.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"position": [0, 0, 0.1],
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+88
-146
@@ -1,161 +1,103 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.luxray.new": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [22.5, 0, 0],
|
||||
"position": [0, -2, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [24.14867, -20.70481, -9.00717]
|
||||
},
|
||||
"hips": {
|
||||
"rotation": [-22.81179, 9.23186, -3.86032]
|
||||
},
|
||||
"tail_1": {
|
||||
"rotation": [49.98844, 27.36694, 17.18133]
|
||||
},
|
||||
"tail_2": {
|
||||
"rotation": [-22.5, 22.5, 0]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [-53.52293, 35.66466, -17.31806]
|
||||
},
|
||||
"tail_4": {
|
||||
"rotation": [45, 45, 0]
|
||||
},
|
||||
"tail_5": {
|
||||
"rotation": [45, 45, 0]
|
||||
},
|
||||
"tail_6": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [62.26579, -15.69986, -16.32495],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-48.75474, -3.08149, 16.32258],
|
||||
"position": [0, -0.75, 0]
|
||||
},
|
||||
"mouth": {
|
||||
"rotation": [55, 0, 0]
|
||||
},
|
||||
"head_fluff_center_2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
},
|
||||
"head_fluff_center_3": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_top_right": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_top_2_right": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_top_left": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"head_fluff_top_2_left": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_bottom_right": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_bottom_left": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"head_fluff_bottom_2_left": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"front_leg_right": {
|
||||
"rotation": [-44.56145, 7.05302, 7.10708],
|
||||
"position": [0, -0.31732, -0.92388]
|
||||
},
|
||||
"elbow_right": {
|
||||
"rotation": [-42.73421, -15.69986, -16.32495]
|
||||
},
|
||||
"front_foot_right": {
|
||||
"rotation": [67.5, 0, 0]
|
||||
},
|
||||
"front_leg_left": {
|
||||
"rotation": [22.5, 0, 0],
|
||||
"position": [1.25, 1, 0]
|
||||
},
|
||||
"elbow_left": {
|
||||
"rotation": [-47.26579, -15.69986, 16.32495],
|
||||
"position": [-0.5, 0, 0]
|
||||
},
|
||||
"front_foot_left": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"back_leg_right": {
|
||||
"rotation": [-46.64867, -20.70481, 9.00717],
|
||||
"position": [-5, -2.38896, -2.07193]
|
||||
},
|
||||
"knee_right": {
|
||||
"rotation": [67.5, 0, 0],
|
||||
"position": [0.76537, 0.33755, 1.86018]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"back_foot_right": {
|
||||
"rotation": [-57.5, 0, 0]
|
||||
},
|
||||
"back_leg_left": {
|
||||
"rotation": [-19.83264, -18.43795, -6.24926]
|
||||
},
|
||||
"knee_left": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"back_foot_left": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.luxray.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"tail_1": {
|
||||
"rotation": [43, 0, 0]
|
||||
"tail": {
|
||||
"rotation": [30, 0, 0]
|
||||
},
|
||||
"tail_2": {
|
||||
"rotation": [22.5, 0, 0],
|
||||
"position": [0, 0, -0.2]
|
||||
"tail2": {
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"tail_3": {
|
||||
"rotation": [-45, 0, 0],
|
||||
"position": [0, 0.1, -0.3]
|
||||
"tail3": {
|
||||
"rotation": [-45, 0, 0]
|
||||
},
|
||||
"tail_4": {
|
||||
"rotation": [-52.68932, -2.64422, -1.88999],
|
||||
"position": [0, 0.2, -0.4]
|
||||
"tail4": {
|
||||
"rotation": [-45, 0, 0]
|
||||
},
|
||||
"tail_5": {
|
||||
"rotation": [-30, 0, 0],
|
||||
"position": [0, 0.1, -0.2]
|
||||
"tail5": {
|
||||
"rotation": [-35, 0, 0]
|
||||
},
|
||||
"tail_6": {
|
||||
"rotation": [20, 0, 0],
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"tail_fluff": {
|
||||
"tail_fluff_top": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"tail6": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"tail7": {
|
||||
"rotation": [20, 0, 0]
|
||||
},
|
||||
"leg_front_left": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"leg_front_right": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"leg_back_left": {
|
||||
"rotation": [0, -7.5, -2.5]
|
||||
},
|
||||
"foot_back_left2": {
|
||||
"rotation": [0, 0, 2.5]
|
||||
},
|
||||
"leg_back_right": {
|
||||
"rotation": [0, 7.5, 2.5]
|
||||
},
|
||||
"foot_back_right2": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.luxray.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"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]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.luxray.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"position": [0, 0, 0.1],
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+205
-691
File diff suppressed because it is too large
Load Diff
+191
-70
@@ -1,6 +1,179 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.chespin.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.cry": {
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": {
|
||||
"pre": [-12, 0, 0],
|
||||
"post": [-12, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [-12, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_closed_smile": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.75": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_smile": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.75": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.75": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.75": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.1667": {
|
||||
"effect": "pokemon.chespin.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.pose": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [0, -37.5, 0],
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [-12.5, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-13.89157, 20.57373, -10.30286]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [4.68184, 16.2524, -29.6444]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [34.92019, 17.2337, 20.34505]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-51.63554, -16.76559, 11.06517],
|
||||
"position": [-1, 0, 0]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [0, -37.5, 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"toes_right": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [7.53535, -3.55508, -21.73761]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [17.45752, -7.82184, 22.22986]
|
||||
},
|
||||
"toes_left": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"head_spikes_sharp": {
|
||||
"scale": 0
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0, 0.2, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [-0.2, 0.2, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
@@ -52,6 +225,9 @@
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["math.sin(q.anim_time*90*3-60)*1.5", "-math.sin(q.anim_time*90*1.5-90)*6.5", 0]
|
||||
},
|
||||
"head_spikes_sharp": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -106,6 +282,9 @@
|
||||
},
|
||||
"toe_right": {
|
||||
"rotation": ["math.clamp(math.sin(q.anim_time*90*5+40)*40,-180,0)", 0, 0]
|
||||
},
|
||||
"head_spikes_sharp": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -134,14 +313,14 @@
|
||||
"mouth_open": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"spike_head_left": {
|
||||
"head_spike_left": {
|
||||
"rotation": ["-5+math.sin(q.anim_time*90*1-90)*5", 0, -22.5]
|
||||
},
|
||||
"spike_head_right": {
|
||||
"head_spike_right": {
|
||||
"rotation": ["-5+math.sin(q.anim_time*90*1-90)*5", 0, 45],
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"spikes_back": {
|
||||
"head_spikes_back": {
|
||||
"rotation": ["math.sin(q.anim_time*90*1-135)*5", 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
@@ -173,79 +352,21 @@
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [35.02686, -1.60667, -1.91561]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.blink": {
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.chespin.cry": {
|
||||
"animation_length": 0.91667,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": ["-5+math.sin(q.anim_time*90*6+45)*8", 0, 0],
|
||||
"0.1667": ["-5+math.sin(q.anim_time*90*6+45)*8", 0, 0],
|
||||
"0.8333": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_open3": {
|
||||
"eye_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"mouth_closed": {
|
||||
"position": {
|
||||
"0.0833": [0, 0, 0],
|
||||
"0.1667": [0, 0, 0.1],
|
||||
"0.4167": [0, 0, 0.1],
|
||||
"0.5": [0, 0, 0]
|
||||
}
|
||||
"eye_right": {
|
||||
"position": [0, 0, 0.2]
|
||||
},
|
||||
"mouth_open": {
|
||||
"position": {
|
||||
"0.0833": [0, 0, 0],
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.4167": [0, 0, -0.1],
|
||||
"0.5": [0, 0, 0]
|
||||
}
|
||||
"mouth_closed_smile": {
|
||||
"position": [0, 0, 0.2]
|
||||
},
|
||||
"spike_head_left": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, "-10+math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.1667": [0, 0, "-10+math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.3333": [0, 0, "-20+math.sin(q.anim_time*90*3+95)*8"],
|
||||
"0.5833": [0, 0, "-20+math.sin(q.anim_time*90*3+95)*8"],
|
||||
"0.8333": [0, 0, 0]
|
||||
}
|
||||
"mouth_closed_neutral": {
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"spike_head_right": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, "10-math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.1667": [0, 0, "10-math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.3333": [0, 0, "20-math.sin(q.anim_time*90*3+95)*8"],
|
||||
"0.5833": [0, 0, "20-math.sin(q.anim_time*90*3+95)*8"],
|
||||
"0.9167": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0833": {
|
||||
"effect": "pokemon.chespin.cry"
|
||||
"head_spikes_sharp": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+207
-156
@@ -1,6 +1,205 @@
|
||||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.quilladin.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.cry": {
|
||||
"animation_length": 1.5,
|
||||
"bones": {
|
||||
"torso2": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {
|
||||
"pre": [2, 0, 0],
|
||||
"post": [2, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-2.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [-2.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": {
|
||||
"post": [1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.4167": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_closed_smile": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"1.3333": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_smile": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.375": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.0417": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_o": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.375": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"1.3333": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.1667": {
|
||||
"effect": "pokemon.quilladin.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.pose": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, 2, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [-27.43745, 1.50179, 4.76968]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [-15.02687, 1.91486, -1.60757],
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [7.56397, 7.43547, 0.98448]
|
||||
},
|
||||
"tail3": {
|
||||
"rotation": [10.08453, 7.38542, 1.30962]
|
||||
},
|
||||
"torso2": {
|
||||
"rotation": [7.49294, -0.32621, -2.52136]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [0.1, 0.1, 0]
|
||||
},
|
||||
"mouth_closed_smile": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"mouth_open_smile": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"hair": {
|
||||
"rotation": [-27.5, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [-73.6118, 1.34454, -14.51378]
|
||||
},
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
},
|
||||
"finger_back_left": {
|
||||
"rotation": [0, -15, 0]
|
||||
},
|
||||
"finger_thumb_left": {
|
||||
"rotation": [0, -20, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-73.51921, -6.14051, 13.09658]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, -5, 0]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"finger_thumb_right": {
|
||||
"rotation": [0, 25, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-97.62567, -25.77605, 9.45845],
|
||||
"position": [1.1, 1.65, -5]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-66.51084, 28.74673, 11.67459],
|
||||
"position": [0, 2, -4]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0, 0.1, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
@@ -197,166 +396,18 @@
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [15, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.blink": {
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.quilladin.cry": {
|
||||
"animation_length": 1.5,
|
||||
"bones": {
|
||||
"neck": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [10, 0, 0],
|
||||
"1.25": [10, 0, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
"eye_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"mouth": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, -2, 0],
|
||||
"1.25": [0, -2, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
"eye_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"mouth2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, -5, 0],
|
||||
"1.25": [0, -5, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
"mouth_closed_smile": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"jaw": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, -3, 0],
|
||||
"1.25": [0, -3, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [-15, 0, 0],
|
||||
"1.25": [-15, 0, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"head2": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [-15, 0, 0],
|
||||
"1.25": [-15, 0, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_closed2": {
|
||||
"position": {
|
||||
"0.25": [0, 0, -0.1],
|
||||
"0.3333": [0, 0, 0],
|
||||
"1.1667": [0, 0, 0],
|
||||
"1.25": [0, 0, -0.1]
|
||||
}
|
||||
},
|
||||
"mouth_open2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.25": [0, 0, 0],
|
||||
"1.25": [0, 0, 0],
|
||||
"1.5": [0, 0, 0.1]
|
||||
}
|
||||
},
|
||||
"head3": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [-15, 0, 0],
|
||||
"1.25": [-15, 0, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_closed3": {
|
||||
"position": {
|
||||
"0.25": [0, 0, -0.1],
|
||||
"0.3333": [0, 0, 0],
|
||||
"1.1667": [0, 0, 0],
|
||||
"1.25": [0, 0, -0.1]
|
||||
}
|
||||
},
|
||||
"mouth_open3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.25": [0, 0, 0],
|
||||
"1.25": [0, 0, 0],
|
||||
"1.5": [0, 0, 0.1]
|
||||
}
|
||||
},
|
||||
"mouth_closed": {
|
||||
"position": {
|
||||
"0.25": [0, 0, 0],
|
||||
"0.3333": [0, 0, 0.1],
|
||||
"1.1667": [0, 0, 0.1],
|
||||
"1.25": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_open": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, -0.1],
|
||||
"1.25": [0, 0, -0.1],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": ["-5+math.sin(q.anim_time*90*6+45)*8", 0, 0],
|
||||
"0.25": ["-5+math.sin(q.anim_time*90*6+45)*8", 0, 0],
|
||||
"0.3333": ["-8.29+math.sin(q.anim_time*90*3+95)*6", 0, 0],
|
||||
"1.0": ["-8.29+math.sin(q.anim_time*90*3)*2", 0, 0],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"spike_left": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, "-10+math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.25": [0, 0, "-10+math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.3333": [0, 0, "-20+math.sin(q.anim_time*90*3+95)*8"],
|
||||
"1.0": [0, 0, "-20+math.sin(q.anim_time*90*3+95)*8"],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"spike_right": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, "10-math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.25": [0, 0, "10-math.sin(q.anim_time*90*6+45)*8"],
|
||||
"0.3333": [0, 0, "20-math.sin(q.anim_time*90*3+95)*8"],
|
||||
"1.0": [0, 0, "20-math.sin(q.anim_time*90*3+95)*8"],
|
||||
"1.5": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.1667": {
|
||||
"effect": "pokemon.quilladin.cry"
|
||||
"mouth_closed_neutral": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+810
-203
File diff suppressed because it is too large
Load Diff
+96
-45
@@ -147,21 +147,54 @@
|
||||
}
|
||||
},
|
||||
"animation.fennekin.blink": {
|
||||
"animation_length": 0.125,
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, -0.1],
|
||||
"0.0417": [-0.1, 0, -0.1],
|
||||
"0.0833": [0, 0, 0]
|
||||
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, -0.1],
|
||||
"0.0417": [0.1, 0, -0.1],
|
||||
"0.0833": [0, 0, 0]
|
||||
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyes_blink_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.fennekin.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -182,27 +215,31 @@
|
||||
"0.5833": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": [64.27, 0, 0],
|
||||
"0.125": [70, 0, 0],
|
||||
"0.1667": [38.9, 0, 0],
|
||||
"0.2083": [35, 0, 0],
|
||||
"0.25": [38.75, 0, 0],
|
||||
"0.2917": [65.58, 0, 0],
|
||||
"0.3333": [70, 0, 0],
|
||||
"0.4167": [65.76, 0, 0],
|
||||
"0.5417": [3.9, 0, 0],
|
||||
"0.5833": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_top": {
|
||||
"mouth_open": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [0, -1, 0],
|
||||
"0.5": [0, -1, 0],
|
||||
"0.5417": [0, 0, 0]
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, -1, 0]},
|
||||
"0.1667": {"pre": [0, -1, 0], "post": [0, 0, 0]},
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, -1, 0]},
|
||||
"0.5417": {"pre": [0, -1, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.5417": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.5417": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -238,23 +275,30 @@
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, 0, -2.5]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.fennekin.shock": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"pupil_left2": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
"pupil_left": {
|
||||
"rotation": [-2.1, 0, 0],
|
||||
"position": [0, 0.75, 0.028],
|
||||
"scale": [0.7, 0.8, 1]
|
||||
},
|
||||
"mouth_top": {
|
||||
"mouth_open": {
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [65, 0, 0]
|
||||
},
|
||||
"pupil_right2": {
|
||||
"scale": [0.7, 0.7, 1]
|
||||
"pupil_right": {
|
||||
"rotation": [-2.1, 0, 0],
|
||||
"position": [0, 0.75, 0.028],
|
||||
"scale": [0.7, 0.8, 1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -272,6 +316,12 @@
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_neutral_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eye_neutral_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -289,6 +339,12 @@
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_neutral_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eye_neutral_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -298,7 +354,7 @@
|
||||
"eyelid_happy_left": {
|
||||
"position": [0.1, 0, -0.1]
|
||||
},
|
||||
"mouth_top": {
|
||||
"mouth_open": {
|
||||
"position": [0, -1, 0]
|
||||
},
|
||||
"jaw": {
|
||||
@@ -312,23 +368,12 @@
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.fennekin.blush": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"blush_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"blush_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
"eye_neutral_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
"eye_neutral_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -346,6 +391,12 @@
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_neutral_left": {
|
||||
"position": [-0.1, 0, 0.1]
|
||||
},
|
||||
"eye_neutral_right": {
|
||||
"position": [0.1, 0, 0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+344
-196
@@ -4,36 +4,85 @@
|
||||
"animation.braixen.ground_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"torso": {
|
||||
"rotation": [2.5, 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": [0.95384, "12.1536-math.sin(q.anim_time*90*2.5+45)*2", -42.42961]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [-0.02642, -32.49865, 0.04926]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [0.95384, "-12.1536+math.sin(q.anim_time*90*2.5+45)*2", 42.42961]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [-0.02642, 32.49865, -0.04926]
|
||||
},
|
||||
"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]
|
||||
},
|
||||
"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_middle_right": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"finger_middle_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"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, -25]
|
||||
},
|
||||
"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, 25]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"skirt_front2": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"stick_tail": {
|
||||
"rotation": [-5, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [0.88045, -9.96156, -5.07673]
|
||||
},
|
||||
@@ -49,93 +98,41 @@
|
||||
"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]
|
||||
"skirt_left2": {
|
||||
"rotation": [0, 0, 15]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
"skirt_right2": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
"wand": {
|
||||
"scale": 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]
|
||||
"wand_tail": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"wand": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.battle_idle": {
|
||||
"loop": true,
|
||||
"animation_length": 0.875,
|
||||
"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 +159,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 +177,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 +213,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 +245,31 @@
|
||||
"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.24721, -1.93597, -14.87738]
|
||||
},
|
||||
"wand": {
|
||||
"rotation": [22.01816, -4.75113, 11.57518],
|
||||
"position": [14, -7, -11.5]
|
||||
},
|
||||
"wand_tail": {
|
||||
"scale": 0
|
||||
},
|
||||
"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,20 +391,255 @@
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 0, -22.5]
|
||||
},
|
||||
"stick_hand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_left4": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
},
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"wand": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.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]}
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0.1],
|
||||
"0.1667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.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]
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.1667": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
|
||||
"0.8333": {"pre": [0, 0, 0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.8333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sound_effects": {
|
||||
"0.0": {
|
||||
"effect": "pokemon.braixen.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"face": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.braixen.pose": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [-12.5, -30, 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"chest": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [12.25294, -38.3808, 35.72104]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 5, -15]
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": [0, 0, -15]
|
||||
},
|
||||
"neck": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [12.48848, -0.54094, 2.44081]
|
||||
},
|
||||
"jaw": {
|
||||
"rotation": [70, 0, 0]
|
||||
},
|
||||
"ear_ruff_left2": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"ear_ruff_left3": {
|
||||
"rotation": [0, -7.5, 0]
|
||||
},
|
||||
"ear_ruff_left4": {
|
||||
"rotation": [0, 12.5, 0]
|
||||
"rotation": [0, -22.5, 0]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": [7.08681, -3.21132, 14.65993]
|
||||
},
|
||||
"tail2": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [13.9042, 5.68422, -21.80633]
|
||||
},
|
||||
"leg_left3": {
|
||||
"rotation": [17.5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [47.5, 0, 0],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"ear_ruff_right": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
},
|
||||
"ear_ruff_right2": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"ear_ruff_right3": {
|
||||
"rotation": [0, 7.5, 0]
|
||||
},
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [41.62332, 22.64192, -3.4873]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [-26.43596, -58.95768, 35.12627]
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": [2.5, 0, 17.5]
|
||||
},
|
||||
"finger_front_right": {
|
||||
"rotation": [0, -7.5, -65]
|
||||
},
|
||||
"finger_middle_right": {
|
||||
"rotation": [0, 0, -62.5]
|
||||
},
|
||||
"finger_back_right": {
|
||||
"rotation": [0, 12.5, -67.5]
|
||||
},
|
||||
"body_wand": {
|
||||
"rotation": [-12.5, -30, 0]
|
||||
},
|
||||
"waist_wand": {
|
||||
"rotation": [0, 5, 0]
|
||||
},
|
||||
"chest_wand": {
|
||||
"rotation": [5, 0, 0]
|
||||
},
|
||||
"arm_wand": {
|
||||
"rotation": [41.62332, 22.64192, -3.4873]
|
||||
},
|
||||
"arm2_wand": {
|
||||
"rotation": [-26.43596, -58.95768, 35.12627]
|
||||
},
|
||||
"hand_wand": {
|
||||
"rotation": [2.5, 0, 17.5]
|
||||
},
|
||||
"wand": {
|
||||
"rotation": [-87.5, 0, 0],
|
||||
"position": [6, -1, -6]
|
||||
},
|
||||
"fire": {
|
||||
"rotation": [47.5, 0, 0]
|
||||
},
|
||||
"wand_tail": {
|
||||
"scale": 0
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-16.24074, 6.60796, 21.55613]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [35, 0, 0]
|
||||
},
|
||||
"leg_right3": {
|
||||
"rotation": [-47.5, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [-1, 0, 0]
|
||||
},
|
||||
"ear_ruff_shock_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_shock_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"ear_ruff_right4": {
|
||||
"rotation": [0, -12.5, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7671
-316
File diff suppressed because it is too large
Load Diff
+484
-159
@@ -6,22 +6,22 @@
|
||||
"bones": {
|
||||
"arm_left": {
|
||||
"rotation": [62.63351, "69.9361+Math.cos((query.anim_time-0.3) * 90 * 2) * 3", 54.27769],
|
||||
"position": [0, "Math.cos((query.anim_time-0.1) * 90 * 2) * 0.1", "-1+Math.sin((query.anim_time-0.1) * 90 * 2) * 0.1"]
|
||||
"position": [0, "Math.cos((query.anim_time-0.1) * 90 * 2) * 0.1", 0]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 10, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-119.85791, -37.10567, 15.80757]
|
||||
"rotation": [-123.90298, -35.73903, 18.40939]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [102.79362, 12.19908, 2.74715],
|
||||
"position": [0, 0.1, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
"rotation": [4.99527, -0.21782, 2.4905]
|
||||
},
|
||||
"finger_index_left": {
|
||||
"finger_front_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"wrist_left": {
|
||||
@@ -30,62 +30,63 @@
|
||||
"head": {
|
||||
"rotation": ["-25+Math.cos((query.anim_time-0.4) * 90 * 2) * -5", 0, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["15+Math.cos((query.anim_time-0.2) * 90 * 2) * 2", 0, 0],
|
||||
"position": [0, "-1+Math.cos((query.anim_time) * 90 * 2) * 0.2", 0]
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": ["7.5+Math.cos((query.anim_time-0.3) * 90 * 2) * 2", 0, 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-118.93803, 29.14089, -15.06885]
|
||||
"rotation": [-123.90298, 35.73903, -18.40939]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [102.79362, -12.19908, -2.74715],
|
||||
"position": [0, 0.1, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
"rotation": [4.99527, 0.21782, -2.4905]
|
||||
},
|
||||
"body": {
|
||||
"rotation": [7.5, 0, 0],
|
||||
"position": [0, -5.2, 0]
|
||||
"position": [0, -4.2, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [62.63351, "-69.9361+Math.cos((query.anim_time-0.3) * 90 * 2) * -3", -54.27769],
|
||||
"position": [0, "Math.cos((query.anim_time-0.1) * 90 * 2) * 0.1", "-1+Math.sin((query.anim_time-0.1) * 90 * 2) * 0.1"]
|
||||
"position": [0, "Math.cos((query.anim_time-0.1) * 90 * 2) * 0.1", 0]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -10, 0]
|
||||
},
|
||||
"finger_index_right": {
|
||||
"finger_front_right": {
|
||||
"rotation": [0, 0, -10]
|
||||
},
|
||||
"froakie": {
|
||||
"position": [0, 1, 0]
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": [0, 0, -0.125]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"rotation": [0, 0, -5],
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": [0, 0, 0.125]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0, 0, -0.175]
|
||||
"position": [0, 0.5, -0.1]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"rotation": [0, 0, 5],
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [0, 0, 0.05]
|
||||
"position": [0, 0.5, -0.1]
|
||||
},
|
||||
"wrist_right": {
|
||||
"rotation": [0, 0, 20]
|
||||
},
|
||||
"iris_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"iris_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"chest_bubble_front": {
|
||||
"rotation": [22.5, 0, 0]
|
||||
},
|
||||
"back_bubbles": {
|
||||
"rotation": [-25, 0, 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["15+Math.cos((query.anim_time-0.2) * 90 * 2) * 2", 0, 0],
|
||||
"position": [0, "-1+Math.cos((query.anim_time) * 90 * 2) * 0.2", 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": ["7.5+Math.cos((query.anim_time-0.3) * 90 * 2) * 2", 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -96,37 +97,18 @@
|
||||
"body": {
|
||||
"position": {
|
||||
"0.0": [0, -4.5, -1.5],
|
||||
"0.2917": [0, -4.5, 4],
|
||||
"0.25": [0, -4.5, 3.21],
|
||||
"0.2917": [0, -3.4, 4],
|
||||
"0.375": [0, 0.25, 0.5],
|
||||
"0.5": [0, 1.75, -3],
|
||||
"0.5833": [0, 1.62, -4.8],
|
||||
"0.6667": [0, 1, -5.5],
|
||||
"0.7917": [0, -4.5, -6],
|
||||
"0.7917": [0, -3.7, -6],
|
||||
"0.875": [0, -4.5, -3.2],
|
||||
"1.0": [0, -4.5, -1.5]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": [37.5, 0, 0],
|
||||
"0.2917": [35, 0, 0],
|
||||
"0.5": [57.5, 0, 0],
|
||||
"0.625": [60, 0, 0],
|
||||
"0.7083": [52.5, 0, 0],
|
||||
"0.7917": [37.5, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"0.2917": [0, -1, 0],
|
||||
"0.5": [0, 0, 0],
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.7917": [0, -0.5, -0.5],
|
||||
"0.8333": [0, -0.37, -0.325],
|
||||
"0.875": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": {
|
||||
"0.0": [12.25, 0, 0],
|
||||
"0.125": [11.42, 0, 0],
|
||||
@@ -159,14 +141,12 @@
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"rotation": [0, 0, -5],
|
||||
"position": [0, 0.5, -0.1]
|
||||
},
|
||||
"iris_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"rotation": [0, 0, 5],
|
||||
"position": [0, 0.5, -0.1]
|
||||
},
|
||||
"chest_bubble": {
|
||||
@@ -264,7 +244,7 @@
|
||||
"0.5": [16.7402, 0.13182, 9.04799],
|
||||
"0.5417": [9.7402, 0.13182, 9.04799],
|
||||
"0.75": [-80.7598, 0.13182, 9.04799],
|
||||
"0.7917": [-102.39241, 5.22351, 7.24834],
|
||||
"0.7917": [-111.19241, 5.22351, 7.24834],
|
||||
"1.0": [-120.5555, 30.68198, -1.74989]
|
||||
},
|
||||
"position": {
|
||||
@@ -306,7 +286,7 @@
|
||||
"0.5": [16.7402, -0.13182, -9.04799],
|
||||
"0.5417": [9.7402, -0.13182, -9.04799],
|
||||
"0.75": [-80.7598, -0.13182, -9.04799],
|
||||
"0.7917": [-102.39241, -5.22351, -7.24834],
|
||||
"0.7917": [-111.19241, -5.22351, -7.24834],
|
||||
"1.0": [-120.5555, -30.68198, 1.74989]
|
||||
},
|
||||
"position": {
|
||||
@@ -339,6 +319,43 @@
|
||||
"0.75": [-17.5, 0, 0],
|
||||
"1.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": {
|
||||
"0.0": [37.5, 0, 0],
|
||||
"0.2917": [35, 0, 0],
|
||||
"0.5": [57.5, 0, 0],
|
||||
"0.625": [60, 0, 0],
|
||||
"0.7083": [52.5, 0, 0],
|
||||
"0.7917": [37.5, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"0.2917": [0, -1, 0],
|
||||
"0.5": [0, 0, 0],
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.7917": [0, -0.5, -0.5],
|
||||
"0.8333": [0, -0.37, -0.325],
|
||||
"0.875": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": {
|
||||
"0.0": [12.25, 0, 0],
|
||||
"0.125": [11.42, 0, 0],
|
||||
"0.25": [8.25, 0, 0],
|
||||
"0.375": [0, 0, 0],
|
||||
"0.5": [-2.5, 0, 0],
|
||||
"0.625": [0, 0, 0],
|
||||
"0.75": [8.25, 0, 0],
|
||||
"0.8333": [16.81, 0, 0],
|
||||
"0.9167": [13.17, 0, 0],
|
||||
"1.0": [12.25, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -347,12 +364,9 @@
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [55, 0, 0],
|
||||
"position": [0, "-8+Math.cos((query.anim_time) * 90 * 2) * 0.2", -1]
|
||||
"position": [0, "-3+Math.cos((query.anim_time) * 90 * 2) * 0.2", -1]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": ["-12.5+Math.cos((query.anim_time-0.4) * 90 * 2) * 2", 0, 0]
|
||||
},
|
||||
"head": {
|
||||
@@ -393,6 +407,15 @@
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [40, 0, 0]
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": ["-12.5+Math.cos((query.anim_time-0.4) * 90 * 2) * 2", 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -403,22 +426,19 @@
|
||||
"body": {
|
||||
"rotation": [55, 0, 0],
|
||||
"position": {
|
||||
"0.0": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.5],
|
||||
"0.25": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 0.5],
|
||||
"0.5": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 3.5],
|
||||
"0.6667": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 5.17],
|
||||
"0.75": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 5.25],
|
||||
"0.7917": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 3.92],
|
||||
"1.0": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 1],
|
||||
"1.2083": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.25],
|
||||
"1.375": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.75],
|
||||
"1.5": [0, "-9+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.5]
|
||||
"0.0": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.5],
|
||||
"0.25": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 0.5],
|
||||
"0.5": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 3.5],
|
||||
"0.6667": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 5.17],
|
||||
"0.75": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 5.25],
|
||||
"0.7917": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 3.92],
|
||||
"1.0": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", 1],
|
||||
"1.2083": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.25],
|
||||
"1.375": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.75],
|
||||
"1.5": [0, "-3+Math.cos((query.anim_time) * 90 * (2+2/3)) * 0.2", -1.5]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["10+Math.cos((query.anim_time+0.2) * 90 * (2+2/3)) * 5", 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
@@ -523,6 +543,15 @@
|
||||
"1.0833": [5, 0, 0],
|
||||
"1.5": [45, 0, 0]
|
||||
}
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["10+Math.cos((query.anim_time+0.2) * 90 * (2+2/3)) * 5", 0, 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -530,13 +559,9 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -4, 0]
|
||||
"position": [0, -3.75, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["34.9055+Math.cos((query.anim_time-0.3) * 90 * 2) * 3", 2.49762, -4.33287],
|
||||
"position": [0, "-0.5+Math.cos((query.anim_time) * 90 * 2) * 0.2", 0]
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": ["-12.4539+Math.cos((query.anim_time-0.5) * 90 * 2) * 2", 1.08089, 4.88206]
|
||||
},
|
||||
"head": {
|
||||
@@ -568,19 +593,19 @@
|
||||
"rotation": [-95.27946, 39.63389, 12.13638]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [102.5, 0, 0]
|
||||
"rotation": [105, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [0, 0, -5]
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-76.73021, -74.12482, -31.13382]
|
||||
"rotation": [-106.55899, -73.36545, 5.05162]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [92.5, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [15, 0, 0]
|
||||
"rotation": [7.5, 0, 0]
|
||||
},
|
||||
"iris_right": {
|
||||
"position": [0, -0.3, 0]
|
||||
@@ -593,26 +618,22 @@
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["34.9055+Math.cos((query.anim_time-0.3) * 90 * 2) * 3", 2.49762, -4.33287],
|
||||
"position": [0, "-0.5+Math.cos((query.anim_time) * 90 * 2) * 0.2", 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": ["-12.4539+Math.cos((query.anim_time-0.5) * 90 * 2) * 2", 1.08089, 4.88206]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.froakie.blink": {
|
||||
"animation_length": 0.16667,
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [-0.1, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": [0.1, 0, 0]
|
||||
}
|
||||
},
|
||||
"iris_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
@@ -626,6 +647,79 @@
|
||||
"0.125": [0, 0, 0.1],
|
||||
"0.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0.5, -0.1],
|
||||
"0.125": [0, 0.5, -0.1],
|
||||
"0.1667": [-0.1, 0, 0]
|
||||
}
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0.5, -0.1],
|
||||
"0.125": [0, 0.5, -0.1],
|
||||
"0.1667": [-0.1, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_ditto_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_closed_ditto_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_ditto_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_closed_ditto_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.froakie.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"mouth": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto_left": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"face_ditto_right": {
|
||||
"position": [0, 0, -0.1]
|
||||
},
|
||||
"face_ditto_mouth": {
|
||||
"position": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -667,17 +761,7 @@
|
||||
"1.9583": [0, -8.5, 18.25]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
"rotation": {
|
||||
"0.0": [17.5, 0, 0],
|
||||
"0.3333": [15.55, 0, 0],
|
||||
"0.4583": [33.5, 0, 0],
|
||||
"0.5833": [29.06, 0, 0],
|
||||
"0.6667": [19, 0, 0],
|
||||
"0.8333": [14, 0, 0]
|
||||
}
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": {
|
||||
"0.0": [10, 0, 0],
|
||||
"0.2083": [27.5, 0, 0],
|
||||
@@ -709,22 +793,6 @@
|
||||
"2.2917": [11.5, -46, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.4583": [0, 0, -0.15],
|
||||
"0.5": [0, 0, 0.05],
|
||||
"0.9583": [0, 0, 0.05],
|
||||
"1.0": [0, 0, -0.15]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.4583": [0, 0, -0.125],
|
||||
"0.5": [0, 0, -0.03],
|
||||
"0.9583": [0, 0, -0.03],
|
||||
"1.0": [0, 0, -0.125]
|
||||
}
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": {
|
||||
"0.0": [78.30408, -64.53645, -79.41322],
|
||||
@@ -771,7 +839,7 @@
|
||||
"2.4167": [35, 0, 15]
|
||||
}
|
||||
},
|
||||
"finger_index_right": {
|
||||
"finger_front_right": {
|
||||
"rotation": {
|
||||
"1.875": [0, 0, 0],
|
||||
"2.2083": [-1.88975, 6.7809, -38.71695]
|
||||
@@ -783,7 +851,7 @@
|
||||
"2.2083": [0, 0, -20]
|
||||
}
|
||||
},
|
||||
"finger_ring_right": {
|
||||
"finger_back_right": {
|
||||
"rotation": {
|
||||
"1.875": [0, 0, 0],
|
||||
"2.2083": [0, 0, -30]
|
||||
@@ -835,7 +903,7 @@
|
||||
"2.4167": [35, 0, -15]
|
||||
}
|
||||
},
|
||||
"finger_index_left": {
|
||||
"finger_front_left": {
|
||||
"rotation": {
|
||||
"1.875": [0, 0, 0],
|
||||
"2.2083": [-1.88975, -6.7809, 38.71695]
|
||||
@@ -847,7 +915,7 @@
|
||||
"2.2083": [0, 0, 20]
|
||||
}
|
||||
},
|
||||
"finger_ring_left": {
|
||||
"finger_back_left": {
|
||||
"rotation": {
|
||||
"1.875": [0, 0, 0],
|
||||
"2.2083": [0, 0, 30]
|
||||
@@ -976,6 +1044,67 @@
|
||||
"2.1667": [34, 0, 0],
|
||||
"2.3333": [47.5, 0, 0]
|
||||
}
|
||||
},
|
||||
"iris_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.4583": [0, 0, 0.1],
|
||||
"0.5": [0, 0, 0],
|
||||
"0.9583": [0, 0, 0],
|
||||
"1.0": [0, 0, 0.1]
|
||||
}
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": {
|
||||
"0.4583": [0, 0.5, -0.125],
|
||||
"0.5": [0, 0, -0.03],
|
||||
"0.9583": [0, 0, -0.03],
|
||||
"1.0": [0, 0.5, -0.125]
|
||||
}
|
||||
},
|
||||
"iris_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0.1],
|
||||
"0.4583": [0, 0, 0.1],
|
||||
"0.5": [0, 0, 0],
|
||||
"0.9583": [0, 0, 0],
|
||||
"1.0": [0, 0, 0.1]
|
||||
}
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": {
|
||||
"0.4583": [0, 0.5, -0.125],
|
||||
"0.5": [0, 0, -0.03],
|
||||
"0.9583": [0, 0, -0.03],
|
||||
"1.0": [0, 0.5, -0.125]
|
||||
}
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": {
|
||||
"0.0": [17.5, 0, 0],
|
||||
"0.3333": [15.55, 0, 0],
|
||||
"0.4583": [33.5, 0, 0],
|
||||
"0.5833": [29.06, 0, 0],
|
||||
"0.6667": [19, 0, 0],
|
||||
"0.8333": [14, 0, 0]
|
||||
}
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": {
|
||||
"0.0": [10, 0, 0],
|
||||
"0.2083": [27.5, 0, 0],
|
||||
"0.4583": [28.93, 0, 0],
|
||||
"0.7917": [25, 0, 0],
|
||||
"1.2083": [0, 0, 0],
|
||||
"1.5417": [10, 0, 0],
|
||||
"1.75": [27.5, 0, 0],
|
||||
"1.875": [15, 0, 0],
|
||||
"2.0": [19, 0, 0],
|
||||
"2.1667": [20.175, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -984,25 +1113,16 @@
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [-20, 0, 0],
|
||||
"position": [0, -6.75, 0]
|
||||
"position": [0, -6.5, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["30+Math.cos((query.anim_time) * 90 * 1) * 2", 0, 0]
|
||||
},
|
||||
"chest": {
|
||||
"torso2": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["Math.cos((query.anim_time-0.3) * 90 * 1) * 4", 0, 0]
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0, 0, -0.125]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [84.59842, "-62.3954+Math.cos((query.anim_time) * 90 * 1) * -2", -85.2103]
|
||||
"rotation": [84.0524, "-64.8832+Math.cos((query.anim_time) * 90 * 1) * -2", -84.61105]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, 0, 22.5]
|
||||
@@ -1011,7 +1131,7 @@
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [84.59842, "62.3954+Math.cos((query.anim_time) * 90 * 1) * 2", 85.2103]
|
||||
"rotation": [83.37018, "67.3682+Math.cos((query.anim_time) * 90 * 1) * 2", 83.87609]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 0, -20]
|
||||
@@ -1023,38 +1143,106 @@
|
||||
"rotation": [-131.83574, 27.83165, -2.25974]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [105, 0, 0]
|
||||
"rotation": [100, 0, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-131.83574, -27.83165, 2.25974]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [107.5, 0, 0]
|
||||
"rotation": [100, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [27.5, 0, 0]
|
||||
"rotation": [45, 0, 0]
|
||||
},
|
||||
"iris_left": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0, -0.125]
|
||||
},
|
||||
"iris_right": {
|
||||
"position": [0, 0, 0.1]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0, 0, -0.2]
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [45, 0, 0]
|
||||
},
|
||||
"waist": {
|
||||
"rotation": ["30+Math.cos((query.anim_time) * 90 * 1) * 2", 0, 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": [15, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.froakie.cry": {
|
||||
"animation_length": 1,
|
||||
"animation_length": 1.1667,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": [-12.5, 0, 0],
|
||||
"0.4167": [-14, 0, 0],
|
||||
"0.625": [-14.18, 0, 0],
|
||||
"0.7917": [-12.5, 0, 0],
|
||||
"1.0": [0, 0, 0]
|
||||
"0.4583": [-14, 0, 0],
|
||||
"0.7083": [-14.18, 0, 0],
|
||||
"0.9167": [-12.5, 0, 0],
|
||||
"1.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"mouth_open": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": [0, 0, -0.125],
|
||||
"0.6667": [0, 0, -0.125],
|
||||
"0.7083": [0, 0, 0]
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.125]
|
||||
},
|
||||
"1.0417": {
|
||||
"pre": [0, 0, -0.125],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_closed": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0.1]
|
||||
},
|
||||
"1.0417": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0.1]
|
||||
},
|
||||
"1.0417": {
|
||||
"pre": [0, 0, 0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mouth_open_ditto": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.0417": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1063,6 +1251,143 @@
|
||||
"effect": "pokemon.froakie.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.froakie.hoodie": {
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": [0, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.85, -3.65]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": [0, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.85, -3.65]
|
||||
}
|
||||
}
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"rotation": {
|
||||
"0.0": [-140, 0, 0],
|
||||
"0.25": [-140, 0, 0],
|
||||
"0.5": [0, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, -1, -1],
|
||||
"0.25": [0, -1, -1],
|
||||
"0.5": [0, 0, 0]
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [1, 0.5, 0.5],
|
||||
"0.5": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"back_bubbles": {
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.2083": [0, 0, 0],
|
||||
"0.5": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_ditto_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": [0, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.85, -3.65]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_ditto_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": [0, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, -0.85, -3.65]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.froakie.pose": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"torso2": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": [-10, 0, 0]
|
||||
},
|
||||
"iris_left": {
|
||||
"position": [-0.25, 0, 0]
|
||||
},
|
||||
"iris_right": {
|
||||
"position": [-1, 0, 0]
|
||||
},
|
||||
"chest_bubble_front": {
|
||||
"rotation": [10, 0, 0]
|
||||
},
|
||||
"arm_left": {
|
||||
"rotation": [72.75378, 58.72996, 59.37871],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": [0, 22.5, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [72.75378, -58.72996, -59.37871],
|
||||
"position": [0, 0, -1]
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": [0, -22.5, 0]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-110, -45, 0],
|
||||
"position": [0.5, -0.5, 0]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [140, 0, 0],
|
||||
"position": [0, 0, 1.5]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": [-110, 45, 0],
|
||||
"position": [-0.5, -0.5, 0]
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": [140, 0, 0],
|
||||
"position": [0, 0, 1.5]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [-32.5, 0, 0]
|
||||
},
|
||||
"body": {
|
||||
"position": [0, -3.25, 0]
|
||||
},
|
||||
"bubble_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"waist": {
|
||||
"rotation": [15, 0, 0]
|
||||
},
|
||||
"ftorso2": {
|
||||
"rotation": [2.5, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+362
-128
@@ -5,7 +5,7 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"position": [0, -0.5, 0]
|
||||
"position": [0, -0.8, 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["-12.5+Math.cos((query.anim_time) * 90 * 1) * 3", 0, 0]
|
||||
@@ -25,27 +25,12 @@
|
||||
"eyelid_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"eyelid_right2": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.075, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0.075, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.125, 0, 0]
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": ["-30+Math.cos((query.anim_time-0.5) * 90 * 1) * 6", 0, 0]
|
||||
},
|
||||
@@ -58,9 +43,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["5.2207+Math.cos((query.anim_time-1.1) * 90 * 1) * 7", 9.65594, 2.61298]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["Math.cos((query.anim_time-1.3) * 90 * 1) * 7", 20, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [32.60614, "12.24+Math.cos((query.anim_time-0.5) * 90 * 1) * 3", -61.27652]
|
||||
},
|
||||
@@ -98,7 +80,7 @@
|
||||
"rotation": [25, 0, 0]
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": [-7.5, 0, 0]
|
||||
"rotation": [-9.99628, -0.36741, -1.45595]
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": [-13.31673, -34.50311, -4.50012]
|
||||
@@ -107,7 +89,58 @@
|
||||
"rotation": [30, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-10, 0, 0]
|
||||
"rotation": [-6.97816, 0.79759, 3.92399]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["5.2207+Math.cos((query.anim_time-1.6) * 90 * 1) * 7", 9.65594, 2.61298]
|
||||
},
|
||||
"finger_index_left2": {
|
||||
"rotation": [0, 0, 25]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"finger_ring_left2": {
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"finger_index_right2": {
|
||||
"rotation": [0, 0, -25]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"finger_ring_right2": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": [-5.5, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -128,21 +161,12 @@
|
||||
"eyelid_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.025, 0, 0]
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": ["-20+Math.cos((query.anim_time-0.5) * 90 * (2+2/3)*2) * -4", 0, 0]
|
||||
},
|
||||
@@ -155,9 +179,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["-15+Math.cos((query.anim_time-0.8) * 90 * (2+2/3)*2) * -5", 0, 0]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": [-17.5, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [0, "(Math.cos((query.anim_time) * 90 * (2+2/3)) * -10)", -65]
|
||||
},
|
||||
@@ -233,6 +254,57 @@
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [0, 0, 10]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["-2.918+Math.cos((query.anim_time-1.3) * 90 * (2+2/3)*2) * -5", -3.21935, -0.08661]
|
||||
},
|
||||
"finger_index_left2": {
|
||||
"rotation": [0, 0, 12.5]
|
||||
},
|
||||
"finger_middle_left2": {
|
||||
"rotation": [0, 0, 7.5]
|
||||
},
|
||||
"finger_ring_left2": {
|
||||
"rotation": [0, 0, 17.5]
|
||||
},
|
||||
"finger_index_right2": {
|
||||
"rotation": [0, 0, -12.5]
|
||||
},
|
||||
"finger_middle_right2": {
|
||||
"rotation": [0, 0, -7.5]
|
||||
},
|
||||
"finger_ring_right2": {
|
||||
"rotation": [0, 0, -17.5]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -241,7 +313,7 @@
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [47.5, 0, 0],
|
||||
"position": [0, "-10+Math.cos((query.anim_time) * 90 * 1) * 0.3", 0]
|
||||
"position": [0, "-6+Math.cos((query.anim_time) * 90 * 1) * 0.3", 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [35, 0, 0],
|
||||
@@ -259,21 +331,12 @@
|
||||
"eyelid_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0.075, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": ["-42.5+Math.cos((query.anim_time-0.6) * 90 * 1) * 4", 0, 0]
|
||||
},
|
||||
@@ -286,9 +349,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["-7.5283+Math.cos((query.anim_time-1.1) * 90 * 1) * 8", -4.95712, 0.65426]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["-12.6044+Math.cos((query.anim_time-1.3) * 90 * 1) * 8", -7.32123, 1.63219]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-59.02395, -19.49124, "8.0938+Math.cos((query.anim_time-0.4) * 90 * 1) * -4"]
|
||||
},
|
||||
@@ -324,6 +384,39 @@
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [40, 0, 0]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": [-15, 0, 0]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -333,7 +426,7 @@
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": [47.5, 0, 0],
|
||||
"position": [0, -10, "Math.cos((query.anim_time-0.5) * 90 * (2+2/3)) * 4"]
|
||||
"position": [0, -6, "Math.cos((query.anim_time-0.5) * 90 * (2+2/3)) * 4"]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": [35, 0, 0],
|
||||
@@ -351,21 +444,12 @@
|
||||
"eyelid_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0.075, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_right": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": ["-42.5+Math.cos((query.anim_time-0.6) * 90 * (2+2/3)) * 4", 0, 0]
|
||||
},
|
||||
@@ -378,9 +462,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["-7.5283+Math.cos((query.anim_time-1.1) * 90 * (8/3)) * 8", -4.95712, 0.65426]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["-12.6044+Math.cos((query.anim_time-1.3) * 90 * (8/3)) * 8", -7.32123, 1.63219]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-57.88953, -0.0813, "-51.5519+Math.cos((query.anim_time-0.35) * 90 * (2+2/3)) * 6"]
|
||||
},
|
||||
@@ -469,6 +550,39 @@
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": [0, 0, 0]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["-7.5283+Math.cos((query.anim_time-1.8) * 90 * (8/3)) * 8", -4.95712, 0.65426]
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_right": {
|
||||
"position": [0.05, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"pupil_left": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"pupil_eyelid_left": {
|
||||
"position": [0, 0.5, 0]
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": [-0.05, 0, 0]
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -503,9 +617,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["Math.cos((query.anim_time-0.7) * 90 * 2) * -10", 0, 0]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": ["Math.cos((query.anim_time-0.9) * 90 * 2) * -5", 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [
|
||||
"50.3607+Math.cos((query.anim_time) * 90 * 2) * -3",
|
||||
@@ -574,25 +685,18 @@
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [-28.24912, 16.7796, 28.24912]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.frogadier.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.12": [-0.1, 0, 0],
|
||||
"0.16": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.12": [0.1, 0, 0],
|
||||
"0.16": [0, 0, 0]
|
||||
}
|
||||
"bubble5": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -616,14 +720,14 @@
|
||||
"0.0": [0, -5, 0],
|
||||
"0.25": [0, -6.25, 1.5],
|
||||
"0.5": [0, -6.52, 2.18],
|
||||
"0.75": [0, -6.06, 2.97],
|
||||
"0.9583": [0, -5.4, 3.83],
|
||||
"1.0833": [0, -5, 4],
|
||||
"1.2917": [0, -5.57, 2.585],
|
||||
"1.4583": [0, -8.82, 0.32],
|
||||
"1.5417": [0, -14, -2.75],
|
||||
"1.5833": [0, -14.5, -3.25],
|
||||
"1.6667": [0, -14, -2.75]
|
||||
"0.75": [0, -6.06, 2.07],
|
||||
"0.9583": [0, -5.4, 2.13],
|
||||
"1.0833": [0, -5, 2.1],
|
||||
"1.2917": [0, -5.57, -0.615],
|
||||
"1.4583": [0, -8.82, -4.68],
|
||||
"1.5417": [0, -14, -6.85],
|
||||
"1.5833": [0, -14.5, -7.35],
|
||||
"1.6667": [0, -14, -6.85]
|
||||
}
|
||||
},
|
||||
"torso": {
|
||||
@@ -694,19 +798,6 @@
|
||||
"1.5": [-0.125, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.15, 0, 0],
|
||||
"0.625": [0.15, 0, 0],
|
||||
"0.6667": [0, 0, 0],
|
||||
"0.7917": [0, 0, 0],
|
||||
"0.8333": [0.15, 0, 0],
|
||||
"0.875": [0.15, 0, 0],
|
||||
"0.9167": [0, 0, 0],
|
||||
"1.4167": [0, 0, 0],
|
||||
"1.4583": [0.15, 0, 0]
|
||||
}
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": {
|
||||
"0.0": [-25, 0, 0],
|
||||
@@ -747,13 +838,6 @@
|
||||
"1.9583": [-27.5, 0, 0]
|
||||
}
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": {
|
||||
"0.0": [-10, 0, 0],
|
||||
"1.625": [-28.4, 0, 0],
|
||||
"1.9583": [10, 0, 0]
|
||||
}
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, -22.5],
|
||||
@@ -904,6 +988,28 @@
|
||||
"1.9167": [-0.56754, 7.64427, 6.46635],
|
||||
"2.125": [1.93246, 7.64427, 6.46635]
|
||||
}
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.125, 0, 0],
|
||||
"0.625": [0.125, 0, 0],
|
||||
"0.6667": [-0.03, 0, 0],
|
||||
"0.7917": [-0.03, 0, 0],
|
||||
"0.8333": [0.125, 0, 0],
|
||||
"0.875": [0.125, 0, 0],
|
||||
"0.9167": [-0.03, 0, 0],
|
||||
"1.4583": [-0.03, 0, 0],
|
||||
"1.5": [0.125, 0, 0]
|
||||
}
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -928,10 +1034,7 @@
|
||||
"position": [0, -0.75, -1.25]
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": [-0.125, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.15, 0, 0]
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"bubble": {
|
||||
"rotation": ["-57.5+Math.cos((query.anim_time-0.3) * 90 * 1) * 3", 0, 0]
|
||||
@@ -945,9 +1048,6 @@
|
||||
"bubble4": {
|
||||
"rotation": ["-20+Math.cos((query.anim_time-0.8) * 90 * 1) * 3", 0, 0]
|
||||
},
|
||||
"bubble5": {
|
||||
"rotation": [-22.5, 0, 0]
|
||||
},
|
||||
"arm_right": {
|
||||
"rotation": [-80.93413, "-22.0118+Math.cos((query.anim_time) * 90 * 1) * 4", 12.47776]
|
||||
},
|
||||
@@ -979,18 +1079,113 @@
|
||||
"rotation": [-97.04431, -75.92487, 21.99572]
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": [90, 0, 0]
|
||||
"rotation": [95, 0, 0]
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": [6.74942, 34.96182, -51.94901]
|
||||
},
|
||||
"foot_left2": {
|
||||
"rotation": [30, 0, 0]
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_right": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"eye_left": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
},
|
||||
"frubble_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"frubble_left": {
|
||||
"scale": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.frogadier.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [-0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [-0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_ditto_right": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_closed_ditto_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [-0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_ditto_left": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [-0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eye_closed_ditto_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, 0],
|
||||
"0.16": {
|
||||
"pre": [0.1, 0, 0],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.frogadier.cry": {
|
||||
"animation_length": 1.16667,
|
||||
"animation_length": 1.1667,
|
||||
"bones": {
|
||||
"head": {
|
||||
"rotation": {
|
||||
@@ -1017,6 +1212,45 @@
|
||||
"effect": "pokemon.frogadier.cry"
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.frogadier.ditto_face": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"eye_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"eyelid_right": {
|
||||
"scale": 0
|
||||
},
|
||||
"eye_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"eyelid_left": {
|
||||
"scale": 0
|
||||
},
|
||||
"face_ditto_right": {
|
||||
"position": [-0.1, 0, 0]
|
||||
},
|
||||
"face_ditto_left": {
|
||||
"position": [0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.frogadier.bubble_hoodie": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"bubbles": {
|
||||
"position": [0, 2, 0]
|
||||
},
|
||||
"bubbles_front": {
|
||||
"scale": 0
|
||||
},
|
||||
"bubbles_hoodie": {
|
||||
"rotation": [2.5, 0, 0],
|
||||
"position": [0, 0, 0],
|
||||
"scale": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+24778
-1149
File diff suppressed because it is too large
Load Diff
+2210
File diff suppressed because it is too large
Load Diff
+696
@@ -0,0 +1,696 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.pikachu_male",
|
||||
"texture_width": 128,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 4,
|
||||
"visible_bounds_height": 4,
|
||||
"visible_bounds_offset": [0, 1, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "pikachu",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 22, 0],
|
||||
"locators": {
|
||||
"top": [0, 22, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 4, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, 0],
|
||||
"locators": {
|
||||
"middle": [0, 10, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, -6],
|
||||
"locators": {
|
||||
"target": [0, 10, -6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-5, 2, -4], "size": [10, 6, 9], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.75, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 6.75, -3.5], "size": [9, 6, 8], "inflate": -0.01, "uv": [38, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso2",
|
||||
"pivot": [-1, 12.75, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 11.75, -2.5], "size": [8, 3, 6], "uv": [32, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 13.5, 1]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 13.5, 1]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 13.5, 1],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 11.5, -4], "size": [9, 8, 8], "uv": [0, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 19.5, -2],
|
||||
"locators": {
|
||||
"head": [0, 19.5, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14.4, -4.75],
|
||||
"locators": {
|
||||
"face": [0, 14.4, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 15.95, -4],
|
||||
"locators": {
|
||||
"item_face": [0, 15.95, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 19.75, 0],
|
||||
"locators": {
|
||||
"item_hat": [0, 19.75, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14.55, -4],
|
||||
"rotation": [12.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 11.55, -4.75], "size": [9, 3, 2], "inflate": 0.01, "uv": [34, 23]},
|
||||
{"origin": [-1, 13.05, -4.77], "size": [2, 1, 0], "uv": [56, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cheek_active_right",
|
||||
"parent": "muzzle",
|
||||
"pivot": [-4, 13.55, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 12.55, -4.75], "size": [1, 2, 2], "inflate": -0.01, "uv": [18, 59]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_special1",
|
||||
"parent": "cheek_active_right",
|
||||
"pivot": [-4.5, 13.5, -4.75],
|
||||
"locators": {
|
||||
"special1": [-4.5, 13.5, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cheek_active_left",
|
||||
"parent": "muzzle",
|
||||
"pivot": [4, 13.55, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 12.55, -4.75], "size": [1, 2, 2], "inflate": -0.01, "uv": [25, 59], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_special2",
|
||||
"parent": "cheek_active_left",
|
||||
"pivot": [4.5, 13.5, -4.75],
|
||||
"locators": {
|
||||
"special2": [4.5, 13.5, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "muzzle",
|
||||
"pivot": [0, 12.5, -3.9]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13, -4.8]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_bottom_right",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [-1, 12.55, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.05, -4.79], "size": [1, 1, 0], "uv": [4, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_bottom_left",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [1, 12.55, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [0.5, 12.05, -4.79], "size": [1, 1, 0], "uv": [10, 56], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_middle",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [0, 13.05, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 12.55, -4.79], "size": [1, 1, 0], "uv": [7, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_outer_right",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [-1.5, 13.05, -4.78],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.55, -4.78], "size": [1, 1, 0], "uv": [1, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_outer_left",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [1.5, 13.05, -4.78],
|
||||
"cubes": [
|
||||
{"origin": [1, 12.55, -4.78], "size": [1, 1, 0], "uv": [13, 56], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.75, -4.7]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open1",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 13.05, -4.69],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.55, -4.69], "size": [3, 1, 0], "uv": [10, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tongue1",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 12.55, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.05, -4.7], "size": [3, 1, 0], "uv": [10, 60]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open2",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 13.05, -4.69],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.55, -4.69], "size": [4, 1, 0], "uv": [1, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tongue2",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 12.55, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.05, -4.7], "size": [4, 1, 0], "uv": [1, 60]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "acting_teeth",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13.05, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 12.55, -4.7], "size": [5, 1, 0], "uv": [1, 62]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.75, -4.75],
|
||||
"locators": {
|
||||
"mouth": [0, 12.75, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_upper",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13.55, -4.75],
|
||||
"locators": {
|
||||
"jaw1": [0, 13.55, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_lower",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.05, -4.75],
|
||||
"locators": {
|
||||
"jaw2": [0, 12.05, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 15.7, -4.075]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -4.01], "size": [2, 1, 0], "uv": [65, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 15.7, -4],
|
||||
"locators": {
|
||||
"eye1": [-2.75, 15.7, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-2.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [68, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right2",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [65, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.5, 15.95, -4.02],
|
||||
"cubes": [
|
||||
{"origin": [-3, 15.45, -4.02], "size": [1, 1, 0], "uv": [1, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_right2",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.5, 15.95, -3.92],
|
||||
"cubes": [
|
||||
{"origin": [-3, 15.45, -3.93], "size": [1, 1, 0], "uv": [1, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -4.01], "size": [2, 1, 0], "uv": [70, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 15.7, -4],
|
||||
"locators": {
|
||||
"eye2": [2.75, 15.7, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [71, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left2",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [2.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [74, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.5, 15.95, -4.02],
|
||||
"cubes": [
|
||||
{"origin": [2, 15.45, -4.02], "size": [1, 1, 0], "uv": [4, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_left2",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.5, 15.95, -3.92],
|
||||
"cubes": [
|
||||
{"origin": [2, 15.45, -3.93], "size": [1, 1, 0], "uv": [4, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.7, -3.91],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.91], "size": [2, 2, 0], "uv": [27, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.7, -3.91],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.91], "size": [2, 2, 0], "uv": [32, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.2, -3.94]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right1",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right2",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right3",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 5]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.2, -3.94]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left1",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 3], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left2",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 1], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left3",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 5], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ears",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 18.5, -0.25]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "ears",
|
||||
"pivot": [-3.5, 18.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [-5, 18.5, -0.25], "size": [4, 5, 0], "uv": [33, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right2",
|
||||
"parent": "ear_right",
|
||||
"pivot": [-3.5, 23.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [-5, 23.5, -0.25], "size": [4, 5, 0], "uv": [33, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "ears",
|
||||
"pivot": [3.5, 18.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [1, 18.5, -0.25], "size": [4, 5, 0], "uv": [42, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left2",
|
||||
"parent": "ear_left",
|
||||
"pivot": [3.5, 23.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [1, 23.5, -0.25], "size": [4, 5, 0], "uv": [42, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 3.5, 5],
|
||||
"cubes": [
|
||||
{"origin": [0, 3, 5], "size": [0, 5, 6], "uv": [88, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 5.5, 8],
|
||||
"rotation": [150, 0, -180],
|
||||
"locators": {
|
||||
"tail": [0, 5.5, 8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 8, 6],
|
||||
"cubes": [
|
||||
{"origin": [0, 8, 5], "size": [0, 4, 8], "inflate": 0.01, "uv": [71, 21]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail3",
|
||||
"parent": "tail2",
|
||||
"pivot": [0, 11.99, 11],
|
||||
"cubes": [
|
||||
{"origin": [0, 12, 6], "size": [0, 7, 13], "uv": [101, 43]},
|
||||
{"origin": [0, 12, 12], "size": [0, 7, 8], "inflate": 0.01, "uv": [111, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail3",
|
||||
"pivot": [0, 16, 19],
|
||||
"rotation": [180, 0, -180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 16, 19]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_physical",
|
||||
"parent": "tail3",
|
||||
"pivot": [0, 16, 19],
|
||||
"locators": {
|
||||
"physical": [0, 16, 17]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ftorso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 0.5]
|
||||
},
|
||||
{
|
||||
"name": "ftorso2",
|
||||
"parent": "ftorso",
|
||||
"pivot": [0, 8.75, 0.5]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "ftorso2",
|
||||
"pivot": [0, 9.75, -2.25]
|
||||
},
|
||||
{
|
||||
"name": "arm_right",
|
||||
"parent": "arms",
|
||||
"pivot": [-4.25, 9.75, -2.25],
|
||||
"cubes": [
|
||||
{"origin": [-6.25, 8.25, -3.75], "size": [3, 3, 3], "uv": [1, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right2",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-6.25, 8.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [-9.25, 8.25, -3.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [13, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"hand_primary": [-9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"item": [-9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "arm_left",
|
||||
"parent": "arms",
|
||||
"pivot": [4.25, 9.75, -2.25],
|
||||
"cubes": [
|
||||
{"origin": [3.25, 8.25, -3.75], "size": [3, 3, 3], "uv": [1, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left2",
|
||||
"parent": "arm_left",
|
||||
"pivot": [6.25, 8.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [6.25, 8.25, -3.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [13, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "arm_left2",
|
||||
"pivot": [9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"hand_secondary": [9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "legs",
|
||||
"parent": "body",
|
||||
"pivot": [-3.25, 4.75, 1.75]
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-3.25, 4.75, 1.75],
|
||||
"cubes": [
|
||||
{"origin": [-5.5, 1, -2.75], "size": [5, 6, 6], "uv": [0, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_right",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-3, 1, 0.75],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -0.5], "size": [2, 1, 2], "inflate": 0.01, "uv": [16, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-3, 0.5, -0.5],
|
||||
"locators": {
|
||||
"foot_primary": [-3, 0.5, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toes_right",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-3, 0, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -2.5], "size": [2, 1, 2], "uv": [16, 34]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "legs",
|
||||
"pivot": [3.25, 4.75, 1.75],
|
||||
"cubes": [
|
||||
{"origin": [0.5, 1, -2.75], "size": [5, 6, 6], "uv": [22, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_left",
|
||||
"parent": "leg_left",
|
||||
"pivot": [3, 1, 0.75],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -0.5], "size": [2, 1, 2], "inflate": 0.01, "uv": [38, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "foot_left",
|
||||
"pivot": [3, 0.5, -0.5],
|
||||
"locators": {
|
||||
"foot_secondary": [3, 0.5, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toes_left",
|
||||
"parent": "foot_left",
|
||||
"pivot": [3, 0, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -2.5], "size": [2, 1, 2], "uv": [38, 34]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+696
@@ -0,0 +1,696 @@
|
||||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.pikachu_male",
|
||||
"texture_width": 128,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 4,
|
||||
"visible_bounds_height": 4,
|
||||
"visible_bounds_offset": [0, 1, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "pikachu",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 22, 0],
|
||||
"locators": {
|
||||
"top": [0, 22, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "pikachu",
|
||||
"pivot": [0, 4, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, 0],
|
||||
"locators": {
|
||||
"middle": [0, 10, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 10, -6],
|
||||
"locators": {
|
||||
"target": [0, 10, -6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-5, 2, -4], "size": [10, 6, 9], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.75, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 6.75, -3.5], "size": [9, 6, 8], "inflate": -0.01, "uv": [38, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso2",
|
||||
"pivot": [-1, 12.75, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 11.75, -2.5], "size": [8, 3, 6], "uv": [32, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 13.5, 1]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 13.5, 1]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 13.5, 1],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 11.5, -4], "size": [9, 8, 8], "uv": [0, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 19.5, -2],
|
||||
"locators": {
|
||||
"head": [0, 19.5, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14.4, -4.75],
|
||||
"locators": {
|
||||
"face": [0, 14.4, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 15.95, -4],
|
||||
"locators": {
|
||||
"item_face": [0, 15.95, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 19.75, 0],
|
||||
"locators": {
|
||||
"item_hat": [0, 19.75, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "muzzle",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14.55, -4],
|
||||
"rotation": [12.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 11.55, -4.75], "size": [9, 3, 2], "inflate": 0.01, "uv": [34, 23]},
|
||||
{"origin": [-1, 13.05, -4.77], "size": [2, 1, 0], "uv": [56, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cheek_active_right",
|
||||
"parent": "muzzle",
|
||||
"pivot": [-4, 13.55, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 12.55, -4.75], "size": [1, 2, 2], "inflate": -0.01, "uv": [18, 59]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_special1",
|
||||
"parent": "cheek_active_right",
|
||||
"pivot": [-4.5, 13.5, -4.75],
|
||||
"locators": {
|
||||
"special1": [-4.5, 13.5, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cheek_active_left",
|
||||
"parent": "muzzle",
|
||||
"pivot": [4, 13.55, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 12.55, -4.75], "size": [1, 2, 2], "inflate": -0.01, "uv": [25, 59], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_special2",
|
||||
"parent": "cheek_active_left",
|
||||
"pivot": [4.5, 13.5, -4.75],
|
||||
"locators": {
|
||||
"special2": [4.5, 13.5, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "muzzle",
|
||||
"pivot": [0, 12.5, -3.9]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13, -4.8]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_bottom_right",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [-1, 12.55, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.05, -4.79], "size": [1, 1, 0], "uv": [4, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_bottom_left",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [1, 12.55, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [0.5, 12.05, -4.79], "size": [1, 1, 0], "uv": [10, 56], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_middle",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [0, 13.05, -4.79],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 12.55, -4.79], "size": [1, 1, 0], "uv": [7, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_outer_right",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [-1.5, 13.05, -4.78],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.55, -4.78], "size": [1, 1, 0], "uv": [1, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed_outer_left",
|
||||
"parent": "mouth_closed",
|
||||
"pivot": [1.5, 13.05, -4.78],
|
||||
"cubes": [
|
||||
{"origin": [1, 12.55, -4.78], "size": [1, 1, 0], "uv": [13, 56], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.75, -4.7]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open1",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 13.05, -4.69],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.55, -4.69], "size": [3, 1, 0], "uv": [10, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tongue1",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 12.55, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 12.05, -4.7], "size": [3, 1, 0], "uv": [10, 60]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open2",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 13.05, -4.69],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.55, -4.69], "size": [4, 1, 0], "uv": [1, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tongue2",
|
||||
"parent": "mouth_open",
|
||||
"pivot": [0, 12.55, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-2, 12.05, -4.7], "size": [4, 1, 0], "uv": [1, 60]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "acting_teeth",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13.05, -4.7],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 12.55, -4.7], "size": [5, 1, 0], "uv": [1, 62]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.75, -4.75],
|
||||
"locators": {
|
||||
"mouth": [0, 12.75, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_upper",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 13.55, -4.75],
|
||||
"locators": {
|
||||
"jaw1": [0, 13.55, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_lower",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 12.05, -4.75],
|
||||
"locators": {
|
||||
"jaw2": [0, 12.05, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 15.7, -4.075]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -4.01], "size": [2, 1, 0], "uv": [65, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 15.7, -4],
|
||||
"locators": {
|
||||
"eye1": [-2.75, 15.7, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-2.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [68, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right2",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [65, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.5, 15.95, -4.02],
|
||||
"cubes": [
|
||||
{"origin": [-3, 15.45, -4.02], "size": [1, 1, 0], "uv": [1, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_right2",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.5, 15.95, -3.92],
|
||||
"cubes": [
|
||||
{"origin": [-3, 15.45, -3.93], "size": [1, 1, 0], "uv": [1, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -4.01], "size": [2, 1, 0], "uv": [70, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 15.7, -4],
|
||||
"locators": {
|
||||
"eye2": [2.75, 15.7, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [71, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left2",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 15.7, -4.01],
|
||||
"cubes": [
|
||||
{"origin": [2.75, 15.7, -4.01], "size": [1, 1, 0], "uv": [74, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.5, 15.95, -4.02],
|
||||
"cubes": [
|
||||
{"origin": [2, 15.45, -4.02], "size": [1, 1, 0], "uv": [4, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyeshine_left2",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.5, 15.95, -3.92],
|
||||
"cubes": [
|
||||
{"origin": [2, 15.45, -3.93], "size": [1, 1, 0], "uv": [4, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.7, -3.91],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.91], "size": [2, 2, 0], "uv": [27, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.7, -3.91],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.91], "size": [2, 2, 0], "uv": [32, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 15.2, -3.94]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right1",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right2",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_right3",
|
||||
"parent": "eyelid_emote_right",
|
||||
"pivot": [-2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [30, 5]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 15.2, -3.94]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left1",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 3], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left2",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 1], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_emote_left3",
|
||||
"parent": "eyelid_emote_left",
|
||||
"pivot": [2.75, 15.2, -3.94],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 14.7, -3.94], "size": [2, 1, 0], "uv": [35, 5], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ears",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 18.5, -0.25]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "ears",
|
||||
"pivot": [-3.5, 18.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [-5, 18.5, -0.25], "size": [4, 5, 0], "uv": [33, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right2",
|
||||
"parent": "ear_right",
|
||||
"pivot": [-3.5, 23.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [-5, 23.5, -0.25], "size": [4, 5, 0], "uv": [33, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "ears",
|
||||
"pivot": [3.5, 18.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [1, 18.5, -0.25], "size": [4, 5, 0], "uv": [42, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left2",
|
||||
"parent": "ear_left",
|
||||
"pivot": [3.5, 23.5, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [1, 23.5, -0.25], "size": [4, 5, 0], "uv": [42, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 3.5, 5],
|
||||
"cubes": [
|
||||
{"origin": [0, 3, 5], "size": [0, 5, 6], "uv": [88, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 5.5, 8],
|
||||
"rotation": [150, 0, -180],
|
||||
"locators": {
|
||||
"tail": [0, 5.5, 8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 8, 6],
|
||||
"cubes": [
|
||||
{"origin": [0, 8, 5], "size": [0, 4, 8], "inflate": 0.01, "uv": [71, 21]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail3",
|
||||
"parent": "tail2",
|
||||
"pivot": [0, 11.99, 11],
|
||||
"cubes": [
|
||||
{"origin": [0, 12, 6], "size": [0, 7, 13], "uv": [101, 43]},
|
||||
{"origin": [0, 12, 12], "size": [0, 7, 8], "inflate": 0.01, "uv": [111, 8]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail3",
|
||||
"pivot": [0, 16, 19],
|
||||
"rotation": [180, 0, -180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 16, 19]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_physical",
|
||||
"parent": "tail3",
|
||||
"pivot": [0, 16, 19],
|
||||
"locators": {
|
||||
"physical": [0, 16, 17]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ftorso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 0.5]
|
||||
},
|
||||
{
|
||||
"name": "ftorso2",
|
||||
"parent": "ftorso",
|
||||
"pivot": [0, 8.75, 0.5]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "ftorso2",
|
||||
"pivot": [0, 9.75, -2.25]
|
||||
},
|
||||
{
|
||||
"name": "arm_right",
|
||||
"parent": "arms",
|
||||
"pivot": [-4.25, 9.75, -2.25],
|
||||
"cubes": [
|
||||
{"origin": [-6.25, 8.25, -3.75], "size": [3, 3, 3], "uv": [1, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right2",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-6.25, 8.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [-9.25, 8.25, -3.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [13, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"hand_primary": [-9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"item": [-9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "arm_left",
|
||||
"parent": "arms",
|
||||
"pivot": [4.25, 9.75, -2.25],
|
||||
"cubes": [
|
||||
{"origin": [3.25, 8.25, -3.75], "size": [3, 3, 3], "uv": [1, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left2",
|
||||
"parent": "arm_left",
|
||||
"pivot": [6.25, 8.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [6.25, 8.25, -3.75], "size": [3, 3, 3], "inflate": 0.01, "uv": [13, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "arm_left2",
|
||||
"pivot": [9.25, 9.75, -2.25],
|
||||
"locators": {
|
||||
"hand_secondary": [9.25, 9.75, -2.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "legs",
|
||||
"parent": "body",
|
||||
"pivot": [-3.25, 4.75, 1.75]
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-3.25, 4.75, 1.75],
|
||||
"cubes": [
|
||||
{"origin": [-5.5, 1, -2.75], "size": [5, 6, 6], "uv": [0, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_right",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-3, 1, 0.75],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -0.5], "size": [2, 1, 2], "inflate": 0.01, "uv": [16, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-3, 0.5, -0.5],
|
||||
"locators": {
|
||||
"foot_primary": [-3, 0.5, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toes_right",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-3, 0, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 0, -2.5], "size": [2, 1, 2], "uv": [16, 34]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "legs",
|
||||
"pivot": [3.25, 4.75, 1.75],
|
||||
"cubes": [
|
||||
{"origin": [0.5, 1, -2.75], "size": [5, 6, 6], "uv": [22, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_left",
|
||||
"parent": "leg_left",
|
||||
"pivot": [3, 1, 0.75],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -0.5], "size": [2, 1, 2], "inflate": 0.01, "uv": [38, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "foot_left",
|
||||
"pivot": [3, 0.5, -0.5],
|
||||
"locators": {
|
||||
"foot_secondary": [3, 0.5, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "toes_left",
|
||||
"parent": "foot_left",
|
||||
"pivot": [3, 0, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -2.5], "size": [2, 1, 2], "uv": [38, 34]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+7
-9
@@ -96,13 +96,13 @@
|
||||
"parent": "head",
|
||||
"pivot": [0, 6, 0.25],
|
||||
"cubes": [
|
||||
{"origin": [-2.4, 4.4, -5.28], "size": [1, 1, 0], "inflate": 0.01, "pivot": [-2, 5, 0], "rotation": [0, 0, -45], "uv": [12, 19]},
|
||||
{"origin": [-1.75, 5.25, 5.76], "size": [1, 1, 0], "pivot": [-2, 5, 0], "rotation": [0, 0, -45], "uv": [8, 10]},
|
||||
{"origin": [1.25, 1.25, 5.76], "size": [1, 1, 0], "pivot": [-2, 5, 0], "rotation": [0, 0, -45], "uv": [9, 2]},
|
||||
{"origin": [-4.51, 6, -2.75], "size": [0, 1, 1], "pivot": [-2, 6.5, -2.25], "rotation": [-45, 0, 0], "uv": [7, 1]},
|
||||
{"origin": [4.51, 6.75, -2.75], "size": [0, 1, 1], "pivot": [-2, 6.5, -2.25], "rotation": [-45, 0, 0], "uv": [0, 5]},
|
||||
{"origin": [4.51, 8, 0.5], "size": [0, 1, 1], "pivot": [-2, 6.5, -2.25], "rotation": [-45, 0, 0], "uv": [0, 1]},
|
||||
{"origin": [-4.51, 6.5, 1.25], "size": [0, 1, 1], "pivot": [-2, 7, 1.75], "rotation": [-45, 0, 0], "uv": [0, 6]}
|
||||
{"origin": [-2.5, 4.4, -5.28], "size": [1, 1, 0], "uv": [12, 19]},
|
||||
{"origin": [-2.5, 5.5, 5.76], "size": [1, 1, 0], "uv": [8, 10]},
|
||||
{"origin": [2.5, 4.5, 5.76], "size": [1, 1, 0], "uv": [9, 2]},
|
||||
{"origin": [-4.51, 6, -2.75], "size": [0, 1, 1], "uv": [7, 1]},
|
||||
{"origin": [4.51, 6.5, -2.25], "size": [0, 1, 1], "uv": [0, 5]},
|
||||
{"origin": [4.51, 5, 0.75], "size": [0, 1, 1], "uv": [0, 1]},
|
||||
{"origin": [-4.51, 6.5, 1.75], "size": [0, 1, 1], "uv": [0, 6]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -119,7 +119,6 @@
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-1.5, 5.75, -5.25],
|
||||
"rotation": [0, 0, 5],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 6, -5.26], "size": [1, 2, 0], "uv": [8, 19]}
|
||||
]
|
||||
@@ -152,7 +151,6 @@
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [1.5, 5.75, -5.25],
|
||||
"rotation": [0, 0, -5],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 6, -5.26], "size": [1, 2, 0], "uv": [8, 8]}
|
||||
]
|
||||
|
||||
+305
-138
@@ -15,11 +15,43 @@
|
||||
"name": "slakoth",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "slakoth",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "slakoth",
|
||||
"pivot": [0, 10, 0],
|
||||
"locators": {
|
||||
"top": [0, 10, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "slakoth",
|
||||
"pivot": [0, 0, 1]
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, -11],
|
||||
"locators": {
|
||||
"target": [0, 4, -11]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 4, 0],
|
||||
"locators": {
|
||||
"middle": [0, 4, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
@@ -39,9 +71,203 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "left_arm1",
|
||||
"name": "head",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [4, 2.5, -3],
|
||||
"pivot": [0, 2.5, -6]
|
||||
},
|
||||
{
|
||||
"name": "head_correction",
|
||||
"parent": "head",
|
||||
"pivot": [0, 2.5, -6]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 2.5, -6]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 2.5, -6],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 0, -9.5], "size": [9, 7, 7], "uv": [0, 0]},
|
||||
{"origin": [-3.5, 5, -6.5], "size": [7, 7, 0], "uv": [18, 33]},
|
||||
{"origin": [0, 7, -8.5], "size": [0, 3, 4], "uv": [14, 23]},
|
||||
{"origin": [0.97553, 2.56529, -9.51], "size": [3, 3, 0], "pivot": [2.47553, 4.06529, -9.5], "rotation": [0, 0, 15], "uv": [0, 17]},
|
||||
{"origin": [-3.97553, 2.56529, -9.51], "size": [3, 3, 0], "pivot": [-2.47553, 4.06529, -9.5], "rotation": [0, 0, -15], "uv": [0, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_smile",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 4, 1.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 1, -9.51], "size": [7, 1, 0], "uv": [22, 18]},
|
||||
{"origin": [-2.5, 0.5, -9.51], "size": [5, 1, 0], "uv": [35, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 1, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 2, -10.5], "size": [3, 2, 2], "uv": [44, 21]},
|
||||
{"origin": [-1.5, 2.5, -10.51], "size": [3, 1, 0], "uv": [0, 6]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0.25, 0.5, -6.5]
|
||||
},
|
||||
{
|
||||
"name": "left_eye",
|
||||
"parent": "eyes",
|
||||
"pivot": [0.25, 0.25, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 3, -9.52], "size": [2, 2, 0], "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [0, 27]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "left_pupil",
|
||||
"parent": "left_eye",
|
||||
"pivot": [2.44411, 3.97444, -9.53],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 3.5, -9.529], "size": [1, 1, 0], "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [26, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "left_pupil",
|
||||
"pivot": [2.4, 4, -9.5],
|
||||
"locators": {
|
||||
"eye2": [2.4, 4, -9.529]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "right_eye",
|
||||
"parent": "eyes",
|
||||
"pivot": [-0.25, 0.25, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3, -9.52], "size": [2, 2, 0], "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [25, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_pupil",
|
||||
"parent": "right_eye",
|
||||
"pivot": [-2.44411, 3.97444, -9.53],
|
||||
"cubes": [
|
||||
{"origin": [-2.75, 3.5, -9.53], "size": [1, 1, 0], "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [26, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "right_pupil",
|
||||
"pivot": [-2.4, 4, -9.5],
|
||||
"locators": {
|
||||
"eye1": [-2.4, 4, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.45, 3.95, -9.42],
|
||||
"rotation": [0, 0, 15],
|
||||
"cubes": [
|
||||
{"origin": [1.43799, 2.97209, -9.42], "size": [2, 2, 0], "inflate": 0.02, "uv": [22, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.45, 3.95, -9.52],
|
||||
"rotation": [0, 0, -15],
|
||||
"cubes": [
|
||||
{"origin": [-3.43799, 2.97209, -9.42], "size": [2, 2, 0], "inflate": 0.02, "uv": [22, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_half_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.57352, 4.45741, -9.02],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 4, -9.52], "size": [2, 1, 1], "inflate": 0.01, "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [46, 23]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_half_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.45, 3.95, -9.52],
|
||||
"cubes": [
|
||||
{"origin": [-3.57352, 3.95741, -9.53], "size": [2, 1, 1], "inflate": 0.01, "pivot": [-2.57352, 4.45741, -9.03], "rotation": [0, 0, -15], "uv": [45, 23]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0.5, 3.1, -4.9],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 0.1, -9.41], "size": [7, 2, 0], "uv": [14, 46]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 4, -10.5],
|
||||
"locators": {
|
||||
"face": [0, 4, -10.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 1, -9.5],
|
||||
"locators": {
|
||||
"mouth": [0, 1, -9.5],
|
||||
"special": [0, 1, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 7, -7],
|
||||
"locators": {
|
||||
"head": [0, 7, -7]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 7, -6],
|
||||
"locators": {
|
||||
"item_hat": [0, 7, -6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 4, -9.5],
|
||||
"locators": {
|
||||
"item_face": [0, 4, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "back_fur1",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [-1.5, 6, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3, 6, 0], "size": [3, 3, 0], "pivot": [0, 6, 0], "rotation": [-57.5, 0, 0], "uv": [0, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [0, 2.5, -1.5]
|
||||
},
|
||||
{
|
||||
"name": "left_arm1",
|
||||
"parent": "arms",
|
||||
"pivot": [4, 2.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [4, 1, -3], "size": [4, 3, 3], "inflate": 0.03, "uv": [43, 36]}
|
||||
]
|
||||
@@ -49,7 +275,7 @@
|
||||
{
|
||||
"name": "left_arm2",
|
||||
"parent": "left_arm1",
|
||||
"pivot": [8, 4, -1.5],
|
||||
"pivot": [8, 4, 0],
|
||||
"cubes": [
|
||||
{"origin": [8, 1, -3], "size": [4, 3, 3], "inflate": 0.02, "uv": [43, 15]}
|
||||
]
|
||||
@@ -57,7 +283,7 @@
|
||||
{
|
||||
"name": "left_arm3",
|
||||
"parent": "left_arm2",
|
||||
"pivot": [12, 4, -1.5],
|
||||
"pivot": [12, 4, -0.1],
|
||||
"cubes": [
|
||||
{"origin": [12, 1, -3], "size": [4, 3, 3], "inflate": 0.01, "uv": [0, 43]}
|
||||
]
|
||||
@@ -65,11 +291,21 @@
|
||||
{
|
||||
"name": "left_arm4",
|
||||
"parent": "left_arm3",
|
||||
"pivot": [16, 4, -1.5],
|
||||
"pivot": [16, 4, 0],
|
||||
"cubes": [
|
||||
{"origin": [16, 1, -3], "size": [4, 3, 3], "uv": [40, 42]}
|
||||
{"origin": [16, 1, -3], "size": [4, 3, 3], "uv": [40, 42]},
|
||||
{"origin": [17.5, 0.99, -2.5], "size": [2, 0, 2], "uv": [33, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "left_arm4",
|
||||
"pivot": [20, 2, -1.5],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"hand_secondary": [20, 2, -1.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "left_arm_claw",
|
||||
"parent": "left_arm4",
|
||||
@@ -81,8 +317,8 @@
|
||||
},
|
||||
{
|
||||
"name": "right_arm1",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [-4, 2.5, -3],
|
||||
"parent": "arms",
|
||||
"pivot": [-4, 2.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [-8, 1, -3], "size": [4, 3, 3], "inflate": 0.03, "uv": [42, 0]}
|
||||
]
|
||||
@@ -90,7 +326,7 @@
|
||||
{
|
||||
"name": "right_arm2",
|
||||
"parent": "right_arm1",
|
||||
"pivot": [-8, 4, -1.5],
|
||||
"pivot": [-8, 4, 0],
|
||||
"cubes": [
|
||||
{"origin": [-12, 1, -3], "size": [4, 3, 3], "inflate": 0.02, "uv": [11, 40]}
|
||||
]
|
||||
@@ -98,7 +334,7 @@
|
||||
{
|
||||
"name": "right_arm3",
|
||||
"parent": "right_arm2",
|
||||
"pivot": [-12, 4, -1.5],
|
||||
"pivot": [-12, 4, 0],
|
||||
"cubes": [
|
||||
{"origin": [-16, 1, -3], "size": [4, 3, 3], "inflate": 0.01, "uv": [29, 39]}
|
||||
]
|
||||
@@ -106,11 +342,30 @@
|
||||
{
|
||||
"name": "right_arm4",
|
||||
"parent": "right_arm3",
|
||||
"pivot": [-16, 4, -1.5],
|
||||
"pivot": [-16, 4, 0],
|
||||
"cubes": [
|
||||
{"origin": [-20, 1, -3], "size": [4, 3, 3], "uv": [0, 35]}
|
||||
{"origin": [-20, 1, -3], "size": [4, 3, 3], "uv": [0, 35]},
|
||||
{"origin": [-19.5, 0.99, -2.5], "size": [2, 0, 2], "pivot": [-18.5, 1, -1.5], "rotation": [0, 90, 0], "uv": [33, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "right_arm4",
|
||||
"pivot": [-20, 2, -1.5],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"hand_primary": [-20, 2, -1.5],
|
||||
"physical": [-20, 2, -1.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "right_arm4",
|
||||
"pivot": [-20, 1, -1.5],
|
||||
"locators": {
|
||||
"item": [-20, 1, -1.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "right_arm_claw",
|
||||
"parent": "right_arm4",
|
||||
@@ -120,131 +375,23 @@
|
||||
{"origin": [-24, 1, -0.5], "size": [4, 2, 0], "pivot": [-20, 2.5, -0.5], "rotation": [0, -7.5, 0], "uv": [0, 41]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [0, 2.5, -6],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 0, -9.5], "size": [9, 7, 7], "uv": [0, 0]},
|
||||
{"origin": [-3.5, 7, -6.5], "size": [7, 3, 0], "uv": [18, 35]},
|
||||
{"origin": [0, 7, -8.5], "size": [0, 2, 4], "uv": [14, 24]},
|
||||
{"origin": [0.97553, 2.56529, -9.5], "size": [3, 3, 0], "inflate": 0.005, "pivot": [2.47553, 4.06529, -9.5], "rotation": [0, 0, 15], "uv": [0, 17]},
|
||||
{"origin": [-3.97553, 2.56529, -9.5], "size": [3, 3, 0], "inflate": 0.005, "pivot": [-2.47553, 4.06529, -9.5], "rotation": [0, 0, -15], "uv": [0, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_smile",
|
||||
"parent": "head",
|
||||
"pivot": [0, 4, 1.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 1, -9.5], "size": [7, 1, 0], "inflate": 0.005, "uv": [22, 18]},
|
||||
{"origin": [-2.5, 0.5, -9.5], "size": [5, 1, 0], "inflate": 0.005, "uv": [35, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"parent": "head",
|
||||
"pivot": [0, 1, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 2, -10.5], "size": [3, 2, 2], "uv": [44, 21]},
|
||||
{"origin": [-1.5, 2.5, -10.5], "size": [3, 1, 0], "inflate": 0.005, "uv": [0, 6]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head",
|
||||
"pivot": [0.25, 0.5, -6.5]
|
||||
},
|
||||
{
|
||||
"name": "left_eye",
|
||||
"parent": "eyes",
|
||||
"pivot": [0.25, 0.25, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 3, -9.5], "size": [2, 2, 0], "inflate": 0.01, "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [0, 27]},
|
||||
{"origin": [1.25, 4, -9.5], "size": [2, 1, 0], "inflate": 0.02, "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [25, 6]},
|
||||
{"origin": [1.75, 3.5, -9.5], "size": [1, 1, 0], "inflate": 0.015, "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [26, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "left_pupil",
|
||||
"parent": "left_eye",
|
||||
"pivot": [2.44411, 3.97444, -9.53],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 3.5, -9.53], "size": [1, 1, 0], "pivot": [2.25, 3.25, -9.5], "rotation": [0, 0, 15], "uv": [26, 15]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "left_pupil",
|
||||
"pivot": [2.4, 4, -9.5],
|
||||
"locators": {
|
||||
"eye2": [2.4, 4, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "right_eye",
|
||||
"parent": "eyes",
|
||||
"pivot": [-0.25, 0.25, -6.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3, -9.5], "size": [2, 2, 0], "inflate": 0.01, "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [25, 4]},
|
||||
{"origin": [-2.75, 3.5, -9.5], "size": [1, 1, 0], "inflate": 0.015, "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [26, 14]},
|
||||
{"origin": [-3.25, 4, -9.5], "size": [2, 1, 0], "inflate": 0.02, "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [22, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_pupil",
|
||||
"parent": "right_eye",
|
||||
"pivot": [-2.44411, 3.97444, -9.53],
|
||||
"cubes": [
|
||||
{"origin": [-2.75, 3.5, -9.53], "size": [1, 1, 0], "pivot": [-2.25, 3.25, -9.5], "rotation": [0, 0, -15], "uv": [26, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "right_pupil",
|
||||
"pivot": [-2.4, 4, -9.5],
|
||||
"locators": {
|
||||
"eye1": [-2.4, 4, -9.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "closed",
|
||||
"parent": "eyes",
|
||||
"pivot": [0.25, 0.5, -6.4],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 3, -9.4], "size": [2, 2, 0], "inflate": 0.03, "pivot": [2.25, 3.25, -9.4], "rotation": [0, 0, 15], "uv": [22, 16]},
|
||||
{"origin": [-3.25, 3, -9.4], "size": [2, 2, 0], "inflate": 0.03, "pivot": [-2.25, 3.25, -9.4], "rotation": [0, 0, -15], "uv": [22, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 3.1, -4.9],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 0.1, -9.4], "size": [5, 2, 0], "inflate": 0.005, "uv": [14, 46]},
|
||||
{"origin": [-1, 0.1, -9.4], "size": [2, 1, 0], "inflate": 0.01, "uv": [21, 46]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_fur1",
|
||||
"parent": "upper_torso",
|
||||
"pivot": [-1.5, 6, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3, 6, 0], "size": [3, 3, 0], "pivot": [0, 6, 0], "rotation": [-57.5, 0, 0], "uv": [0, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_fur2",
|
||||
"parent": "upper_torso",
|
||||
"parent": "torso",
|
||||
"pivot": [1.5, 6.5, 3],
|
||||
"cubes": [
|
||||
{"origin": [0, 6.5, 3], "size": [3, 3, 0], "pivot": [3, 6.5, 3], "rotation": [-57.5, 0, 0], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "left_leg",
|
||||
"name": "legs",
|
||||
"parent": "body",
|
||||
"pivot": [4, 2, 5],
|
||||
"pivot": [0, 2, 7]
|
||||
},
|
||||
{
|
||||
"name": "left_leg",
|
||||
"parent": "legs",
|
||||
"pivot": [4, 2, 7],
|
||||
"cubes": [
|
||||
{"origin": [3, 0, 5], "size": [5, 4, 4], "inflate": -0.01, "uv": [28, 10]}
|
||||
]
|
||||
@@ -254,22 +401,32 @@
|
||||
"parent": "left_leg",
|
||||
"pivot": [8, 2, 5.5],
|
||||
"cubes": [
|
||||
{"origin": [8, 0.5, 5.5], "size": [4, 3, 3], "uv": [42, 6]}
|
||||
{"origin": [8, 0.5, 5.5], "size": [4, 3, 3], "uv": [42, 6]},
|
||||
{"origin": [11, 1.98, 6], "size": [2, 0, 2], "pivot": [11.99, 2, 7], "rotation": [0, 90, -90], "uv": [33, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "left_leg2",
|
||||
"pivot": [11, 2, 7.5],
|
||||
"rotation": [-180, 0, -90],
|
||||
"locators": {
|
||||
"foot_secondary": [11, 2, 7.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "left_leg_claw",
|
||||
"parent": "left_leg2",
|
||||
"pivot": [12, 2, 6.5],
|
||||
"pivot": [12, 2, 7.5],
|
||||
"cubes": [
|
||||
{"origin": [12, 3, 6.5], "size": [4, 0, 2], "pivot": [12, 3, 7], "rotation": [0, 0, 7.5], "uv": [33, 0]},
|
||||
{"origin": [12, 1, 6.5], "size": [4, 0, 2], "pivot": [12, 1, 7], "rotation": [0, 0, -7.5], "uv": [40, 12]}
|
||||
{"origin": [12, 3, 5.5], "size": [4, 0, 2], "pivot": [12, 3, 6], "rotation": [0, 0, 7.5], "uv": [33, 0]},
|
||||
{"origin": [12, 1, 5.5], "size": [4, 0, 2], "pivot": [12, 1, 6], "rotation": [0, 0, -7.5], "uv": [40, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "right_leg",
|
||||
"parent": "body",
|
||||
"pivot": [-4, 2, 5],
|
||||
"parent": "legs",
|
||||
"pivot": [-4, 2, 7],
|
||||
"cubes": [
|
||||
{"origin": [-8, 0, 5], "size": [5, 4, 4], "inflate": -0.01, "uv": [0, 27]}
|
||||
]
|
||||
@@ -279,16 +436,26 @@
|
||||
"parent": "right_leg",
|
||||
"pivot": [-8, 2, 5.5],
|
||||
"cubes": [
|
||||
{"origin": [-12, 0.5, 5.5], "size": [4, 3, 3], "uv": [32, 33]}
|
||||
{"origin": [-12, 0.5, 5.5], "size": [4, 3, 3], "uv": [32, 33]},
|
||||
{"origin": [-13, 2, 6], "size": [2, 0, 2], "pivot": [-12.01, 2, 7], "rotation": [0, 0, 90], "uv": [33, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "right_leg2",
|
||||
"pivot": [-11, 2, 7.5],
|
||||
"rotation": [-180, 0, 90],
|
||||
"locators": {
|
||||
"foot_primary": [-11, 2, 7.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "right_leg_claw",
|
||||
"parent": "right_leg2",
|
||||
"pivot": [-12, 2, 6.5],
|
||||
"pivot": [-12, 2, 7.5],
|
||||
"cubes": [
|
||||
{"origin": [-16, 3, 6.5], "size": [4, 0, 2], "pivot": [-12, 3, 7], "rotation": [0, 0, -7.5], "uv": [30, 8]},
|
||||
{"origin": [-16, 1, 6.5], "size": [4, 0, 2], "pivot": [-12, 1, 7], "rotation": [0, 0, 7.5], "uv": [26, 19]}
|
||||
{"origin": [-16, 3, 5.5], "size": [4, 0, 2], "pivot": [-12, 3, 6], "rotation": [0, 0, -7.5], "uv": [30, 8]},
|
||||
{"origin": [-16, 1, 5.5], "size": [4, 0, 2], "pivot": [-12, 1, 6], "rotation": [0, 0, 7.5], "uv": [26, 19]}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
+499
-147
@@ -3,7 +3,7 @@
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.shinx",
|
||||
"identifier": "geometry.shinx_female",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 4,
|
||||
@@ -13,279 +13,631 @@
|
||||
"bones": [
|
||||
{
|
||||
"name": "shinx",
|
||||
"pivot": [0, 0, 1.5]
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 20, 0],
|
||||
"locators": {
|
||||
"top": [0, 20, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 6, 1.5]
|
||||
"pivot": [0, 6, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, -10],
|
||||
"locators": {
|
||||
"target": [0, 9, -10]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, 0],
|
||||
"locators": {
|
||||
"middle": [0, 9, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "hips",
|
||||
"parent": "body",
|
||||
"pivot": [0, 6, 3.5]
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 6, 4],
|
||||
"parent": "hips",
|
||||
"pivot": [0, 6, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, -3.5], "size": [6, 5, 5], "inflate": 0.01, "uv": [20, 25]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "waist",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.5, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, 0.5], "size": [6, 5, 6], "uv": [0, 17]}
|
||||
{"origin": [-3, 3.5, -1], "size": [6, 5, 6], "uv": [22, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "waist",
|
||||
"pivot": [0, 7.25, 5.5]
|
||||
"parent": "torso",
|
||||
"pivot": [0, 7.25, 4]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff_left",
|
||||
"parent": "tail",
|
||||
"pivot": [0.75, 7, 6],
|
||||
"pivot": [0.75, 7, 4.5],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 4.25, 5.5], "size": [0, 4, 3], "inflate": 0.01, "pivot": [2.17263, 6.93812, 7.51864], "rotation": [15, 22.75, 24.75], "uv": [0, 1]}
|
||||
{"origin": [1.5, 4.25, 4], "size": [0, 4, 3], "pivot": [2.17263, 6.93812, 6.01864], "rotation": [15, 22.75, 24.75], "uv": [0, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 8.5, 6.5],
|
||||
"pivot": [0, 8.5, 5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 8.5, 6.5], "size": [3, 0, 3], "inflate": 0.01, "pivot": [0, 8.5, 6.5], "rotation": [45, 0, 0], "uv": [15, 19]}
|
||||
{"origin": [-1.5, 8.5, 5], "size": [3, 0, 3], "pivot": [0, 8.5, 5], "rotation": [45, 0, 0], "uv": [53, 61]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff_right",
|
||||
"parent": "tail",
|
||||
"pivot": [-0.75, 7, 6],
|
||||
"pivot": [-0.75, 7, 4.5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 4.25, 5.5], "size": [0, 4, 3], "inflate": 0.01, "pivot": [-2.17263, 6.93812, 7.51864], "rotation": [15, -22.75, -24.75], "uv": [0, -3], "mirror": true}
|
||||
{"origin": [-1.5, 4.25, 4], "size": [0, 4, 3], "pivot": [-2.17263, 6.93812, 6.01864], "rotation": [15, -22.75, -24.75], "uv": [0, -3], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_1",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 7.25, 5.5],
|
||||
"pivot": [0, 7.25, 4],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 5.5], "size": [1, 1, 5], "uv": [39, 32]}
|
||||
{"origin": [-0.5, 6.75, 4], "size": [1, 1, 5], "uv": [40, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_2",
|
||||
"parent": "tail_1",
|
||||
"pivot": [0, 7.25, 10.5],
|
||||
"pivot": [0, 7.25, 9],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 10.5], "size": [1, 1, 4], "inflate": 0.01, "uv": [43, 27]}
|
||||
{"origin": [-0.5, 6.75, 9], "size": [1, 1, 4], "inflate": 0.01, "uv": [47, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 7.25, 11],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail": [0, 7.25, 11]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail_3",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 7.25, 14.5],
|
||||
"pivot": [0, 7.25, 13],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 14.5], "size": [1, 1, 4], "uv": [40, 21]},
|
||||
{"origin": [-3.5, 3.75, 18.5], "size": [7, 7, 0], "inflate": 0.01, "uv": [38, 38]}
|
||||
{"origin": [-0.5, 6.75, 13], "size": [1, 1, 4], "uv": [53, 17]},
|
||||
{"origin": [-3.5, 3.75, 17.01], "size": [7, 7, 0], "uv": [36, 47]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail_3",
|
||||
"pivot": [0, 7.25, 17],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 7.25, 17]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 6, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, -5], "size": [6, 5, 5], "inflate": 0.01, "uv": [0, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8, -1.5],
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 7.5, -3],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 7.5, -3.5], "size": [5, 3, 4], "uv": [27, 0]}
|
||||
{"origin": [-2.5, 7, -5], "size": [5, 3, 4], "uv": [18, 54]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 9.25, -2.75],
|
||||
"pivot": [0, 9.75, -3.25]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 9.75, -3.25]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 8.75, -3.25],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 9.25, -7.75], "size": [9, 8, 9], "uv": [0, 0]},
|
||||
{"origin": [-0.5, 11.75, -8], "size": [1, 1, 1], "inflate": 0.03, "uv": [0, 55]},
|
||||
{"origin": [-5.5, 8.25, -7.25], "size": [3, 2, 0], "pivot": [-3.4, 8.94134, -7.25], "rotation": [0, 0, 32.5], "uv": [38, 50]},
|
||||
{"origin": [2.5, 8.25, -7.25], "size": [3, 2, 0], "pivot": [3.46194, 8.94134, -7.25], "rotation": [0, 0, -32.5], "uv": [38, 52], "mirror": true}
|
||||
{"origin": [-4.5, 8.75, -8.25], "size": [9, 8, 9], "uv": [0, 0]},
|
||||
{"origin": [3.5, 8.1, -5.75], "size": [3, 2, 0], "pivot": [4.46194, 8.79134, -5.75], "rotation": [0, 0, -55], "uv": [29, 50], "mirror": true},
|
||||
{"origin": [-6.5, 8.1, -5.75], "size": [3, 2, 0], "pivot": [-4.46194, 8.79134, -5.75], "rotation": [0, 0, 55], "uv": [22, 50]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.75, -3.75],
|
||||
"locators": {
|
||||
"item_hat": [0, 16.75, -3.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.75, -8.25],
|
||||
"locators": {
|
||||
"head": [0, 16.75, -8.25],
|
||||
"physical": [0, 16.75, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 9.75, -8.25],
|
||||
"locators": {
|
||||
"mouth": [0, 9.75, -8.25],
|
||||
"special": [0, 9.75, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 9.5, -8.25],
|
||||
"rotation": [90, 0, 45],
|
||||
"locators": {
|
||||
"item": [0, 9.5, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 12.25, -8.25],
|
||||
"locators": {
|
||||
"item_face": [0, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 12.25, -8.25],
|
||||
"locators": {
|
||||
"face": [0, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 11.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 11.25, -8.26], "size": [1, 1, 1], "uv": [22, 62]},
|
||||
{"origin": [-1, 11.75, -8.27], "size": [2, 1, 1], "uv": [27, 62]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "face",
|
||||
"pivot": [-2.88333, 12.75, -8.25]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.8, 12.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.01, "uv": [47, 23]},
|
||||
{"origin": [-3, 10.75, -8.25], "size": [1, 3, 1], "inflate": 0.01, "uv": [59, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "iris_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-3, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.02, "uv": [54, 23]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "iris_right",
|
||||
"pivot": [-2.75, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 11.25, -8.25], "size": [1, 2, 1], "inflate": 0.03, "uv": [54, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-2.7, 12.25, -8.25],
|
||||
"locators": {
|
||||
"eye1": [-2.7, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.4, 13.25, -8.18],
|
||||
"cubes": [
|
||||
{"origin": [-2.91, 12.75, -8.08], "size": [1, 1, 1], "inflate": 0.11, "uv": [51, 50]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "head",
|
||||
"pivot": [2.63333, 13.25, -7.75],
|
||||
"parent": "eyes",
|
||||
"pivot": [2.8, 12.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [1.9, 12.75, -7.75], "size": [1, 1, 0], "inflate": 0.03, "uv": [0, 63], "mirror": true},
|
||||
{"origin": [1.75, 11.75, -7.75], "size": [2, 3, 0], "inflate": 0.01, "uv": [4, 57], "mirror": true},
|
||||
{"origin": [2.25, 11.75, -7.75], "size": [1, 3, 0], "inflate": 0.02, "uv": [2, 60], "mirror": true}
|
||||
{"origin": [2.5, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.01, "uv": [47, 28], "mirror": true},
|
||||
{"origin": [2, 10.75, -8.25], "size": [1, 3, 1], "inflate": 0.01, "uv": [59, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right2",
|
||||
"name": "iris_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 13.25, -5.25],
|
||||
"pivot": [3, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 11.75, -5.75], "size": [2, 3, 1], "inflate": 0.01, "uv": [25, 35], "mirror": true}
|
||||
{"origin": [2, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.02, "uv": [54, 28], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "head",
|
||||
"pivot": [-2.63333, 13.25, -7.75],
|
||||
"name": "pupil_left",
|
||||
"parent": "iris_left",
|
||||
"pivot": [2.75, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 11.75, -7.75], "size": [1, 3, 0], "inflate": 0.02, "uv": [0, 60]},
|
||||
{"origin": [-3.75, 11.75, -7.75], "size": [2, 3, 0], "inflate": 0.01, "uv": [0, 57]},
|
||||
{"origin": [-2.9, 12.75, -7.75], "size": [1, 1, 0], "inflate": 0.03, "uv": [0, 63]}
|
||||
{"origin": [2.25, 11.25, -8.25], "size": [1, 2, 1], "inflate": 0.03, "uv": [54, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [2.7, 12.25, -8.25],
|
||||
"locators": {
|
||||
"eye2": [2.7, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.4, 13.25, -8.18],
|
||||
"cubes": [
|
||||
{"origin": [1.91, 12.75, -8.08], "size": [1, 1, 1], "inflate": 0.11, "uv": [51, 52], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 13.25, -5.25],
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 11.75, -5.75], "size": [2, 3, 1], "inflate": 0.01, "uv": [31, 35]}
|
||||
{"origin": [-4.4, 10.75, -8.15], "size": [3, 3, 1], "inflate": 0.01, "uv": [36, 42]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 10.75, -8.15], "size": [3, 3, 1], "inflate": 0.01, "uv": [45, 42], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-4.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [36, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [45, 37], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_hurt_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-4.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [36, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_hurt_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [45, 33], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "face",
|
||||
"pivot": [0, 9.75, -6.25]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-1, 9, -8.26], "size": [2, 1, 1], "uv": [36, 29]},
|
||||
{"origin": [-2, 9.5, -8.26], "size": [1, 1, 1], "uv": [42, 29]},
|
||||
{"origin": [1, 9.5, -8.26], "size": [1, 1, 1], "uv": [39, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_happy",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 9.75, -8.16], "size": [3, 1, 1], "uv": [55, 46]},
|
||||
{"origin": [-1, 8.75, -8.16], "size": [2, 1, 1], "uv": [57, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_angry",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1, 9.75, -8.16], "size": [2, 1, 1], "uv": [57, 50]},
|
||||
{"origin": [-1.5, 8.75, -8.16], "size": [3, 1, 1], "uv": [55, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1, 8.75, -8.16], "size": [2, 2, 1], "uv": [57, 54]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_wide",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 8.75, -8.16], "size": [3, 2, 1], "uv": [55, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ooo",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 8.75, -8.16], "size": [1, 2, 1], "uv": [59, 57]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "face_ditto",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 11.95, -8.2]
|
||||
},
|
||||
{
|
||||
"name": "eyes_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 12.7, -8.22],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 12.2, -8.22], "size": [7, 1, 0], "uv": [50, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes_blink_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 12.7, -8.12],
|
||||
"cubes": [
|
||||
{"origin": [-4, 12.2, -8.12], "size": [8, 1, 0], "uv": [48, 6]},
|
||||
{"origin": [-3.5, 12.7, -8.13], "size": [7, 1, 0], "uv": [50, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 10.95, -8.2],
|
||||
"cubes": [
|
||||
{"origin": [-3, 10.2, -8.21], "size": [6, 1, 0], "uv": [52, 10]},
|
||||
{"origin": [-4, 10.7, -8.21], "size": [8, 1, 0], "uv": [48, 8]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 10.7, -8.11],
|
||||
"cubes": [
|
||||
{"origin": [-4, 9.7, -8.11], "size": [8, 2, 0], "uv": [48, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "head",
|
||||
"pivot": [4, 14.25, -0.25],
|
||||
"parent": "head_angle",
|
||||
"pivot": [4, 13.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [6, 11.75, -4.25], "size": [1, 7, 0], "inflate": 0.01, "uv": [58, 57], "mirror": true},
|
||||
{"origin": [4.5, 12.75, -4.25], "size": [4, 3, 0], "inflate": 0.02, "uv": [50, 58], "mirror": true},
|
||||
{"origin": [4, 11.25, -4.25], "size": [5, 8, 2], "uv": [36, 54], "mirror": true}
|
||||
{"origin": [6, 10.75, -4.76], "size": [1, 7, 1], "uv": [51, 55], "mirror": true},
|
||||
{"origin": [4.5, 11.75, -4.77], "size": [4, 3, 1], "uv": [37, 59], "mirror": true},
|
||||
{"origin": [4, 10.25, -4.75], "size": [5, 8, 2], "uv": [21, 39], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "head",
|
||||
"pivot": [-4, 14.25, -0.25],
|
||||
"parent": "head_angle",
|
||||
"pivot": [-4, 13.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [-9, 11.25, -4.25], "size": [5, 8, 2], "uv": [22, 54]},
|
||||
{"origin": [-8.5, 12.75, -4.25], "size": [4, 3, 0], "inflate": 0.02, "uv": [50, 61]},
|
||||
{"origin": [-7, 11.75, -4.25], "size": [1, 7, 0], "inflate": 0.01, "uv": [60, 57]}
|
||||
{"origin": [-9, 10.25, -4.75], "size": [5, 8, 2], "uv": [21, 29]},
|
||||
{"origin": [-8.5, 11.75, -4.77], "size": [4, 3, 1], "uv": [37, 55]},
|
||||
{"origin": [-7, 10.75, -4.76], "size": [1, 7, 1], "uv": [47, 55]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fluff",
|
||||
"parent": "head",
|
||||
"pivot": [0, 17, -5],
|
||||
"name": "head_fluff",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.5, -5.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 17, -6.25], "size": [5, 4, 0], "inflate": 0.01, "pivot": [0.5, 18.25, -5.75], "rotation": [0, 90, 0], "uv": [24, 44]},
|
||||
{"origin": [0.5, 17, -6.25], "size": [1, 2, 0], "pivot": [0.5, 18.25, -5.75], "rotation": [0, 90, 0], "uv": [28, 42]}
|
||||
{"origin": [0, 16.75, -8.75], "size": [0, 3, 4], "uv": [39, -2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "open_mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 10.25, -5.75],
|
||||
"name": "ftorso2",
|
||||
"parent": "hips",
|
||||
"pivot": [0, 6, -0.5]
|
||||
},
|
||||
{
|
||||
"name": "legs_front",
|
||||
"parent": "ftorso2",
|
||||
"pivot": [0, 5, -3]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right",
|
||||
"parent": "legs_front",
|
||||
"pivot": [-1.75, 5, -3],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 10.25, -5.75], "size": [3, 1, 0], "inflate": 0.02, "uv": [16, 63]},
|
||||
{"origin": [-1, 9.25, -5.75], "size": [2, 1, 0], "inflate": 0.01, "uv": [12, 63]}
|
||||
{"origin": [-3.25, 3.5, -4.5], "size": [3, 3, 3], "uv": [0, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "closed_mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 10.25, -7.75],
|
||||
"name": "leg_front_right2",
|
||||
"parent": "leg_front_right",
|
||||
"pivot": [-1.75, 3.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [-2, 9.25, -7.75], "size": [4, 2, 0], "inflate": 0.03, "uv": [9, 58]}
|
||||
{"origin": [-3.25, 0.5, -4.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [0, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_leg_right",
|
||||
"name": "foot_front_right",
|
||||
"parent": "leg_front_right2",
|
||||
"pivot": [-1.75, 0.5, -2.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, -5], "size": [3, 1, 3], "uv": [0, 28]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_front_right",
|
||||
"pivot": [-1.75, 0.5, -3.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_primary": [-1.75, 0.5, -3.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left",
|
||||
"parent": "legs_front",
|
||||
"pivot": [1.75, 5, -3],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, -4.5], "size": [3, 3, 3], "uv": [9, 40], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left2",
|
||||
"parent": "leg_front_left",
|
||||
"pivot": [1.75, 3.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, -4.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [9, 46], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_front_left",
|
||||
"parent": "leg_front_left2",
|
||||
"pivot": [1.75, 0.5, -2.75],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, -5], "size": [3, 1, 3], "uv": [0, 32], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary1",
|
||||
"parent": "foot_front_left",
|
||||
"pivot": [1.75, 0.5, -3.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary1": [1.75, 0.5, -3.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "legs_back",
|
||||
"parent": "body",
|
||||
"pivot": [-1.75, 5, 5],
|
||||
"pivot": [0, 5, 3.5]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_right",
|
||||
"parent": "legs_back",
|
||||
"pivot": [-1.75, 5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3.5, 3.5], "size": [3, 3, 3], "uv": [36, 6]}
|
||||
{"origin": [-3.25, 3.5, 2], "size": [3, 3, 3], "inflate": 0.01, "uv": [0, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "knee_right",
|
||||
"parent": "back_leg_right",
|
||||
"pivot": [-1.75, 3.5, 3.5],
|
||||
"name": "leg_back_right2",
|
||||
"parent": "leg_back_right",
|
||||
"pivot": [-1.75, 3.5, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0.5, 3.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [0, 35]}
|
||||
{"origin": [-3.25, 0.5, 2], "size": [3, 3, 3], "uv": [0, 55]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_foot_right",
|
||||
"parent": "knee_right",
|
||||
"pivot": [0, 1, 5.5],
|
||||
"name": "foot_back_right",
|
||||
"parent": "leg_back_right2",
|
||||
"pivot": [-1.7, 0.5, 3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, 3], "size": [3, 1, 3], "uv": [0, 47]}
|
||||
{"origin": [-3.25, 0, 1.5], "size": [3, 1, 3], "inflate": 0.01, "uv": [37, 7]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "body",
|
||||
"pivot": [-1.75, 5, -1.5],
|
||||
"name": "locator_foot_secondary2",
|
||||
"parent": "foot_back_right",
|
||||
"pivot": [-1.75, 0.5, 3],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary2": [-1.75, 0.5, 3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left",
|
||||
"parent": "legs_back",
|
||||
"pivot": [1.75, 5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3.5, -3], "size": [3, 3, 3], "uv": [52, 0]}
|
||||
{"origin": [0.25, 3.5, 2], "size": [3, 3, 3], "inflate": 0.01, "uv": [9, 52], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "elbow_right",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-1.75, 3.5, 0],
|
||||
"name": "leg_back_left2",
|
||||
"parent": "leg_back_left",
|
||||
"pivot": [1.75, 3.5, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0.5, -3], "size": [3, 3, 3], "inflate": 0.01, "uv": [52, 14]}
|
||||
{"origin": [0.25, 0.5, 2], "size": [3, 3, 3], "uv": [9, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "front_foot_right",
|
||||
"parent": "elbow_right",
|
||||
"pivot": [-1.75, 1, -1],
|
||||
"name": "foot_back_left",
|
||||
"parent": "leg_back_left2",
|
||||
"pivot": [1.75, 0.5, 3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, -3.5], "size": [3, 1, 3], "uv": [52, 26]}
|
||||
{"origin": [0.25, 0, 1.5], "size": [3, 1, 3], "inflate": 0.01, "uv": [37, 11], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_leg_left",
|
||||
"parent": "body",
|
||||
"pivot": [1.75, 5, 5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, 3.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [36, 13], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "knee_left",
|
||||
"parent": "back_leg_left",
|
||||
"pivot": [1.75, 3.5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, 3.5], "size": [3, 3, 3], "uv": [0, 41]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_foot_left",
|
||||
"parent": "knee_left",
|
||||
"pivot": [1.75, 1, 5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, 3], "size": [3, 1, 3], "inflate": 0.01, "uv": [0, 51], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "body",
|
||||
"pivot": [1.75, 5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, -3], "size": [3, 3, 3], "uv": [52, 7], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "elbow_left",
|
||||
"parent": "leg_left",
|
||||
"pivot": [1.75, 3.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, -3], "size": [3, 3, 3], "inflate": 0.01, "uv": [52, 20], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "front_foot_left",
|
||||
"parent": "elbow_left",
|
||||
"pivot": [1.75, 1, -1],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, -3.5], "size": [3, 1, 3], "uv": [52, 30], "mirror": true}
|
||||
]
|
||||
"name": "locator_foot_secondary3",
|
||||
"parent": "foot_back_left",
|
||||
"pivot": [1.75, 0.5, 3],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary3": [1.75, 0.5, 3]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+499
-147
@@ -3,7 +3,7 @@
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.shinx",
|
||||
"identifier": "geometry.shinx_male",
|
||||
"texture_width": 64,
|
||||
"texture_height": 64,
|
||||
"visible_bounds_width": 4,
|
||||
@@ -13,279 +13,631 @@
|
||||
"bones": [
|
||||
{
|
||||
"name": "shinx",
|
||||
"pivot": [0, 0, 1.5]
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 20, 0],
|
||||
"locators": {
|
||||
"top": [0, 20, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "shinx",
|
||||
"pivot": [0, 6, 1.5]
|
||||
"pivot": [0, 6, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, -10],
|
||||
"locators": {
|
||||
"target": [0, 9, -10]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, 0],
|
||||
"locators": {
|
||||
"middle": [0, 9, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "hips",
|
||||
"parent": "body",
|
||||
"pivot": [0, 6, 3.5]
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 6, 4],
|
||||
"parent": "hips",
|
||||
"pivot": [0, 6, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, -3.5], "size": [6, 5, 5], "inflate": 0.01, "uv": [20, 25]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "waist",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.5, 0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, 0.5], "size": [6, 5, 6], "uv": [0, 17]}
|
||||
{"origin": [-3, 3.5, -1], "size": [6, 5, 6], "uv": [22, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "waist",
|
||||
"pivot": [0, 7.25, 5.5]
|
||||
"parent": "torso",
|
||||
"pivot": [0, 7.25, 4]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff_left",
|
||||
"parent": "tail",
|
||||
"pivot": [0.75, 7, 6],
|
||||
"pivot": [0.75, 7, 4.5],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 4.25, 5.5], "size": [0, 4, 3], "inflate": 0.01, "pivot": [2.17263, 6.93812, 7.51864], "rotation": [15, 22.75, 24.75], "uv": [0, 1]}
|
||||
{"origin": [1.5, 4.25, 4], "size": [0, 4, 3], "pivot": [2.17263, 6.93812, 6.01864], "rotation": [15, 22.75, 24.75], "uv": [0, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 8.5, 6.5],
|
||||
"pivot": [0, 8.5, 5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 8.5, 6.5], "size": [3, 0, 3], "inflate": 0.01, "pivot": [0, 8.5, 6.5], "rotation": [45, 0, 0], "uv": [15, 19]}
|
||||
{"origin": [-1.5, 8.5, 5], "size": [3, 0, 3], "pivot": [0, 8.5, 5], "rotation": [45, 0, 0], "uv": [53, 61]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_fluff_right",
|
||||
"parent": "tail",
|
||||
"pivot": [-0.75, 7, 6],
|
||||
"pivot": [-0.75, 7, 4.5],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 4.25, 5.5], "size": [0, 4, 3], "inflate": 0.01, "pivot": [-2.17263, 6.93812, 7.51864], "rotation": [15, -22.75, -24.75], "uv": [0, -3], "mirror": true}
|
||||
{"origin": [-1.5, 4.25, 4], "size": [0, 4, 3], "pivot": [-2.17263, 6.93812, 6.01864], "rotation": [15, -22.75, -24.75], "uv": [0, -3], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_1",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 7.25, 5.5],
|
||||
"pivot": [0, 7.25, 4],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 5.5], "size": [1, 1, 5], "uv": [39, 32]}
|
||||
{"origin": [-0.5, 6.75, 4], "size": [1, 1, 5], "uv": [40, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail_2",
|
||||
"parent": "tail_1",
|
||||
"pivot": [0, 7.25, 10.5],
|
||||
"pivot": [0, 7.25, 9],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 10.5], "size": [1, 1, 4], "inflate": 0.01, "uv": [43, 27]}
|
||||
{"origin": [-0.5, 6.75, 9], "size": [1, 1, 4], "inflate": 0.01, "uv": [47, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 7.25, 11],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail": [0, 7.25, 11]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail_3",
|
||||
"parent": "tail_2",
|
||||
"pivot": [0, 7.25, 14.5],
|
||||
"pivot": [0, 7.25, 13],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 6.75, 14.5], "size": [1, 1, 4], "uv": [40, 21]},
|
||||
{"origin": [-3.5, 3.75, 18.5], "size": [7, 7, 0], "inflate": 0.01, "uv": [38, 38]}
|
||||
{"origin": [-0.5, 6.75, 13], "size": [1, 1, 4], "uv": [53, 17]},
|
||||
{"origin": [-3.5, 3.75, 17.01], "size": [7, 7, 0], "uv": [36, 47]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail_3",
|
||||
"pivot": [0, 7.25, 17],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 7.25, 17]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 6, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3, 3.5, -5], "size": [6, 5, 5], "inflate": 0.01, "uv": [0, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8, -1.5],
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 7.5, -3],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 7.5, -3.5], "size": [5, 3, 4], "uv": [27, 0]}
|
||||
{"origin": [-2.5, 7, -5], "size": [5, 3, 4], "uv": [18, 54]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 9.25, -2.75],
|
||||
"pivot": [0, 9.75, -3.25]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 9.75, -3.25]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 8.75, -3.25],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 9.25, -7.75], "size": [9, 8, 9], "uv": [0, 0]},
|
||||
{"origin": [-0.5, 11.75, -8], "size": [1, 1, 1], "inflate": 0.03, "uv": [0, 55]},
|
||||
{"origin": [-5.5, 8.25, -7.25], "size": [3, 2, 0], "pivot": [-3.4, 8.94134, -7.25], "rotation": [0, 0, 32.5], "uv": [38, 50]},
|
||||
{"origin": [2.5, 8.25, -7.25], "size": [3, 2, 0], "pivot": [3.46194, 8.94134, -7.25], "rotation": [0, 0, -32.5], "uv": [38, 52], "mirror": true}
|
||||
{"origin": [-4.5, 8.75, -8.25], "size": [9, 8, 9], "uv": [0, 0]},
|
||||
{"origin": [3.5, 8.1, -5.75], "size": [3, 2, 0], "pivot": [4.46194, 8.79134, -5.75], "rotation": [0, 0, -55], "uv": [29, 50], "mirror": true},
|
||||
{"origin": [-6.5, 8.1, -5.75], "size": [3, 2, 0], "pivot": [-4.46194, 8.79134, -5.75], "rotation": [0, 0, 55], "uv": [22, 50]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.75, -3.75],
|
||||
"locators": {
|
||||
"item_hat": [0, 16.75, -3.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.75, -8.25],
|
||||
"locators": {
|
||||
"head": [0, 16.75, -8.25],
|
||||
"physical": [0, 16.75, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 9.75, -8.25],
|
||||
"locators": {
|
||||
"mouth": [0, 9.75, -8.25],
|
||||
"special": [0, 9.75, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 9.5, -8.25],
|
||||
"rotation": [90, 0, 45],
|
||||
"locators": {
|
||||
"item": [0, 9.5, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 12.25, -8.25],
|
||||
"locators": {
|
||||
"item_face": [0, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 12.25, -8.25],
|
||||
"locators": {
|
||||
"face": [0, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 11.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 11.25, -8.26], "size": [1, 1, 1], "uv": [22, 62]},
|
||||
{"origin": [-1, 11.75, -8.27], "size": [2, 1, 1], "uv": [27, 62]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "face",
|
||||
"pivot": [-2.88333, 12.75, -8.25]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.8, 12.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.01, "uv": [47, 23]},
|
||||
{"origin": [-3, 10.75, -8.25], "size": [1, 3, 1], "inflate": 0.01, "uv": [59, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "iris_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-3, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.02, "uv": [54, 23]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "iris_right",
|
||||
"pivot": [-2.75, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 11.25, -8.25], "size": [1, 2, 1], "inflate": 0.03, "uv": [54, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-2.7, 12.25, -8.25],
|
||||
"locators": {
|
||||
"eye1": [-2.7, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.4, 13.25, -8.18],
|
||||
"cubes": [
|
||||
{"origin": [-2.91, 12.75, -8.08], "size": [1, 1, 1], "inflate": 0.11, "uv": [51, 50]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "head",
|
||||
"pivot": [2.63333, 13.25, -7.75],
|
||||
"parent": "eyes",
|
||||
"pivot": [2.8, 12.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [1.9, 12.75, -7.75], "size": [1, 1, 0], "inflate": 0.03, "uv": [0, 63], "mirror": true},
|
||||
{"origin": [1.75, 11.75, -7.75], "size": [2, 3, 0], "inflate": 0.01, "uv": [4, 57], "mirror": true},
|
||||
{"origin": [2.25, 11.75, -7.75], "size": [1, 3, 0], "inflate": 0.02, "uv": [2, 60], "mirror": true}
|
||||
{"origin": [2.5, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.01, "uv": [47, 28], "mirror": true},
|
||||
{"origin": [2, 10.75, -8.25], "size": [1, 3, 1], "inflate": 0.01, "uv": [59, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right2",
|
||||
"name": "iris_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 13.25, -5.25],
|
||||
"pivot": [3, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 11.75, -5.75], "size": [2, 3, 1], "inflate": 0.01, "uv": [25, 35], "mirror": true}
|
||||
{"origin": [2, 10.75, -8.25], "size": [2, 3, 1], "inflate": 0.02, "uv": [54, 28], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "head",
|
||||
"pivot": [-2.63333, 13.25, -7.75],
|
||||
"name": "pupil_left",
|
||||
"parent": "iris_left",
|
||||
"pivot": [2.75, 12.25, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 11.75, -7.75], "size": [1, 3, 0], "inflate": 0.02, "uv": [0, 60]},
|
||||
{"origin": [-3.75, 11.75, -7.75], "size": [2, 3, 0], "inflate": 0.01, "uv": [0, 57]},
|
||||
{"origin": [-2.9, 12.75, -7.75], "size": [1, 1, 0], "inflate": 0.03, "uv": [0, 63]}
|
||||
{"origin": [2.25, 11.25, -8.25], "size": [1, 2, 1], "inflate": 0.03, "uv": [54, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [2.7, 12.25, -8.25],
|
||||
"locators": {
|
||||
"eye2": [2.7, 12.25, -8.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.4, 13.25, -8.18],
|
||||
"cubes": [
|
||||
{"origin": [1.91, 12.75, -8.08], "size": [1, 1, 1], "inflate": 0.11, "uv": [51, 52], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 13.25, -5.25],
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 11.75, -5.75], "size": [2, 3, 1], "inflate": 0.01, "uv": [31, 35]}
|
||||
{"origin": [-4.4, 10.75, -8.15], "size": [3, 3, 1], "inflate": 0.01, "uv": [36, 42]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 10.75, -8.15], "size": [3, 3, 1], "inflate": 0.01, "uv": [45, 42], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-4.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [36, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [45, 37], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_hurt_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [-4.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [36, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_hurt_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.9, 12.25, -7.65],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 11.25, -8.15], "size": [3, 2, 1], "inflate": 0.01, "uv": [45, 33], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "face",
|
||||
"pivot": [0, 9.75, -6.25]
|
||||
},
|
||||
{
|
||||
"name": "mouth_closed",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.25],
|
||||
"cubes": [
|
||||
{"origin": [-1, 9, -8.26], "size": [2, 1, 1], "uv": [36, 29]},
|
||||
{"origin": [-2, 9.5, -8.26], "size": [1, 1, 1], "uv": [42, 29]},
|
||||
{"origin": [1, 9.5, -8.26], "size": [1, 1, 1], "uv": [39, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_happy",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 9.75, -8.16], "size": [3, 1, 1], "uv": [55, 46]},
|
||||
{"origin": [-1, 8.75, -8.16], "size": [2, 1, 1], "uv": [57, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_angry",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1, 9.75, -8.16], "size": [2, 1, 1], "uv": [57, 50]},
|
||||
{"origin": [-1.5, 8.75, -8.16], "size": [3, 1, 1], "uv": [55, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1, 8.75, -8.16], "size": [2, 2, 1], "uv": [57, 54]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_wide",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 8.75, -8.16], "size": [3, 2, 1], "uv": [55, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ooo",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 9.75, -8.15],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 8.75, -8.16], "size": [1, 2, 1], "uv": [59, 57]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "face_ditto",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 11.95, -8.2]
|
||||
},
|
||||
{
|
||||
"name": "eyes_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 12.7, -8.22],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 12.2, -8.22], "size": [7, 1, 0], "uv": [50, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes_blink_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 12.7, -8.12],
|
||||
"cubes": [
|
||||
{"origin": [-4, 12.2, -8.12], "size": [8, 1, 0], "uv": [48, 6]},
|
||||
{"origin": [-3.5, 12.7, -8.13], "size": [7, 1, 0], "uv": [50, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 10.95, -8.2],
|
||||
"cubes": [
|
||||
{"origin": [-3, 10.2, -8.21], "size": [6, 1, 0], "uv": [52, 10]},
|
||||
{"origin": [-4, 10.7, -8.21], "size": [8, 1, 0], "uv": [48, 8]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 10.7, -8.11],
|
||||
"cubes": [
|
||||
{"origin": [-4, 9.7, -8.11], "size": [8, 2, 0], "uv": [48, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "head",
|
||||
"pivot": [4, 14.25, -0.25],
|
||||
"parent": "head_angle",
|
||||
"pivot": [4, 13.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [6, 11.75, -4.25], "size": [1, 7, 0], "inflate": 0.01, "uv": [58, 57], "mirror": true},
|
||||
{"origin": [4.5, 12.75, -4.25], "size": [4, 3, 0], "inflate": 0.02, "uv": [50, 58], "mirror": true},
|
||||
{"origin": [4, 11.25, -4.25], "size": [5, 8, 2], "uv": [36, 54], "mirror": true}
|
||||
{"origin": [6, 10.75, -4.76], "size": [1, 7, 1], "uv": [51, 55], "mirror": true},
|
||||
{"origin": [4.5, 11.75, -4.77], "size": [4, 3, 1], "uv": [37, 59], "mirror": true},
|
||||
{"origin": [4, 10.25, -4.75], "size": [5, 8, 2], "uv": [21, 39], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "head",
|
||||
"pivot": [-4, 14.25, -0.25],
|
||||
"parent": "head_angle",
|
||||
"pivot": [-4, 13.25, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [-9, 11.25, -4.25], "size": [5, 8, 2], "uv": [22, 54]},
|
||||
{"origin": [-8.5, 12.75, -4.25], "size": [4, 3, 0], "inflate": 0.02, "uv": [50, 61]},
|
||||
{"origin": [-7, 11.75, -4.25], "size": [1, 7, 0], "inflate": 0.01, "uv": [60, 57]}
|
||||
{"origin": [-9, 10.25, -4.75], "size": [5, 8, 2], "uv": [21, 29]},
|
||||
{"origin": [-8.5, 11.75, -4.77], "size": [4, 3, 1], "uv": [37, 55]},
|
||||
{"origin": [-7, 10.75, -4.76], "size": [1, 7, 1], "uv": [47, 55]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fluff",
|
||||
"parent": "head",
|
||||
"pivot": [0, 17, -5],
|
||||
"name": "head_fluff",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 16.5, -5.5],
|
||||
"cubes": [
|
||||
{"origin": [-4, 17, -6.25], "size": [5, 4, 0], "inflate": 0.01, "pivot": [0.5, 18.25, -5.75], "rotation": [0, 90, 0], "uv": [24, 50]},
|
||||
{"origin": [0.5, 17, -6.25], "size": [1, 2, 0], "pivot": [0.5, 18.25, -5.75], "rotation": [0, 90, 0], "uv": [28, 48]}
|
||||
{"origin": [0, 16.75, -8.75], "size": [0, 4, 5], "uv": [28, -4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "open_mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 10.25, -5.75],
|
||||
"name": "ftorso2",
|
||||
"parent": "hips",
|
||||
"pivot": [0, 6, -0.5]
|
||||
},
|
||||
{
|
||||
"name": "legs_front",
|
||||
"parent": "ftorso2",
|
||||
"pivot": [0, 5, -3]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right",
|
||||
"parent": "legs_front",
|
||||
"pivot": [-1.75, 5, -3],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 10.25, -5.75], "size": [3, 1, 0], "inflate": 0.02, "uv": [16, 63]},
|
||||
{"origin": [-1, 9.25, -5.75], "size": [2, 1, 0], "inflate": 0.01, "uv": [12, 63]}
|
||||
{"origin": [-3.25, 3.5, -4.5], "size": [3, 3, 3], "uv": [0, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "closed_mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 10.25, -7.75],
|
||||
"name": "leg_front_right2",
|
||||
"parent": "leg_front_right",
|
||||
"pivot": [-1.75, 3.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [-2, 9.25, -7.75], "size": [4, 2, 0], "inflate": 0.03, "uv": [9, 58]}
|
||||
{"origin": [-3.25, 0.5, -4.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [0, 43]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_leg_right",
|
||||
"name": "foot_front_right",
|
||||
"parent": "leg_front_right2",
|
||||
"pivot": [-1.75, 0.5, -2.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, -5], "size": [3, 1, 3], "uv": [0, 28]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_front_right",
|
||||
"pivot": [-1.75, 0.5, -3.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_primary": [-1.75, 0.5, -3.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left",
|
||||
"parent": "legs_front",
|
||||
"pivot": [1.75, 5, -3],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, -4.5], "size": [3, 3, 3], "uv": [9, 40], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left2",
|
||||
"parent": "leg_front_left",
|
||||
"pivot": [1.75, 3.5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, -4.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [9, 46], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_front_left",
|
||||
"parent": "leg_front_left2",
|
||||
"pivot": [1.75, 0.5, -2.75],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, -5], "size": [3, 1, 3], "uv": [0, 32], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary1",
|
||||
"parent": "foot_front_left",
|
||||
"pivot": [1.75, 0.5, -3.5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary1": [1.75, 0.5, -3.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "legs_back",
|
||||
"parent": "body",
|
||||
"pivot": [-1.75, 5, 5],
|
||||
"pivot": [0, 5, 3.5]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_right",
|
||||
"parent": "legs_back",
|
||||
"pivot": [-1.75, 5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3.5, 3.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [36, 6]}
|
||||
{"origin": [-3.25, 3.5, 2], "size": [3, 3, 3], "inflate": 0.01, "uv": [0, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "knee_right",
|
||||
"parent": "back_leg_right",
|
||||
"pivot": [-1.75, 3.5, 3.5],
|
||||
"name": "leg_back_right2",
|
||||
"parent": "leg_back_right",
|
||||
"pivot": [-1.75, 3.5, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0.5, 3.5], "size": [3, 3, 3], "uv": [12, 35]}
|
||||
{"origin": [-3.25, 0.5, 2], "size": [3, 3, 3], "uv": [0, 55]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_foot_right",
|
||||
"parent": "knee_right",
|
||||
"pivot": [0, 1, 5.5],
|
||||
"name": "foot_back_right",
|
||||
"parent": "leg_back_right2",
|
||||
"pivot": [-1.7, 0.5, 3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, 3], "size": [3, 1, 3], "inflate": 0.01, "uv": [12, 47]}
|
||||
{"origin": [-3.25, 0, 1.5], "size": [3, 1, 3], "inflate": 0.01, "uv": [9, 27]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "body",
|
||||
"pivot": [-1.75, 5, -1.5],
|
||||
"name": "locator_foot_secondary2",
|
||||
"parent": "foot_back_right",
|
||||
"pivot": [-1.75, 0.5, 3],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary2": [-1.75, 0.5, 3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left",
|
||||
"parent": "legs_back",
|
||||
"pivot": [1.75, 5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 3.5, -3], "size": [3, 3, 3], "uv": [52, 0]}
|
||||
{"origin": [0.25, 3.5, 2], "size": [3, 3, 3], "inflate": 0.01, "uv": [9, 52], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "elbow_right",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-1.75, 3.5, 0],
|
||||
"name": "leg_back_left2",
|
||||
"parent": "leg_back_left",
|
||||
"pivot": [1.75, 3.5, 2],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0.5, -3], "size": [3, 3, 3], "inflate": 0.01, "uv": [52, 14]}
|
||||
{"origin": [0.25, 0.5, 2], "size": [3, 3, 3], "uv": [9, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "front_foot_right",
|
||||
"parent": "elbow_right",
|
||||
"pivot": [-1.75, 1, -1],
|
||||
"name": "foot_back_left",
|
||||
"parent": "leg_back_left2",
|
||||
"pivot": [1.75, 0.5, 3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 0, -3.5], "size": [3, 1, 3], "uv": [52, 26]}
|
||||
{"origin": [0.25, 0, 1.5], "size": [3, 1, 3], "inflate": 0.01, "uv": [9, 31], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_leg_left",
|
||||
"parent": "body",
|
||||
"pivot": [1.75, 5, 5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, 3.5], "size": [3, 3, 3], "inflate": 0.01, "uv": [36, 13], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "knee_left",
|
||||
"parent": "back_leg_left",
|
||||
"pivot": [1.75, 3.5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, 3.5], "size": [3, 3, 3], "uv": [12, 41]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back_foot_left",
|
||||
"parent": "knee_left",
|
||||
"pivot": [1.75, 1, 5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, 3], "size": [3, 1, 3], "inflate": 0.01, "uv": [12, 51], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "body",
|
||||
"pivot": [1.75, 5, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 3.5, -3], "size": [3, 3, 3], "uv": [52, 7], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "elbow_left",
|
||||
"parent": "leg_left",
|
||||
"pivot": [1.75, 3.5, 0],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0.5, -3], "size": [3, 3, 3], "inflate": 0.01, "uv": [52, 20], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "front_foot_left",
|
||||
"parent": "elbow_left",
|
||||
"pivot": [1.75, 1, -1],
|
||||
"cubes": [
|
||||
{"origin": [0.25, 0, -3.5], "size": [3, 1, 3], "uv": [52, 30], "mirror": true}
|
||||
]
|
||||
"name": "locator_foot_secondary3",
|
||||
"parent": "foot_back_left",
|
||||
"pivot": [1.75, 0.5, 3],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary3": [1.75, 0.5, 3]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+668
-303
File diff suppressed because it is too large
Load Diff
+668
-303
File diff suppressed because it is too large
Load Diff
+762
-291
File diff suppressed because it is too large
Load Diff
+764
-294
File diff suppressed because it is too large
Load Diff
+29
-21
@@ -112,7 +112,7 @@
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 9, -0.25],
|
||||
"pivot": [0, 8.25, -0.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 7.5, -3.75], "size": [8, 6, 7], "uv": [0, 0]},
|
||||
{"origin": [-1.25, 9.25, -4.75], "size": [2, 2, 1], "inflate": 0.01, "uv": [23, 1]},
|
||||
@@ -151,67 +151,75 @@
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [2.75, 11, -3.76],
|
||||
"rotation": [0, 0, -7.5],
|
||||
"pivot": [2.75, 10.75, -3.76]
|
||||
},
|
||||
{
|
||||
"name": "iris_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 10.875, -3.765],
|
||||
"cubes": [
|
||||
{"origin": [2, 10, -3.76], "size": [1.5, 2, 0], "uv": [0, 0]}
|
||||
{"origin": [2, 9.75, -3.76], "size": [1.5, 2, 0], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 11.25, -3.77],
|
||||
"parent": "iris_left",
|
||||
"pivot": [2.75, 11, -3.77],
|
||||
"cubes": [
|
||||
{"origin": [2.25, 10.5, -3.77], "size": [1, 1, 0], "uv": [2, 0]}
|
||||
{"origin": [2.25, 10.25, -3.77], "size": [1, 1, 0], "uv": [2, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [2.75, 11, -4],
|
||||
"pivot": [2.75, 10.75, -4],
|
||||
"locators": {
|
||||
"eye2": [2.75, 11, -4]
|
||||
"eye2": [2.75, 10.75, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2.75, 11, -3.17],
|
||||
"pivot": [2.75, 10.75, -3.17],
|
||||
"cubes": [
|
||||
{"origin": [1.75, 10, -3.67], "size": [2, 2, 1], "inflate": 0.01, "uv": [1, 3]}
|
||||
{"origin": [1.75, 9.75, -3.67], "size": [2, 2, 1], "inflate": 0.01, "uv": [1, 3]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-2.75, 11, -3.76],
|
||||
"rotation": [0, 0, 7.5],
|
||||
"pivot": [-2.75, 10.75, -3.76]
|
||||
},
|
||||
{
|
||||
"name": "iris_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 10.875, -3.765],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 10, -3.76], "size": [1.5, 2, 0], "uv": [0, 2], "mirror": true}
|
||||
{"origin": [-3.5, 9.75, -3.76], "size": [1.5, 2, 0], "uv": [0, 2], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 11.25, -3.77],
|
||||
"parent": "iris_right",
|
||||
"pivot": [-2.75, 11, -3.77],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 10.5, -3.77], "size": [1, 1, 0], "uv": [2, 1], "mirror": true}
|
||||
{"origin": [-3.25, 10.25, -3.77], "size": [1, 1, 0], "uv": [2, 1], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-2.75, 11, -4],
|
||||
"pivot": [-2.75, 10.75, -4],
|
||||
"locators": {
|
||||
"eye1": [-2.75, 11, -4]
|
||||
"eye1": [-2.75, 10.75, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.75, 11, -3.17],
|
||||
"pivot": [-2.75, 10.75, -3.17],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 10, -3.67], "size": [2, 2, 1], "inflate": 0.01, "uv": [1, 15], "mirror": true}
|
||||
{"origin": [-3.75, 9.75, -3.67], "size": [2, 2, 1], "inflate": 0.01, "uv": [1, 15], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+299
-246
@@ -39,9 +39,9 @@
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 13, -5.5],
|
||||
"pivot": [0, 14, -5.5],
|
||||
"locators": {
|
||||
"target": [0, 13, -5.5]
|
||||
"target": [0, 14, -5.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -55,537 +55,590 @@
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9.8, -0.3],
|
||||
"pivot": [0, 9.9, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 9.8, -1.8], "size": [3, 5, 3], "inflate": 0.01, "uv": [0, 14]}
|
||||
{"origin": [-1.5, 9.9, -1.8], "size": [3, 5, 3], "uv": [10, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 11.3, 0.7],
|
||||
"pivot": [0, 11.4, 0.7],
|
||||
"cubes": [
|
||||
{"origin": [0, 8.8, 0.7], "size": [0, 3, 3], "uv": [57, 34]}
|
||||
{"origin": [0, 8.9, 0.7], "size": [0, 3, 3], "uv": [56, 29]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 8.8, 3.7],
|
||||
"pivot": [0, 8.9, 3.7],
|
||||
"cubes": [
|
||||
{"origin": [0, 6.8, 3.7], "size": [0, 4, 4], "inflate": 0.01, "uv": [54, 27]}
|
||||
{"origin": [0, 6.9, 3.7], "size": [0, 4, 4], "inflate": 0.01, "uv": [45, 27]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail2",
|
||||
"pivot": [0, 9.3, 6.1],
|
||||
"pivot": [0, 9.4, 6.1],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail": [0, 9.3, 6.1]
|
||||
"tail": [0, 9.4, 6.1]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail3",
|
||||
"parent": "tail2",
|
||||
"pivot": [0, 6.8, 7.7],
|
||||
"pivot": [0, 6.9, 7.7],
|
||||
"cubes": [
|
||||
{"origin": [0, 4.8, 7.7], "size": [0, 6, 4], "inflate": 0.02, "uv": [45, 27]}
|
||||
{"origin": [0, 4.9, 7.7], "size": [0, 6, 4], "uv": [56, 40]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail3",
|
||||
"pivot": [0, 4.8, 11.2],
|
||||
"pivot": [0, 4.9, 11.2],
|
||||
"rotation": [-90, 0, 180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 4.8, 11.2]
|
||||
"tail_tip": [0, 4.9, 11.2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso2",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 14.8, -0.3],
|
||||
"pivot": [0, 15.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-1, 14, -1.3], "size": [2, 3, 2], "uv": [0, 27]}
|
||||
{"origin": [-1, 14.5, -1.3], "size": [2, 3, 2], "inflate": 0.05, "uv": [22, 14]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 16.4, -0.3]
|
||||
"pivot": [0, 15.9, -0.3]
|
||||
},
|
||||
{
|
||||
"name": "arm_left",
|
||||
"parent": "arms",
|
||||
"pivot": [1, 16.8, -0.3],
|
||||
"pivot": [1, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [0.5, 15.8, -0.8], "size": [4, 1, 1], "uv": [22, 24], "mirror": true}
|
||||
{"origin": [0.5, 15.3, -0.8], "size": [4, 1, 1], "uv": [3, 14], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_left2",
|
||||
"parent": "arm_left",
|
||||
"pivot": [4.5, 16.3, 0.2],
|
||||
"pivot": [4.5, 15.8, 0.2],
|
||||
"cubes": [
|
||||
{"origin": [4.5, 15.8, -1.3], "size": [3, 1, 2], "inflate": 0.01, "uv": [40, 24], "mirror": true}
|
||||
{"origin": [4.5, 15.3, -1.3], "size": [3, 1, 2], "inflate": 0.01, "uv": [0, 18], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_spike_left",
|
||||
"parent": "arm_left2",
|
||||
"pivot": [7.5, 16.6, -0.3],
|
||||
"pivot": [7.5, 16.1, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [6, 16.1, -0.8], "size": [3, 1, 1], "uv": [35, 31], "mirror": true}
|
||||
{"origin": [6, 15.6, -0.8], "size": [3, 1, 1], "uv": [51, 8], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_left",
|
||||
"parent": "arm_left2",
|
||||
"pivot": [7.5, 16.8, -0.3],
|
||||
"pivot": [7.5, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [7.5, 15.8, -1.8], "size": [2, 1, 3], "inflate": 0.01, "uv": [48, 21], "mirror": true}
|
||||
{"origin": [7.5, 15.3, -1.8], "size": [2, 1, 3], "inflate": 0.01, "uv": [29, 22], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "hand_left",
|
||||
"pivot": [9, 16.3, -0.3],
|
||||
"pivot": [9, 15.8, -0.3],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"hand_secondary": [9, 16.3, -0.3]
|
||||
"hand_secondary": [9, 15.8, -0.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "fingers_left",
|
||||
"parent": "hand_left",
|
||||
"pivot": [9.5, 16.8, -0.3],
|
||||
"pivot": [9.5, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [9.5, 15.8, -1.8], "size": [2, 1, 3], "uv": [47, 25], "mirror": true}
|
||||
{"origin": [9.5, 15.3, -1.8], "size": [2, 1, 3], "uv": [3, 21], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right",
|
||||
"parent": "arms",
|
||||
"pivot": [-1, 16.8, -0.3],
|
||||
"pivot": [-1, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 15.8, -0.8], "size": [4, 1, 1], "uv": [12, 24]}
|
||||
{"origin": [-4.5, 15.3, -0.8], "size": [4, 1, 1], "uv": [0, 16]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_right2",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-4.5, 16.3, 0.2],
|
||||
"pivot": [-4.5, 15.8, 0.2],
|
||||
"cubes": [
|
||||
{"origin": [-7.5, 15.8, -1.3], "size": [3, 1, 2], "inflate": 0.01, "uv": [30, 24]}
|
||||
{"origin": [-7.5, 15.3, -1.3], "size": [3, 1, 2], "inflate": 0.01, "uv": [28, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arm_spike_right",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-7.5, 16.6, -0.3],
|
||||
"pivot": [-7.5, 16.1, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-9, 16.1, -0.8], "size": [3, 1, 1], "uv": [27, 31]}
|
||||
{"origin": [-9, 15.6, -0.8], "size": [3, 1, 1], "uv": [52, 17]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "hand_right",
|
||||
"parent": "arm_right2",
|
||||
"pivot": [-7.5, 16.8, -0.3],
|
||||
"pivot": [-7.5, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-9.5, 15.8, -1.8], "size": [2, 1, 3], "inflate": 0.01, "uv": [22, 27]}
|
||||
{"origin": [-9.5, 15.3, -1.8], "size": [2, 1, 3], "inflate": 0.01, "uv": [45, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-9, 16.3, -0.3],
|
||||
"pivot": [-9, 15.8, -0.3],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"hand_primary": [-9, 16.3, -0.3],
|
||||
"physical": [-9, 16.3, -0.3]
|
||||
"hand_primary": [-9, 15.8, -0.3],
|
||||
"physical": [-9, 15.8, -0.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_special",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-9, 16.3, -0.3],
|
||||
"pivot": [-9, 15.8, -0.3],
|
||||
"locators": {
|
||||
"special": [-9, 16.3, -0.3]
|
||||
"special": [-9, 15.8, -0.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-9.5, 15.8, -0.3],
|
||||
"pivot": [-9.5, 15.3, -0.3],
|
||||
"locators": {
|
||||
"item": [-9.5, 15.8, -0.3]
|
||||
"item": [-9.5, 15.3, -0.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "fingers_right",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-9.5, 16.8, -0.3],
|
||||
"pivot": [-9.5, 16.3, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-11.5, 15.8, -1.8], "size": [2, 1, 3], "uv": [32, 27]}
|
||||
{"origin": [-11.5, 15.3, -1.8], "size": [2, 1, 3], "uv": [12, 22]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso2",
|
||||
"pivot": [0, 16.5, -0.3],
|
||||
"pivot": [0, 16.25, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 16.5, -1.8], "size": [3, 2, 3], "uv": [0, 22]}
|
||||
{"origin": [-1.5, 16.35, -1.8], "size": [3, 2, 3], "inflate": 0.05, "uv": [52, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 17.5, -0.3]
|
||||
"pivot": [0, 17.25, -0.3]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0.5, 20.9, -0.8]
|
||||
"pivot": [0.5, 20.65, -1.3]
|
||||
},
|
||||
{
|
||||
"name": "head_correction",
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0.5, 20.9, -0.8],
|
||||
"pivot": [0, 18.65, -0.8],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 17.5, -3.8], "size": [7, 7, 7], "uv": [0, 0]},
|
||||
{"origin": [-3.5, 18.9, -3.8], "size": [7, 4, 5], "inflate": 0.005, "uv": [3, 27]}
|
||||
{"origin": [-3.5, 17.25, -3.8], "size": [7, 7, 7], "inflate": -0.01, "uv": [0, 0]},
|
||||
{"origin": [-3.5, 18.85, -3.8], "size": [7, 4, 5], "uv": [28, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 24.5, -2.3],
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 24.25, -2.8],
|
||||
"locators": {
|
||||
"head": [0, 24.5, -2.3]
|
||||
"head": [0, 24.25, -2.8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 24.5, -0.3],
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 24.25, -0.8],
|
||||
"locators": {
|
||||
"item_hat": [0, 24.5, -0.3]
|
||||
"item_hat": [0, 24.25, -0.8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 20.9, -3.8],
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 20.65, -4.3],
|
||||
"locators": {
|
||||
"item_face": [0, 20.9, -3.8]
|
||||
"item_face": [0, 20.65, -4.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 20.9, -3.8],
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 20.65, -4.3],
|
||||
"locators": {
|
||||
"face": [0, 20.9, -3.8]
|
||||
"face": [0, 20.65, -4.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 17.5, -3.8],
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 17.25, -4.3],
|
||||
"locators": {
|
||||
"mouth": [0, 17.5, -3.8]
|
||||
"mouth": [0, 17.25, -4.3]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 20, -3.8]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 20.9, -3.8]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-3.5, 20.9, -3.8]
|
||||
},
|
||||
{
|
||||
"name": "eye_right_core",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.5, 20.9, -3.8],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 19.9, -3.8], "size": [2, 1, 1], "inflate": 0.015, "uv": [0, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right_emote",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.5, 20.9, -3.8],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 20.9, -3.8], "size": [2, 1, 2], "inflate": 0.02, "uv": [55, 21]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right_emote2",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2, 20.9, -3.8],
|
||||
"cubes": [
|
||||
{"origin": [-2, 19.9, -3.82], "size": [1, 1, 0], "uv": [5, 4], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right_emote3",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2, 20.9, -3.7],
|
||||
"cubes": [
|
||||
{"origin": [-2, 20.9, -3.72], "size": [1, 1, 0], "uv": [5, 2], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2, 20.9, -3.31],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 19.9, -3.8], "size": [1, 2, 1], "inflate": 0.025, "uv": [21, 4]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-2, 20.9, -3.8],
|
||||
"locators": {
|
||||
"eye1": [-2, 20.9, -3.8]
|
||||
}
|
||||
"parent": "face",
|
||||
"pivot": [0, 21.25, -3.8]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [3.5, 20.9, -3.8]
|
||||
},
|
||||
{
|
||||
"name": "eye_left_core",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.5, 20.9, -3.8],
|
||||
"pivot": [3.5, 20.775, -3.8],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 19.9, -3.8], "size": [2, 1, 1], "inflate": 0.015, "uv": [0, 4], "mirror": true}
|
||||
{"origin": [1.51, 19.775, -3.81], "size": [2, 2, 2], "uv": [0, 37]},
|
||||
{"origin": [1, 19.775, -3.81], "size": [1, 1, 0], "uv": [0, 38]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left_emote",
|
||||
"name": "eye_angry_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.5, 20.9, -3.8],
|
||||
"pivot": [1.5, 21.3625, -3.22],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 20.9, -3.8], "size": [2, 1, 2], "inflate": 0.02, "uv": [54, 25], "mirror": true}
|
||||
{"origin": [1.5, 21.275, -3.72], "size": [1, 1, 1], "inflate": 0.01, "uv": [41, 36]},
|
||||
{"origin": [0.5, 20.775, -3.72], "size": [1, 1, 1], "inflate": 0.01, "uv": [45, 36]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left_emote2",
|
||||
"name": "eye_sad_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2, 20.9, -3.8],
|
||||
"pivot": [2.91, 21.275, -2.72],
|
||||
"cubes": [
|
||||
{"origin": [1, 19.9, -3.82], "size": [1, 1, 0], "uv": [2, 6]}
|
||||
{"origin": [2.41, 20.275, -3.72], "size": [1, 2, 2], "inflate": 0.01, "uv": [50, 36]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left_emote3",
|
||||
"name": "eye_unamused_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2, 20.9, -3.8],
|
||||
"pivot": [3.41, 20.775, -2.72],
|
||||
"cubes": [
|
||||
{"origin": [1, 20.9, -3.72], "size": [1, 1, 0], "uv": [0, 6]}
|
||||
{"origin": [1.41, 20.775, -3.72], "size": [2, 1, 2], "inflate": 0.01, "uv": [0, 47]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.5, 21.275, -3.71],
|
||||
"cubes": [
|
||||
{"origin": [1, 20.775, -3.71], "size": [1, 1, 0], "uv": [0, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2, 20.9, -3.31],
|
||||
"pivot": [2, 20.775, -3.3],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 19.9, -3.8], "size": [1, 2, 1], "inflate": 0.025, "uv": [25, 4]}
|
||||
{"origin": [1.5, 19.775, -3.82], "size": [1, 2, 1], "uv": [9, 38]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [2, 20.9, -3.8],
|
||||
"pivot": [2, 20.775, -3.8],
|
||||
"locators": {
|
||||
"eye2": [2, 20.9, -3.8]
|
||||
"eye2": [2, 20.775, -3.8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"name": "pupil_aura_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [2, 20.775, -3.2],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 19.775, -3.7], "size": [1, 2, 1], "inflate": 0.025, "uv": [17, 38]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-1.9, 20.9, -2.7]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right_emote",
|
||||
"parent": "eyelid_right",
|
||||
"pivot": [-1.3, 19.9, -3.7],
|
||||
"pivot": [-3.5, 20.775, -3.8],
|
||||
"cubes": [
|
||||
{"origin": [-1.8, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [0, 36]}
|
||||
{"origin": [-3.51, 19.775, -3.81], "size": [2, 2, 2], "uv": [0, 42], "mirror": true},
|
||||
{"origin": [-2, 19.775, -3.81], "size": [1, 1, 0], "uv": [0, 43], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right_emote2",
|
||||
"parent": "eyelid_right",
|
||||
"pivot": [-1.9, 19.9, -3.7],
|
||||
"name": "eye_angry_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.5, 21.3625, -3.22],
|
||||
"cubes": [
|
||||
{"origin": [-2.4, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [0, 38]}
|
||||
{"origin": [-2.5, 21.275, -3.72], "size": [1, 1, 1], "inflate": 0.01, "uv": [41, 38], "mirror": true},
|
||||
{"origin": [-1.5, 20.775, -3.72], "size": [1, 1, 1], "inflate": 0.01, "uv": [45, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right_emote3",
|
||||
"parent": "eyelid_right",
|
||||
"pivot": [-2.9, 19.9, -3.7],
|
||||
"name": "eye_sad_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2.91, 21.275, -2.72],
|
||||
"cubes": [
|
||||
{"origin": [-3.4, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [0, 40]}
|
||||
{"origin": [-3.41, 20.275, -3.72], "size": [1, 2, 2], "inflate": 0.01, "uv": [57, 36], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_unamused_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-3.41, 20.775, -2.72],
|
||||
"cubes": [
|
||||
{"origin": [-3.41, 20.775, -3.72], "size": [2, 1, 2], "inflate": 0.01, "uv": [0, 51], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_emote_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.5, 21.275, -3.71],
|
||||
"cubes": [
|
||||
{"origin": [-2, 20.775, -3.71], "size": [1, 1, 0], "uv": [0, 42], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pupil_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2, 20.775, -3.3],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 19.775, -3.82], "size": [1, 2, 1], "uv": [13, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-2, 20.775, -3.8],
|
||||
"locators": {
|
||||
"eye1": [-2, 20.775, -3.8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "pupil_aura_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-2, 20.775, -3.2],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 19.775, -3.7], "size": [1, 2, 1], "inflate": 0.025, "uv": [21, 38], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [1.9, 20.9, -2.7]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left_emote",
|
||||
"parent": "eyelid_left",
|
||||
"pivot": [1.3, 19.9, -3.7],
|
||||
"pivot": [1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [0.8, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [4, 36]}
|
||||
{"origin": [0.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 33]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left_emote2",
|
||||
"parent": "eyelid_left",
|
||||
"pivot": [1.9, 19.9, -3.7],
|
||||
"name": "eyelid_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [1.4, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [4, 38]}
|
||||
{"origin": [-3.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 45], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left_emote3",
|
||||
"parent": "eyelid_left",
|
||||
"pivot": [2.9, 19.9, -3.7],
|
||||
"name": "eyelid_happy_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [2.4, 19.9, -3.7], "size": [1, 1, 1], "inflate": 0.015, "uv": [4, 40]}
|
||||
{"origin": [0.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "snout",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 20.2, -3.8],
|
||||
"rotation": [8, 0, 0],
|
||||
"name": "eyelid_happy_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 18.22, -5.8], "size": [3, 2, 2], "inflate": 0.02, "uv": [21, 0]}
|
||||
{"origin": [-3.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 49], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_upper",
|
||||
"parent": "snout",
|
||||
"pivot": [0, 18.1, -4.8],
|
||||
"locators": {
|
||||
"jaw1": [0, 18.1, -4.8]
|
||||
}
|
||||
"name": "eyelid_recoil_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [0.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 41]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_recoil_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-1.9, 20.85, -2.7],
|
||||
"cubes": [
|
||||
{"origin": [-3.4, 19.85, -3.7], "size": [3, 2, 2], "inflate": 0.01, "uv": [30, 53], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "head_correction",
|
||||
"pivot": [1, 16.5, -2.8]
|
||||
},
|
||||
{
|
||||
"name": "jaw",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 17.51, -3.69],
|
||||
"cubes": [
|
||||
{"origin": [-1, 17.5, -4.8], "size": [2, 1, 1], "uv": [0, 0]}
|
||||
]
|
||||
"parent": "face",
|
||||
"pivot": [1, 16.25, -2.8]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 18.6, -3.7],
|
||||
"pivot": [0, 18.35, -3.7],
|
||||
"cubes": [
|
||||
{"origin": [-1, 17.6, -3.71], "size": [2, 1, 0], "uv": [0, 46]},
|
||||
{"origin": [-1.5, 18.6, -3.71], "size": [3, 1, 0], "uv": [0, 44]}
|
||||
{"origin": [-1, 17.35, -3.71], "size": [2, 1, 0], "uv": [20, 36]},
|
||||
{"origin": [-1.5, 18.35, -3.71], "size": [3, 1, 0], "uv": [20, 34]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open2",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 18.6, -3.7],
|
||||
"pivot": [0, 18.35, -3.7],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 17.6, -3.72], "size": [3, 1, 0], "uv": [0, 45]},
|
||||
{"origin": [-1.5, 18.6, -3.72], "size": [3, 1, 0], "uv": [0, 43]}
|
||||
{"origin": [-1.5, 17.35, -3.72], "size": [3, 1, 0], "uv": [20, 35]},
|
||||
{"origin": [-1.5, 18.35, -3.72], "size": [3, 1, 0], "uv": [17, 32]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "teeth_clench",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 18.1, -3.71],
|
||||
"pivot": [0, 17.85, -3.71],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 17.6, -3.71], "size": [3, 1, 0], "uv": [0, 42]}
|
||||
{"origin": [-1.5, 17.35, -3.71], "size": [3, 1, 0], "uv": [17, 31]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_lower",
|
||||
"parent": "mouth",
|
||||
"pivot": [0, 17.2, -3.8],
|
||||
"pivot": [0, 16.95, -3.8],
|
||||
"locators": {
|
||||
"jaw2": [0, 17.2, -3.8]
|
||||
"jaw2": [0, 16.95, -3.8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "snout",
|
||||
"parent": "face",
|
||||
"pivot": [0, 20.1, -3.8],
|
||||
"rotation": [7.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 17.85, -5.8], "size": [3, 2, 2], "inflate": -0.01, "uv": [23, 1]},
|
||||
{"origin": [-1.5, 19.2, -5.8], "size": [3, 1, 2], "uv": [47, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_jaw_upper",
|
||||
"parent": "snout",
|
||||
"pivot": [0, 18.25, -4.9],
|
||||
"locators": {
|
||||
"jaw1": [0, 18.25, -4.9]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "face_ditto",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 19.75, -3.7]
|
||||
},
|
||||
{
|
||||
"name": "eyes_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 20.35, -3.72],
|
||||
"cubes": [
|
||||
{"origin": [-3, 19.85, -3.72], "size": [6, 1, 0], "uv": [42, 41]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes_blink_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 20.35, -3.62],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 19.85, -3.62], "size": [7, 1, 0], "uv": [41, 43]},
|
||||
{"origin": [-3, 20.35, -3.63], "size": [6, 1, 0], "uv": [42, 44]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 18.25, -3.7],
|
||||
"cubes": [
|
||||
{"origin": [-2, 17.5, -3.71], "size": [4, 1, 0], "uv": [44, 46]},
|
||||
{"origin": [-3, 18, -3.71], "size": [6, 1, 0], "uv": [42, 45]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 18.5, -3.61],
|
||||
"cubes": [
|
||||
{"origin": [-3, 17.5, -3.61], "size": [6, 2, 0], "uv": [41, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ears",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 22, -0.05]
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 22, 0.45]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "ears",
|
||||
"pivot": [2.5, 24.25, -0.3],
|
||||
"pivot": [2.5, 24.25, 0.2],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 22.75, -1.8], "size": [2, 3, 3], "inflate": -0.01, "pivot": [2.5, 24.25, -0.3], "rotation": [45, 0, 0], "uv": [42, 15]}
|
||||
{"origin": [1.49, 22.75, -1.3], "size": [2, 3, 3], "inflate": -0.01, "pivot": [2.5, 24.25, 0.2], "rotation": [45, 0, 0], "uv": [54, 2]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "ears",
|
||||
"pivot": [-2.5, 24.25, -0.3],
|
||||
"pivot": [-2.5, 24.25, 0.2],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 22.75, -1.8], "size": [2, 3, 3], "inflate": -0.01, "pivot": [-2.5, 24.25, -0.3], "rotation": [45, 0, 0], "uv": [52, 15], "mirror": true}
|
||||
{"origin": [-3.49, 22.75, -1.3], "size": [2, 3, 3], "inflate": -0.01, "pivot": [-2.5, 24.25, 0.2], "rotation": [45, 0, 0], "uv": [45, 16], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "aura_sensors",
|
||||
"parent": "head_correction",
|
||||
"pivot": [0, 20.6, 0.85]
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 20.5, 1.35]
|
||||
},
|
||||
{
|
||||
"name": "aura_sensor_left",
|
||||
"parent": "aura_sensors",
|
||||
"pivot": [3.5, 22.6, -0.8],
|
||||
"pivot": [3.5, 22.5, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 20.6, -1.8], "size": [3, 2, 2], "uv": [34, 14]}
|
||||
{"origin": [3.5, 20.5, -1.3], "size": [3, 2, 2], "uv": [28, 9]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "aura_sensor_left2",
|
||||
"parent": "aura_sensor_left",
|
||||
"pivot": [6, 21.6, -0.8],
|
||||
"pivot": [6, 21.5, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [6, 20.1, -2.3], "size": [5, 3, 3], "uv": [45, 0]}
|
||||
{"origin": [6, 20, -1.8], "size": [6, 3, 3], "inflate": 0.1, "uv": [45, 10]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "aura_sensor_right",
|
||||
"parent": "aura_sensors",
|
||||
"pivot": [-3.5, 22.6, -0.8],
|
||||
"pivot": [-3.5, 22.5, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, 20.6, -1.8], "size": [3, 2, 2], "uv": [24, 14], "mirror": true}
|
||||
{"origin": [-6.5, 20.5, -1.3], "size": [3, 2, 2], "uv": [38, 9], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "aura_sensor_right2",
|
||||
"parent": "aura_sensor_right",
|
||||
"pivot": [-6, 21.6, -0.8],
|
||||
"pivot": [-6, 21.5, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-11, 20.1, -2.3], "size": [5, 3, 3], "uv": [29, 1], "mirror": true}
|
||||
{"origin": [-12, 20, -1.8], "size": [6, 3, 3], "inflate": 0.1, "uv": [30, 13], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -596,103 +649,103 @@
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "legs",
|
||||
"pivot": [1, 11.4, -0.3],
|
||||
"pivot": [1.5, 11.4, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 8.2, -1.8], "size": [3, 3, 3], "inflate": 0.251, "uv": [33, 18], "mirror": true}
|
||||
{"origin": [-0.25, 8.2, -1.8], "size": [3, 3, 3], "inflate": 0.2, "uv": [19, 19], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left2",
|
||||
"parent": "leg_left",
|
||||
"pivot": [1, 8.5, -0.3],
|
||||
"pivot": [1.5, 10.25, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [0, 6.5, -1.2], "size": [2, 3, 2], "inflate": 0.01, "uv": [56, 6], "mirror": true}
|
||||
{"origin": [0.5, 6.5, -1.2], "size": [2, 3, 2], "inflate": 0.01, "uv": [0, 25], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left3",
|
||||
"parent": "leg_left2",
|
||||
"pivot": [1, 6.5, -1.2],
|
||||
"pivot": [1.5, 6.5, -1.2],
|
||||
"rotation": [35, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [0, 4.5, -1.2], "size": [2, 2, 2], "uv": [56, 11], "mirror": true}
|
||||
{"origin": [0.5, 4.5, -1.2], "size": [2, 2, 2], "uv": [2, 30], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_left4",
|
||||
"parent": "leg_left3",
|
||||
"pivot": [1, 4.5, 0.8],
|
||||
"pivot": [1.5, 4.5, 0.8],
|
||||
"rotation": [-35, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, -0.5, -1.2], "size": [3, 5, 2], "uv": [28, 7], "mirror": true}
|
||||
{"origin": [0, -0.5, -1.2], "size": [3, 5, 2], "uv": [24, 26], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_left",
|
||||
"parent": "leg_left4",
|
||||
"pivot": [1, -0.5, 0.25],
|
||||
"pivot": [1.5, -0.5, 0.25],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, -1.5, -2.7], "size": [3, 2, 3], "inflate": 0.02, "uv": [9, 19], "mirror": true}
|
||||
{"origin": [0, -1.5, -2.7], "size": [3, 2, 3], "inflate": 0.02, "uv": [7, 31], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "foot_left",
|
||||
"pivot": [1, -0.5, -1.2],
|
||||
"pivot": [1.5, -0.5, -1.2],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary": [1, -0.5, -1.2]
|
||||
"foot_secondary": [1.5, -0.5, -1.2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-1, 11.4, -0.3],
|
||||
"pivot": [-1.5, 11.4, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 8.2, -1.8], "size": [3, 3, 3], "inflate": 0.25, "uv": [21, 18]}
|
||||
{"origin": [-2.75, 8.2, -1.8], "size": [3, 3, 3], "inflate": 0.19, "uv": [36, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right2",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-1, 8.5, -0.3],
|
||||
"pivot": [-1.5, 10.25, -0.3],
|
||||
"cubes": [
|
||||
{"origin": [-2, 6.5, -1.2], "size": [2, 3, 2], "inflate": 0.01, "uv": [48, 6]}
|
||||
{"origin": [-2.5, 6.5, -1.2], "size": [2, 3, 2], "inflate": 0.01, "uv": [8, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right3",
|
||||
"parent": "leg_right2",
|
||||
"pivot": [-1, 6.5, -1.2],
|
||||
"pivot": [-1.5, 6.5, -1.2],
|
||||
"rotation": [35, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-2, 4.5, -1.2], "size": [2, 2, 2], "uv": [48, 11]}
|
||||
{"origin": [-2.5, 4.5, -1.2], "size": [2, 2, 2], "uv": [16, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_right4",
|
||||
"parent": "leg_right3",
|
||||
"pivot": [-1, 4.5, 0.8],
|
||||
"pivot": [-1.5, 4.5, 0.8],
|
||||
"rotation": [-35, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, -0.5, -1.2], "size": [3, 5, 2], "uv": [38, 7]}
|
||||
{"origin": [-3, -0.5, -1.2], "size": [3, 5, 2], "uv": [34, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "foot_right",
|
||||
"parent": "leg_right4",
|
||||
"pivot": [-1, -0.5, 0.25],
|
||||
"pivot": [-1.5, -0.5, 0.25],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, -1.5, -2.7], "size": [3, 2, 3], "inflate": 0.02, "uv": [12, 14]}
|
||||
{"origin": [-3, -1.5, -2.7], "size": [3, 2, 3], "inflate": 0.02, "uv": [52, 24]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-1, -0.5, -1.2],
|
||||
"pivot": [-1.5, -0.5, -1.2],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_primary": [-1, -0.5, -1.2]
|
||||
"foot_primary": [-1.5, -0.5, -1.2]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
+407
-322
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user