mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-21 06:36:25 -04:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0f0c20404 |
@@ -16,7 +16,6 @@ check_assets_cache:
|
||||
stage: preprocessing
|
||||
script:
|
||||
- echo "Checking if cached hash matches current hash"
|
||||
- yum install -y findutils
|
||||
|
||||
# Calculate the current hash
|
||||
- find common/src/main/resources/assets common/src/main/resources/data -type f -exec sha256sum {} + | sort -k 2 | sha256sum > current_hash.txt
|
||||
@@ -149,7 +148,6 @@ build:
|
||||
dependencies:
|
||||
- replace_resources
|
||||
script:
|
||||
- yum install -y findutils
|
||||
- export GRADLE_OPTS="-Xmx4G -Xms4G"
|
||||
- chmod +x ./gradlew
|
||||
- ./gradlew build
|
||||
@@ -165,7 +163,6 @@ publish:
|
||||
rules:
|
||||
- if: '$CI_PROJECT_PATH == "cable-mc/cobblemon" && $CI_COMMIT_BRANCH == "main"'
|
||||
script:
|
||||
- yum install -y findutils
|
||||
- export GRADLE_OPTS="-Xmx4G -Xms4G"
|
||||
- chmod +x ./gradlew
|
||||
- ./gradlew publish
|
||||
@@ -179,7 +176,6 @@ deploy_artifacts:
|
||||
dependencies:
|
||||
- build
|
||||
script:
|
||||
- yum install -y findutils
|
||||
- echo "Collecting artifacts..."
|
||||
- find neoforge/build/libs/ -type f -name "*.jar" | grep -vE "dev-shadow|sources|javadoc" | xargs -I {} mv {} ./
|
||||
- find fabric/build/libs/ -type f -name "*.jar" | grep -vE "dev-shadow|sources|javadoc" | xargs -I {} mv {} ./
|
||||
|
||||
+27
-77
@@ -21,7 +21,7 @@
|
||||
- Added Move Dex to Pokédex
|
||||
- Added the Habitat Block, a spawner block for servers and adventure maps that controls spawning in an area.
|
||||
- Added Disk Rack for storing disks and being an audio sequencer for Noteblocks
|
||||
- Added intrinsic scaling to all Pokémon (+-5%). Some rendering cases, such as shoulder mounting, revert to 1.0 scaling to preserve animation accuracy.
|
||||
- Added intrinsic scaling to all mons (+-5%). Some rendering cases, such as shoulder mounting, revert to 1.0 scaling to preserve animation accuracy.
|
||||
- Added scaling to "baby" Pokémon (smaller (-20%) at level 1 → normally sized at level 10)
|
||||
- Added conditional seats for riding. Seats can be gated by molang such as "is_alpha".
|
||||
- Added Alpha Pokémon
|
||||
@@ -42,8 +42,9 @@
|
||||
- All ruin structures gilded chest loot tables have been updated to include a guaranteed TM not learned naturally by any Pokémon through their level-up moveset. Each ruin gets its own specific TM, so you can now go hunting ruins to complete your move dex!
|
||||
- All fossil structures have been transferred over to biome features, allowing for better placement in generation.
|
||||
- The prehistoric_underwater_fissure & prehistoric_submerged_impact fossil structures now use the biome tag `#cobblemon:is_temperate_ocean`.
|
||||
- A new Biome tag called `#cobblemon:is_stony_beach` has been added.
|
||||
- Gimmighoul towers now generate at ground level rather than sinking one block into the ground.
|
||||
- A new shipwreck cove structure called the "magma_shipwreck_cove" has been added.
|
||||
- 1 New shipwreck cove structure called the "magma_shipwreck_cove" has been added.
|
||||
- Shipwreck coves now generate slightly more frequently.
|
||||
- Added equipment loot tables for shipwreck cove enemies.
|
||||
- Maps from abandoned fishing boats leading to shipwreck coves now will skip explored chunks, allowing the player to find more shipwreck coves easier.
|
||||
@@ -56,18 +57,15 @@
|
||||
- Pokémon cries now play when clicking Pokémon in the summary screen.
|
||||
- Pressing the Summary key while either the starter selection or summary screen are open now closes those screens
|
||||
- Ice type Pokémon are now immune to Packed Snow
|
||||
- Held item visibility can now be controlled by the held_item_visible command argument.
|
||||
|
||||
### New rideable Pokémon
|
||||
- Crobat
|
||||
- Skarmory
|
||||
- Milotic
|
||||
- Archeops
|
||||
- Goodra
|
||||
- Goodra (Hisuian Form)
|
||||
- Drampa
|
||||
- Duraludon
|
||||
- Archaludon
|
||||
- Archeops
|
||||
- Skarmory
|
||||
- Crobat
|
||||
- Goodra
|
||||
- Hisuian Goodra
|
||||
- Milotic
|
||||
|
||||
### Pokémon Added
|
||||
#### Generation 3
|
||||
@@ -164,10 +162,7 @@
|
||||
- Cofagrigus
|
||||
- Tyranitar
|
||||
- Turtonator
|
||||
- Golett
|
||||
- Corsola
|
||||
- Arbok (New Patterns: Angry, Cartoon, Clown, Comedic, Crow, Grin, Ink, Modern, Rain, Scribble, Silence, Sloth, Suspicious, Will)
|
||||
- ... and Substitute
|
||||
|
||||
#### Model changes to the regional bias resource pack:
|
||||
|
||||
@@ -176,26 +171,6 @@
|
||||
- Changed models for every existing regional bias
|
||||
|
||||
### Animation updates for the following Pokémon
|
||||
|
||||
- Kakuna
|
||||
- Grimer
|
||||
- Nidoran♀ (+ New shoulder mount)
|
||||
- Nidorina
|
||||
- Nidoran♂ (+ New shoulder mount)
|
||||
- Sandshrew
|
||||
- Diglett
|
||||
- Dugtrio
|
||||
- Graveler
|
||||
- Happiny
|
||||
- Chansey
|
||||
- Blissey
|
||||
- Poliwhirl
|
||||
- Poliwrath
|
||||
- Zubat
|
||||
- Vulpix
|
||||
- Drowzee
|
||||
- Hypno
|
||||
- Noctowl
|
||||
- Skarmory
|
||||
- Skitty
|
||||
- Flygon
|
||||
@@ -227,19 +202,8 @@
|
||||
- Yamask
|
||||
- Cofagrigus
|
||||
- Luvdisc
|
||||
- Staryu
|
||||
- Starmie
|
||||
- Togetic
|
||||
- Rellor
|
||||
- Rabsca
|
||||
- Yungoos
|
||||
- Gumshoos
|
||||
- Cottonee
|
||||
- Whimsicott
|
||||
- Corsola
|
||||
|
||||
#### Added sounds to the following moves
|
||||
|
||||
- Absorb
|
||||
- Aurora Beam
|
||||
- Double Team
|
||||
@@ -265,8 +229,13 @@
|
||||
### Changes
|
||||
- Stat increase and decrease particles have been changed, with the addition of alpha boost particles.
|
||||
- Dragonite's mailbag cosmetic can now also be obtained with a chest in the cosmetic slot
|
||||
|
||||
### Fixes
|
||||
- Adjusted Croagunk's walkspeed
|
||||
- Adjusted Aerodactyl's walkspeed
|
||||
- Fixed Blitzle's base scale being `1` rather than the intended `0.8`
|
||||
- Fixed Magnezone's emissive layer for the shiny having the wrong name, thus displaying wrongly
|
||||
- Fixed Litleo not blinking
|
||||
- Fixed Garchomp T-posing when sleeping while out of battle.
|
||||
- Sharp Beak can now be crafted
|
||||
- Metal Alloy can now be crafted
|
||||
- Ability Capsules can now be brewed
|
||||
@@ -319,19 +288,25 @@
|
||||
- Hearty Grains can be milled like Farmer's Delight Rice Panicles if both Farmer's Delight and Create are installed
|
||||
- Big Roots and Revival Herbs can be milled to their respective powders
|
||||
- Pep-Up Flowers, Medicinal Leeks, and all 70 berries can be milled in Create's Millstone for additional dye drops
|
||||
- Auspicious Armour and Upgrades can be Haunted using Create's crafting systems
|
||||
- Auspicious Armor and Upgrades can be Haunted using Create's crafting systems
|
||||
- Applin Apples can be used to make Honeyed Apples in Create
|
||||
- Golden Apples can now be crafted using the Applin Apples
|
||||
- Prismarine Crystals and Amethyst Shards can now be used to craft Pokedexes
|
||||
- Updated Pokédex Screens item tag to support tagged variants of Redstone and Glowstone Dust
|
||||
- Sounds for interacting with various Cobblemon blocks now play from the centre of the block, rather than the corner
|
||||
- Updated Pokedex Screens item tag to support tagged variants of Redstone and Glowstone Dust
|
||||
- Sounds for interacting with various Cobblemon blocks now play from the center of the block, rather than the corner
|
||||
- The `/pc` command no longer plays PC activation sounds
|
||||
- Lowered the volume of Blitzle and Zebstrika's cry
|
||||
- Fixed Raichu (male) and Alolan Raichu (both genders) not displaying the correct Partner Cap when Pewter Crunchies are in the cosmetic slot.
|
||||
- Regional Foods will now prioritize being eaten instead of used for healing Pokémon, shift clicking will use it as healing
|
||||
- Resolved Z-Fighting on Pokédex Models
|
||||
- Restored Ninjask's ability to do barrel rolls
|
||||
- Fixed a crash caused by adding enchanted items to the Resurrection Machine
|
||||
|
||||
### Fixes
|
||||
- Fixed Croagunk's walkspeed
|
||||
- Fixed Blitzle's base scale being `1` rather than the intended `0.8`
|
||||
- Fixed Magnezone's emissive layer for the shiny having the wrong name, thus displaying wrongly
|
||||
- Fixed Litleo not blinking
|
||||
- Fixed Omanyte and Omastar incorrectly using water animations on land.
|
||||
- Fixed Pokédex layout for genderless variations
|
||||
- Fixed odd stacking behaviour with the poke_bait item.
|
||||
- Fixed a compatibility issue with World Game Rules which caused some log spam in specific cases.
|
||||
@@ -373,30 +348,9 @@
|
||||
- Fixed Exploit where you could take out the bait or drop your Pokérod with bait to avoid consuming bait, now the bobber will just disappear if you do so
|
||||
- Fixed Apricorn and Saccharine boats incorrectly using chest boat models
|
||||
- Fixed wild and trainer battle AI refusing to select moves with the `adjacentAlly` target type, even when it's their only option
|
||||
- Fixed gilded chests being more accessible than intended
|
||||
- Fixed Guilded chests being more accessible than intended
|
||||
- Fixed fished up Pokémon not being added as "seen" to the Pokedex
|
||||
- Fixed surprised Gimmighoul encounters not being added as "seen" to the Pokedex
|
||||
- Fixed a crash involving berry trees that have been world edited.
|
||||
- Fixed visual desync in multiplayer for players mounting Pokémon outside other players' loaded chunks
|
||||
- Fixed Pokémon entities leveled by rare candy not getting stronger as Minecraft entities unless recalled.
|
||||
- Fixed a freeze during game load that occurred when multiple mods tried to load Cobblemon API classes at the same time.
|
||||
- Fixed random tick crashes from berry trees
|
||||
- Lowered the volume of Blitzle and Zebstrika's cry
|
||||
- Regional Foods will now prioritise being eaten instead of used for healing Pokémon, shift clicking will use it as healing
|
||||
- Resolved Z-Fighting on Pokédex Models
|
||||
- Restored Ninjask's ability to do barrel rolls
|
||||
- Fixed Raichu (male) and Alolan Raichu (both genders) not displaying the correct Partner Cap when Pewter Crunchies are in the cosmetic slot.
|
||||
- Fixed a crash caused by adding enchanted items to the Resurrection Machine
|
||||
- Fixed a crash that could occur when starting a PvN battle with only fainted Pokémon.
|
||||
- Fixed the Remember Riding Camera config not being respected when dismounting and resolved the incompatibility with the Auto Third Person mod
|
||||
- Fixed Full Heal block not dropping Full Heals
|
||||
- Fixed status cure items not returning an empty bottle when used
|
||||
- Fixed Panpour consuming its held item when evolving with a Water Stone
|
||||
- Fixed Smoked Tail Curry returning a Wooden Bowl when consumed despite it not being included in the recipe
|
||||
- Fixed `/giveallpokemon` not respecting the min and max parameters
|
||||
- Fixed the choose starter toast not disappearing when capturing a Pokémon instead of opening the starter selection screen
|
||||
- Fixed an issue where certain Sinister Tea seasonings were only applying as instant effects and would not apply over time
|
||||
- Long config option labels now scroll instead of overflowing
|
||||
|
||||
### Developer
|
||||
- Added `PokeSnackSpawnerFactory` which allows influence registration on PokeSnack encounters
|
||||
@@ -407,9 +361,7 @@
|
||||
- Separated all the functions of MoLangFunctions.kt into their own files.
|
||||
- Spawn buckets and their base weights are now provided by the spawner, with different base weights for world, fishing, snack, and habitat spawn buckets.
|
||||
- Removed "SpawnBucket" class in favour of just storing maps of bucket names to weights.
|
||||
- Fixed nicknames not being applied to Pokémon spawned from `spawn_pool_world` files.
|
||||
- Added support for `profilePokedexScale`, `profilePokedexTranslation`, `profileSummaryScale`, and `profileSummaryTranslation` in poser files for finer control over profile displays.
|
||||
- Fixed riding camera offsets defined on Pokémon forms not being applied
|
||||
- Fixed nicknames not being applied to Pokémon spawned from `spawn_pool_world` files
|
||||
|
||||
### Molang & Datapacks
|
||||
- Added `moveset_builders` datapack folder for different styles of movesets.
|
||||
@@ -420,7 +372,6 @@
|
||||
- Added `q.item.is_enchanted()`
|
||||
- Added `q.item.has_enchantment(minecraft:sharpness, 3)`
|
||||
- Added `has_chosen_starter` & `get_starter_uuid` as available Molang functions
|
||||
- Added `has_tm_move_unlocked`, `unlock_tm_move`, & `lock_tm_move` as available Molang functions for Players
|
||||
- Added `marks`, `has_mark`, & `remove_marks` as available Molang functions for Pokémon
|
||||
- Added Data Component support for species drops, eg `"components": {"minecraft:custom_model_data": 123}`
|
||||
- Added the new `sortOrder` field to mark entries, (defaults to 0 if not specified) which controls the order in which marks are rendered on the HUD, with higher numbers being rendered on top of lower numbers
|
||||
@@ -511,7 +462,6 @@
|
||||
- German
|
||||
- Spanish
|
||||
- Ecuadorian Spanish
|
||||
- Portuguese
|
||||
- Brazilian Portuguese
|
||||
- Simplified Chinese
|
||||
- Traditional Chinese
|
||||
|
||||
@@ -20,8 +20,6 @@ import net.minecraft.world.level.levelgen.structure.pools.alias.PoolAliasLookup;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.LiquidSettings;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -33,9 +31,6 @@ import java.util.Optional;
|
||||
@Mixin(JigsawPlacement.class)
|
||||
public class JigsawPlacementMixin {
|
||||
|
||||
@Unique
|
||||
private static final Logger cobblemon$LOGGER = LoggerFactory.getLogger("Cobblemon/HeightRangeVeto");
|
||||
|
||||
@Inject(
|
||||
method = "addPieces(Lnet/minecraft/world/level/levelgen/structure/Structure$GenerationContext;Lnet/minecraft/core/Holder;Ljava/util/Optional;ILnet/minecraft/core/BlockPos;ZLjava/util/Optional;ILnet/minecraft/world/level/levelgen/structure/pools/alias/PoolAliasLookup;Lnet/minecraft/world/level/levelgen/structure/pools/DimensionPadding;Lnet/minecraft/world/level/levelgen/structure/templatesystem/LiquidSettings;)Ljava/util/Optional;",
|
||||
at = @At("RETURN"),
|
||||
@@ -59,30 +54,18 @@ public class JigsawPlacementMixin {
|
||||
if (result.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
BlockPos spawnPos = result.get().position();
|
||||
String poolId = startPool.unwrapKey().map(key -> key.location().toString()).orElse("unknown");
|
||||
boolean canPlace = cobblemon$canStructurePlace(context, startPool, spawnPos);
|
||||
|
||||
cobblemon$LOGGER.info(
|
||||
"[HeightRangeVeto] addPieces evaluated requestedPos={} spawnPos={} startPool={} -> canPlace={}",
|
||||
pos, spawnPos, poolId, canPlace
|
||||
);
|
||||
boolean canPlace = cobblemon$canAnyStartElementPlace(context, startPool, spawnPos);
|
||||
|
||||
if (canPlace) {
|
||||
return;
|
||||
}
|
||||
|
||||
cobblemon$LOGGER.info(
|
||||
"[HeightRangeVeto] Vetoing structure start at {} (startPool={})",
|
||||
spawnPos, poolId
|
||||
);
|
||||
|
||||
cir.setReturnValue(Optional.empty());
|
||||
}
|
||||
|
||||
@Unique
|
||||
private static boolean cobblemon$canStructurePlace(
|
||||
private static boolean cobblemon$canAnyStartElementPlace(
|
||||
Structure.GenerationContext generationContext,
|
||||
Holder<StructureTemplatePool> startPool,
|
||||
BlockPos startPos
|
||||
@@ -91,7 +74,7 @@ public class JigsawPlacementMixin {
|
||||
Optional<HeightRangeStructureProcessor> heightRangeProcessor = cobblemon$getHeightRangeProcessor(element);
|
||||
|
||||
if (heightRangeProcessor.isEmpty()) {
|
||||
continue;
|
||||
return true;
|
||||
}
|
||||
|
||||
HeightRangeStructureProcessor processor = heightRangeProcessor.get();
|
||||
@@ -102,17 +85,12 @@ public class JigsawPlacementMixin {
|
||||
startPos
|
||||
);
|
||||
|
||||
cobblemon$LOGGER.info(
|
||||
"[HeightRangeVeto] template={} pos={} valid={}",
|
||||
element, startPos, valid
|
||||
);
|
||||
|
||||
if (!valid) {
|
||||
return false;
|
||||
if (valid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Unique
|
||||
|
||||
@@ -108,7 +108,6 @@ import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
|
||||
import com.cobblemon.mod.common.pokemon.properties.AspectPropertyType
|
||||
import com.cobblemon.mod.common.pokemon.properties.BattleCloneProperty
|
||||
import com.cobblemon.mod.common.pokemon.properties.FreezeFrameProperty
|
||||
import com.cobblemon.mod.common.pokemon.properties.HeldItemVisibleProperty
|
||||
import com.cobblemon.mod.common.pokemon.properties.HiddenAbilityPropertyType
|
||||
import com.cobblemon.mod.common.pokemon.properties.LabelProperty
|
||||
import com.cobblemon.mod.common.pokemon.properties.NoAIProperty
|
||||
@@ -351,7 +350,6 @@ object Cobblemon {
|
||||
CustomPokemonProperty.register(UnaspectPropertyType)
|
||||
CustomPokemonProperty.register(FreezeFrameProperty)
|
||||
CustomPokemonProperty.register(NoAIProperty)
|
||||
CustomPokemonProperty.register(HeldItemVisibleProperty)
|
||||
|
||||
CobblemonEvents.POKEMON_PROPERTY_INITIALISED.emit(Unit)
|
||||
|
||||
|
||||
@@ -405,7 +405,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val BIG_MALASADA = regionalFoodItem("big_malasada", 64, 7, 0.3f, false)
|
||||
@JvmField
|
||||
val SMOKED_TAIL_CURRY = regionalFoodItem("smoked_tail_curry", 64, 10, 0.6f, false)
|
||||
val SMOKED_TAIL_CURRY = regionalFoodItem("smoked_tail_curry", 64, 10, 0.6f, false, ItemStack(Items.BOWL, 1))
|
||||
@JvmField
|
||||
val JUBILIFE_MUFFIN = regionalFoodItem("jubilife_muffin", 64, 7, 0.3f, false)
|
||||
@JvmField
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.cobblemon.mod.common.client.net.gui.PokedexUIPacketHandler
|
||||
import com.cobblemon.mod.common.client.net.gui.SetActiveTMPacketHandler
|
||||
import com.cobblemon.mod.common.client.net.gui.SetTMMachineContainerDataPacketHandler
|
||||
import com.cobblemon.mod.common.client.net.gui.SummaryUIPacketHandler
|
||||
import com.cobblemon.mod.common.client.net.gui.SynchronizeActiveTMHandler
|
||||
import com.cobblemon.mod.common.client.net.habitat.OpenHabitatBlockEditorHandler
|
||||
import com.cobblemon.mod.common.client.net.npc.CloseNPCEditorHandler
|
||||
import com.cobblemon.mod.common.client.net.npc.OpenNPCEditorHandler
|
||||
@@ -148,7 +147,6 @@ import com.cobblemon.mod.common.net.messages.client.ui.PokedexUIPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SetActiveTMPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SetTMMachineContainerDataPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SummaryUIPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SynchronizeActiveTMPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.BattleChallengePacket
|
||||
import com.cobblemon.mod.common.net.messages.server.BattleChallengeResponsePacket
|
||||
import com.cobblemon.mod.common.net.messages.server.BenchMovePacket
|
||||
@@ -377,7 +375,6 @@ object CobblemonNetwork {
|
||||
list.add(PacketRegisterInfo(PlayerInteractOptionsPacket.ID, PlayerInteractOptionsPacket::decode, PlayerInteractOptionsHandler))
|
||||
list.add(PacketRegisterInfo(PokedexUIPacket.ID, PokedexUIPacket::decode, PokedexUIPacketHandler))
|
||||
list.add(PacketRegisterInfo(ExpGainedDataPacket.ID, ExpGainedDataPacket::decode, ExpGainedDataPacketHandler))
|
||||
list.add(PacketRegisterInfo(SynchronizeActiveTMPacket.ID, SynchronizeActiveTMPacket::decode, SynchronizeActiveTMHandler))
|
||||
|
||||
// Starter packets
|
||||
list.add(PacketRegisterInfo(OpenStarterUIPacket.ID, OpenStarterUIPacket::decode, StarterUIPacketHandler))
|
||||
|
||||
+1
-10
@@ -8,7 +8,6 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.cooking.effects
|
||||
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.effect.MobEffect
|
||||
import net.minecraft.world.effect.MobEffectCategory
|
||||
import net.minecraft.world.entity.Entity
|
||||
@@ -19,13 +18,5 @@ class CleanseAllEffect : MobEffect(MobEffectCategory.BENEFICIAL, 0xFFFFFF) {
|
||||
override fun applyInstantenousEffect(source: Entity?, indirect: Entity?, target: LivingEntity, amplifier: Int, proximity: Double) {
|
||||
target.removeAllEffects()
|
||||
}
|
||||
|
||||
override fun applyEffectTick(livingEntity: LivingEntity, amplifier: Int): Boolean {
|
||||
if (livingEntity is ServerPlayer){
|
||||
livingEntity.removeAllEffects()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun shouldApplyEffectTickThisTick(duration: Int, amplifier: Int) = true
|
||||
override fun shouldApplyEffectTickThisTick(duration: Int, amplifier: Int) = false
|
||||
}
|
||||
+1
-15
@@ -8,7 +8,6 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.cooking.effects
|
||||
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.effect.MobEffect
|
||||
import net.minecraft.world.effect.MobEffectCategory
|
||||
import net.minecraft.world.entity.Entity
|
||||
@@ -24,18 +23,5 @@ class CleanseNegativeEffect : MobEffect(MobEffectCategory.BENEFICIAL, 0xFFFFFF)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun applyEffectTick(livingEntity: LivingEntity, amplifier: Int): Boolean {
|
||||
if (livingEntity is ServerPlayer){
|
||||
val snapshot = livingEntity.activeEffects.toList()
|
||||
for (ei in snapshot) {
|
||||
if (ei.effect.value().category == MobEffectCategory.HARMFUL) {
|
||||
livingEntity.removeEffect(ei.effect)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun shouldApplyEffectTickThisTick(duration: Int, amplifier: Int) = true
|
||||
override fun shouldApplyEffectTickThisTick(duration: Int, amplifier: Int) = false
|
||||
}
|
||||
@@ -69,7 +69,7 @@ class HabitatPool {
|
||||
pool.spawns = spawns
|
||||
return pool
|
||||
} else {
|
||||
return HabitatPools.habitatPoolsById[poolId] ?: default()
|
||||
return HabitatPools.habitatPoolsById[poolId] ?: HabitatPool.default()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,14 +94,6 @@ class HabitatPool {
|
||||
return spawns.mapNotNull { it.createSpawnDetail(habitatBlockEntity) }
|
||||
}
|
||||
|
||||
fun getPhaseCount(): Int {
|
||||
return spawns
|
||||
.flatMap { it.phases?.ranges?.flatten() ?: emptySet() }
|
||||
.toSet()
|
||||
.count()
|
||||
.coerceAtLeast(1)
|
||||
}
|
||||
|
||||
fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeResourceLocation(id)
|
||||
buffer.writeUtf(name)
|
||||
|
||||
@@ -17,6 +17,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
|
||||
class HabitatSettingsDTO() {
|
||||
var numberOfPhases = 1
|
||||
var phaseOrder = HabitatPhaseOrder.SIMPLE
|
||||
lateinit var levelRange: IntRange
|
||||
var modifiers: String = ""
|
||||
@@ -27,6 +28,7 @@ class HabitatSettingsDTO() {
|
||||
var naturalSettings: NaturalHabitatSettingsDTO? = null
|
||||
|
||||
constructor(habitatBlockEntity: HabitatBlockEntity) : this() {
|
||||
this.numberOfPhases = habitatBlockEntity.numberOfPhases
|
||||
this.phaseOrder = habitatBlockEntity.phaseOrder
|
||||
this.levelRange = habitatBlockEntity.levelRange
|
||||
this.modifiers = habitatBlockEntity.modifiers.asString()
|
||||
@@ -42,6 +44,7 @@ class HabitatSettingsDTO() {
|
||||
}
|
||||
|
||||
fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeInt(numberOfPhases)
|
||||
buffer.writeEnum(phaseOrder)
|
||||
buffer.writeInt(levelRange.first)
|
||||
buffer.writeInt(levelRange.last)
|
||||
@@ -57,6 +60,7 @@ class HabitatSettingsDTO() {
|
||||
}
|
||||
|
||||
fun decode(buffer: RegistryFriendlyByteBuf) {
|
||||
this.numberOfPhases = buffer.readInt()
|
||||
this.phaseOrder = buffer.readEnum(HabitatPhaseOrder::class.java)
|
||||
val levelRangeStart = buffer.readInt()
|
||||
val levelRangeEnd = buffer.readInt()
|
||||
|
||||
-20
@@ -17,8 +17,6 @@ import com.bedrockk.molang.runtime.value.MoValue
|
||||
import com.bedrockk.molang.runtime.value.StringValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.api.moves.Moves
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachines
|
||||
import com.cobblemon.mod.common.api.dialogue.PlayerDialogueFaceProvider
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMoLangValue
|
||||
import com.cobblemon.mod.common.api.molang.ObjectValue
|
||||
@@ -46,7 +44,6 @@ import com.cobblemon.mod.common.util.party
|
||||
import com.cobblemon.mod.common.util.pc
|
||||
import com.cobblemon.mod.common.util.pokedex
|
||||
import com.cobblemon.mod.common.util.server
|
||||
import com.cobblemon.mod.common.util.tmList
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
@@ -315,23 +312,6 @@ object PlayerMoLangFunctions : AbstractMoLangFunctionHolder<Player>() {
|
||||
}
|
||||
return@put DoubleValue.ZERO
|
||||
}
|
||||
map["has_tm_move_unlocked"] = put@{ params ->
|
||||
val move = Moves.getByName(params.getString(0)) ?: return@put DoubleValue.ZERO
|
||||
val tm = TechnicalMachines.moveToTM[move] ?: return@put DoubleValue.ZERO
|
||||
DoubleValue(if (player.tmList().learnedTMs.contains(tm.id)) 1.0 else 0.0)
|
||||
}
|
||||
map["unlock_tm_move"] = put@{ params ->
|
||||
val move = Moves.getByName(params.getString(0)) ?: return@put DoubleValue.ZERO
|
||||
val tm = TechnicalMachines.moveToTM[move] ?: return@put DoubleValue.ZERO
|
||||
player.tmList().syncTMFromMove(move)
|
||||
DoubleValue(if (player.tmList().learnedTMs.contains(tm.id)) 1.0 else 0.0)
|
||||
}
|
||||
map["lock_tm_move"] = put@{ params ->
|
||||
val move = Moves.getByName(params.getString(0)) ?: return@put DoubleValue.ZERO
|
||||
val tm = TechnicalMachines.moveToTM[move] ?: return@put DoubleValue.ZERO
|
||||
player.tmList().syncTMLockFromMove(move)
|
||||
DoubleValue(if (player.tmList().learnedTMs.contains(tm.id)) 0.0 else 1.0)
|
||||
}
|
||||
map["start_battle"] = put@{ params ->
|
||||
val opponentValue = params.get<MoValue>(0)
|
||||
val opponent = if (opponentValue is ObjectValue<*>) {
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
package com.cobblemon.mod.common.api.snowstorm
|
||||
|
||||
import com.cobblemon.mod.common.client.render.ShaderCompat
|
||||
import com.mojang.blaze3d.platform.GlStateManager
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import com.mojang.blaze3d.vertex.BufferBuilder
|
||||
@@ -27,7 +28,26 @@ object ParticleMaterials {
|
||||
RenderSystem.depthMask(true)
|
||||
RenderSystem.setShader { GameRenderer.getParticleShader() }
|
||||
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES)
|
||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA)
|
||||
// Premultiplied-alpha blending under an active shaderpack; straight alpha otherwise.
|
||||
//
|
||||
// WHY: Iris shaderpacks (Complementary Unbound/Reimagined, Bliss, Photon, ...) draw these
|
||||
// custom particles through their *translucent* particle program, which composites with a
|
||||
// premultiplied-alpha convention. Feeding it our straight-alpha colors makes faded
|
||||
// (low-alpha) particles darken toward black instead of fading toward the background — the
|
||||
// "gets darker as it fades" symptom. Switching to premultiplied blend (ONE, 1-SRC_ALPHA)
|
||||
// AND premultiplying the vertex color by its alpha (see SnowstormParticle.render) matches
|
||||
// that convention, so the fade looks ~like vanilla. This is one pack-agnostic code path:
|
||||
// it targets the shared premultiplied convention, not any single pack.
|
||||
//
|
||||
// SAFE FOR THE MAJORITY: with premultiplied vertex color, `ONE * (rgb*a) + (1-a)*dst`
|
||||
// equals straight alpha's `a*rgb + (1-a)*dst`, so the no-shader look is byte-identical;
|
||||
// the branch only diverges while a shaderpack is active.
|
||||
//
|
||||
// RESIDUAL LIMITATION: a pack that explicitly declares `blend.gbuffers_particles_translucent`
|
||||
// re-imposes its own blend and we cannot override that; and only the vertex alpha is
|
||||
// premultiplied (not the texture's per-texel alpha), so very soft sprite edges may read
|
||||
// slightly brighter than vanilla. The dominant over-lifetime fade is what this corrects.
|
||||
applyTranslucentBlend()
|
||||
return tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE)
|
||||
}
|
||||
|
||||
@@ -38,7 +58,20 @@ object ParticleMaterials {
|
||||
override fun begin(tessellator: Tesselator, textureManager: TextureManager): BufferBuilder {
|
||||
RenderSystem.enableBlend()
|
||||
RenderSystem.disableCull()
|
||||
RenderSystem.depthMask(true)
|
||||
// Translucent (additive) particles should not write depth. With a shaderpack active
|
||||
// (Iris/OptiFine) these custom render types are drawn through the pack's *translucent*
|
||||
// particle program; if they also write depth they get treated as solid geometry by the
|
||||
// pack's depth-dependent passes (fog, deferred lighting, translucent compositing), which
|
||||
// visibly dims the additive glow — the worst-affected symptom. Dropping depth writes only
|
||||
// when shaders are active keeps the vanilla (no-shader) look — used by the vast majority
|
||||
// of players — byte-for-byte identical.
|
||||
//
|
||||
// RESIDUAL LIMITATION: the additive blendFunc below (SRC_ALPHA, ONE) is honored by Iris
|
||||
// (it swaps the shader program but does not override blend for particles), but a
|
||||
// shaderpack still has final authority over how its translucent particle program lights
|
||||
// and composites the fragment. We route depth correctly and preserve additive blending,
|
||||
// but we cannot force true additive parity against a pack that composites it otherwise.
|
||||
RenderSystem.depthMask(!ShaderCompat.shadersActive())
|
||||
RenderSystem.setShader { GameRenderer.getParticleShader() }
|
||||
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES)
|
||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE)
|
||||
@@ -52,10 +85,15 @@ object ParticleMaterials {
|
||||
override fun begin(tessellator: Tesselator, textureManager: TextureManager): BufferBuilder {
|
||||
RenderSystem.enableBlend()
|
||||
RenderSystem.disableCull()
|
||||
RenderSystem.depthMask(true)
|
||||
// See ADD above: translucent particles drop depth writes only under an active shaderpack
|
||||
// so the pack's translucent pass doesn't treat them as solid. No change to the vanilla look.
|
||||
RenderSystem.depthMask(!ShaderCompat.shadersActive())
|
||||
RenderSystem.setShader { GameRenderer.getParticleShader() }
|
||||
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES)
|
||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA)
|
||||
// Premultiplied-alpha under shaders, straight alpha otherwise — see ALPHA for the full
|
||||
// rationale. Paired with the vertex-color premultiply in SnowstormParticle.render so the
|
||||
// no-shader look is unchanged.
|
||||
applyTranslucentBlend()
|
||||
return tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE)
|
||||
}
|
||||
|
||||
@@ -75,4 +113,26 @@ object ParticleMaterials {
|
||||
|
||||
override fun toString() = "OPAQUE"
|
||||
}
|
||||
|
||||
/**
|
||||
* True when [material]'s vertex color must be premultiplied by its alpha before being submitted
|
||||
* (see [ALPHA]). Only the alpha-composited materials need it, and only while a shaderpack is
|
||||
* active; ADD is additive and OPAQUE is not blended, so neither is premultiplied. Kept here so
|
||||
* the vertex path ([com.cobblemon.mod.common.client.render.SnowstormParticle.render]) and the
|
||||
* blend func set in [applyTranslucentBlend] always agree on which particles are premultiplied.
|
||||
*/
|
||||
fun premultipliesUnderShaders(material: ParticleMaterial): Boolean =
|
||||
(material == ParticleMaterial.ALPHA || material == ParticleMaterial.BLEND) && ShaderCompat.shadersActive()
|
||||
|
||||
/**
|
||||
* Premultiplied-alpha blend (source already carries rgb*a, so source factor is ONE) while a
|
||||
* shaderpack is active; vanilla straight-alpha blend otherwise. See [ALPHA] for why.
|
||||
*/
|
||||
private fun applyTranslucentBlend() {
|
||||
if (ShaderCompat.shadersActive()) {
|
||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA)
|
||||
} else {
|
||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@
|
||||
package com.cobblemon.mod.common.api.tms
|
||||
|
||||
import com.cobblemon.mod.common.tms.obtain.DefaultObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.ImpossibleObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.PlayerHasAdvancementObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.PlayerYObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.UnlockableObtainMethod
|
||||
@@ -37,7 +36,6 @@ interface ObtainMethod {
|
||||
val variant = buffer.readUtf()
|
||||
return when (variant) {
|
||||
"cobblemon:unlockable" -> UnlockableObtainMethod()
|
||||
"cobblemon:impossible" -> ImpossibleObtainMethod()
|
||||
"cobblemon:default" -> DefaultObtainMethod()
|
||||
"cobblemon:advancement" -> {
|
||||
val advancement = buffer.readResourceLocation()
|
||||
|
||||
@@ -14,8 +14,6 @@ import com.cobblemon.mod.common.advancement.CobblemonCriteria
|
||||
import com.cobblemon.mod.common.advancement.criterion.CountableContext
|
||||
import com.cobblemon.mod.common.advancement.criterion.LearnAllTMContext
|
||||
import com.cobblemon.mod.common.advancement.criterion.LearnTMContext
|
||||
import com.cobblemon.mod.common.api.abilities.Ability
|
||||
import com.cobblemon.mod.common.api.abilities.AbilityPool
|
||||
import com.cobblemon.mod.common.api.moves.MoveTemplate
|
||||
import com.cobblemon.mod.common.api.scheduling.ScheduledTask
|
||||
import com.cobblemon.mod.common.api.scheduling.ServerTaskTracker
|
||||
@@ -52,11 +50,6 @@ class TMMoveManager(
|
||||
learn(listOf(tmId))
|
||||
}
|
||||
|
||||
fun syncTMLockFromMove(moveTemplate: MoveTemplate) {
|
||||
val tmId = TechnicalMachines.moveToTM[moveTemplate]?.id ?: return
|
||||
unlearn(listOf(tmId))
|
||||
}
|
||||
|
||||
fun getLearnableTMsFromPokemon(pokemon: Pokemon): Collection<ResourceLocation> {
|
||||
val learnableMoves = pokemon.allAccessibleMoves.toMutableSet()
|
||||
learnableMoves.addAll(pokemon.moveSet.map { it.template })
|
||||
|
||||
@@ -42,12 +42,10 @@ class ElementalType(
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
val BY_STRING_CODEC: Codec<ElementalType> by lazy {
|
||||
CodecUtils.createByStringCodec(
|
||||
ElementalTypes::get,
|
||||
{ it.showdownId }
|
||||
) { id -> "No ElementalType for ID $id" }
|
||||
}
|
||||
val BY_STRING_CODEC: Codec<ElementalType> = CodecUtils.createByStringCodec(
|
||||
ElementalTypes::get,
|
||||
{it.showdownId}
|
||||
) { id -> "No ElementalType for ID $id" }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -349,12 +349,11 @@ object BattleBuilder {
|
||||
npcPartyStores.add(npcParty)
|
||||
}
|
||||
|
||||
val playerAvailablePokemon = playerActor.pokemonList.count { it.health > 0 }
|
||||
if (playerAvailablePokemon < battleFormat.battleType.slotsPerActor) {
|
||||
if (playerActor.pokemonList.size < battleFormat.battleType.slotsPerActor) {
|
||||
errors.participantErrors[playerActor] += BattleStartError.insufficientPokemon(
|
||||
actorEntity = player,
|
||||
requiredCount = battleFormat.battleType.slotsPerActor,
|
||||
hadCount = playerAvailablePokemon
|
||||
hadCount = playerActor.pokemonList.size
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -163,8 +163,7 @@ class TrackerActor(val uuid: UUID) {
|
||||
//we assume that AI knows it all about our allies
|
||||
trackerActor.party.addAll(actor.pokemonList.map { createAllied(it) })
|
||||
actor.activePokemon.forEach {
|
||||
val battlePokemon = it.battlePokemon ?: return@forEach
|
||||
val active = trackerActor.party.first { trackMon -> trackMon.id == battlePokemon.uuid }
|
||||
val active = trackerActor.party.first { trackMon -> trackMon.id == it.battlePokemon!!.uuid }
|
||||
trackerActor.party.remove(active)
|
||||
trackerActor.activePokemon.add(active)
|
||||
}
|
||||
@@ -177,8 +176,7 @@ class TrackerActor(val uuid: UUID) {
|
||||
//only know basics of what we see right now
|
||||
trackerActor.party.addAll(actor.pokemonList.map { createOpposing(it) })
|
||||
actor.activePokemon.forEach {
|
||||
val battlePokemon = it.battlePokemon ?: return@forEach
|
||||
val active = trackerActor.party.first { trackMon -> trackMon.id == battlePokemon.uuid }
|
||||
val active = trackerActor.party.first { trackMon -> trackMon.id == it.battlePokemon!!.uuid }
|
||||
trackerActor.party.remove(active)
|
||||
trackerActor.activePokemon.add(active)
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
package com.cobblemon.mod.common.block
|
||||
|
||||
//import dev.lambdaurora.lambdynlights.util.SodiumDynamicLightHandler.pos
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.berry.Berries
|
||||
import com.cobblemon.mod.common.api.berry.Berry
|
||||
@@ -39,11 +40,7 @@ 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.BaseEntityBlock
|
||||
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.RenderShape
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
@@ -73,7 +70,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
override fun playerWillDestroy(world: Level, pos: BlockPos, state: BlockState, player: Player): BlockState {
|
||||
if (!player.isCreative && state.getValue(AGE) == FRUIT_AGE) {
|
||||
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
|
||||
treeEntity.harvest(world, state, pos, player).forEach { drop -> popResource(world, pos, drop) }
|
||||
treeEntity.harvest(world, state, pos, player).forEach { drop -> Block.popResource(world, pos, drop) }
|
||||
}
|
||||
return super.playerWillDestroy(world, pos, state, player)
|
||||
}
|
||||
@@ -95,7 +92,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
// Random Tick handler: uses time compensation to ensure correct growth speed
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun randomTick(state: BlockState, world: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
val blockEntity = world.getBlockEntity(pos) as? BerryBlockEntity? ?: return
|
||||
val blockEntity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return
|
||||
|
||||
// processTick calculates elapsed time and updates timer, returns whether growth is needed
|
||||
if (blockEntity.processTick(world, pos, state) && !world.getBlockTicks().hasScheduledTick(pos, this)) {
|
||||
@@ -131,10 +128,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
val newAge = curAge + 1
|
||||
if (newAge > FRUIT_AGE) return
|
||||
val newState = state.setValue(AGE, newAge)
|
||||
val treeEntity = world.getBlockEntity(pos) as? BerryBlockEntity? ?: run {
|
||||
world.setBlock(pos, Blocks.AIR.defaultBlockState(), UPDATE_CLIENTS)
|
||||
return
|
||||
}
|
||||
val treeEntity = world.getBlockEntity(pos) as BerryBlockEntity
|
||||
if (curAge == MATURE_AGE) {
|
||||
treeEntity.generateGrowthPoints(world, newState, pos, null)
|
||||
determineMutation(world, random, pos, newState)
|
||||
@@ -152,7 +146,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
for (direction in this.lookupDirections) {
|
||||
val redirectedPos = pos.offset(direction.normal)
|
||||
val redirectedState = world.getBlockState(redirectedPos)
|
||||
val berryBlock = redirectedState.block as? BerryBlock? ?: continue
|
||||
val berryBlock = redirectedState.block as? BerryBlock ?: continue
|
||||
val berry = berryBlock.berry() ?: continue
|
||||
val mutation = this.berry()?.mutationWith(berry) ?: continue
|
||||
mutations += mutation
|
||||
@@ -166,7 +160,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
treeEntity.decrementMulchDuration(world, pos, state)
|
||||
}
|
||||
val mutation = if (random.nextInt(1000) < mutateChance) mutations.random() else null
|
||||
(world.getBlockEntity(pos) as? BerryBlockEntity?)?.let { blockEntity ->
|
||||
(world.getBlockEntity(pos) as? BerryBlockEntity)?.let { blockEntity ->
|
||||
CobblemonEvents.BERRY_MUTATION_RESULT.post(BerryMutationResultEvent(berry, world, state, pos, berryMutationOffer.mutations, mutation)) { berryMutationResult ->
|
||||
berryMutationResult.pickedMutation?.let { mutation -> blockEntity.mutate(mutation) }
|
||||
}
|
||||
@@ -184,7 +178,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
): Boolean {
|
||||
val underBlockState = world.getBlockState(pos.below())
|
||||
val validSoil = state.getValue(IS_ROOTED) || underBlockState.`is`(CobblemonBlockTags.BERRY_SOIL)
|
||||
val treeEntity = world.getBlockEntity(pos) as? BerryBlockEntity? ?: return false
|
||||
val treeEntity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return false
|
||||
return getMulch(treeEntity) == MulchVariant.NONE && state.getValue(AGE) < FLOWER_AGE && validSoil
|
||||
}
|
||||
|
||||
@@ -359,7 +353,7 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
fun getMulch(entity: BerryBlockEntity) = entity.mulchVariant
|
||||
|
||||
fun convertMulchToEntity(world: ServerLevel, state: BlockState, pos: BlockPos) {
|
||||
val entity = world.getBlockEntity(pos) as? BerryBlockEntity? ?: return
|
||||
val entity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return
|
||||
if (state.getValue(MULCH) != MulchVariant.NONE && state.getValue(MULCH) != entity.mulchVariant) {
|
||||
entity.mulchVariant = state.getValue(MULCH)
|
||||
world.setBlockAndUpdate(pos, state.setValue(MULCH, MulchVariant.NONE))
|
||||
@@ -376,9 +370,9 @@ class BerryBlock(private val berryIdentifier: ResourceLocation, settings: Proper
|
||||
}
|
||||
|
||||
private fun harvestBerry(world: Level, state: BlockState, pos: BlockPos, player: Player? = null): Boolean {
|
||||
val blockEntity = world.getBlockEntity(pos) as? BerryBlockEntity? ?: return false
|
||||
val blockEntity = world.getBlockEntity(pos) as? BerryBlockEntity ?: return false
|
||||
blockEntity.harvest(world, state, pos, player).forEach { drop ->
|
||||
popResource(world, pos, drop)
|
||||
Block.popResource(world, pos, drop)
|
||||
}
|
||||
|
||||
val sound = if (player != null) CobblemonSounds.BERRY_HARVEST else SoundEvents.SHEEP_SHEAR
|
||||
|
||||
+3
-1
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.api.multiblock.MultiblockEntity
|
||||
import com.cobblemon.mod.common.api.multiblock.MultiblockStructure
|
||||
import com.cobblemon.mod.common.api.multiblock.builder.MultiblockStructureBuilder
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachines
|
||||
import com.cobblemon.mod.common.api.types.ElementalTypes
|
||||
import com.cobblemon.mod.common.block.MonitorBlock
|
||||
import com.cobblemon.mod.common.block.multiblock.FossilMultiblockStructure
|
||||
@@ -306,7 +307,8 @@ open class FossilMultiblockEntity(
|
||||
private fun unlockTmForPlayer(player: ServerPlayer, stack: ItemStack) {
|
||||
if (stack.item !is TechnicalMachineItem) return
|
||||
val move = TMMoveComponent.getTMMove(stack) ?: return
|
||||
player.tmList().syncTMFromMove(move)
|
||||
val tmId = TechnicalMachines.moveToTM[move]?.id ?: return
|
||||
player.tmList()?.learn(listOf(tmId))
|
||||
}
|
||||
|
||||
private fun updateMonitorScreen() {
|
||||
|
||||
@@ -25,7 +25,6 @@ import net.minecraft.world.level.block.SoundType
|
||||
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.entity.CommandBlockEntity
|
||||
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
|
||||
@@ -81,13 +80,11 @@ class HabitatBlock(properties: Properties) : Block(properties), EntityBlock {
|
||||
}
|
||||
|
||||
override fun useWithoutItem(state: BlockState, level: Level, pos: BlockPos, player: Player, hitResult: BlockHitResult): InteractionResult {
|
||||
val blockEntity = level.getBlockEntity(pos)
|
||||
val be = level.getBlockEntity(pos) as? HabitatBlockEntity ?: return InteractionResult.PASS
|
||||
return if (blockEntity is HabitatBlockEntity && player.canUseGameMasterBlocks()) {
|
||||
be.onUse(player, hitResult)
|
||||
} else {
|
||||
InteractionResult.PASS
|
||||
if (!level.isClientSide) {
|
||||
val be = level.getBlockEntity(pos) as? HabitatBlockEntity ?: return InteractionResult.PASS
|
||||
return be.onUse(player, hitResult)
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
override fun getDrops(state: BlockState, params: LootParams.Builder): MutableList<ItemStack> {
|
||||
|
||||
@@ -60,12 +60,10 @@ class HabitatBlockEntity(pos: BlockPos, state: BlockState) :
|
||||
|
||||
var spawningStyle: HabitatSpawningStyle = ActivatedHabitatSpawning(this)
|
||||
|
||||
var numberOfPhases: Int = 1
|
||||
var phaseOrder = HabitatPhaseOrder.SIMPLE
|
||||
var currentPhase = 1
|
||||
|
||||
val numberOfPhases: Int
|
||||
get() = pool.getPhaseCount()
|
||||
|
||||
var levelRange: IntRange = 1..Cobblemon.config.maxPokemonLevel
|
||||
var modifiers: PokemonProperties = PokemonProperties()
|
||||
var pool: HabitatPool = HabitatPool.default()
|
||||
@@ -141,6 +139,7 @@ class HabitatBlockEntity(pos: BlockPos, state: BlockState) :
|
||||
val activatedSettings = habitatSettingsDTO.activatedSettings
|
||||
val naturalSettings = habitatSettingsDTO.naturalSettings
|
||||
val isActivated = habitatSettingsDTO.isActivatedSpawning
|
||||
this.numberOfPhases = habitatSettingsDTO.numberOfPhases
|
||||
this.phaseOrder = habitatSettingsDTO.phaseOrder
|
||||
this.levelRange = habitatSettingsDTO.levelRange
|
||||
this.modifiers = PokemonProperties.parse(habitatSettingsDTO.modifiers)
|
||||
@@ -170,6 +169,7 @@ class HabitatBlockEntity(pos: BlockPos, state: BlockState) :
|
||||
override fun saveAdditional(tag: CompoundTag, registryLookup: HolderLookup.Provider) {
|
||||
super.saveAdditional(tag, registryLookup)
|
||||
tag.putString(DataKeys.HABITAT_MIMIC, mimicId.toString())
|
||||
tag.putInt(DataKeys.HABITAT_PHASE_COUNT, numberOfPhases)
|
||||
tag.putString(DataKeys.HABITAT_PHASE_ORDER, phaseOrder.toString())
|
||||
// Only save the level range when it's a non-trivial one
|
||||
if (levelRange.first != 1 || levelRange.last != Cobblemon.config.maxPokemonLevel) {
|
||||
@@ -201,6 +201,7 @@ class HabitatBlockEntity(pos: BlockPos, state: BlockState) :
|
||||
return // Client doesn't need to try loading the rest
|
||||
}
|
||||
|
||||
numberOfPhases = tag.getInt(DataKeys.HABITAT_PHASE_COUNT)
|
||||
phaseOrder = HabitatPhaseOrder.valueOf(tag.getString(DataKeys.HABITAT_PHASE_ORDER))
|
||||
levelRange = tag.getString(DataKeys.HABITAT_LEVEL_RANGE).takeIf { it.isNotBlank() }?.let(IntRangeAdapter::deserialize) ?: 1..Cobblemon.config.maxPokemonLevel
|
||||
modifiers = tag.getString(DataKeys.HABITAT_MODIFIERS).takeIf { it.isNotBlank() }?.let(PokemonProperties::parse) ?: PokemonProperties()
|
||||
|
||||
@@ -10,13 +10,11 @@ package com.cobblemon.mod.common.block.tmmachine
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonItems
|
||||
import com.cobblemon.mod.common.CobblemonMenuType
|
||||
import com.cobblemon.mod.common.CobblemonNetwork.sendPacket
|
||||
import com.cobblemon.mod.common.api.moves.Moves
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachine
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachines
|
||||
import com.cobblemon.mod.common.block.entity.TMMachineBlockEntity
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SynchronizeActiveTMPacket
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import com.cobblemon.mod.common.util.itemRegistry
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.SimpleContainer
|
||||
@@ -37,45 +35,15 @@ class TMMachineMenu(menuType: MenuType<*>, syncId: Int) : AbstractContainerMenu(
|
||||
var inventory: Container? = null
|
||||
var containerData: ContainerData? = null
|
||||
|
||||
var currentlySelectedTM: TechnicalMachine? = null
|
||||
private var lastSelectedTM: TechnicalMachine? = null
|
||||
|
||||
var onSelectedTMUpdate: (TechnicalMachine?) -> Unit = {}
|
||||
|
||||
constructor(syncId: Int, playerInventory: Inventory) : this(CobblemonMenuType.TM_MACHINE, syncId) {
|
||||
this.playerInventory = playerInventory
|
||||
this.inventory = SimpleContainer(5)
|
||||
this.containerData = SimpleContainerData(6)
|
||||
this.tmMachineEntity = (inventory as? TMMachineBlockEntity.TMMachineBlockInventory)?.blockEntity
|
||||
|
||||
this.addDataSlots(containerData!!)
|
||||
inventory?.startOpen(playerInventory.player)
|
||||
|
||||
initiateSlots()
|
||||
}
|
||||
|
||||
constructor(syncId: Int, playerInventory: Inventory, inventory: Container, containerData: ContainerData) : this(CobblemonMenuType.TM_MACHINE, syncId) {
|
||||
this.playerInventory = playerInventory
|
||||
this.inventory = inventory
|
||||
this.containerData = containerData
|
||||
this.tmMachineEntity = (inventory as? TMMachineBlockEntity.TMMachineBlockInventory)?.blockEntity
|
||||
|
||||
this.addDataSlots(containerData)
|
||||
inventory.startOpen(playerInventory.player)
|
||||
|
||||
initiateSlots()
|
||||
|
||||
tmMachineEntity?.let {
|
||||
val move = Moves.getByName(it.activeMove)
|
||||
move.let {
|
||||
currentlySelectedTM = TechnicalMachines.moveToTM[it]
|
||||
synchronizeSelectedTM()
|
||||
}
|
||||
}
|
||||
|
||||
this.addSlotListener(this)
|
||||
}
|
||||
|
||||
private fun initiateSlots() {
|
||||
val startX = 15
|
||||
val startY = 144
|
||||
val slotWidth = 18
|
||||
@@ -90,7 +58,41 @@ class TMMachineMenu(menuType: MenuType<*>, syncId: Int) : AbstractContainerMenu(
|
||||
this.addSlot(Slot(playerInventory, col, startX + (slotWidth * col), startY + 58))
|
||||
}
|
||||
|
||||
val container = inventory!!
|
||||
val container = inventory
|
||||
container?.let {
|
||||
this.addSlot(TMResultSlot(container, RESULT_SLOT, startX + 37, startY - 28)) // Output slot
|
||||
this.addSlot(BlankTMSlot(container, BLANK_TM_SLOT, startX + 90, startY - 28)) // Blank TM
|
||||
for (index in INGREDIENT_SLOTS) {
|
||||
this.addSlot(Slot(container, index, startX + 114 + (18 * (index - INGREDIENT_SLOTS.first)), startY - 28))
|
||||
}
|
||||
}
|
||||
this.addSlotListener(this)
|
||||
}
|
||||
|
||||
constructor(syncId: Int, playerInventory: Inventory, inventory: Container, containerData: ContainerData) : this(CobblemonMenuType.TM_MACHINE, syncId) {
|
||||
this.playerInventory = playerInventory
|
||||
this.inventory = inventory
|
||||
this.containerData = containerData
|
||||
this.tmMachineEntity = (inventory as? TMMachineBlockEntity.TMMachineBlockInventory)?.blockEntity
|
||||
|
||||
this.addDataSlots(containerData)
|
||||
inventory.startOpen(playerInventory.player)
|
||||
|
||||
val startX = 15
|
||||
val startY = 144
|
||||
val slotWidth = 18
|
||||
val slotHeight = 18
|
||||
|
||||
for (row in 0..2) {
|
||||
for (col in 0..8) {
|
||||
this.addSlot(Slot(playerInventory, 9 + (row * 9) + col, startX + (slotWidth * col), startY + (slotHeight * row)))
|
||||
}
|
||||
}
|
||||
for (col in 0..8) {
|
||||
this.addSlot(Slot(playerInventory, col, startX + (slotWidth * col), startY + 58))
|
||||
}
|
||||
|
||||
val container = inventory
|
||||
container.let {
|
||||
this.addSlot(TMResultSlot(container, RESULT_SLOT, startX + 37, startY - 28)) // Output slot
|
||||
this.addSlot(BlankTMSlot(container, BLANK_TM_SLOT, startX + 90, startY - 28)) // Blank TM
|
||||
@@ -98,6 +100,7 @@ class TMMachineMenu(menuType: MenuType<*>, syncId: Int) : AbstractContainerMenu(
|
||||
this.addSlot(Slot(container, index, startX + 114 + (18 * (index - INGREDIENT_SLOTS.first)), startY - 28))
|
||||
}
|
||||
}
|
||||
this.addSlotListener(this)
|
||||
}
|
||||
|
||||
override fun quickMoveStack(player: Player, index: Int): ItemStack {
|
||||
@@ -204,25 +207,4 @@ class TMMachineMenu(menuType: MenuType<*>, syncId: Int) : AbstractContainerMenu(
|
||||
override fun dataChanged(containerMenu: AbstractContainerMenu, dataSlotIndex: Int, value: Int) {
|
||||
broadcastChanges()
|
||||
}
|
||||
|
||||
fun synchronizeSelectedTM() {
|
||||
val serverPlayer = playerInventory?.player as? ServerPlayer ?: return
|
||||
serverPlayer.sendPacket(SynchronizeActiveTMPacket(currentlySelectedTM))
|
||||
lastSelectedTM = currentlySelectedTM
|
||||
}
|
||||
|
||||
override fun sendAllDataToRemote() {
|
||||
super.sendAllDataToRemote()
|
||||
synchronizeSelectedTM()
|
||||
}
|
||||
|
||||
override fun broadcastChanges() {
|
||||
super.broadcastChanges()
|
||||
if (lastSelectedTM != currentlySelectedTM) synchronizeSelectedTM()
|
||||
}
|
||||
|
||||
fun clientSetSelectedTM(tm: TechnicalMachine?) {
|
||||
currentlySelectedTM = tm
|
||||
onSelectedTMUpdate(tm)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ object MountedCameraTypeHandler {
|
||||
return
|
||||
}
|
||||
val currentCameraType = mc.options.cameraType
|
||||
if (Cobblemon.config.rememberRidingCamera && currentCameraType != unmountedCameraType) {
|
||||
if (currentCameraType != unmountedCameraType) {
|
||||
mc.options.cameraType = unmountedCameraType
|
||||
}
|
||||
val data = ClientPersistedData.ridingPerspectives
|
||||
|
||||
@@ -130,25 +130,20 @@ class PartyOverlay : Gui(Minecraft.getInstance()) {
|
||||
val party = CobblemonClient.storage.party
|
||||
val matrices = context.pose()
|
||||
if (party.slots.none { it != null }) {
|
||||
if (!this.attachedToast &&
|
||||
CobblemonClient.clientPlayerData.promptStarter &&
|
||||
if (CobblemonClient.clientPlayerData.promptStarter &&
|
||||
!CobblemonClient.clientPlayerData.starterLocked &&
|
||||
!CobblemonClient.clientPlayerData.starterSelected &&
|
||||
!CobblemonClient.checkedStarterScreen
|
||||
) {
|
||||
// Adding starter toast on start and connect of client to server.
|
||||
minecraft.toasts.addToast(this.starterToast)
|
||||
this.attachedToast = true
|
||||
if (!this.attachedToast) {
|
||||
// Adding starter toast on start and connect of client to server.
|
||||
minecraft.toasts.addToast(this.starterToast)
|
||||
this.attachedToast = true
|
||||
}
|
||||
}
|
||||
return // Don't render the stuff below if no Pokémon in party
|
||||
}
|
||||
|
||||
// Without this simply capturing a Pokémon instead of opening the starter screen won't dismiss the toast
|
||||
if (!CobblemonClient.checkedStarterScreen) {
|
||||
CobblemonClient.checkedStarterScreen = true
|
||||
starterToast.nextVisibility = Toast.Visibility.HIDE
|
||||
}
|
||||
|
||||
val totalHeight = party.slots.size * SLOT_HEIGHT
|
||||
val midY = minecraft.window.guiScaledHeight / 2
|
||||
val startY = (midY - totalHeight / 2) - ((SLOT_SPACING * 5) / 2)
|
||||
|
||||
@@ -27,18 +27,10 @@ import net.minecraft.client.renderer.RenderType
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import org.joml.Quaternionf
|
||||
import org.joml.Vector3f
|
||||
import kotlin.math.atan
|
||||
|
||||
enum class ProfileTransformType {
|
||||
PROFILE,
|
||||
NONE,
|
||||
POKEDEX,
|
||||
SUMMARY,
|
||||
}
|
||||
|
||||
fun drawProfilePokemon(
|
||||
renderablePokemon: RenderablePokemon,
|
||||
matrixStack: PoseStack,
|
||||
@@ -47,7 +39,7 @@ fun drawProfilePokemon(
|
||||
state: PosableState,
|
||||
partialTicks: Float,
|
||||
scale: Float = 20F,
|
||||
profileTransformType: ProfileTransformType = ProfileTransformType.PROFILE,
|
||||
applyProfileTransform: Boolean = true,
|
||||
applyBaseScale: Boolean = false,
|
||||
r: Float = 1F,
|
||||
g: Float = 1F,
|
||||
@@ -64,7 +56,7 @@ fun drawProfilePokemon(
|
||||
state = state.also { it.currentAspects = renderablePokemon.aspects },
|
||||
partialTicks = partialTicks,
|
||||
scale = scale,
|
||||
profileTransformType = profileTransformType,
|
||||
applyProfileTransform = applyProfileTransform,
|
||||
applyBaseScale = applyBaseScale,
|
||||
r = r,
|
||||
g = g,
|
||||
@@ -83,7 +75,7 @@ fun drawProfilePokemon(
|
||||
state: PosableState,
|
||||
partialTicks: Float,
|
||||
scale: Float = 20F,
|
||||
profileTransformType: ProfileTransformType = ProfileTransformType.PROFILE,
|
||||
applyProfileTransform: Boolean = true,
|
||||
applyBaseScale: Boolean = false,
|
||||
doQuirks: Boolean = false,
|
||||
r: Float = 1F,
|
||||
@@ -122,38 +114,18 @@ fun drawProfilePokemon(
|
||||
state.setPoseToFirstSuitable(poseType)
|
||||
state.updatePartialTicks(partialTicks)
|
||||
|
||||
if (profileTransformType == ProfileTransformType.NONE) {
|
||||
if (applyProfileTransform) {
|
||||
matrixStack.translate(
|
||||
model.profileTranslation.x,
|
||||
model.profileTranslation.y + 1.5 * model.profileScale,
|
||||
model.profileTranslation.z - 4.0
|
||||
)
|
||||
matrixStack.scale(model.profileScale, model.profileScale, 1 / model.profileScale)} else {
|
||||
matrixStack.translate(0F, 0F, -4.0F)
|
||||
if (applyBaseScale) {
|
||||
matrixStack.scale(baseScale, baseScale, 1 / baseScale)
|
||||
}
|
||||
} else {
|
||||
var profileScale: Float
|
||||
var profileTranslation: Vec3
|
||||
|
||||
when (profileTransformType) {
|
||||
ProfileTransformType.POKEDEX -> {
|
||||
profileScale = model.profilePokedexScale ?: model.profileScale
|
||||
profileTranslation = model.profilePokedexTranslation ?: model.profileTranslation
|
||||
}
|
||||
ProfileTransformType.SUMMARY -> {
|
||||
profileScale = model.profileSummaryScale ?: model.profileScale
|
||||
profileTranslation = model.profileSummaryTranslation ?: model.profileTranslation
|
||||
}
|
||||
else -> {
|
||||
profileScale = model.profileScale
|
||||
profileTranslation = model.profileTranslation
|
||||
}
|
||||
}
|
||||
|
||||
matrixStack.translate(
|
||||
profileTranslation.x,
|
||||
profileTranslation.y + 1.5 * profileScale,
|
||||
profileTranslation.z - 4.0
|
||||
)
|
||||
matrixStack.scale(profileScale, profileScale, 1 / profileScale)
|
||||
}
|
||||
|
||||
matrixStack.mulPose(rotation)
|
||||
|
||||
model.applyAnimations(null, state, 0F, 0F, 0F, headYaw, headPitch)
|
||||
|
||||
@@ -1,97 +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.gui
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository
|
||||
import com.mojang.blaze3d.platform.InputConstants
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
fun handleProfileDebugKeys(keyCode: Int, poserResourceLocation: ResourceLocation, state: FloatingState) {
|
||||
if (!Cobblemon.config.enableDebugKeys) {
|
||||
return
|
||||
}
|
||||
val model = VaryingModelRepository.getPoser(poserResourceLocation, state)
|
||||
|
||||
val delta = when (keyCode) {
|
||||
InputConstants.KEY_UP -> Vec3(0.0, -0.01, 0.0)
|
||||
InputConstants.KEY_DOWN -> Vec3(0.0, 0.01, 0.0)
|
||||
InputConstants.KEY_LEFT -> Vec3(-0.01, 0.0, 0.0)
|
||||
InputConstants.KEY_RIGHT -> Vec3(0.01, 0.0, 0.0)
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (delta != null) {
|
||||
model.profileTranslation = model.profileTranslation.add(delta)
|
||||
model.profileSummaryTranslation = model.profileSummaryTranslation?.add(delta)
|
||||
model.profilePokedexTranslation = model.profilePokedexTranslation?.add(delta)
|
||||
}
|
||||
|
||||
val scaleDelta = when (keyCode) {
|
||||
InputConstants.KEY_EQUALS -> 0.01F
|
||||
InputConstants.KEY_MINUS -> -0.01F
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (scaleDelta != null) {
|
||||
model.profileScale += scaleDelta
|
||||
model.profileSummaryScale = model.profileSummaryScale?.plus(scaleDelta)
|
||||
model.profilePokedexScale = model.profilePokedexScale?.plus(scaleDelta)
|
||||
}
|
||||
}
|
||||
|
||||
fun logProfileTranslations(poserResourceLocation: ResourceLocation, state: FloatingState) {
|
||||
if (!Cobblemon.config.enableDebugKeys) {
|
||||
return
|
||||
}
|
||||
|
||||
val model = VaryingModelRepository.getPoser(poserResourceLocation, state)
|
||||
val player = Minecraft.getInstance().player
|
||||
|
||||
fun Double.f2() = "%.2f".format(this)
|
||||
fun Float.f2() = "%.2f".format(this)
|
||||
|
||||
fun sendTranslation(name: String, translation: Vec3) {
|
||||
player?.sendSystemMessage(Component.literal("$name Translation: (${translation.x.f2()}, ${translation.y.f2()}, ${translation.z.f2()})"))
|
||||
}
|
||||
|
||||
fun sendScale(name: String, scale: Float) {
|
||||
player?.sendSystemMessage(Component.literal("$name Scale: ${scale.f2()}"))
|
||||
}
|
||||
|
||||
fun logTranslation(name: String, translation: Vec3) {
|
||||
Cobblemon.LOGGER.info("override var ${name.replaceFirstChar(Char::lowercase)}Translation = Vec3(${translation.x.f2()}, ${translation.y.f2()}, ${translation.z.f2()})")
|
||||
}
|
||||
|
||||
fun logScale(name: String, scale: Float) {
|
||||
Cobblemon.LOGGER.info("override var ${name.replaceFirstChar(Char::lowercase)}Scale = ${scale.f2()}F")
|
||||
}
|
||||
|
||||
sendTranslation("Profile", model.profileTranslation)
|
||||
sendScale("Profile", model.profileScale)
|
||||
|
||||
model.profileSummaryTranslation?.let { sendTranslation("Summary Profile", it) }
|
||||
model.profileSummaryScale?.let { sendScale("Summary Profile", it) }
|
||||
|
||||
model.profilePokedexTranslation?.let { sendTranslation("Pokedex Profile", it) }
|
||||
model.profilePokedexScale?.let { sendScale("Pokedex Profile", it) }
|
||||
|
||||
logTranslation("Profile", model.profileTranslation)
|
||||
logScale("Profile", model.profileScale)
|
||||
|
||||
model.profileSummaryTranslation?.let { logTranslation("ProfileSummary", it) }
|
||||
model.profileSummaryScale?.let { logScale("ProfileSummary", it) }
|
||||
|
||||
model.profilePokedexTranslation?.let { logTranslation("ProfilePokedex", it) }
|
||||
model.profilePokedexScale?.let { logScale("ProfilePokedex", it) }
|
||||
}
|
||||
-1
@@ -41,7 +41,6 @@ class CobblemonConfigScreen(
|
||||
const val WIDGET_HEIGHT = SLOT_HEIGHT - PADDING
|
||||
const val LABEL_Y_OFFSET = 4
|
||||
const val WIDGET_Y_OFFSET = 0
|
||||
const val LABEL_MAX_WIDTH = SLOT_WIDTH - RESET_SLOT_WIDTH - WIDGET_WIDTH - PADDING * 2
|
||||
}
|
||||
|
||||
val clonedConfig = Cobblemon.config.clone()
|
||||
|
||||
+8
-12
@@ -8,18 +8,17 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.gui.config.variable
|
||||
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.LABEL_MAX_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.LABEL_Y_OFFSET
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.RESET_SLOT_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.SLOT_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.WIDGET_HEIGHT
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigScreen.Companion.WIDGET_Y_OFFSET
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigVariableList
|
||||
import com.cobblemon.mod.common.client.gui.config.CobblemonConfigVariableList.CobblemonConfigVariableListEntry
|
||||
import com.cobblemon.mod.common.client.render.drawScrollingText
|
||||
import com.cobblemon.mod.common.client.render.drawScaledText
|
||||
import com.cobblemon.mod.common.config.CobblemonConfig
|
||||
import com.cobblemon.mod.common.config.CobblemonConfigField
|
||||
import com.cobblemon.mod.common.util.lang
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.gui.components.Button
|
||||
import net.minecraft.client.gui.components.Tooltip
|
||||
@@ -92,15 +91,12 @@ abstract class CobblemonConfigVariable(
|
||||
val x = getX(left)
|
||||
val y = getY(top)
|
||||
|
||||
drawScrollingText(
|
||||
context,
|
||||
Minecraft.getInstance().font,
|
||||
labelLang,
|
||||
x,
|
||||
y + WIDGET_Y_OFFSET,
|
||||
x + LABEL_MAX_WIDTH,
|
||||
y + WIDGET_Y_OFFSET + WIDGET_HEIGHT,
|
||||
-1
|
||||
drawScaledText(
|
||||
context = context,
|
||||
text = labelLang,
|
||||
x = getX(left),
|
||||
y = getY(top) + LABEL_Y_OFFSET,
|
||||
shadow = true
|
||||
)
|
||||
|
||||
resetButton.x = x + SLOT_WIDTH - RESET_SLOT_WIDTH
|
||||
|
||||
+29
-18
@@ -115,19 +115,35 @@ class HabitatEditGUI(
|
||||
addOptionWidget(mimicInput)
|
||||
y += spacing
|
||||
|
||||
// Phase setting only visible if there's more than one phase
|
||||
val phaseCount = habitatSettingsDTO.pool.toHabitatPool()?.getPhaseCount() ?: 1
|
||||
if (phaseCount > 1) {
|
||||
phaseOrderButton = addOptionWidget(
|
||||
Button.builder(getPhaseOrderText()) {
|
||||
val orders = HabitatPhaseOrder.entries
|
||||
val currentIndex = orders.indexOf(habitatSettingsDTO.phaseOrder)
|
||||
habitatSettingsDTO.phaseOrder = orders[(currentIndex + 1) % orders.size]
|
||||
refresh()
|
||||
}.bounds(10, y, buttonWidth, 20).build()
|
||||
)
|
||||
y += spacing
|
||||
labels.add(lang("ui.edit.habitat.phase_number") to (10 to y))
|
||||
y += 12
|
||||
val phasesInput = EditBox(font, 10, y, buttonWidth, 20, "Phases".text())
|
||||
phasesInput.value = habitatSettingsDTO.numberOfPhases.toString()
|
||||
phasesInput.setResponder { value ->
|
||||
val phases = value.toIntOrNull()
|
||||
val valid = phases != null && phases > 0
|
||||
if (valid) {
|
||||
habitatSettingsDTO.numberOfPhases = phases
|
||||
}
|
||||
phasesInput.setTextColor(if (valid) validTextColor else invalidTextColor)
|
||||
setFieldValidity("phases", valid, "ui.edit.habitat.validation.phases")
|
||||
}
|
||||
val initialPhases = phasesInput.value.toIntOrNull()
|
||||
val initialPhasesValid = initialPhases != null && initialPhases > 0
|
||||
phasesInput.setTextColor(if (initialPhasesValid) validTextColor else invalidTextColor)
|
||||
setFieldValidity("phases", initialPhasesValid, "ui.edit.habitat.validation.phases")
|
||||
addOptionWidget(phasesInput)
|
||||
y += spacing
|
||||
|
||||
phaseOrderButton = addOptionWidget(
|
||||
Button.builder(getPhaseOrderText()) {
|
||||
val orders = HabitatPhaseOrder.entries
|
||||
val currentIndex = orders.indexOf(habitatSettingsDTO.phaseOrder)
|
||||
habitatSettingsDTO.phaseOrder = orders[(currentIndex + 1) % orders.size]
|
||||
refresh()
|
||||
}.bounds(10, y, buttonWidth, 20).build()
|
||||
)
|
||||
y += spacing
|
||||
|
||||
labels.add(lang("ui.edit.habitat.level_range") to (10 to y))
|
||||
y += 12
|
||||
@@ -374,10 +390,7 @@ class HabitatEditGUI(
|
||||
}
|
||||
|
||||
fun refresh() {
|
||||
val phaseCount = habitatSettingsDTO.pool.toHabitatPool()?.getPhaseCount() ?: 1
|
||||
if (phaseCount > 1 && ::phaseOrderButton.isInitialized) {
|
||||
phaseOrderButton.message = getPhaseOrderText()
|
||||
}
|
||||
phaseOrderButton.message = getPhaseOrderText()
|
||||
spawnModeButton.message = getSpawnModeText()
|
||||
poolSelectorButton.message = getPoolText()
|
||||
viewPoolButton.message = getViewPoolText()
|
||||
@@ -426,7 +439,6 @@ class HabitatEditGUI(
|
||||
}
|
||||
habitatSettingsDTO.pool = newCustomPool
|
||||
}
|
||||
rebuildWidgets()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -439,7 +451,6 @@ class HabitatEditGUI(
|
||||
}
|
||||
|
||||
habitatSettingsDTO.pool = selectedPool
|
||||
rebuildWidgets()
|
||||
}
|
||||
|
||||
private fun validateLevelRangeInputs() {
|
||||
|
||||
+6
-4
@@ -45,6 +45,7 @@ class HabitatSpawnEditorGUI(
|
||||
private val actionButtonBottomMargin = 10
|
||||
private val validTextColor = 0xFFFFFF
|
||||
private val invalidTextColor = 0xFF5555
|
||||
private val moonPhaseRange = 0..7
|
||||
private lateinit var positionTypeButton: Button
|
||||
private lateinit var bucketButton: Button
|
||||
private lateinit var timeOfDayButton: Button
|
||||
@@ -184,7 +185,7 @@ class HabitatSpawnEditorGUI(
|
||||
phasesInput.setTextColor(validTextColor)
|
||||
setFieldValidity("phases_list", true, "ui.edit.habitat.validation.phases_list")
|
||||
} else {
|
||||
val parsed = parsePhases(value)
|
||||
val parsed = parseMoonPhases(value)
|
||||
val valid = parsed != null
|
||||
if (valid) {
|
||||
spawn.phases = parsed
|
||||
@@ -193,7 +194,7 @@ class HabitatSpawnEditorGUI(
|
||||
setFieldValidity("phases_list", valid, "ui.edit.habitat.validation.phases_list")
|
||||
}
|
||||
}
|
||||
val initialPhasesValid = phasesInput.value.isBlank() || parsePhases(phasesInput.value) != null
|
||||
val initialPhasesValid = phasesInput.value.isBlank() || parseMoonPhases(phasesInput.value) != null
|
||||
phasesInput.setTextColor(if (initialPhasesValid) validTextColor else invalidTextColor)
|
||||
setFieldValidity("phases_list", initialPhasesValid, "ui.edit.habitat.validation.phases_list")
|
||||
addOptionWidget(phasesInput)
|
||||
@@ -331,7 +332,7 @@ class HabitatSpawnEditorGUI(
|
||||
return runCatching { PokemonSpecies.getByName(lowered) }.getOrNull()
|
||||
}
|
||||
|
||||
private fun parsePhases(raw: String): IntRanges? {
|
||||
private fun parseMoonPhases(raw: String): IntRanges? {
|
||||
val ranges = mutableListOf<IntRange>()
|
||||
val tokens = raw.split(",").map(String::trim)
|
||||
if (tokens.isEmpty() || tokens.any { it.isEmpty() }) {
|
||||
@@ -343,12 +344,13 @@ class HabitatSpawnEditorGUI(
|
||||
val range = when (parts.size) {
|
||||
1 -> {
|
||||
val value = parts[0].toIntOrNull() ?: return null
|
||||
if (value !in moonPhaseRange) return null
|
||||
value..value
|
||||
}
|
||||
2 -> {
|
||||
val start = parts[0].toIntOrNull() ?: return null
|
||||
val end = parts[1].toIntOrNull() ?: return null
|
||||
if (start > end) {
|
||||
if (start !in moonPhaseRange || end !in moonPhaseRange || start > end) {
|
||||
return null
|
||||
}
|
||||
start..end
|
||||
|
||||
@@ -32,8 +32,6 @@ import com.cobblemon.mod.common.client.ClientMoLangFunctions.setupClient
|
||||
import com.cobblemon.mod.common.client.CobblemonClient
|
||||
import com.cobblemon.mod.common.client.CobblemonResources
|
||||
import com.cobblemon.mod.common.client.gui.CobblemonRenderable
|
||||
import com.cobblemon.mod.common.client.gui.handleProfileDebugKeys
|
||||
import com.cobblemon.mod.common.client.gui.logProfileTranslations
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.BASE_HEIGHT
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.BASE_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.HALF_OVERLAY_WIDTH
|
||||
@@ -429,11 +427,6 @@ class PokedexGUI private constructor(
|
||||
override fun onClose() {
|
||||
if (blockPos != null) AdjustBlockEntityViewerCountPacket(blockPos, false).sendToServer()
|
||||
playSound(CobblemonSounds.POKEDEX_CLOSE)
|
||||
|
||||
selectedEntry?.speciesId?.let { speciesId ->
|
||||
logProfileTranslations(speciesId, pokemonInfoWidget.state)
|
||||
}
|
||||
|
||||
super.onClose()
|
||||
}
|
||||
|
||||
@@ -764,12 +757,6 @@ class PokedexGUI private constructor(
|
||||
return true
|
||||
}
|
||||
|
||||
if (!searchWidget.isFocused) {
|
||||
selectedEntry?.speciesId?.let { speciesId ->
|
||||
handleProfileDebugKeys(keyCode, speciesId, pokemonInfoWidget.state)
|
||||
}
|
||||
}
|
||||
|
||||
return super.keyPressed(keyCode, scanCode, modifiers)
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -22,7 +22,6 @@ import com.cobblemon.mod.common.api.types.ElementalType
|
||||
import com.cobblemon.mod.common.client.ClientMoLangFunctions.setupClient
|
||||
import com.cobblemon.mod.common.client.CobblemonClient
|
||||
import com.cobblemon.mod.common.client.CobblemonResources
|
||||
import com.cobblemon.mod.common.client.gui.ProfileTransformType
|
||||
import com.cobblemon.mod.common.client.gui.TypeIcon
|
||||
import com.cobblemon.mod.common.client.gui.drawProfilePokemon
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.HALF_OVERLAY_HEIGHT
|
||||
@@ -387,8 +386,7 @@ class PokemonInfoWidget(val pX: Int, val pY: Int, val updateForm: (PokedexForm)
|
||||
partialTicks = delta,
|
||||
rotation = Quaternionf().fromEulerXYZDegrees(rotationVector),
|
||||
state = state,
|
||||
blockLight = 15,
|
||||
profileTransformType = ProfileTransformType.POKEDEX,
|
||||
blockLight = 15
|
||||
)
|
||||
|
||||
matrices.popPose()
|
||||
|
||||
+1
-2
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.client.gui.pokedex.widgets
|
||||
import com.cobblemon.mod.common.api.gui.blitk
|
||||
import com.cobblemon.mod.common.api.text.bold
|
||||
import com.cobblemon.mod.common.client.CobblemonResources
|
||||
import com.cobblemon.mod.common.client.gui.ProfileTransformType
|
||||
import com.cobblemon.mod.common.client.gui.drawProfilePokemon
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.HALF_OVERLAY_WIDTH
|
||||
import com.cobblemon.mod.common.client.gui.pokedex.PokedexGUIConstants.POKEMON_DESCRIPTION_HEIGHT
|
||||
@@ -91,7 +90,7 @@ class SizeWidget(val pX: Int, val pY: Int) : SoundlessWidget(
|
||||
rotation = Quaternionf().fromEulerXYZDegrees(Vector3f(0F, 0F, 0F)),
|
||||
state = FloatingState(),
|
||||
scale = modelScale,
|
||||
profileTransformType = ProfileTransformType.NONE,
|
||||
applyProfileTransform = false,
|
||||
applyBaseScale = true,
|
||||
r = 0F,
|
||||
g = 0F,
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.gui.summary
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonItems
|
||||
import com.cobblemon.mod.common.CobblemonNetwork.sendToServer
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
@@ -20,8 +21,14 @@ import com.cobblemon.mod.common.api.text.bold
|
||||
import com.cobblemon.mod.common.api.text.text
|
||||
import com.cobblemon.mod.common.client.CobblemonClient
|
||||
import com.cobblemon.mod.common.client.CobblemonResources
|
||||
import com.cobblemon.mod.common.client.gui.*
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.*
|
||||
import com.cobblemon.mod.common.client.gui.CobblemonRenderable
|
||||
import com.cobblemon.mod.common.client.gui.ExitButton
|
||||
import com.cobblemon.mod.common.client.gui.TypeIcon
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.EvolutionSelectScreen
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.MarkingsWidget
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.ModelWidget
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.NicknameEntryWidget
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.PartyWidget
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.screens.SummaryTab
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.screens.info.InfoWidget
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.screens.marks.MarksWidget
|
||||
@@ -30,6 +37,7 @@ import com.cobblemon.mod.common.client.gui.summary.widgets.screens.moves.MovesWi
|
||||
import com.cobblemon.mod.common.client.gui.summary.widgets.screens.stats.StatWidget
|
||||
import com.cobblemon.mod.common.client.keybind.keybinds.SummaryBinding
|
||||
import com.cobblemon.mod.common.client.render.drawScaledText
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.VaryingModelRepository
|
||||
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetItemHiddenPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.storage.party.MovePartyPokemonPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.storage.party.SwapPartyPokemonPacket
|
||||
@@ -707,9 +715,27 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
|
||||
) {
|
||||
this.focused = null
|
||||
}
|
||||
|
||||
handleProfileDebugKeys(keyCode, selectedPokemon.species.resourceIdentifier, modelWidget.state)
|
||||
|
||||
if (Cobblemon.config.enableDebugKeys) {
|
||||
val model = VaryingModelRepository.getPoser(selectedPokemon.species.resourceIdentifier, modelWidget.state)
|
||||
if (keyCode == InputConstants.KEY_UP) {
|
||||
model.profileTranslation = model.profileTranslation.add(0.0, -0.01, 0.0)
|
||||
}
|
||||
if (keyCode == InputConstants.KEY_DOWN) {
|
||||
model.profileTranslation = model.profileTranslation.add(0.0, 0.01, 0.0)
|
||||
}
|
||||
if (keyCode == InputConstants.KEY_LEFT) {
|
||||
model.profileTranslation = model.profileTranslation.add(-0.01, 0.0, 0.0)
|
||||
}
|
||||
if (keyCode == InputConstants.KEY_RIGHT) {
|
||||
model.profileTranslation = model.profileTranslation.add(0.01, 0.0, 0.0)
|
||||
}
|
||||
if (keyCode == InputConstants.KEY_EQUALS) {
|
||||
model.profileScale += 0.01F
|
||||
}
|
||||
if (keyCode == InputConstants.KEY_MINUS) {
|
||||
model.profileScale -= 0.01F
|
||||
}
|
||||
}
|
||||
return super.keyPressed(keyCode, scanCode, modifiers)
|
||||
}
|
||||
|
||||
@@ -718,8 +744,13 @@ class Summary private constructor(party: Collection<Pokemon?>, private val edita
|
||||
}
|
||||
|
||||
override fun onClose() {
|
||||
logProfileTranslations(selectedPokemon.species.resourceIdentifier, modelWidget.state)
|
||||
|
||||
if (Cobblemon.config.enableDebugKeys) {
|
||||
val model = VaryingModelRepository.getPoser(selectedPokemon.species.resourceIdentifier, modelWidget.state)
|
||||
Minecraft.getInstance().player?.sendSystemMessage(Component.literal("Profile Translation: ${model.profileTranslation}"))
|
||||
Minecraft.getInstance().player?.sendSystemMessage(Component.literal("Profile Scale: ${model.profileScale}"))
|
||||
Cobblemon.LOGGER.info("override var profileTranslation = Vec3d(${model.profileTranslation.x}, ${model.profileTranslation.y}, ${model.profileTranslation.z})")
|
||||
Cobblemon.LOGGER.info("override var profileScale = ${model.profileScale}F")
|
||||
}
|
||||
super.onClose()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.client.gui.summary.widgets
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.tags.CobblemonItemTags
|
||||
import com.cobblemon.mod.common.client.gui.ProfileTransformType
|
||||
import com.cobblemon.mod.common.client.gui.drawProfilePokemon
|
||||
import com.cobblemon.mod.common.client.gui.calculateHeadYawAndPitch
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.FloatingState
|
||||
@@ -117,8 +116,7 @@ class ModelWidget(
|
||||
partialTicks = partialTicks,
|
||||
headYaw = currentYawAndPitch.first,
|
||||
headPitch = currentYawAndPitch.second,
|
||||
blockLight = blockLight,
|
||||
profileTransformType = ProfileTransformType.SUMMARY,
|
||||
blockLight = blockLight
|
||||
)
|
||||
|
||||
heldItemRenderer.renderOnModel(
|
||||
|
||||
+71
-50
@@ -120,7 +120,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
fun getLogoResource(langCode: String?): ResourceLocation =
|
||||
logoResourceMap.entries.find { it.value.contains(langCode?.substringBefore("_")) }?.key ?: logo
|
||||
}
|
||||
|
||||
var selectedTM: TechnicalMachine? = null
|
||||
var heldStackMove: MoveTemplate? = null
|
||||
var tmList: SettableObservable<MutableList<TechnicalMachine>> = SettableObservable(mutableListOf())
|
||||
var output: ItemStack? = null
|
||||
@@ -159,8 +159,6 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
var oldIngredientItems: Array<Item> = arrayOf(Items.AIR, Items.AIR, Items.AIR)
|
||||
var oldResultTmSlotItem: Item = Items.AIR
|
||||
|
||||
var moveInfoTM: TechnicalMachine? = null
|
||||
|
||||
override fun init() {
|
||||
imageWidth = WIDTH
|
||||
imageHeight = HEIGHT
|
||||
@@ -173,8 +171,6 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
logoPosY = topPos + 1
|
||||
scanPosY = topPos + 1
|
||||
|
||||
menu.onSelectedTMUpdate = { updateSelectedTM(it) }
|
||||
|
||||
partySlotList.clear()
|
||||
CobblemonClient.storage.party.forEachIndexed { index, pokemon ->
|
||||
partySlotList.add(TMPartySlotWidget(
|
||||
@@ -230,14 +226,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
pX = leftPos + 4,
|
||||
pY = topPos + 29,
|
||||
tmList,
|
||||
setTM = { tm, clicked ->
|
||||
if (clicked) {
|
||||
if (tm != menu.currentlySelectedTM) SetActiveTMPacket(tm).sendToServer()
|
||||
setScreenFromMode(TM_BURN_MODE)
|
||||
} else {
|
||||
updateMoveInformation(tm)
|
||||
}
|
||||
}
|
||||
setTM = { tm, clicked -> setSelectedTM(tm, clicked) }
|
||||
)
|
||||
if (!children().contains(movesScrollingList)) addRenderableWidget(movesScrollingList)
|
||||
|
||||
@@ -263,21 +252,24 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
selectedMoveButton = MoveSlotButton(
|
||||
leftPos + 6,
|
||||
topPos + 6,
|
||||
move = menu.currentlySelectedTM?.moveName,
|
||||
pp = menu.currentlySelectedTM?.moveName?.pp ?: 0,
|
||||
move = selectedTM?.moveName,
|
||||
pp = selectedTM?.moveName?.pp ?: 0,
|
||||
ppAsFraction = false
|
||||
) {
|
||||
if ((it as MoveSlotButton).enabled) {
|
||||
if (::movesScrollingList.isInitialized && movesScrollingList.children().isEmpty()) setMoveList()
|
||||
playSound(CobblemonSounds.GUI_CLICK)
|
||||
setScreenFromMode(MOVE_SELECT_MODE)
|
||||
|
||||
// Clear active TM
|
||||
CobblemonNetwork.sendToServer(SetActiveTMPacket(null))
|
||||
}
|
||||
}
|
||||
if (!children().contains(selectedMoveButton)) addRenderableWidget(selectedMoveButton)
|
||||
|
||||
startButton = StartButton(leftPos + 5F, topPos + 35F) {
|
||||
if (!(it as StartButton).disabled) {
|
||||
menu.currentlySelectedTM?.let {
|
||||
selectedTM?.let {
|
||||
val burnActive = menu.containerData?.get(TMMachineBlockEntity.BURN_ACTIVE_INDEX) ?: 0
|
||||
CobblemonNetwork.sendToServer(SetTMMachineContainerDataPacket(
|
||||
TMMachineBlockEntity.BURN_ACTIVE_INDEX,
|
||||
@@ -292,14 +284,17 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
))
|
||||
}*/
|
||||
|
||||
//CobblemonNetwork.sendToServer(SetActiveTMPacket(it))
|
||||
CobblemonNetwork.sendToServer(SetActiveTMPacket(it))
|
||||
if (burnActive != 1) playSound(CobblemonSounds.TM_MACHINE_START)
|
||||
inventory.setChanged()
|
||||
menu.broadcastChanges()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!children().contains(startButton)) addRenderableWidget(startButton)
|
||||
|
||||
setScreenFromMode(mode)
|
||||
initScreen = false
|
||||
|
||||
updateSlotItemMemory()
|
||||
}
|
||||
@@ -311,7 +306,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
if (scanPosY + 1 >= (topPos + SCREEN_SAVER_HEIGHT) * 2) scanPosY = 0
|
||||
|
||||
if (mode == TM_BURN_MODE) {
|
||||
menu.currentlySelectedTM?.let { tm ->
|
||||
selectedTM?.let { tm ->
|
||||
val resultStack = menu.inventory!!.getItem(TMMachineMenu.RESULT_SLOT)
|
||||
val craftedTmStack = ItemStack(CobblemonItems.TECHNICAL_MACHINE)
|
||||
.also { TMMoveComponent.setTMMove(it, tm.moveName) }
|
||||
@@ -344,7 +339,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
}
|
||||
|
||||
if (::selectedMoveButton.isInitialized) {
|
||||
selectedMoveButton.enabled = (heldStackMove == null || heldStackMove == menu.currentlySelectedTM?.moveName)
|
||||
selectedMoveButton.enabled = !isBurnActive() && (heldStackMove == null || heldStackMove == selectedTM?.moveName)
|
||||
}
|
||||
|
||||
if (isBurnActive()) {
|
||||
@@ -355,6 +350,9 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check if screen should be switched upon opening UI
|
||||
if (!initScreen) loadBurnScreenData()
|
||||
}
|
||||
|
||||
if (heldMoveItemChanged) {
|
||||
@@ -402,6 +400,32 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
return wasScreenSaverActive
|
||||
}
|
||||
|
||||
private fun loadBurnScreenData() {
|
||||
var tm: TechnicalMachine? = null
|
||||
|
||||
val blockPos = menu.containerData?.let {
|
||||
val x = it.get(TMMachineBlockEntity.POSITION_X_INDEX)
|
||||
val y = it.get(TMMachineBlockEntity.POSITION_Y_INDEX)
|
||||
val z = it.get(TMMachineBlockEntity.POSITION_Z_INDEX)
|
||||
BlockPos(x, y, z)
|
||||
}
|
||||
|
||||
inventory.player.level().getBlockEntity(blockPos)?.let { blockEntity ->
|
||||
if (blockEntity is TMMachineBlockEntity) {
|
||||
Moves.getByName(blockEntity.activeMove)?.let {
|
||||
tm = TechnicalMachines.moveToTM[it]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If burn currently in progress or if active TM set, set to burn screen
|
||||
if (isBurnActive() || tm != null) {
|
||||
setSelectedTM(tm, true)
|
||||
}
|
||||
|
||||
initScreen = true
|
||||
}
|
||||
|
||||
private fun isBurnActive(): Boolean = (menu.containerData?.get(TMMachineBlockEntity.BURN_ACTIVE_INDEX) ?: 0) == 1
|
||||
|
||||
private fun setScreenFromMode(screen: Int) {
|
||||
@@ -443,6 +467,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
|
||||
private fun toggleTypeSelect(isVisible: Boolean) {
|
||||
if (isVisible) {
|
||||
setSelectedTM(null, false)
|
||||
if (::moveSearchWidget.isInitialized) moveSearchWidget.value = ""
|
||||
if (selectedPokemon != null) selectedPokemon = null
|
||||
sortType = null
|
||||
@@ -480,6 +505,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
}
|
||||
|
||||
private fun toggleTMBurn(isVisible: Boolean) {
|
||||
if (!isVisible) setSelectedTM(null, false)
|
||||
if (::selectedMoveButton.isInitialized) selectedMoveButton.visible = isVisible
|
||||
if (::startButton.isInitialized) startButton.visible = isVisible
|
||||
}
|
||||
@@ -490,40 +516,35 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
return if (learnableMoves.contains(move)) TMPartySlotWidget.CAN_LEARN else TMPartySlotWidget.CANNOT_LEARN
|
||||
}
|
||||
|
||||
fun updateSelectedTM(tm: TechnicalMachine?) {
|
||||
if (!initScreen) {
|
||||
initScreen = true
|
||||
tm?.let {
|
||||
setScreenFromMode(TM_BURN_MODE)
|
||||
sortType = ElementalTypes.get(tm.type)
|
||||
setMoveList()
|
||||
}
|
||||
fun setSelectedTM(tm: TechnicalMachine?, clicked: Boolean) {
|
||||
if (selectedTM != tm) {
|
||||
selectedTM = tm
|
||||
updatePartySlotStatus(tm?.moveName)
|
||||
}
|
||||
|
||||
if (mode == TM_BURN_MODE) updateMoveInformation(tm)
|
||||
|
||||
tm?.let {
|
||||
if (::selectedMoveButton.isInitialized) {
|
||||
selectedMoveButton.apply {
|
||||
move = it.moveName
|
||||
pp = it.moveName.pp
|
||||
}
|
||||
}
|
||||
if (::movesScrollingList.isInitialized) {
|
||||
movesScrollingList.setSlotHighlighted(if (clicked) null else selectedTM?.id)
|
||||
}
|
||||
}
|
||||
|
||||
fun updateMoveInformation(tm: TechnicalMachine?) {
|
||||
moveInfoTM = tm
|
||||
|
||||
if (::moveDescriptionWidget.isInitialized) {
|
||||
val selectedDescription = tm?.moveName?.description?.string
|
||||
val selectedDescription = selectedTM?.moveName?.description?.string
|
||||
moveDescriptionWidget.setText(
|
||||
if (selectedDescription != null) listOf(selectedDescription) else emptyList()
|
||||
)
|
||||
}
|
||||
|
||||
if (::movesScrollingList.isInitialized) {
|
||||
movesScrollingList.setSlotHighlighted(tm?.id)
|
||||
if (clicked) {
|
||||
CobblemonNetwork.sendToServer(SetActiveTMPacket(tm))
|
||||
|
||||
selectedTM?.let {
|
||||
if (::selectedMoveButton.isInitialized) {
|
||||
selectedMoveButton.apply {
|
||||
move = it.moveName
|
||||
pp = it.moveName.pp
|
||||
}
|
||||
setScreenFromMode(TM_BURN_MODE)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -536,7 +557,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
}
|
||||
|
||||
fun renderDiscTypeOverlay(poseStack: PoseStack, isDiscRotating: Boolean, alpha: Float = 1F) {
|
||||
menu.currentlySelectedTM?.let {
|
||||
selectedTM?.let {
|
||||
val primaryRgb = it.moveName.elementalType.primaryColor.toRGB()
|
||||
val secondaryRgb = it.moveName.elementalType.secondaryColor.toRGB()
|
||||
blitk(
|
||||
@@ -685,7 +706,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
}
|
||||
|
||||
fun renderMoveInfo(context: GuiGraphics, mouseX: Int, mouseY: Int) {
|
||||
val moveTemplate = moveInfoTM?.moveName
|
||||
val moveTemplate = selectedTM?.moveName
|
||||
|
||||
blitk(
|
||||
matrixStack = context.pose(),
|
||||
@@ -1036,7 +1057,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
movesScrollingList.setDisabled(true, TechnicalMachines.moveToTM[heldStackMove])
|
||||
if (mode == MOVE_SELECT_MODE) {
|
||||
val heldStackTm = TechnicalMachines.moveToTM[heldStackMove]
|
||||
updateMoveInformation(if (tmList.get().contains(heldStackTm)) heldStackTm else null)
|
||||
setSelectedTM(if (tmList.get().contains(heldStackTm)) heldStackTm else null, false)
|
||||
|
||||
// Scroll to move if moves list contains held TM move
|
||||
if (tmList.get().contains(heldStackTm)) {
|
||||
@@ -1056,8 +1077,8 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
heldStackMove = null
|
||||
|
||||
// Reset selected move on move select screen
|
||||
if (mode == MOVE_SELECT_MODE) updateMoveInformation(null)
|
||||
updatePartySlotStatus(menu.currentlySelectedTM?.moveName)
|
||||
if (mode == MOVE_SELECT_MODE) setSelectedTM(null, false)
|
||||
updatePartySlotStatus(selectedTM?.moveName)
|
||||
|
||||
if (::movesScrollingList.isInitialized) {
|
||||
movesScrollingList.setDisabled(false)
|
||||
@@ -1134,7 +1155,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
if (isInventoryKeyPressed(minecraft, keyCode, scanCode)) {
|
||||
if (searchFocused) { return true }
|
||||
else {
|
||||
onClose()
|
||||
Minecraft.getInstance().setScreen(null)
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -1145,7 +1166,7 @@ class TMMachineScreen(containerMenu: TMMachineMenu, val inventory: Inventory, ti
|
||||
this.focused = null
|
||||
return true
|
||||
} else {
|
||||
onClose()
|
||||
Minecraft.getInstance().setScreen(null)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
+4
-11
@@ -19,6 +19,7 @@ import net.minecraft.world.level.block.Block
|
||||
object SetActiveTMPacketHandler : ServerNetworkPacketHandler<SetActiveTMPacket> {
|
||||
override fun handle(packet: SetActiveTMPacket, server: MinecraftServer, player: ServerPlayer) {
|
||||
val menu = player.containerMenu as? TMMachineMenu ?: return
|
||||
val inventory = menu.inventory ?: return
|
||||
val tmData = Cobblemon.playerDataManager.getTMData(player)
|
||||
|
||||
if (packet.tm != null && (!packet.tm.isPassivelyObtained() && packet.tm.id !in tmData.learnedTMs)) {
|
||||
@@ -29,17 +30,9 @@ object SetActiveTMPacketHandler : ServerNetworkPacketHandler<SetActiveTMPacket>
|
||||
blockEntity.activeMove = packet.tm?.moveName?.name ?: ""
|
||||
blockEntity.setChanged()
|
||||
player.level().sendBlockUpdated(blockEntity.blockPos, blockEntity.blockState, blockEntity.blockState, Block.UPDATE_CLIENTS)
|
||||
|
||||
blockEntity.burnActive = false
|
||||
blockEntity.burnProgress = 0
|
||||
|
||||
player.level().players().forEach { thePlayer -> //Update all players with matching menu/blockentity
|
||||
val tmmMenu = thePlayer.containerMenu as? TMMachineMenu ?: return@forEach
|
||||
if (tmmMenu.tmMachineEntity == blockEntity) {
|
||||
tmmMenu.currentlySelectedTM = packet.tm
|
||||
tmmMenu.broadcastChanges()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inventory.setChanged()
|
||||
menu.broadcastChanges()
|
||||
}
|
||||
}
|
||||
|
||||
-21
@@ -1,21 +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.net.gui
|
||||
|
||||
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
|
||||
import com.cobblemon.mod.common.block.tmmachine.TMMachineMenu
|
||||
import com.cobblemon.mod.common.net.messages.client.ui.SynchronizeActiveTMPacket
|
||||
import net.minecraft.client.Minecraft
|
||||
|
||||
object SynchronizeActiveTMHandler: ClientNetworkPacketHandler<SynchronizeActiveTMPacket> {
|
||||
override fun handle(packet: SynchronizeActiveTMPacket, client: Minecraft) {
|
||||
val tmmMenu = client.player?.containerMenu as? TMMachineMenu ?: return
|
||||
tmmMenu.clientSetSelectedTM(packet.tm)
|
||||
}
|
||||
}
|
||||
@@ -18,23 +18,17 @@ import com.mojang.blaze3d.systems.RenderSystem
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer
|
||||
import com.mojang.math.Axis
|
||||
import net.minecraft.Util
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.gui.Font
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.renderer.MultiBufferSource
|
||||
import net.minecraft.client.renderer.RenderType
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture
|
||||
import net.minecraft.client.renderer.texture.TextureAtlas
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.MutableComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.FormattedCharSequence
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.item.ItemDisplayContext
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
fun renderScaledGuiItemIcon(itemStack: ItemStack, x: Double, y: Double, scale: Double = 1.0, zTranslation: Float = 100.0F, matrixStack: PoseStack? = null) {
|
||||
val itemRenderer = Minecraft.getInstance().itemRenderer
|
||||
@@ -103,55 +97,6 @@ fun getDepletableRedGreen(
|
||||
return r.toFloat() to g.toFloat()
|
||||
}
|
||||
|
||||
fun drawScrollingText(
|
||||
context: GuiGraphics,
|
||||
font: Font,
|
||||
text: Component,
|
||||
minX: Int,
|
||||
minY: Int,
|
||||
maxX: Int,
|
||||
maxY: Int,
|
||||
colour: Int,
|
||||
minScrollVelocity: Double? = 10.0
|
||||
) {
|
||||
val textWidth = font.width(text)
|
||||
val fittedMaxX = if (textWidth <= maxX - minX) minX + textWidth else maxX
|
||||
renderScrollingString(context, font, text, minX, minY, fittedMaxX, maxY, colour, minScrollVelocity)
|
||||
}
|
||||
|
||||
/** Copied from [net.minecraft.client.gui.components.AbstractWidget.renderScrollingString] **/
|
||||
fun renderScrollingString(
|
||||
context: GuiGraphics,
|
||||
font: Font,
|
||||
text: Component,
|
||||
minX: Int,
|
||||
minY: Int,
|
||||
maxX: Int,
|
||||
maxY: Int,
|
||||
colour: Int,
|
||||
minScrollVelocity: Double? = 10.0
|
||||
) {
|
||||
val textWidth = font.width(text)
|
||||
val centerY = (minY + maxY - 9) / 2 + 1
|
||||
val boxWidth = maxX - minX
|
||||
if (textWidth <= boxWidth) {
|
||||
val centerX = Mth.clamp((minX + maxX) / 2, minX + textWidth / 2, maxX - textWidth / 2)
|
||||
context.drawCenteredString(font, text, centerX, centerY, colour)
|
||||
return
|
||||
}
|
||||
|
||||
val overflow = textWidth - boxWidth
|
||||
var period = (overflow * 0.5).coerceAtLeast(3.0)
|
||||
if (minScrollVelocity != null) {
|
||||
period = period.coerceAtMost(2 * overflow / minScrollVelocity)
|
||||
}
|
||||
val time = Util.getMillis() / 1000.0
|
||||
val easedProgress = sin((Math.PI / 2) * cos(2 * Math.PI * time / period)) / 2.0 + 0.5
|
||||
val offset = Mth.lerp(easedProgress, 0.0, overflow.toDouble())
|
||||
context.enableScissor(minX, minY, maxX, maxY)
|
||||
context.drawString(font, text, minX - offset.toInt(), centerY, colour)
|
||||
context.disableScissor()
|
||||
}
|
||||
|
||||
fun drawScaledText(
|
||||
context: GuiGraphics,
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
import java.lang.reflect.Method
|
||||
|
||||
/**
|
||||
* Detects whether a shaderpack is currently active, via Iris (Fabric/NeoForge) or OptiFine.
|
||||
*
|
||||
* Every reference here is reflective and fully guarded: Iris/OptiFine are optional and may be
|
||||
* absent at runtime, so we never hard-reference their classes. If neither is present (or their
|
||||
* APIs ever change shape) the lookups fail silently during class init and [shadersActive] simply
|
||||
* returns `false`. This is the loader-safe contract the rest of the particle code relies on — it
|
||||
* must work identically on Fabric and NeoForge and when no shader mod is installed at all.
|
||||
*
|
||||
* The reflective handles are resolved once; only the cheap boolean accessor is invoked per call.
|
||||
* Particle render types call this at most a handful of times per frame (once per [begin]), so the
|
||||
* cost is negligible.
|
||||
*/
|
||||
object ShaderCompat {
|
||||
|
||||
// Iris: net.irisshaders.iris.api.v0.IrisApi.getInstance().isShaderPackInUse()
|
||||
// getInstance() returns a stable singleton, so it is safe to cache.
|
||||
private val irisInstance: Any?
|
||||
private val irisIsShaderPackInUse: Method?
|
||||
|
||||
// OptiFine: net.optifine.Config.isShaders() (static)
|
||||
private val optifineIsShaders: Method?
|
||||
|
||||
init {
|
||||
var irisInst: Any? = null
|
||||
var irisMethod: Method? = null
|
||||
try {
|
||||
val irisApi = Class.forName("net.irisshaders.iris.api.v0.IrisApi")
|
||||
irisInst = irisApi.getMethod("getInstance").invoke(null)
|
||||
irisMethod = irisApi.getMethod("isShaderPackInUse")
|
||||
} catch (ignored: Throwable) {
|
||||
irisInst = null
|
||||
irisMethod = null
|
||||
}
|
||||
irisInstance = irisInst
|
||||
irisIsShaderPackInUse = irisMethod
|
||||
|
||||
var optifineMethod: Method? = null
|
||||
try {
|
||||
optifineMethod = Class.forName("net.optifine.Config").getMethod("isShaders")
|
||||
} catch (ignored: Throwable) {
|
||||
optifineMethod = null
|
||||
}
|
||||
optifineIsShaders = optifineMethod
|
||||
}
|
||||
|
||||
/**
|
||||
* `true` when Iris or OptiFine reports an active (compiled and enabled) shaderpack. Never throws;
|
||||
* any reflective failure is treated as "no shaders".
|
||||
*/
|
||||
fun shadersActive(): Boolean {
|
||||
val instance = irisInstance
|
||||
val irisMethod = irisIsShaderPackInUse
|
||||
if (instance != null && irisMethod != null) {
|
||||
try {
|
||||
if (irisMethod.invoke(instance) == true) return true
|
||||
} catch (ignored: Throwable) {}
|
||||
}
|
||||
|
||||
val optifineMethod = optifineIsShaders
|
||||
if (optifineMethod != null) {
|
||||
try {
|
||||
if (optifineMethod.invoke(null) == true) return true
|
||||
} catch (ignored: Throwable) {}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -194,6 +194,16 @@ class SnowstormParticle(
|
||||
val uvs = storm.effect.particle.uvMode.get(runtime, age / 20.0, lifetime / 20.0, uvDetails)
|
||||
val colour = storm.getParticleColor() ?: storm.effect.particle.tinting.getTint(runtime)
|
||||
|
||||
// Under an active shaderpack the alpha-composited materials use premultiplied-alpha blending
|
||||
// (see ParticleMaterials.ALPHA), so the color we submit must be premultiplied by its alpha to
|
||||
// match. In vanilla this branch is skipped and the straight-alpha color is sent unchanged, so
|
||||
// the no-shader look is identical. ADD/OPAQUE are never premultiplied.
|
||||
val alpha = colour.w
|
||||
val premultiply = ParticleMaterials.premultipliesUnderShaders(storm.effect.particle.material)
|
||||
val red = if (premultiply) colour.x * alpha else colour.x
|
||||
val green = if (premultiply) colour.y * alpha else colour.y
|
||||
val blue = if (premultiply) colour.z * alpha else colour.z
|
||||
|
||||
val spriteURange = sprite.u1 - sprite.u0
|
||||
val spriteVRange = sprite.v1 - sprite.v0
|
||||
|
||||
@@ -206,22 +216,22 @@ class SnowstormParticle(
|
||||
vertexConsumer
|
||||
.addVertex(particleVertices[0].x, particleVertices[0].y, particleVertices[0].z)
|
||||
.setUv(maxU, maxV)
|
||||
.setColor(colour.x, colour.y, colour.z, colour.w)
|
||||
.setColor(red, green, blue, alpha)
|
||||
.setLight(p)
|
||||
vertexConsumer
|
||||
.addVertex(particleVertices[1].x, particleVertices[1].y, particleVertices[1].z)
|
||||
.setUv(maxU, minV)
|
||||
.setColor(colour.x, colour.y, colour.z, colour.w)
|
||||
.setColor(red, green, blue, alpha)
|
||||
.setLight(p)
|
||||
vertexConsumer
|
||||
.addVertex(particleVertices[2].x, particleVertices[2].y, particleVertices[2].z)
|
||||
.setUv(minU, minV)
|
||||
.setColor(colour.x, colour.y, colour.z, colour.w)
|
||||
.setColor(red, green, blue, alpha)
|
||||
.setLight(p)
|
||||
vertexConsumer
|
||||
.addVertex(particleVertices[3].x, particleVertices[3].y, particleVertices[3].z)
|
||||
.setUv(minU, maxV)
|
||||
.setColor(colour.x, colour.y, colour.z, colour.w)
|
||||
.setColor(red, green, blue, alpha)
|
||||
.setLight(p)
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -72,8 +72,7 @@ object MountedCameraRenderer {
|
||||
val rollable = vehicle as OrientationControllable
|
||||
val vehicleController = rollable.getOrientationController()
|
||||
|
||||
val state = FloatingState().also { it.currentAspects = vehicle.pokemon.aspects }
|
||||
val model = getPoser(vehicle.pokemon.species.resourceIdentifier, state)
|
||||
val model = getPoser(vehicle.pokemon.species.resourceIdentifier, FloatingState())
|
||||
|
||||
val locatorName = delegate.getSeatLocator(driver)
|
||||
val locator = delegate.locatorStates[locatorName] ?: return null
|
||||
|
||||
+2
-6
@@ -34,6 +34,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.quirk.ModelQuirk
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.quirk.SimpleQuirk
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.repository.RenderContext
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.WaveFunction
|
||||
import com.cobblemon.mod.common.client.util.exists
|
||||
import com.cobblemon.mod.common.entity.PosableEntity
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.generic.GenericBedrockEntity
|
||||
@@ -133,11 +134,6 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
|
||||
*/
|
||||
open var profileTranslation = Vec3(0.0, 0.0, 0.0)
|
||||
|
||||
open var profilePokedexScale: Float? = null
|
||||
open var profilePokedexTranslation: Vec3? = null
|
||||
open var profileSummaryScale: Float? = null
|
||||
open var profileSummaryTranslation: Vec3? = null
|
||||
|
||||
var red = 1F
|
||||
var green = 1F
|
||||
var blue = 1F
|
||||
@@ -255,7 +251,7 @@ open class PosableModel(@Transient override val rootPart: Bone) : ModelFrame {
|
||||
}
|
||||
|
||||
fun setLayerContext(buffer: MultiBufferSource, state: PosableState, layers: Iterable<ModelLayer>) {
|
||||
currentLayers = layers.sortedBy { it.translucent }
|
||||
currentLayers = layers
|
||||
bufferProvider = buffer
|
||||
currentState = state
|
||||
}
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class ChanseyModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("chansey")
|
||||
override val leftLeg = getPart("left_foot")
|
||||
override val rightLeg = getPart("right_foot")
|
||||
|
||||
override var portraitScale = 1.5F
|
||||
override var portraitTranslation = Vec3(-0.35, 0.3, 0.0)
|
||||
|
||||
override var profileScale = 0.8F
|
||||
override var profileTranslation = Vec3(0.0, 0.55, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var battleIdle: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("chansey", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("chansey", "blink") }
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(
|
||||
bedrock("chansey", "sleep")
|
||||
)
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(
|
||||
bedrock("chansey", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("chansey", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
battleIdle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
condition = { it.isBattling },
|
||||
transformTicks = 10,
|
||||
animations = arrayOf(
|
||||
bedrock("chansey", "battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("chansey", "faint")
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class DiglettAlolanModel(root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("diglett_alolan")
|
||||
|
||||
override var portraitScale = 1.8F
|
||||
override var portraitTranslation = Vec3(-0.06, -0.86, 0.0)
|
||||
|
||||
override var profileScale = 0.9F
|
||||
override var profileTranslation = Vec3(0.0, 0.32, 0.0)
|
||||
|
||||
lateinit var stand: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var battleidle: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("diglett_alolan", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("diglett_alolan", "blink")}
|
||||
val quirk = quirk { bedrockStateful("diglett_alolan", "quirk_idle")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("diglett_alolan", "sleep"))
|
||||
)
|
||||
|
||||
stand = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink,quirk),
|
||||
animations = arrayOf(bedrock("diglett_alolan", "ground_idle"))
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(bedrock("diglett_alolan", "ground_idle"))
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battleidle",
|
||||
poseTypes = STATIONARY_POSES,
|
||||
condition = { it.isBattling },
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(bedrock("diglett_alolan", "battle_idle"))
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("diglett_alolan", "faint")
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.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 DiglettModel(root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("diglett")
|
||||
|
||||
override var portraitScale = 1.8F
|
||||
override var portraitTranslation = Vec3(-0.06, -0.86, 0.0)
|
||||
|
||||
override var profileScale = 0.9F
|
||||
override var profileTranslation = Vec3(0.0, 0.32, 0.0)
|
||||
|
||||
lateinit var stand: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var battleidle: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("diglett", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("diglett", "blink")}
|
||||
val quirk = quirk { bedrockStateful("diglett", "quirk_idle")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("diglett", "sleep"))
|
||||
)
|
||||
|
||||
stand = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
quirks = arrayOf(blink, quirk),
|
||||
animations = arrayOf(bedrock("diglett", "ground_idle"))
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(bedrock("diglett", "ground_walk"))
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battleidle",
|
||||
poseTypes = STATIONARY_POSES,
|
||||
quirks = arrayOf(blink, quirk),
|
||||
animations = arrayOf(bedrock("diglett", "battle_idle"))
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("diglett", "faint")
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class DugtrioAlolanModel(root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("dugtrio_alolan")
|
||||
|
||||
override var portraitScale = 1.3F
|
||||
override var portraitTranslation = Vec3(-0.11, -0.1, 0.0)
|
||||
|
||||
override var profileScale = 0.9F
|
||||
override var profileTranslation = Vec3(0.0, 0.29, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walking: CobblemonPose
|
||||
lateinit var battleidle: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("dugtrio_alolan", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("dugtrio_alolan", "blink")}
|
||||
val blink2 = quirk { bedrockStateful("dugtrio_alolan", "blink2")}
|
||||
val blink3 = quirk { bedrockStateful("dugtrio_alolan", "blink3")}
|
||||
|
||||
val quirk = quirk { bedrockStateful("dugtrio_alolan", "quirk_idle")}
|
||||
val quirk2 = quirk { bedrockStateful("dugtrio_alolan", "quirk_idle2")}
|
||||
val quirk3 = quirk { bedrockStateful("dugtrio_alolan", "quirk_idle3")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("dugtrio_alolan", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink, blink2, blink3, quirk, quirk2, quirk3),
|
||||
animations = arrayOf(bedrock("dugtrio_alolan", "ground_idle"))
|
||||
)
|
||||
|
||||
walking = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink, blink2, blink3),
|
||||
animations = arrayOf(bedrock("dugtrio_alolan", "ground_idle"))
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battleidle",
|
||||
poseTypes = STATIONARY_POSES,
|
||||
condition = { it.isBattling },
|
||||
quirks = arrayOf(blink, blink2, blink3, quirk, quirk2, quirk3),
|
||||
animations = arrayOf(bedrock("dugtrio_alolan", "battle_idle"))
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("dugtrio_alolan", "faint")
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.SingleBoneLookAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class DugtrioModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("dugtrio")
|
||||
override val head = getPart("body3")
|
||||
|
||||
val lefthead = object : HeadedFrame {
|
||||
override val rootPart = this@DugtrioModel.rootPart
|
||||
override val head: ModelPart = getPart("body2")
|
||||
}
|
||||
val righthead = object : HeadedFrame {
|
||||
override val rootPart = this@DugtrioModel.rootPart
|
||||
override val head: ModelPart = getPart("body1")
|
||||
}
|
||||
|
||||
override var portraitScale = 1.3F
|
||||
override var portraitTranslation = Vec3(-0.11, -0.1, 0.0)
|
||||
|
||||
override var profileScale = 0.9F
|
||||
override var profileTranslation = Vec3(0.0, 0.29, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walking: CobblemonPose
|
||||
lateinit var battleidle: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("dugtrio", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("dugtrio", "blink")}
|
||||
val blink2 = quirk { bedrockStateful("dugtrio", "blink2")}
|
||||
val blink3 = quirk { bedrockStateful("dugtrio", "blink3")}
|
||||
|
||||
val quirk = quirk { bedrockStateful("dugtrio", "quirk_idle")}
|
||||
val quirk2 = quirk { bedrockStateful("dugtrio", "quirk_idle2")}
|
||||
val quirk3 = quirk { bedrockStateful("dugtrio", "quirk_idle3")}
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("dugtrio", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink, blink2, blink3, quirk, quirk2, quirk3),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(pitchMultiplier = 0.6F, yawMultiplier = 0.4F, maxPitch = 10F, minPitch = -30F),
|
||||
SingleBoneLookAnimation(lefthead, false, false, false, false, 1F, 1.4F, 0F, -30F, 20F, -45F),
|
||||
SingleBoneLookAnimation(righthead, false, false, false, false, 1F, 1.4F, 0F, -30F, 45F, -25F),
|
||||
bedrock("dugtrio", "ground_idle"))
|
||||
)
|
||||
|
||||
walking = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink, blink2, blink3),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(pitchMultiplier = 0.6F, yawMultiplier = 0.4F, maxPitch = 10F, minPitch = -30F),
|
||||
SingleBoneLookAnimation(lefthead, false, false, false, false, 1F, 1.4F, 0F, -30F, 20F, -45F),
|
||||
SingleBoneLookAnimation(righthead, false, false, false, false, 1F, 1.4F, 0F, -30F, 45F, -25F),
|
||||
bedrock("dugtrio", "ground_walk"))
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battleidle",
|
||||
poseTypes = STATIONARY_POSES,
|
||||
condition = { it.isBattling },
|
||||
quirks = arrayOf(blink, blink2, blink3, quirk, quirk2, quirk3),
|
||||
animations = arrayOf(bedrock("dugtrio", "battle_idle"))
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("dugtrio", "faint")
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType.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 GravelerModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("graveler")
|
||||
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 1.4F
|
||||
override var portraitTranslation = Vec3(-0.1, -0.28, 0.0)
|
||||
|
||||
override var profileScale = 0.9F
|
||||
override var profileTranslation = Vec3(0.0, 0.37, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("graveler", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("graveler", "blink")}
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("graveler", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
BipedWalkAnimation(this, periodMultiplier = 1.1F),
|
||||
bedrock("graveler", "ground_idle")
|
||||
//bedrock("graveler", "ground_walk")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("graveler", "faint") else null
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
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.ALL_POSES
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class KakunaModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("kakuna")
|
||||
override val head = getPart("head")
|
||||
|
||||
override var portraitScale = 1.7F
|
||||
override var portraitTranslation = Vec3(0.1, -0.4, 0.0)
|
||||
override var profileScale = 0.96F
|
||||
override var profileTranslation = Vec3(0.0, 0.35, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("kakuna", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("kakuna", "sleep"))
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = ALL_POSES - PoseType.SLEEP,
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("kakuna", "ground_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("kakuna", "faint")
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType.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 NidoranfModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("nidoran_f")
|
||||
override val head = getPart("head")
|
||||
override val foreLeftLeg = getPart("leg_front_left")
|
||||
override val foreRightLeg = getPart("leg_front_right")
|
||||
override val hindLeftLeg = getPart("leg_back_left")
|
||||
override val hindRightLeg = getPart("leg_back_right")
|
||||
|
||||
override var portraitScale = 2.0F
|
||||
override var portraitTranslation = Vec3(-0.16, -0.85, 0.0)
|
||||
|
||||
override var profileScale = 1.03F
|
||||
override var profileTranslation = Vec3(0.02, 0.21, 0.0)
|
||||
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("nidoranf", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("nidoranf", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidoranf", "idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidoranf", "idle"),
|
||||
QuadrupedWalkAnimation(this)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("nidoranf", "faint") else null
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.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 NidoranmModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("nidoran_m")
|
||||
override val head = getPart("head")
|
||||
override val foreLeftLeg = getPart("leg_front_left")
|
||||
override val foreRightLeg = getPart("leg_front_right")
|
||||
override val hindLeftLeg = getPart("leg_back_left")
|
||||
override val hindRightLeg = getPart("leg_back_right")
|
||||
|
||||
override var portraitScale = 1.97F
|
||||
override var portraitTranslation = Vec3(-0.18, -1.28, 0.0)
|
||||
|
||||
override var profileScale = 1.05F
|
||||
override var profileTranslation = Vec3(0.03, 0.11, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("nidoranm", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("nidoranm", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidoranm", "idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidoranm", "idle"),
|
||||
QuadrupedWalkAnimation(this)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("nidoranm", "faint") else null
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.QuadrupedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.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 com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class NidorinaModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("nidorina")
|
||||
override val head = getPart("head")
|
||||
override val foreLeftLeg= getPart("left_upper_arm")
|
||||
override val foreRightLeg = getPart("right_upper_arm")
|
||||
override val hindLeftLeg = getPart("left_leg")
|
||||
override val hindRightLeg = getPart("right_leg")
|
||||
|
||||
override var portraitScale = 2.13F
|
||||
override var portraitTranslation = Vec3(-0.05, -0.71, 0.0)
|
||||
|
||||
override var profileScale = 1.0F
|
||||
override var profileTranslation = Vec3(0.0, 0.21, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var battleidle: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("nidorina", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("nidorina", "blink")}
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidorina", "idle3")
|
||||
)
|
||||
)
|
||||
|
||||
sleep = registerPose(
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("nidorina", "idle2"))
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidorina", "idle2"),
|
||||
QuadrupedWalkAnimation(this)
|
||||
)
|
||||
)
|
||||
|
||||
battleidle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = PoseType.STATIONARY_POSES,
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
condition = { it.isBattling },
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("nidorina", "idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("nidorina", "faint") else null
|
||||
}
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.parabolaFunction
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.math.geometry.toRadians
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class PidgeottoModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BiWingedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("pidgeotto")
|
||||
override val head = getPart("neck")
|
||||
|
||||
override val leftWing = getPart("wing_closed_left")
|
||||
override val rightWing = getPart("wing_closed_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
private val tail = getPart("tail")
|
||||
|
||||
private val wingOpenRight = getPart("wing_open_right")
|
||||
private val wingOpenLeft = getPart("wing_open_left")
|
||||
private val wingClosedRight = getPart("wing_closed_right")
|
||||
private val wingClosedLeft = getPart("wing_closed_left")
|
||||
|
||||
override var portraitScale = 2.8F
|
||||
override var portraitTranslation = Vec3(-0.4, -0.9, 0.0)
|
||||
override var profileScale = 1.1F
|
||||
override var profileTranslation = Vec3(0.0, 0.1, 0.0)
|
||||
|
||||
lateinit var sleep: Pose
|
||||
lateinit var stand: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var hover: Pose
|
||||
lateinit var fly: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("pidgeotto", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("pidgeotto", "blink")}
|
||||
val flyQuirk1 = quirk { bedrockStateful("pidgeotto", "air_fly_quirk") }
|
||||
val flyQuirk2 = quirk { bedrockStateful("pidgeotto", "air_fly_quirk2") }
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
animations = arrayOf(bedrock("pidgeotto", "sleep_PLACEHOLDER"))
|
||||
)
|
||||
|
||||
stand = registerPose(
|
||||
poseName = "stand",
|
||||
poseTypes = STATIONARY_POSES - PoseType.HOVER + UI_POSES,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgeotto", "ground_idle_PLACEHOLDER")
|
||||
)
|
||||
)
|
||||
walk = registerPose(
|
||||
poseName = "hover",
|
||||
poseTypes = PoseType.MOVING_POSES - PoseType.FLY,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgeotto", "ground_idle_PLACEHOLDER"),
|
||||
rootPart.translation(
|
||||
function = parabolaFunction(
|
||||
peak = -4F,
|
||||
period = 0.4F
|
||||
),
|
||||
timeVariable = { state, _, _ -> state.animationSeconds },
|
||||
axis = ModelPartTransformation.Y_AXIS
|
||||
),
|
||||
head.translation(
|
||||
function = sineFunction(
|
||||
amplitude = (-20F).toRadians(),
|
||||
period = 1F,
|
||||
verticalShift = (-10F).toRadians()
|
||||
),
|
||||
axis = ModelPartTransformation.X_AXIS,
|
||||
timeVariable = { state, _, _ -> state.animationSeconds }
|
||||
),
|
||||
leftLeg.rotation(
|
||||
function = parabolaFunction(
|
||||
tightness = -20F,
|
||||
phaseShift = 0F,
|
||||
verticalShift = (30F).toRadians()
|
||||
),
|
||||
axis = ModelPartTransformation.X_AXIS,
|
||||
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
|
||||
),
|
||||
rightLeg.rotation(
|
||||
function = parabolaFunction(
|
||||
tightness = -20F,
|
||||
phaseShift = 0F,
|
||||
verticalShift = (30F).toRadians()
|
||||
),
|
||||
axis = ModelPartTransformation.X_AXIS,
|
||||
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
|
||||
),
|
||||
tail.rotation(
|
||||
function = sineFunction(
|
||||
amplitude = (-5F).toRadians(),
|
||||
period = 1F
|
||||
),
|
||||
axis = ModelPartTransformation.X_AXIS,
|
||||
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
|
||||
),
|
||||
wingFlap(
|
||||
flapFunction = sineFunction(
|
||||
amplitude = (-5F).toRadians(),
|
||||
period = 0.4F,
|
||||
phaseShift = 0.00F,
|
||||
verticalShift = (-20F).toRadians()
|
||||
),
|
||||
timeVariable = { state, _, _ -> state.animationSeconds },
|
||||
axis = ModelPartTransformation.Z_AXIS
|
||||
),
|
||||
rightWing.translation(
|
||||
function = parabolaFunction(
|
||||
tightness = -10F,
|
||||
phaseShift = 30F,
|
||||
verticalShift = (25F).toRadians()
|
||||
),
|
||||
axis = ModelPartTransformation.Y_AXIS,
|
||||
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
|
||||
),
|
||||
leftWing.translation(
|
||||
function = parabolaFunction(
|
||||
tightness = -10F,
|
||||
phaseShift = 30F,
|
||||
verticalShift = (25F).toRadians()
|
||||
),
|
||||
axis = ModelPartTransformation.Y_AXIS,
|
||||
timeVariable = { _, _, ageInTicks -> ageInTicks / 20 },
|
||||
),
|
||||
)
|
||||
)
|
||||
hover = registerPose(
|
||||
poseName = "fly",
|
||||
poseType = PoseType.HOVER,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = true)
|
||||
),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgeotto", "air_idle")
|
||||
)
|
||||
)
|
||||
fly = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.FLY,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = true)
|
||||
),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink, flyQuirk1, flyQuirk2),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgeotto", "air_fly")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.PitchTiltAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.SHOULDER_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 PidgeyModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("pidgey")
|
||||
override val head = getPart("head")
|
||||
|
||||
private val wingOpenRight = getPart("wing_open_right")
|
||||
private val wingOpenLeft = getPart("wing_open_left")
|
||||
private val wingClosedRight = getPart("wing_closed_right")
|
||||
private val wingClosedLeft = getPart("wing_closed_left")
|
||||
|
||||
override var portraitScale = 3.5F
|
||||
override var portraitTranslation = Vec3(-0.1, -2.1, 0.0)
|
||||
|
||||
override var profileScale = 1.2F
|
||||
override var profileTranslation = Vec3(0.0, -0.01, 0.0)
|
||||
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var stand: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var hover: CobblemonPose
|
||||
lateinit var fly: CobblemonPose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("pidgey", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("pidgey", "blink") }
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleeping",
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("pidgey", "sleep_PLACEHOLDER"))
|
||||
)
|
||||
|
||||
stand = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = SHOULDER_POSES + UI_POSES + PoseType.STATIONARY_POSES - PoseType.HOVER,
|
||||
transformTicks = 10,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgey", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
hover = registerPose(
|
||||
poseName = "hover",
|
||||
poseType = PoseType.HOVER,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = true)
|
||||
),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
PitchTiltAnimation(bone = getPart("body"), maxChangePerTick = 1F),
|
||||
singleBoneLook(),
|
||||
bedrock("pidgey", "air_idle")
|
||||
)
|
||||
)
|
||||
|
||||
fly = registerPose(
|
||||
poseName = "fly",
|
||||
poseType = PoseType.FLY,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = true)
|
||||
),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
PitchTiltAnimation(bone = getPart("body"), maxChangePerTick = 1F),
|
||||
singleBoneLook(),
|
||||
bedrock("pidgey", "air_fly")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walking",
|
||||
poseTypes = PoseType.MOVING_POSES - PoseType.FLY,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
wingClosedRight.createTransformation().withVisibility(visibility = true),
|
||||
wingOpenLeft.createTransformation().withVisibility(visibility = false),
|
||||
wingOpenRight.createTransformation().withVisibility(visibility = false)
|
||||
),
|
||||
transformTicks = 10,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("pidgey", "ground_walk")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isInWater
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class TentacoolModel(root: ModelPart) : PokemonPosableModel(root) {
|
||||
override val rootPart = root.registerChildWithAllChildren("tentacool")
|
||||
|
||||
override var portraitScale = 1.2F
|
||||
override var portraitTranslation = Vec3(0.1, 1.1, 0.0)
|
||||
|
||||
override var profileScale = 0.6F
|
||||
override var profileTranslation = Vec3(0.0, 0.8, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var swim: CobblemonPose
|
||||
lateinit var float: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var watersleep: CobblemonPose
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("tentacool", "blink")}
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseType = PoseType.STAND,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("tentacool", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.WALK,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("tentacool", "ground_idle")
|
||||
//bedrock("tentacool", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
float = registerPose(
|
||||
poseName = "float",
|
||||
poseTypes = UI_POSES + PoseType.FLOAT,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("tentacool", "water_idle")
|
||||
)
|
||||
)
|
||||
|
||||
swim = registerPose(
|
||||
poseName = "swim",
|
||||
poseType = PoseType.SWIM,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("tentacool", "water_swim")
|
||||
)
|
||||
)
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
condition = { !it.isInWater },
|
||||
animations = arrayOf(bedrock("tentacool", "sleep"))
|
||||
)
|
||||
|
||||
watersleep = registerPose(
|
||||
poseName = "watersleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
condition = { it.isInWater },
|
||||
animations = arrayOf(bedrock("tentacool", "water_sleep"))
|
||||
)
|
||||
}
|
||||
|
||||
// override fun getFaintAnimation(
|
||||
// pokemonEntity: PokemonEntity,
|
||||
// state: PosableState<PokemonEntity>
|
||||
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("tentacool", "faint") else null
|
||||
}
|
||||
+1
-1
@@ -30,7 +30,7 @@ class WartortleModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
|
||||
override var portraitTranslation = Vec3(-0.17, 0.54, 0.0)
|
||||
|
||||
override var profileScale = 0.69F
|
||||
override var profileTranslation = Vec3(0.0, 0.69, 0.0)
|
||||
override var profileTranslation = Vec3(-0.04, 0.69, 0.0)
|
||||
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var standing: CobblemonPose
|
||||
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen2
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.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.pokemon.PokemonPosableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.CobblemonPose
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.isBattling
|
||||
import net.minecraft.client.model.geom.ModelPart
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
class BlisseyModel(root: ModelPart) : PokemonPosableModel(root), BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("blissey")
|
||||
|
||||
override val leftLeg = getPart("left_foot")
|
||||
override val rightLeg = getPart("right_foot")
|
||||
override val leftArm = getPart("left_arm")
|
||||
override val rightArm = getPart("right_arm")
|
||||
|
||||
override var portraitScale = 1.5F
|
||||
override var portraitTranslation = Vec3(-0.6, 0.9, 0.0)
|
||||
|
||||
override var profileScale = 0.7F
|
||||
override var profileTranslation = Vec3(0.0, 0.7, 0.0)
|
||||
|
||||
lateinit var standing: CobblemonPose
|
||||
lateinit var walk: CobblemonPose
|
||||
lateinit var sleep: CobblemonPose
|
||||
lateinit var battle_idle: CobblemonPose
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("blissey", "blink") }
|
||||
val eggQuirk = quirk { bedrockStateful("blissey", "eggadjust_quirk") }
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(
|
||||
bedrock("blissey", "sleep")
|
||||
)
|
||||
)
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = STATIONARY_POSES + UI_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink, eggQuirk),
|
||||
animations = arrayOf(
|
||||
bedrock("blissey", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
bedrock("blissey", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
battle_idle = registerPose(
|
||||
poseName = "battle_idle",
|
||||
poseTypes = STATIONARY_POSES,
|
||||
condition = { it.isBattling },
|
||||
quirks = arrayOf(blink, eggQuirk),
|
||||
animations = arrayOf(
|
||||
bedrock("blissey", "battle_idle")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState) = bedrockStateful("blissey", "faint")
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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.gen5
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.ActiveAnimation
|
||||
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 GolettModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, BipedFrame, BimanualFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("golett")
|
||||
override val head = getPart("head")
|
||||
|
||||
override val leftArm = getPart("arm_left")
|
||||
override val rightArm = getPart("arm_right")
|
||||
override val leftLeg = getPart("leg_left")
|
||||
override val rightLeg = getPart("leg_right")
|
||||
|
||||
override var portraitScale = 3.0F
|
||||
override var portraitTranslation = Vec3(-0.15, -0.45, 0.0)
|
||||
|
||||
override var profileScale = 0.8F
|
||||
override var profileTranslation = Vec3(0.0, 0.55, 0.0)
|
||||
|
||||
lateinit var standing: Pose
|
||||
lateinit var walk: Pose
|
||||
lateinit var sleep: Pose
|
||||
|
||||
override val cryAnimation = CryProvider { bedrockStateful("golett", "cry") }
|
||||
|
||||
override fun registerPoses() {
|
||||
val blink = quirk { bedrockStateful("golett", "blink") }
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("golett", "ground_idle")
|
||||
)
|
||||
)
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseTypes = PoseType.MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
animations = arrayOf(
|
||||
singleBoneLook(),
|
||||
bedrock("golett", "ground_walk")
|
||||
)
|
||||
)
|
||||
|
||||
sleep = registerPose(
|
||||
poseName = "sleep",
|
||||
poseType = PoseType.SLEEP,
|
||||
animations = arrayOf(bedrock("golett", "sleep"))
|
||||
)
|
||||
}
|
||||
|
||||
override fun getFaintAnimation(state: PosableState): ActiveAnimation? {
|
||||
return if (state.isNotPosedIn(sleep, standing, walk)) bedrockStateful("golett", "faint") else null
|
||||
}
|
||||
}
|
||||
+15
@@ -224,11 +224,16 @@ object VaryingModelRepository {
|
||||
inbuilt("metapod", ::MetapodModel)
|
||||
inbuilt("butterfree", ::ButterfreeModel)
|
||||
inbuilt("weedle", ::WeedleModel)
|
||||
inbuilt("kakuna", ::KakunaModel)
|
||||
inbuilt("beedrill", ::BeedrillModel)
|
||||
inbuilt("rattata", ::RattataModel)
|
||||
inbuilt("raticate", ::RaticateModel)
|
||||
inbuilt("rattata_alolan", ::RattataAlolanModel)
|
||||
inbuilt("raticate_alolan", ::RaticateAlolanModel)
|
||||
inbuilt("pidgey", ::PidgeyModel)
|
||||
inbuilt("pidgeotto", ::PidgeottoModel)
|
||||
inbuilt("diglett", ::DiglettModel)
|
||||
inbuilt("dugtrio", ::DugtrioModel)
|
||||
inbuilt("krabby", ::KrabbyModel)
|
||||
inbuilt("paras", ::ParasModel)
|
||||
inbuilt("mankey", ::MankeyModel)
|
||||
@@ -243,6 +248,7 @@ object VaryingModelRepository {
|
||||
inbuilt("machop", ::MachopModel)
|
||||
inbuilt("machoke", ::MachokeModel)
|
||||
inbuilt("machamp", ::MachampModel)
|
||||
inbuilt("chansey", ::ChanseyModel)
|
||||
inbuilt("cubone", ::CuboneModel)
|
||||
inbuilt("dodrio", ::DodrioModel)
|
||||
inbuilt("doduo", ::DoduoModel)
|
||||
@@ -255,6 +261,7 @@ object VaryingModelRepository {
|
||||
inbuilt("geodude", ::GeodudeModel)
|
||||
inbuilt("golduck", ::GolduckModel)
|
||||
inbuilt("golem", ::GolemModel)
|
||||
inbuilt("graveler", ::GravelerModel)
|
||||
inbuilt("hitmonchan", ::HitmonchanModel)
|
||||
inbuilt("hitmonlee", ::HitmonleeModel)
|
||||
inbuilt("kabuto", ::KabutoModel)
|
||||
@@ -265,6 +272,9 @@ object VaryingModelRepository {
|
||||
inbuilt("marowak", ::MarowakModel)
|
||||
inbuilt("meowth", ::MeowthModel)
|
||||
inbuilt("nidoqueen", ::NidoqueenModel)
|
||||
inbuilt("nidoranf", ::NidoranfModel)
|
||||
inbuilt("nidoranm", ::NidoranmModel)
|
||||
inbuilt("nidorina", ::NidorinaModel)
|
||||
inbuilt("nidorino", ::NidorinoModel)
|
||||
inbuilt("persian", ::PersianModel)
|
||||
inbuilt("pinsir", ::PinsirModel)
|
||||
@@ -275,12 +285,14 @@ object VaryingModelRepository {
|
||||
inbuilt("rapidash", ::RapidashModel)
|
||||
inbuilt("sandslash", ::SandslashModel)
|
||||
inbuilt("tangela", ::TangelaModel)
|
||||
inbuilt("tentacool", ::TentacoolModel)
|
||||
inbuilt("venomoth", ::VenomothModel)
|
||||
inbuilt("venonat", ::VenonatModel)
|
||||
inbuilt("elekid", ::ElekidModel)
|
||||
inbuilt("hitmontop", ::HitmontopModel)
|
||||
inbuilt("electivire", ::ElectivireModel)
|
||||
inbuilt("tangrowth", ::TangrowthModel)
|
||||
inbuilt("blissey", ::BlisseyModel)
|
||||
inbuilt("piloswine", ::PiloswineModel)
|
||||
inbuilt("quagsire", ::QuagsireModel)
|
||||
inbuilt("swinub", ::SwinubModel)
|
||||
@@ -329,6 +341,7 @@ object VaryingModelRepository {
|
||||
inbuilt("lotad", :: LotadModel)
|
||||
inbuilt("lombre", :: LombreModel)
|
||||
inbuilt("ludicolo", :: LudicoloModel)
|
||||
inbuilt("golett", :: GolettModel)
|
||||
inbuilt("stantler", :: StantlerModel)
|
||||
inbuilt("bergmite", :: BergmiteModel)
|
||||
inbuilt("avalugg", :: AvaluggModel)
|
||||
@@ -536,6 +549,8 @@ object VaryingModelRepository {
|
||||
inbuilt("beartic", ::BearticModel)
|
||||
inbuilt("dreepy", ::DreepyModel)
|
||||
inbuilt("drakloak", ::DrakloakModel)
|
||||
inbuilt("diglett_alolan", ::DiglettAlolanModel)
|
||||
inbuilt("dugtrio_alolan", ::DugtrioAlolanModel)
|
||||
inbuilt("makuhita", ::MakuhitaModel)
|
||||
inbuilt("hariyama", ::HariyamaModel)
|
||||
inbuilt("alomomola", ::AlomomolaModel)
|
||||
|
||||
@@ -45,9 +45,6 @@ object GiveAllPokemon {
|
||||
val orderedSpeces = PokemonSpecies.implemented.sortedBy { it.nationalPokedexNumber }
|
||||
|
||||
for (species in orderedSpeces) {
|
||||
if (species.nationalPokedexNumber !in range) {
|
||||
continue
|
||||
}
|
||||
val pokemon = species.create()
|
||||
pokemon.setOriginalTrainer(player.uuid)
|
||||
pc.add(pokemon)//.sendOut(player.level() as ServerWorld, player.pos)
|
||||
|
||||
+4
-6
@@ -14,6 +14,7 @@ import com.bedrockk.molang.runtime.value.MoValue
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.CobblemonMemories
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.OrientationControllable
|
||||
import com.cobblemon.mod.common.api.entity.PokemonSender
|
||||
import com.cobblemon.mod.common.api.entity.PokemonSideDelegate
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.addPokemonEntityFunctions
|
||||
@@ -30,6 +31,7 @@ import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.pokemon.activestate.ActivePokemonState
|
||||
import com.cobblemon.mod.common.pokemon.activestate.SentOutState
|
||||
import com.cobblemon.mod.common.util.*
|
||||
import com.cobblemon.mod.common.util.math.geometry.toRadians
|
||||
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.syncher.EntityDataAccessor
|
||||
@@ -41,6 +43,8 @@ import net.minecraft.world.entity.ai.attributes.Attributes
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.pathfinder.PathType
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import org.joml.Matrix3f
|
||||
import org.joml.Vector3f
|
||||
import java.util.*
|
||||
import kotlin.math.*
|
||||
|
||||
@@ -48,7 +52,6 @@ import kotlin.math.*
|
||||
class PokemonServerDelegate : PokemonSideDelegate {
|
||||
lateinit var entity: PokemonEntity
|
||||
var acknowledgedHPValue = -1
|
||||
var acknowledgedLevel = -1
|
||||
val passengerOffsets = mutableMapOf<Int, Vec3>()
|
||||
|
||||
/** Mocked properties exposed to the client [PokemonEntity]. */
|
||||
@@ -298,11 +301,6 @@ class PokemonServerDelegate : PokemonSideDelegate {
|
||||
if (entity.ownerUUID == null) entity.ownerUUID = entity.pokemon.getOwnerUUID()
|
||||
}
|
||||
|
||||
if (acknowledgedLevel != entity.pokemon.level) {
|
||||
acknowledgedLevel = entity.pokemon.level
|
||||
updateAttributes(entity.pokemon)
|
||||
}
|
||||
|
||||
val tethering = entity.tethering
|
||||
if (tethering != null && entity.pokemon.tetheringId != tethering.tetheringId) {
|
||||
return entity.discard()
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
package com.cobblemon.mod.common.item
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.block.TypeGemClusterBlock
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.InteractionResult
|
||||
@@ -30,7 +29,7 @@ class GemItem(settings: Properties, val block: Block): Item(settings) {
|
||||
if (state.isFaceSturdy(world, pos, direction)) {
|
||||
if (!world.getBlockState(pos.relative(direction)).isAir) return InteractionResult.FAIL
|
||||
context.itemInHand.consume(1, context.player)
|
||||
world.setBlockAndUpdate(pos.relative(direction), block.defaultBlockState().setValue(DirectionalBlock.FACING, direction).setValue(TypeGemClusterBlock.STAGE, 1))
|
||||
world.setBlockAndUpdate(pos.relative(direction), block.defaultBlockState().setValue(DirectionalBlock.FACING, direction))
|
||||
world.playSound(null, pos, CobblemonSounds.TYPE_GEM_CLUSTER_SOUNDS.placeSound, SoundSource.BLOCKS)
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
@@ -316,6 +316,7 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.PASTURE)
|
||||
entries.accept(CobblemonItems.TM_MACHINE)
|
||||
entries.accept(CobblemonItems.DISC_SHELF)
|
||||
entries.accept(CobblemonItems.HABITAT_BLOCK)
|
||||
|
||||
entries.accept(CobblemonItems.GILDED_CHEST)
|
||||
entries.accept(CobblemonItems.YELLOW_GILDED_CHEST)
|
||||
|
||||
@@ -40,7 +40,7 @@ class SinisterTeaItem : Item(
|
||||
val holder = inst.effect
|
||||
val effect = holder.value()
|
||||
|
||||
if (effect.isInstantenous && (inst.duration <= 1)) {
|
||||
if (effect.isInstantenous) {
|
||||
effect.applyInstantenousEffect(user as? Player, null, user, inst.amplifier, 1.0)
|
||||
} else {
|
||||
user.addEffect(inst)
|
||||
|
||||
@@ -36,7 +36,7 @@ import net.minecraft.world.level.block.Block
|
||||
class StatusCureItem(val itemName: String, vararg val status: Status, block: Block) : ItemNameBlockItem(block, Properties()), PokemonSelectingItem {
|
||||
override val bagItem = object : BagItem {
|
||||
override val itemName = this@StatusCureItem.itemName
|
||||
override val returnItem = Items.GLASS_BOTTLE
|
||||
override val returnItem = Items.AIR
|
||||
override fun canUse(stack: ItemStack, battle: PokemonBattle, target: BattlePokemon) = canUseOnPokemon(stack, target.effectedPokemon)
|
||||
override fun getShowdownInput(actor: BattleActor, battlePokemon: BattlePokemon, data: String?) = "cure_status${status.takeIf { it.isNotEmpty() }?.let { " ${it.joinToString(separator = " ") { it.showdownName } }" } ?: "" }"
|
||||
}
|
||||
|
||||
-9
@@ -64,7 +64,6 @@ class SpawnPokemonPacket(
|
||||
var rideStamina: Float,
|
||||
var isAlpha: Boolean,
|
||||
var silent: Boolean,
|
||||
var riders: List<Int>,
|
||||
vanillaSpawnPacket: ClientboundAddEntityPacket,
|
||||
) : SpawnExtraDataEntityPacket<SpawnPokemonPacket, PokemonEntity>(vanillaSpawnPacket) {
|
||||
|
||||
@@ -99,7 +98,6 @@ class SpawnPokemonPacket(
|
||||
entity.entityData.get(PokemonEntity.RIDE_STAMINA),
|
||||
entity.entityData.get(PokemonEntity.IS_ALPHA),
|
||||
entity.isSilent,
|
||||
entity.occupiedSeats.map { entry -> entry.value.id }.toList(),
|
||||
vanillaSpawnPacket
|
||||
)
|
||||
|
||||
@@ -136,7 +134,6 @@ class SpawnPokemonPacket(
|
||||
buffer.writeFloat(rideStamina)
|
||||
buffer.writeBoolean(isAlpha)
|
||||
buffer.writeBoolean(silent)
|
||||
buffer.writeCollection(this.riders) { pb, value -> pb.writeInt(value) }
|
||||
}
|
||||
|
||||
override fun applyData(entity: PokemonEntity, level: ClientLevel) {
|
||||
@@ -187,10 +184,6 @@ class SpawnPokemonPacket(
|
||||
|
||||
entity.tickSpawned = this.tickSpawned
|
||||
entity.delegate.updateAge(this.tickSpawned)
|
||||
|
||||
if (this.riders.isNotEmpty()) {
|
||||
this.riders.forEach { level.getEntity(it)?.startRiding(entity) }
|
||||
}
|
||||
}
|
||||
|
||||
override fun checkType(entity: Entity): Boolean = entity is PokemonEntity
|
||||
@@ -229,7 +222,6 @@ class SpawnPokemonPacket(
|
||||
val rideStamina = buffer.readFloat()
|
||||
val isAlpha = buffer.readBoolean()
|
||||
val silent = buffer.readBoolean()
|
||||
val riders = buffer.readList { it.readInt() }.toList()
|
||||
val vanillaPacket = decodeVanillaPacket(buffer)
|
||||
|
||||
return SpawnPokemonPacket(
|
||||
@@ -261,7 +253,6 @@ class SpawnPokemonPacket(
|
||||
rideStamina,
|
||||
isAlpha,
|
||||
silent,
|
||||
riders,
|
||||
vanillaPacket
|
||||
)
|
||||
}
|
||||
|
||||
-33
@@ -1,33 +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.net.messages.client.ui
|
||||
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachine
|
||||
import com.cobblemon.mod.common.api.tms.TechnicalMachines
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
|
||||
class SynchronizeActiveTMPacket(val tm: TechnicalMachine?): NetworkPacket<SynchronizeActiveTMPacket> {
|
||||
override val id = ID
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeNullable(tm?.id) { pb, value -> pb.writeResourceLocation(value) }
|
||||
}
|
||||
|
||||
companion object {
|
||||
val ID = cobblemonResource("synchronize_active_tm")
|
||||
fun decode(buffer: RegistryFriendlyByteBuf): SynchronizeActiveTMPacket {
|
||||
val resourceLocation = buffer.readNullable { it.readResourceLocation() }
|
||||
if (resourceLocation == null) return SynchronizeActiveTMPacket(null)
|
||||
val tm = TechnicalMachines.tmMap[resourceLocation]
|
||||
return SynchronizeActiveTMPacket(tm)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -327,6 +327,7 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
if (experienceGroup.getLevel(experience) != boundedValue || value == Cobblemon.config.maxPokemonLevel) {
|
||||
experience = experienceGroup.getExperience(boundedValue)
|
||||
}
|
||||
// _level.emit(value)
|
||||
|
||||
currentHealth = ceil(hpRatio * maxHealth).coerceIn(0..maxHealth)
|
||||
}
|
||||
|
||||
-34
@@ -1,34 +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.pokemon.properties
|
||||
|
||||
import com.cobblemon.mod.common.api.properties.CustomPokemonPropertyType
|
||||
|
||||
object HeldItemVisibleProperty : CustomPokemonPropertyType<BooleanProperty> {
|
||||
override val keys = setOf("held_item_visible")
|
||||
override val needsKey = true
|
||||
|
||||
override fun fromString(value: String?) =
|
||||
when {
|
||||
value == null || value.lowercase() in listOf("true", "yes") -> heldItemVisible(true)
|
||||
value.lowercase() in listOf("false", "no") -> heldItemVisible(false)
|
||||
else -> null
|
||||
}
|
||||
|
||||
fun heldItemVisible(value: Boolean) = BooleanProperty(
|
||||
key = keys.first(),
|
||||
value = value,
|
||||
pokemonApplicator = { pokemon, _ -> pokemon.heldItemVisible = value },
|
||||
entityApplicator = { pokemonEntity, _ -> pokemonEntity.pokemon.heldItemVisible = value },
|
||||
pokemonMatcher = { pokemon, _ -> pokemon.heldItemVisible == value },
|
||||
entityMatcher = { pokemonEntity, _ -> pokemonEntity.pokemon.heldItemVisible == value }
|
||||
)
|
||||
|
||||
override fun examples() = setOf("yes", "no")
|
||||
}
|
||||
@@ -1,36 +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.tms.obtain
|
||||
|
||||
import com.cobblemon.mod.common.api.tms.ObtainMethod
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
|
||||
/**
|
||||
* An [ObtainMethod] for TMs that cannot be unlocked through gameplay triggers.
|
||||
* These TMs are intended to be granted manually by command or MoLang only.
|
||||
*/
|
||||
class ImpossibleObtainMethod : ObtainMethod {
|
||||
override val passive = false
|
||||
|
||||
companion object {
|
||||
val ID = cobblemonResource("impossible")
|
||||
|
||||
fun readFromBuffer(buffer: RegistryFriendlyByteBuf): ImpossibleObtainMethod {
|
||||
return ImpossibleObtainMethod()
|
||||
}
|
||||
}
|
||||
|
||||
override fun matches(player: ServerPlayer) = false
|
||||
|
||||
override fun writeToBuffer(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeUtf("cobblemon:impossible")
|
||||
}
|
||||
}
|
||||
@@ -115,26 +115,8 @@ object TradeManager : RequestManager<TradeManager.TradeRequest>() {
|
||||
}
|
||||
|
||||
CobblemonEvents.TRADE_EVENT_PRE.postThen(TradeEvent.Pre(player1, pokemon2, player2, pokemon1)) {
|
||||
val party1 = player1.party
|
||||
val party2 = player2.party
|
||||
|
||||
val player1Removed = party1.remove(pokemon1)
|
||||
val player2Removed = party2.remove(pokemon2)
|
||||
|
||||
if (!player1Removed || !player2Removed) {
|
||||
if (!player1Removed) {
|
||||
Cobblemon.LOGGER.warn("Failed to remove traded Pokémon ${pokemon1.species.resourceIdentifier} from ${player1.name.string}(${player1.uuid}). Aborting trade with ${player2.name.string}(${player2.uuid}), potential exploit abused.")
|
||||
}
|
||||
|
||||
if (!player2Removed) {
|
||||
Cobblemon.LOGGER.warn("Failed to remove traded Pokémon ${pokemon2.species.resourceIdentifier} from ${player2.name.string}(${player2.uuid}). Aborting trade with ${player1.name.string}(${player1.uuid}), potential exploit abused.")
|
||||
}
|
||||
|
||||
// Revert any changes if one of the removals failed
|
||||
if (player1Removed) party1.add(pokemon1)
|
||||
if (player2Removed) party2.add(pokemon2)
|
||||
return@postThen
|
||||
}
|
||||
party1.remove(pokemon1)
|
||||
party2.remove(pokemon2)
|
||||
|
||||
// If player1 is the OT, keep track of the friendship
|
||||
pokemon1.cacheFriendship(player1.uuid)
|
||||
|
||||
@@ -274,9 +274,11 @@ object DataKeys {
|
||||
// Habitat Blocks
|
||||
const val HABITAT_SPAWNING_STYLE = "SpawningStyle"
|
||||
const val HABITAT_MIMIC = "MimicId"
|
||||
const val HABITAT_PHASE_COUNT = "PhaseCount"
|
||||
const val HABITAT_PHASE_ORDER = "PhaseOrder"
|
||||
const val HABITAT_LEVEL_RANGE = "LevelRange"
|
||||
const val HABITAT_MODIFIERS = "Modifiers"
|
||||
const val HABITAT_POOL = "Pool"
|
||||
|
||||
// --- Pools
|
||||
const val HABITAT_POOL_ID = "PoolId"
|
||||
|
||||
@@ -11,7 +11,6 @@ package com.cobblemon.mod.common.util.adapters
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.tms.ObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.DefaultObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.ImpossibleObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.PlayerHasAdvancementObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.PlayerYObtainMethod
|
||||
import com.cobblemon.mod.common.tms.obtain.UnlockableObtainMethod
|
||||
@@ -30,7 +29,6 @@ object TMObtainMethodAdapter : JsonSerializer<ObtainMethod>, JsonDeserializer<Ob
|
||||
|
||||
init {
|
||||
this.register(UnlockableObtainMethod::class, UnlockableObtainMethod.ID)
|
||||
this.register(ImpossibleObtainMethod::class, ImpossibleObtainMethod.ID)
|
||||
this.register(PlayerHasAdvancementObtainMethod::class, PlayerHasAdvancementObtainMethod.ID)
|
||||
this.register(DefaultObtainMethod::class, DefaultObtainMethod.ID)
|
||||
this.register(PlayerYObtainMethod::class, PlayerYObtainMethod.ID)
|
||||
|
||||
+1
-11
@@ -20,7 +20,6 @@ import net.minecraft.world.level.levelgen.RandomState
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class HeightRangeStructureProcessor(
|
||||
val minOffset: Int,
|
||||
@@ -44,14 +43,7 @@ class HeightRangeStructureProcessor(
|
||||
val referenceY = reference.getY(chunkGenerator, heightAccessor, randomState, pos)
|
||||
val minY = referenceY + minOffset
|
||||
val maxY = referenceY + maxOffset
|
||||
val valid = pos.y in minY..maxY
|
||||
|
||||
LOGGER.info(
|
||||
"[HeightRangeVeto] isValidPlacement pos={} reference={} referenceY={} minY={} maxY={} pos.y={} -> valid={}",
|
||||
pos, reference, referenceY, minY, maxY, pos.y, valid
|
||||
)
|
||||
|
||||
return valid
|
||||
return pos.y in minY..maxY
|
||||
}
|
||||
|
||||
override fun processBlock(
|
||||
@@ -113,8 +105,6 @@ class HeightRangeStructureProcessor(
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOGGER = LoggerFactory.getLogger("Cobblemon/HeightRangeStructureProcessor")
|
||||
|
||||
val CODEC: MapCodec<HeightRangeStructureProcessor> = RecordCodecBuilder.mapCodec { instance ->
|
||||
instance.group(
|
||||
Codec.INT.fieldOf("min_offset").forGetter { it.minOffset },
|
||||
|
||||
-2392
File diff suppressed because it is too large
Load Diff
+47
-344
@@ -15,411 +15,114 @@
|
||||
"name": "substitute",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "substitute",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "substitute",
|
||||
"pivot": [0, 16.5, 0],
|
||||
"locators": {
|
||||
"top": [0, 16.5, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "substitute",
|
||||
"pivot": [0, 8, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 8, 0],
|
||||
"locators": {
|
||||
"middle": [0, 8, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 8.5, -8],
|
||||
"locators": {
|
||||
"target": [0, 8.5, -8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_physical",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, -7.25],
|
||||
"locators": {
|
||||
"physical": [0, 9, -7.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_special",
|
||||
"parent": "body",
|
||||
"pivot": [0, 9, -7.25],
|
||||
"locators": {
|
||||
"special": [0, 9, -7.25]
|
||||
}
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 2.5, -0.75],
|
||||
"pivot": [0, 2, -1.75],
|
||||
"cubes": [
|
||||
{"origin": [-4.5, 0, -5], "size": [9, 8, 9], "inflate": 0.01, "uv": [0, 0]},
|
||||
{"origin": [0, 4.5, 4], "size": [0, 3, 2], "uv": [6, 58]}
|
||||
{"origin": [-4.5, 0, -4], "size": [9, 8, 7], "inflate": 0.01, "uv": [0, 15]},
|
||||
{"origin": [0, 5.5, 2.5], "size": [0, 3, 3], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_seat_1",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 10.75, 6.5],
|
||||
"locators": {
|
||||
"seat_1": [0, 10.75, 6.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_neck_fluff",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.25, -0.5],
|
||||
"locators": {
|
||||
"neck_fluff": [0, 8.25, -0.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "stuffing_shoulder_left",
|
||||
"parent": "torso",
|
||||
"pivot": [4.35, 6, -3.5],
|
||||
"cubes": [
|
||||
{"origin": [4.3, 5, -4.5], "size": [0, 2, 2], "uv": [60, 33]},
|
||||
{"origin": [4.4, 5.5, -4], "size": [0, 1, 1], "uv": [62, 40]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stuffing_shoulder_right",
|
||||
"parent": "torso",
|
||||
"pivot": [-4.35, 6, -3.5],
|
||||
"cubes": [
|
||||
{"origin": [-4.3, 5, -4.5], "size": [0, 2, 2], "uv": [55, 33]},
|
||||
{"origin": [-4.4, 5.5, -4], "size": [0, 1, 1], "uv": [59, 40]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stuffing_neck",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 7.7, -0.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 7.71, -4], "size": [7, 0, 7], "inflate": 0.01, "uv": [43, 27]},
|
||||
{"origin": [-2.5, 7.96, -3], "size": [5, 0, 5], "uv": [49, 21]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "torso",
|
||||
"pivot": [0.05, 3.5, -5],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"item": [0, 3.5, -5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8, 0]
|
||||
},
|
||||
{
|
||||
"name": "head_ai",
|
||||
"parent": "head",
|
||||
"pivot": [0, 8, 0]
|
||||
},
|
||||
{
|
||||
"name": "head_angle",
|
||||
"parent": "head_ai",
|
||||
"pivot": [0, 8, 0],
|
||||
"pivot": [0, 8, -4],
|
||||
"cubes": [
|
||||
{"origin": [-4, 7.5, -7], "size": [8, 7, 10], "uv": [0, 17]},
|
||||
{"origin": [-0.5, 7.5, -7], "size": [1, 7, 10], "inflate": 0.01, "uv": [0, 34]},
|
||||
{"origin": [0, 8, 3], "size": [0, 3, 2], "uv": [1, 58]}
|
||||
{"origin": [-4.5, 8, -5], "size": [9, 7, 8], "uv": [0, 0]},
|
||||
{"origin": [0, 9.5, 2.5], "size": [0, 3, 3], "uv": [0, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 10.5, -7],
|
||||
"locators": {
|
||||
"face": [0, 10.5, -7]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14.5, -5.5],
|
||||
"locators": {
|
||||
"head": [0, 14.5, -5.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 13.7, -6.9],
|
||||
"locators": {
|
||||
"item_face": [0, 13.7, -6.9]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 15.75, -2],
|
||||
"locators": {
|
||||
"item_hat": [0, 15.75, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "face_ditto",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 10.25, -6.9]
|
||||
},
|
||||
{
|
||||
"name": "eyes_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 11, -6.92],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 10.5, -6.92], "size": [7, 1, 0], "uv": [26, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes_blink_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 11, -6.82],
|
||||
"cubes": [
|
||||
{"origin": [-4, 10.5, -6.82], "size": [8, 1, 0], "uv": [25, 54]},
|
||||
{"origin": [-3.5, 11, -6.83], "size": [7, 1, 0], "uv": [26, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 9.25, -6.9],
|
||||
"cubes": [
|
||||
{"origin": [-3, 8.5, -6.92], "size": [6, 1, 0], "uv": [27, 60]},
|
||||
{"origin": [-4, 9, -6.92], "size": [8, 1, 0], "uv": [25, 58]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open_ditto",
|
||||
"parent": "face_ditto",
|
||||
"pivot": [0, 9, -6.81],
|
||||
"cubes": [
|
||||
{"origin": [-4, 8, -6.82], "size": [8, 2, 0], "uv": [25, 62]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "face",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 10.5, -4.51]
|
||||
},
|
||||
{
|
||||
"name": "mouth",
|
||||
"parent": "face",
|
||||
"pivot": [0, 9.5, -7.01],
|
||||
"cubes": [
|
||||
{"origin": [-4, 8.5, -7.01], "size": [8, 2, 2], "inflate": 0.01, "uv": [23, 47]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "face",
|
||||
"pivot": [0, 12, -3.75]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [4, 12, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [3, 10.5, -6], "size": [1, 2, 4], "inflate": 0.01, "uv": [12, 52]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [4, 11.5, -4],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"eye2": [4, 11.5, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-4, 12, -3.75],
|
||||
"parent": "head",
|
||||
"pivot": [-4.5, 12.5, -3.25],
|
||||
"cubes": [
|
||||
{"origin": [-4, 10.5, -6], "size": [1, 2, 4], "inflate": 0.01, "uv": [1, 52]}
|
||||
{"origin": [-4.5, 11.5, -4.75], "size": [0, 2, 3], "inflate": 0.01, "pivot": [-4.5, 12.5, -3.25], "rotation": [5, 0, 0], "uv": [0, 37], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-4, 11.5, -4],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"eye1": [-4, 11.5, -4]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ears",
|
||||
"parent": "head_angle",
|
||||
"pivot": [0, 14, -0.1]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "ears",
|
||||
"pivot": [1.5, 14.5, -0.5],
|
||||
"rotation": [0, -25, 0],
|
||||
"name": "eye_left",
|
||||
"parent": "head",
|
||||
"pivot": [4.5, 12.5, -3.25],
|
||||
"cubes": [
|
||||
{"origin": [1, 14.5, -0.5], "size": [3, 2, 0], "uv": [11, 61]}
|
||||
{"origin": [4.5, 11.5, -4.75], "size": [0, 2, 3], "inflate": 0.01, "pivot": [4.5, 12.5, -3.25], "rotation": [5, 0, 0], "uv": [0, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "ears",
|
||||
"pivot": [-1.5, 14.5, -0.5],
|
||||
"rotation": [0, 25, 0],
|
||||
"parent": "head",
|
||||
"pivot": [-3.25, 14.5, 0],
|
||||
"rotation": [-10, 15, -20],
|
||||
"cubes": [
|
||||
{"origin": [-4, 14.5, -0.5], "size": [3, 2, 0], "uv": [18, 61]}
|
||||
{"origin": [-4.75, 14.5, 0], "size": [3, 3, 0], "uv": [0, 18]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "arms",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 6, -2.5]
|
||||
},
|
||||
{
|
||||
"name": "arm_left",
|
||||
"parent": "arms",
|
||||
"pivot": [3.5, 6, -2.5],
|
||||
"name": "ear_left",
|
||||
"parent": "head",
|
||||
"pivot": [3.25, 14.5, 0],
|
||||
"rotation": [-10, -15, 20],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 4.5, -6], "size": [2, 3, 4], "uv": [36, 27]}
|
||||
{"origin": [1.75, 14.5, 0], "size": [3, 3, 0], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stuffing_arm_left",
|
||||
"parent": "arm_left",
|
||||
"pivot": [3.6925, 6, -3.5],
|
||||
"cubes": [
|
||||
{"origin": [3.735, 5, -4.5], "size": [0, 2, 2], "uv": [60, 36]},
|
||||
{"origin": [3.65, 5.5, -4], "size": [0, 1, 1], "uv": [62, 42]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "arm_left",
|
||||
"pivot": [0.5, 6, -6],
|
||||
"locators": {
|
||||
"hand_secondary": [0.5, 6, -6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "arm_right",
|
||||
"parent": "arms",
|
||||
"pivot": [-4.5, 6, -2.5],
|
||||
"parent": "torso",
|
||||
"pivot": [-3.25, 6.25, -3],
|
||||
"rotation": [-5, 15, 0],
|
||||
"cubes": [
|
||||
{"origin": [-5.5, 4.5, -6], "size": [2, 3, 4], "uv": [42, 34]}
|
||||
{"origin": [-4.75, 4.75, -6.5], "size": [3, 3, 4], "uv": [26, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stuffing_arm_right",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-4.6925, 6, -3.5],
|
||||
"name": "arm_left",
|
||||
"parent": "torso",
|
||||
"pivot": [3.25, 6.25, -3],
|
||||
"rotation": [-5, -15, 0],
|
||||
"cubes": [
|
||||
{"origin": [-3.735, 5, -4.5], "size": [0, 2, 2], "uv": [55, 36]},
|
||||
{"origin": [-3.65, 5.5, -4], "size": [0, 1, 1], "uv": [59, 42]}
|
||||
{"origin": [1.75, 4.75, -6.5], "size": [3, 3, 4], "uv": [16, 30]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "arm_right",
|
||||
"pivot": [-3.5, 6, -6],
|
||||
"locators": {
|
||||
"hand_primary": [-3.5, 6, -6]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 2.25, 3.5],
|
||||
"pivot": [0, 2.25, 3],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 0.25, 3], "size": [5, 4, 5], "uv": [36, 11]}
|
||||
{"origin": [-2, 0.25, 2], "size": [4, 4, 5], "uv": [27, 25]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 2.25, 6.5],
|
||||
"rotation": [180, 0, 0],
|
||||
"locators": {
|
||||
"tail": [0, 2.25, 6.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 2, 8],
|
||||
"pivot": [0, 0.25, 7],
|
||||
"cubes": [
|
||||
{"origin": [-1.5, 0.5, 7.5], "size": [3, 3, 4], "uv": [36, 20]}
|
||||
{"origin": [-1.5, 0.25, 7], "size": [3, 3, 3], "uv": [32, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail2",
|
||||
"pivot": [0, 2, 11.5],
|
||||
"rotation": [180, 0, 0],
|
||||
"locators": {
|
||||
"tail_tip": [0, 2, 11.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "legs",
|
||||
"parent": "body",
|
||||
"pivot": [0, 2.5, -0.75]
|
||||
},
|
||||
{
|
||||
"name": "leg_left",
|
||||
"parent": "legs",
|
||||
"pivot": [5, 2.5, -0.75],
|
||||
"cubes": [
|
||||
{"origin": [3.5, 0.5, -7.25], "size": [3, 4, 7], "uv": [22, 34]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "leg_left",
|
||||
"pivot": [5, 2.5, -6.75],
|
||||
"locators": {
|
||||
"foot_secondary": [5, 2.5, -6.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "leg_right",
|
||||
"parent": "legs",
|
||||
"pivot": [-5, 2.5, -0.75],
|
||||
"parent": "body",
|
||||
"pivot": [-3.5, 2, -1.75],
|
||||
"rotation": [0, 15, 0],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, 0.5, -7.25], "size": [3, 4, 7], "uv": [36, 0]}
|
||||
{"origin": [-5, 0, -6.25], "size": [3, 4, 5], "uv": [29, 10]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "leg_right",
|
||||
"pivot": [-5, 2.5, -6.75],
|
||||
"locators": {
|
||||
"foot_primary": [-5, 2.5, -6.75]
|
||||
}
|
||||
"name": "leg_left",
|
||||
"parent": "body",
|
||||
"pivot": [3.5, 2, -1.75],
|
||||
"rotation": [0, -15, 0],
|
||||
"cubes": [
|
||||
{"origin": [2, 0, -6.25], "size": [3, 4, 5], "uv": [0, 30]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,33 +1,10 @@
|
||||
{
|
||||
"portraitScale": 1.8,
|
||||
"portraitTranslation": [-0.11, -0.36, 0],
|
||||
"profileScale": 1.0,
|
||||
"profileTranslation": [0.0, 0.18, 0.0],
|
||||
"rootBone": "substitute",
|
||||
"animations": {
|
||||
"faint": "q.bedrock_primary('substitute', math.random(0, 1) < (1/3) ? 'destroy_flop' : (math.random(0, 1) < 0.5 ? 'destroy_fling_left' : 'destroy_fling_right'), q.curve('one'))",
|
||||
"recoil": "q.bedrock_stateful('substitute', 'recoil')"
|
||||
},
|
||||
"poses": {
|
||||
"battle-standing": {
|
||||
"poseTypes": ["STAND"],
|
||||
"isBattle": true,
|
||||
"animations": [
|
||||
"q.bedrock('substitute', 'ground_idle')"
|
||||
]
|
||||
},
|
||||
"standing": {
|
||||
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
|
||||
"isBattle": false,
|
||||
"animations": [
|
||||
"q.bedrock('substitute', 'ground_idle')"
|
||||
]
|
||||
},
|
||||
"walking": {
|
||||
"poseTypes": ["WALK"],
|
||||
"animations": [
|
||||
"q.bedrock('substitute', 'ground_idle')"
|
||||
]
|
||||
"poseName": "standing",
|
||||
"transformTicks": 10,
|
||||
"allPoseTypes": true,
|
||||
"animations": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-10
@@ -12,16 +12,6 @@
|
||||
{
|
||||
"aspects": ["shiny"],
|
||||
"texture": "cobblemon:textures/pokemon/substitute_shiny.png"
|
||||
},
|
||||
{
|
||||
"aspects": ["alpha_eyes"],
|
||||
"layers": [
|
||||
{
|
||||
"name": "alpha_eyes",
|
||||
"texture": "cobblemon:textures/pokemon/substitute_alpha.png",
|
||||
"emissive": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+92
-257
@@ -5,8 +5,19 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": ["-math.sin(q.anim_time*90*2)*1", 0, "math.sin(q.anim_time*90*2-90)*0.5"],
|
||||
"position": ["-math.sin(q.anim_time*90*2-90)*-0.1", 0.5, "math.sin(q.anim_time*90*2)*0.2"]
|
||||
"rotation": [
|
||||
"math.clamp(math.sin(q.anim_time*90*2)*1,-1,0)+math.clamp(math.sin(q.anim_time*90*2)*1,0,1)+math.sin(q.anim_time*90*2)*0.5",
|
||||
0,
|
||||
"math.clamp(math.sin(q.anim_time*90*4)*0.5,-1,0)+math.clamp(math.sin(q.anim_time*90*4)*0.5,0,1)+math.sin(q.anim_time*90*4)*0.1"
|
||||
],
|
||||
"position": [
|
||||
0,
|
||||
"(-math.clamp(math.sin(q.anim_time*90*2)*0.2,-0.1,0)-math.clamp(math.sin(q.anim_time*90*2)*0.2,0,0.1)-math.sin(q.anim_time*90*2)*0.2)*0.1",
|
||||
0
|
||||
]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["-math.clamp(math.sin(q.anim_time*90*2)*0.5,-0.8,0)-math.clamp(math.sin(q.anim_time*90*2)*0.5,0,0.8)-math.sin(q.anim_time*90*2)*0.5", 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -14,226 +25,71 @@
|
||||
"loop": true,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": ["-math.sin(q.anim_time*90*1-90)*1", 0, "math.sin(q.anim_time*90*1)*0.5"],
|
||||
"position": ["-math.sin(q.anim_time*90*1)*-0.1", 0.5, "math.sin(q.anim_time*90*1-90)*0.2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.kakuna.physical": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": ["-math.sin(q.anim_time*90*3)*-20", 0, "math.cos(q.anim_time*90*3)*-20"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": {
|
||||
"post": ["-math.sin(q.anim_time*90*3)*-20", 0, "math.cos(q.anim_time*90*3)*-20"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0417": {
|
||||
"post": [-16.62939, 7, -11.1114],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [0, 30, -32.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [43.5061, 41.7947, 7.1679],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [43.47759, 0, 7.65367],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": [36.1795, -24.8022, 10.1779],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [8.1692, -24.4369, 32.0742],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.5833": {
|
||||
"post": ["-math.cos(q.anim_time*90*2)*20", 0, "math.sin(q.anim_time*90*2)*-20"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": ["-math.cos(q.anim_time*90*3)*2.6", "math.sin(q.anim_time*90*3)*0.2", "math.sin(q.anim_time*90*3)*-2.6"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.7917": {
|
||||
"post": ["-math.cos(q.anim_time*90*3)*2.6", "math.sin(q.anim_time*90*3)*0.2", "math.sin(q.anim_time*90*3)*-2.6"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0417": {
|
||||
"post": [-1.44448, -0.16629, 2.16182],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [-3.6, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [-2.31, 0.1, -3.81],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [0.99498, 0.18478, -5.40209],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": [2.22, 0.2, -4.24],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [3.11, -0.5, -0.9],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.5833": {
|
||||
"post": ["-math.sin(q.anim_time*90*2)*2.6", "math.cos(q.anim_time*90*2)*-0.2", "math.cos(q.anim_time*90*2)*2.6"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"1.125": [1, 1, 1],
|
||||
"1.2083": [1.2, 1.1, 0.8],
|
||||
"1.25": [1, 1, 1]
|
||||
}
|
||||
"rotation": [
|
||||
"math.clamp(math.sin(q.anim_time*90*1)*1,-1,0)+math.clamp(math.sin(q.anim_time*90*1)*1,0,1)+math.sin(q.anim_time*90*1)*0.5",
|
||||
0,
|
||||
"math.clamp(math.sin(q.anim_time*90*2)*0.5,-1,0)+math.clamp(math.sin(q.anim_time*90*2)*0.5,0,1)+math.sin(q.anim_time*90*2)*0.1"
|
||||
],
|
||||
"position": [
|
||||
0,
|
||||
"(-math.clamp(math.sin(q.anim_time*90*1)*0.2,-0.1,0)-math.clamp(math.sin(q.anim_time*90*1)*0.2,0,0.1)-math.sin(q.anim_time*90*2)*0.2)*0.1",
|
||||
0
|
||||
]
|
||||
},
|
||||
"tail": {
|
||||
"rotation": ["-math.clamp(math.sin(q.anim_time*90*2)*0.5,-0.8,0)-math.clamp(math.sin(q.anim_time*90*2)*0.5,0,0.8)-math.sin(q.anim_time*90*2)*0.5", 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.kakuna.faint": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"kakuna": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": ["-math.sin(q.anim_time*90*2)*-20", 0, "math.cos(q.anim_time*90*2)*-20"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": ["-math.sin(q.anim_time*90*2)*-20", 0, "math.cos(q.anim_time*90*2)*-20"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": ["-19.94-math.sin(q.anim_time*90*32)*1", -0.9, 2.28],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": ["-24.1146-math.sin(q.anim_time*90*32)*1", -5.1806, -9.6237],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.75": {
|
||||
"post": [-48.12, -9.9, -10.88],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [-82.4083, -26.1002, -17.2368],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0417": {
|
||||
"post": [-102.1119, -24.854, -31.5905],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.3333": {
|
||||
"post": [-99.1014, -23.4505, -14.6775],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [-66.3538, -24.159, 6.6861],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-85.0639, -23.1834, -2.9264],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [5, 0, 0],
|
||||
"0.2917": [7.5, 0, 0],
|
||||
"0.75": [0, 0, 0],
|
||||
"1.0417": [-10.17, 0, 0],
|
||||
"1.1667": [-26.43, 0, 0],
|
||||
"1.25": [-52.86, 0, 0],
|
||||
"1.3333": [-72.68, 0, 0],
|
||||
"1.4167": [-92.5, 0, 0],
|
||||
"1.5417": [-97.5, 0, 0],
|
||||
"1.6667": [-100, 0, 0],
|
||||
"1.75": [-100, 0, 0],
|
||||
"2.0833": [-88.46, 0, 0],
|
||||
"2.2917": [-70, 0, 0],
|
||||
"2.3333": [-72.64, 0, 0],
|
||||
"2.375": [-70, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": ["-math.cos(q.anim_time*90*2)*2.6", "math.sin(q.anim_time*90*2)*0.2", "math.sin(q.anim_time*90*2)*-2.6"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": ["-math.cos(q.anim_time*90*2)*2.6", "math.sin(q.anim_time*90*2)*0.2", "math.sin(q.anim_time*90*2)*-2.6"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [0.3, -0.73, 2.28],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": [-1.64, -1.13, 2.77],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.625": {
|
||||
"post": [-1.96, -1.39, 4.06],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.7083": {
|
||||
"post": [-2.19, -2.77, 4.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [-3.71, -4.79, 5.06],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.9167": {
|
||||
"post": [-4.94977, -3.02238, 5.61398],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [-5.87185, -2.2078, 6.20958],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.5": {
|
||||
"post": [-4.3217, -4.5458, 4.90724],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [-3.91, -4.91, 5.01],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": [-3.92405, -4.96563, 5.12418],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.9167": {
|
||||
"post": [-4.24661, -5.20065, 5.11229],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-4.29542, -5.18509, 5.3042],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
"0.0": [0, -0.2, 0],
|
||||
"0.75": [0, -0.2, 0],
|
||||
"1.0417": [0, -0.2, 0],
|
||||
"1.1667": [0, -0.2, 0],
|
||||
"1.25": [0, -0.1, 0],
|
||||
"1.3333": [0, 0.05, 0],
|
||||
"1.4167": [0, 2.8, 0],
|
||||
"1.5417": [0, 3.3, 0.3],
|
||||
"1.6667": [0, 3.7, 0.6],
|
||||
"1.75": [0, 3.7, 0.6],
|
||||
"2.0833": [0, 2.16, 0.48],
|
||||
"2.2917": [0, -0.3, 0.3],
|
||||
"2.3333": [0, 0.05, 0.33],
|
||||
"2.375": [0, -0.3, 0.3]
|
||||
}
|
||||
},
|
||||
"body": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.75": [0, 0, 0],
|
||||
"1.2917": [0, 0, 0],
|
||||
"1.3333": [0, -0.05954, 0.19093],
|
||||
"1.375": [0, 0, 0],
|
||||
"1.4167": [0, 0.00436, 0.0999],
|
||||
"1.4583": [0, 0, 0],
|
||||
"1.75": [0, 0.98481, -0.17365]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -244,53 +100,32 @@
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": {
|
||||
"pre": [4.5, 0, 0],
|
||||
"post": [4.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [-0.1296, 2.4461, -3.0023],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [-0.0867, -2.4636, 2.0016],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": [0, 0, 0]
|
||||
"0.125": [7.5, 2.5, 0],
|
||||
"0.3333": [0, 0, 0],
|
||||
"0.4167": [0, 7.5, 0],
|
||||
"0.5": [0, -7.5, 0],
|
||||
"0.5833": [0, 0, 0],
|
||||
"0.625": [0, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": {
|
||||
"pre": [0, -0.05, -0.5],
|
||||
"post": [0, -0.05, -0.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [0, -0.1, 0.1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [-0.25, -0.08, 0.12],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [0.08, -0.05, 0.08],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [0.015, -0.01, 0.02],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": [0, 0, 0]
|
||||
"0.125": [0, -0.2, 0.55],
|
||||
"0.3333": [0, 0, 0.5],
|
||||
"0.625": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"head": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [10, 0, 0],
|
||||
"0.25": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"tail": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.125": [-20, 0, 0],
|
||||
"0.4583": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
+1600
-2476
File diff suppressed because it is too large
Load Diff
+6393
-5653
File diff suppressed because it is too large
Load Diff
+2468
-12972
File diff suppressed because it is too large
Load Diff
+133
-1973
File diff suppressed because it is too large
Load Diff
+32
-1580
File diff suppressed because it is too large
Load Diff
+241
-1802
File diff suppressed because it is too large
Load Diff
+31
-1217
File diff suppressed because it is too large
Load Diff
+57
-3206
File diff suppressed because it is too large
Load Diff
+45
-2872
File diff suppressed because it is too large
Load Diff
+8
-1185
File diff suppressed because it is too large
Load Diff
+10
-391
@@ -22,387 +22,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.diglett.physical": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"ground": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*24)*02", 12.5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": ["-2-math.sin(q.anim_time*90*24)*02", -5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": {
|
||||
"post": ["5-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*48)*04", 0, "math.sin(q.anim_time*90*32)*05"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [10, 3.1406, 2.1769],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": ["2.5-math.sin(q.anim_time*90*48)*04", 0, "math.sin(q.anim_time*90*32)*05"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*48)*2", -0.25, "math.sin(q.anim_time*90*32)*2"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.4167": {
|
||||
"post": [0.04, -0.24, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0417": {
|
||||
"post": [0, -0.04, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.375": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.5833": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*30)*03", 0, "math.sin(q.anim_time*90*23)*03"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": [3.81, 0, -0.16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [7.36, 0, 2.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [7.39, -1, 2.69],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [6.99, 0, 3.6],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [5.32, 0, 6.24],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [0, 0, 8],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": [-6.18, 0, 3.1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": [-8.51, 0, -3.46],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [1, 0, -15],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": {
|
||||
"post": [1.84, 0.4, -16.22],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [1.5, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [1.5, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [1.48, -1, -15.81],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.3333": {
|
||||
"post": [1.44, 0, -15.39],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.4583": {
|
||||
"post": [1.26, 0, -13.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": [0.27, 0, -2.89],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [-0.0639, 0.4994, -10.1039],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [3.28242, -7.51775, -0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [45, -15, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.4583": {
|
||||
"post": [-8.1232, 5.2505, 0.0419],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [0, -0.28, 0.21],
|
||||
"0.375": [0, -2.1, 0.2],
|
||||
"1.2083": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [0, -0.4, -0.8],
|
||||
"post": [0, -0.4, -0.8],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": [0, -0.28, 0.21],
|
||||
"2.25": [0, -2.1, 0.2],
|
||||
"2.6667": [0, -2.1, 0.2],
|
||||
"2.8333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.2083": [1, 1, 1],
|
||||
"0.3333": [0.9, 1.2, 0.9],
|
||||
"0.375": [1, 0.1, 1],
|
||||
"1.2083": [1, 0.1, 1],
|
||||
"1.25": [1, 1.3, 1],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0833": [1, 1, 1],
|
||||
"2.2083": [0.9, 1.2, 0.9],
|
||||
"2.25": [1, 0.1, 1],
|
||||
"2.6667": [1, 0.1, 1],
|
||||
"2.7917": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [10.0582, 0, -3.4641],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-15.0433, 1.3008, 4.8282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [20, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [24.9889, 0, -0.5265],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5833": {
|
||||
"post": [8.6796, 1.8689, -15.6325],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.9583": {
|
||||
"post": [4.3843, -5.6, 3.6003],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [-15.0433, 1.3008, 4.8282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"0.3333": [0, -4, 0],
|
||||
"1.2083": [0, -4, 0],
|
||||
"1.25": {
|
||||
"pre": [0, 1, 0],
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [0, -1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": [0, 0, 0],
|
||||
"2.125": [0, 0, 0],
|
||||
"2.2083": [0, -4, 0],
|
||||
"2.6667": [0, -4, 0],
|
||||
"2.875": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_angry_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.6667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.6667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.6667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.6667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.diglett.ground_walk": {
|
||||
"loop": true,
|
||||
"animation_length": 4,
|
||||
@@ -542,27 +161,27 @@
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.13]},
|
||||
"0.5": {"pre": [0, 0, -0.13], "post": [0, 0, 0]},
|
||||
"0.8333": [0, 0, 0],
|
||||
"0.8333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.13]},
|
||||
"1.5": {"pre": [0, 0, -0.13], "post": [0, 0, 0]},
|
||||
"1.7083": [0, 0, 0],
|
||||
"1.7083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, -0.13]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.2917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.8333": [0, 0, 0],
|
||||
"0.8333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": [0, 0, -0.1],
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.7083": [0, 0, 0],
|
||||
"1.7083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -620,19 +239,19 @@
|
||||
}
|
||||
},
|
||||
"animation.diglett.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [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.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
|
||||
+69
-399
@@ -22,387 +22,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.diglett_alolan.physical": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"ground": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*24)*02", 12.5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": ["-2-math.sin(q.anim_time*90*24)*02", -5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": {
|
||||
"post": ["5-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*48)*04", 0, "math.sin(q.anim_time*90*32)*05"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [10, 3.1406, 2.1769],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": ["2.5-math.sin(q.anim_time*90*48)*04", 0, "math.sin(q.anim_time*90*32)*05"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*48)*2", -0.25, "math.sin(q.anim_time*90*32)*2"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.4167": {
|
||||
"post": [0.04, -0.24, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0417": {
|
||||
"post": [0, -0.04, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.375": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.5833": {
|
||||
"post": ["-2.5-math.sin(q.anim_time*90*30)*03", 0, "math.sin(q.anim_time*90*23)*03"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 5, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": [3.81, 0, -0.16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [7.36, 0, 2.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [7.39, -1, 2.69],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [6.99, 0, 3.6],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [5.32, 0, 6.24],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [0, 0, 8],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": {
|
||||
"post": [-6.18, 0, 3.1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": [-8.51, 0, -3.46],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [1, 0, -15],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": {
|
||||
"post": [1.84, 0.4, -16.22],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [1.5, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [1.5, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [1.48, -1, -15.81],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.3333": {
|
||||
"post": [1.44, 0, -15.39],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.4583": {
|
||||
"post": [1.26, 0, -13.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": [0.27, 0, -2.89],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [-0.0639, 0.4994, -10.1039],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [3.28242, -7.51775, -0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [45, -15, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.4583": {
|
||||
"post": [-8.1232, 5.2505, 0.0419],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [0, -0.28, 0.21],
|
||||
"0.375": [0, -2.1, 0.2],
|
||||
"1.2083": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [0, -0.4, -0.8],
|
||||
"post": [0, -0.4, -0.8],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": [0, -0.28, 0.21],
|
||||
"2.25": [0, -2.1, 0.2],
|
||||
"2.6667": [0, -2.1, 0.2],
|
||||
"2.8333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"0.2083": [1, 1, 1],
|
||||
"0.3333": [0.9, 1.2, 0.9],
|
||||
"0.375": [1, 0.1, 1],
|
||||
"1.2083": [1, 0.1, 1],
|
||||
"1.25": [1, 1.3, 1],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0833": [1, 1, 1],
|
||||
"2.2083": [0.9, 1.2, 0.9],
|
||||
"2.25": [1, 0.1, 1],
|
||||
"2.6667": [1, 0.1, 1],
|
||||
"2.7917": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [10.0582, 0, -3.4641],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-15.0433, 1.3008, 4.8282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [20, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [24.9889, 0, -0.5265],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5833": {
|
||||
"post": [8.6796, 1.8689, -15.6325],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.9583": {
|
||||
"post": [4.3843, -5.6, 3.6003],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [-15.0433, 1.3008, 4.8282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"0.3333": [0, -4, 0],
|
||||
"1.2083": [0, -4, 0],
|
||||
"1.25": {
|
||||
"pre": [0, 1, 0],
|
||||
"post": [0, 1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [0, -1, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": [0, 0, 0],
|
||||
"2.125": [0, 0, 0],
|
||||
"2.2083": [0, -4, 0],
|
||||
"2.6667": [0, -4, 0],
|
||||
"2.875": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_angry_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"1.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.6667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.6667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"1.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.125": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.6667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.6667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.diglett_alolan.ground_walk": {
|
||||
"loop": true,
|
||||
"animation_length": 4,
|
||||
@@ -537,33 +156,78 @@
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, -0.13]},
|
||||
"0.2917": {"pre": [0, 0, -0.13], "post": [0, 0, 0]},
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.13]},
|
||||
"0.5": {"pre": [0, 0, -0.13], "post": [0, 0, 0]},
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, -0.13]
|
||||
},
|
||||
"0.2917": {
|
||||
"pre": [0, 0, -0.13],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.3333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, -0.13]
|
||||
},
|
||||
"0.5": {
|
||||
"pre": [0, 0, -0.13],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.8333": [0, 0, 0],
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.13]},
|
||||
"1.5": {"pre": [0, 0, -0.13], "post": [0, 0, 0]},
|
||||
"0.875": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, -0.13]
|
||||
},
|
||||
"1.5": {
|
||||
"pre": [0, 0, -0.13],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.7083": [0, 0, 0],
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, -0.13]}
|
||||
"1.75": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.13]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.2917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2917": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.3333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.5": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.8333": [0, 0, 0],
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.875": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.4583": [0, 0, -0.1],
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.5": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.7083": [0, 0, 0],
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
"1.75": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
}
|
||||
},
|
||||
"body2": {
|
||||
@@ -620,20 +284,26 @@
|
||||
}
|
||||
},
|
||||
"animation.diglett_alolan.blink": {
|
||||
"animation_length": 0.1667,
|
||||
"animation_length": 0.16667,
|
||||
"bones": {
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+30
-736
@@ -75,712 +75,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.dugtrio.physical": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9167": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 0, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 0, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.8333": {
|
||||
"post": [0, 0, -1.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -7.1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [0, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.75": {
|
||||
"post": [0, 0, -16.7],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.4583": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -13.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -2.89],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"body1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [7.5, -4, -5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [11.9213, -50.9243, -13.7818],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [11.6966, -74.0498, -19.4432],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [12.1827, -67.8747, -22.7017],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [-1.1013, -13.7699, 2.8238],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [3.28242, 7.51775, 0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [50.709, 2.0361, -22.8812],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": [50.709, 2.0361, -22.8812],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.9167": {
|
||||
"post": [16.737, 14.4812, -21.7787],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0833": {
|
||||
"post": [15, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [7.5, -4, -5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": [0, 0, 0],
|
||||
"0.7083": [0, -1, 0],
|
||||
"1.1667": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [-1.18301, -0.69289, -1.48301],
|
||||
"post": [-1.18301, -0.69289, -1.48301],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": [-0.9559, -1.11355, -0.74652],
|
||||
"1.3333": [-1.33194, -0.27231, -1.99076],
|
||||
"1.375": [-1.21126, -0.41201, -1.64918],
|
||||
"1.5833": {
|
||||
"pre": [-0.92, -0.13, -1.18],
|
||||
"post": [-0.92, -0.13, -1.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0833": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.1667": [0, -0.28, 0.21],
|
||||
"2.2083": [0, -2.1, 0.2],
|
||||
"2.5833": [0, -2.1, 0.2],
|
||||
"2.7917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.5833": [1, 1, 1],
|
||||
"0.625": [0.8, 0.75, 0.8],
|
||||
"0.6667": [1, 0.1, 1],
|
||||
"1.1667": [1, 0.1, 1],
|
||||
"1.25": [0.9, 1.2, 0.9],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0417": [1, 1, 1],
|
||||
"2.1667": [0.9, 1.2, 0.9],
|
||||
"2.2083": [1, 0.1, 1],
|
||||
"2.5833": [1, 0.1, 1],
|
||||
"2.7083": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body1_2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-1.73205, 0, -2.59808],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0833": {
|
||||
"post": [8.2679, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-6.7321, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [10.7679, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-1.73205, 0, -2.59808],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.625": [0, 0, 0],
|
||||
"0.6667": [0, -5, 0],
|
||||
"1.1667": [0, -5, 0],
|
||||
"1.25": [0, -2, 0],
|
||||
"2.6667": [0, -4, 0],
|
||||
"2.875": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"body2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [3.9762, 6.495, 10.7976],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [10.3891, 24.9296, 12.6481],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [1.3318, 51.3394, 15.2992],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [-3.8835, 53.834, 15.0282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [7.6917, 14.8915, -0.6214],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": [0, 17.5, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [3.28242, -7.51775, -0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [42.509, -8.8475, 30.2404],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [42.509, -8.8475, 30.2404],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [10.6615, -8.0683, 18.5147],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [3.9762, 6.495, 10.7976],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [0.78, -0.45, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": [0.78, -1.55, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [1.18301, -0.69289, -1.48301],
|
||||
"post": [1.18301, -0.69289, -1.48301],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": [0.9559, -1.11355, -0.74652],
|
||||
"1.3333": [1.33194, -0.27231, -1.99076],
|
||||
"1.375": [1.21126, -0.41201, -1.64918],
|
||||
"1.6667": {
|
||||
"pre": [0.88, -0.12, -1.05],
|
||||
"post": [0.88, -0.12, -1.05],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.7917": {
|
||||
"post": [1.27, 0.19, -0.61],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": [0, -0.28, 0.21],
|
||||
"2.25": [0, -2.1, 0.2],
|
||||
"2.6667": [0, -2.1, 0.2],
|
||||
"2.8333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.5": [1, 1, 1],
|
||||
"0.5417": [0.9, 1, 0.9],
|
||||
"0.5833": [1, 0.1, 1],
|
||||
"1.1667": [1, 0.1, 1],
|
||||
"1.25": [0.9, 1.2, 0.9],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0833": [1, 1, 1],
|
||||
"2.2083": [0.9, 1.2, 0.9],
|
||||
"2.25": [1, 0.1, 1],
|
||||
"2.6667": [1, 0.1, 1],
|
||||
"2.7917": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body3": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [2.0871, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-0.4129, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [4.454, -1.0178, 6.3469],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-7.8238, -1.0361, "2.5001+math.sin(q.anim_time*90*6-60)*3"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9167": {
|
||||
"post": [-26.56, -1.04, "2.26+math.sin(q.anim_time*90*6-60)*5"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [-35.3238, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [32.1762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [65.145, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": {
|
||||
"post": [59.6762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [59.6762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [15.1947, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [2.6947, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [2.0871, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, -0.3, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": [0, -0.23, 1],
|
||||
"1.2083": [0, -0.23, -3.04],
|
||||
"1.25": [0, 0.47, -2.96],
|
||||
"1.2917": [0, -0.6, -2.87],
|
||||
"1.3333": [0, 0.05, -2.79],
|
||||
"1.375": [0, -0.3, -2.7],
|
||||
"1.4167": [0, 0, -2.62],
|
||||
"1.5833": [0, -0.25, -2.28],
|
||||
"2.2083": [0, -0.3, 0],
|
||||
"2.25": [0, -1.3, 0],
|
||||
"2.75": [0, -2.1, 0.2],
|
||||
"2.875": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, -0.3, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"1.125": [1, 1, 1],
|
||||
"1.2083": [0.8, 1, 1.35],
|
||||
"1.25": {"pre": [0.8, 1, 1.35], "post": [1.2, 1, 0.9]},
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.2083": [1, 1, 1],
|
||||
"2.2917": [1, 0.1, 1],
|
||||
"2.75": [1, 0.1, 1],
|
||||
"2.8333": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body3_2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [1.28558, 0, 1.92836],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": ["23.7856-math.sin(q.anim_time*90*16)*7.5", 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [31.2856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [23.35, 0, 1.93],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [8.7856, 0, "1.9284+math.sin(q.anim_time*90*6-120)*15"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": [-43.1823, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [-57.1266, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [21.2856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [27.6157, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5833": {
|
||||
"post": [26.5571, 0, 1.994],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [44.7157, 0, 2.0597],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [13.7856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-15.4247, 0, 0.3886],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2917": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.9167": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [1.28558, 0, 1.92836],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.9583": [0, 0, 0],
|
||||
"1.125": [-0.05508, -1.63581, -0.30179],
|
||||
"1.2083": [-0.05508, -1.63581, -0.30179],
|
||||
"1.25": [0, 0, 0],
|
||||
"2.25": [0, 0, 0],
|
||||
"2.3333": [0, -8, 0],
|
||||
"2.75": [0, -4, 0],
|
||||
"2.9167": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.5, 0, 0]},
|
||||
"0.4583": {"pre": [-0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.625": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.9583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.625": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.5, 0, 0]},
|
||||
"0.4583": {"pre": [-0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"pupil_right2": {
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.625": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.9583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_happy_right2": {
|
||||
"position": [1, 0, 0]
|
||||
},
|
||||
"eyelid_recoil_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.625": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0.5, 0, 0]},
|
||||
"0.5833": {"pre": [0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.5833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.5": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.7917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_happy_left1": {
|
||||
"position": [-1, 0, 0]
|
||||
},
|
||||
"eyelid_recoil_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0.5, 0, 0]},
|
||||
"0.5833": {"pre": [0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, -0.5, -0.1]},
|
||||
"1.875": {"pre": [0, -0.5, -0.1], "post": [0, 0, -0.1]},
|
||||
"2.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.5833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.5": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.7917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.5833": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.0": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.0833": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]},
|
||||
"2.25": {"pre": [0, 0, 0.1], "post": [0, 0, -0.1]},
|
||||
"2.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.0": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.5833": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.0": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.0833": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]},
|
||||
"2.25": {"pre": [0, 0, 0.1], "post": [0, 0, -0.1]},
|
||||
"2.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.0": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.dugtrio.faint": {
|
||||
"loop": "hold_on_last_frame",
|
||||
"animation_length": 3,
|
||||
@@ -1034,13 +328,13 @@
|
||||
"position": {
|
||||
"0.2917": [0, 0, 0],
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4167": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": [0, 0, 0],
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.7917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -1048,13 +342,13 @@
|
||||
"position": {
|
||||
"0.2917": [0, 0, 0],
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.4583": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4167": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": [0, 0, 0],
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.7917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -1078,13 +372,13 @@
|
||||
"position": {
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2917": [0, 0, -0.1],
|
||||
"0.2917": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.875": [0, 0, -0.1],
|
||||
"0.875": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0417": [0, 0, 0],
|
||||
"1.0417": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -1092,13 +386,13 @@
|
||||
"position": {
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2917": [0, 0, -0.1],
|
||||
"0.2917": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"0.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.875": [0, 0, -0.1],
|
||||
"0.875": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0417": [0, 0, 0],
|
||||
"1.0417": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -1122,13 +416,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4167": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.375": [0, 0, 0],
|
||||
"2.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
@@ -1136,13 +430,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4167": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.375": [0, 0, 0],
|
||||
"2.375": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
}
|
||||
@@ -1168,14 +462,14 @@
|
||||
"eyelid_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
@@ -1201,14 +495,14 @@
|
||||
"eyelid_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
@@ -1234,14 +528,14 @@
|
||||
"eyelid_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.125": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
|
||||
+36
-850
@@ -75,712 +75,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.dugtrio_alolan.physical": {
|
||||
"animation_length": 3,
|
||||
"bones": {
|
||||
"body": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9167": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 0, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": ["-math.sin(q.anim_time*90*24)*02", 0, "math.sin(q.anim_time*90*17)*02"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.8333": {
|
||||
"post": [0, 0, -1.25],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -7.1],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [0, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.75": {
|
||||
"post": [0, 0, -16.7],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [0, 0, -16],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.4583": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -13.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": ["-math.sin(q.anim_time*90*6)*2", 0, -2.89],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"body1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [7.5, -4, -5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [11.9213, -50.9243, -13.7818],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [11.6966, -74.0498, -19.4432],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [12.1827, -67.8747, -22.7017],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [-1.1013, -13.7699, 2.8238],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [3.28242, 7.51775, 0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [50.709, 2.0361, -22.8812],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5417": {
|
||||
"post": [50.709, 2.0361, -22.8812],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.9167": {
|
||||
"post": [16.737, 14.4812, -21.7787],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0833": {
|
||||
"post": [15, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [7.5, -4, -5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": [0, 0, 0],
|
||||
"0.7083": [0, -1, 0],
|
||||
"1.1667": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [-1.18301, -0.69289, -1.48301],
|
||||
"post": [-1.18301, -0.69289, -1.48301],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": [-0.9559, -1.11355, -0.74652],
|
||||
"1.3333": [-1.33194, -0.27231, -1.99076],
|
||||
"1.375": [-1.21126, -0.41201, -1.64918],
|
||||
"1.5833": {
|
||||
"pre": [-0.92, -0.13, -1.18],
|
||||
"post": [-0.92, -0.13, -1.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.0833": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.1667": [0, -0.28, 0.21],
|
||||
"2.2083": [0, -2.1, 0.2],
|
||||
"2.5833": [0, -2.1, 0.2],
|
||||
"2.7917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.5833": [1, 1, 1],
|
||||
"0.625": [0.8, 0.75, 0.8],
|
||||
"0.6667": [1, 0.1, 1],
|
||||
"1.1667": [1, 0.1, 1],
|
||||
"1.25": [0.9, 1.2, 0.9],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0417": [1, 1, 1],
|
||||
"2.1667": [0.9, 1.2, 0.9],
|
||||
"2.2083": [1, 0.1, 1],
|
||||
"2.5833": [1, 0.1, 1],
|
||||
"2.7083": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body1_2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-1.73205, 0, -2.59808],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.0833": {
|
||||
"post": [8.2679, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-6.7321, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [10.7679, 0, -2.5981],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.6667": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.875": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [-1.73205, 0, -2.59808],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.625": [0, 0, 0],
|
||||
"0.6667": [0, -5, 0],
|
||||
"1.1667": [0, -5, 0],
|
||||
"1.25": [0, -2, 0],
|
||||
"2.6667": [0, -4, 0],
|
||||
"2.875": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"body2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [3.9762, 6.495, 10.7976],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [10.3891, 24.9296, 12.6481],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [1.3318, 51.3394, 15.2992],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [-3.8835, 53.834, 15.0282],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [7.6917, 14.8915, -0.6214],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": [0, 17.5, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [3.28242, -7.51775, -0.56308],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [42.509, -8.8475, 30.2404],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [42.509, -8.8475, 30.2404],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.875": {
|
||||
"post": [10.6615, -8.0683, 18.5147],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0, -0.2392],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-0.38018, -0.04695, -0.49598],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [3.9762, 6.495, 10.7976],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.125": {
|
||||
"post": [0.78, -0.45, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5417": {
|
||||
"post": [0.78, -1.55, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": [0, -2.1, 0.2],
|
||||
"1.25": {
|
||||
"pre": [1.18301, -0.69289, -1.48301],
|
||||
"post": [1.18301, -0.69289, -1.48301],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": [0.9559, -1.11355, -0.74652],
|
||||
"1.3333": [1.33194, -0.27231, -1.99076],
|
||||
"1.375": [1.21126, -0.41201, -1.64918],
|
||||
"1.6667": {
|
||||
"pre": [0.88, -0.12, -1.05],
|
||||
"post": [0.88, -0.12, -1.05],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.7917": {
|
||||
"post": [1.27, 0.19, -0.61],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [0, 0.6, 0.2],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": [0, -0.28, 0.21],
|
||||
"2.25": [0, -2.1, 0.2],
|
||||
"2.6667": [0, -2.1, 0.2],
|
||||
"2.8333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0.7766, 0.14679, -0.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.5": [1, 1, 1],
|
||||
"0.5417": [0.9, 1, 0.9],
|
||||
"0.5833": [1, 0.1, 1],
|
||||
"1.1667": [1, 0.1, 1],
|
||||
"1.25": [0.9, 1.2, 0.9],
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.0833": [1, 1, 1],
|
||||
"2.2083": [0.9, 1.2, 0.9],
|
||||
"2.25": [1, 0.1, 1],
|
||||
"2.6667": [1, 0.1, 1],
|
||||
"2.7917": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body3": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [2.0871, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [-0.4129, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [4.454, -1.0178, 6.3469],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-7.8238, -1.0361, "2.5001+math.sin(q.anim_time*90*6-60)*3"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9167": {
|
||||
"post": [-26.56, -1.04, "2.26+math.sin(q.anim_time*90*6-60)*5"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": {
|
||||
"post": [-35.3238, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [32.1762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [65.145, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2917": {
|
||||
"post": [59.6762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.6667": {
|
||||
"post": [59.6762, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [15.1947, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2083": {
|
||||
"post": [2.6947, -1.0361, 2.5001],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [2.0871, -1.0039, 7.5008],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, -0.3, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.1667": [0, -0.23, 1],
|
||||
"1.2083": [0, -0.23, -3.04],
|
||||
"1.25": [0, 0.47, -2.96],
|
||||
"1.2917": [0, -0.6, -2.87],
|
||||
"1.3333": [0, 0.05, -2.79],
|
||||
"1.375": [0, -0.3, -2.7],
|
||||
"1.4167": [0, 0, -2.62],
|
||||
"1.5833": [0, -0.25, -2.28],
|
||||
"2.2083": [0, -0.3, 0],
|
||||
"2.25": [0, -1.3, 0],
|
||||
"2.75": [0, -2.1, 0.2],
|
||||
"2.875": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [0, -0.3, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"scale": {
|
||||
"0.0": [1, 1, 1],
|
||||
"1.125": [1, 1, 1],
|
||||
"1.2083": [0.8, 1, 1.35],
|
||||
"1.25": {"pre": [0.8, 1, 1.35], "post": [1.2, 1, 0.9]},
|
||||
"1.3333": [1, 1, 1],
|
||||
"2.2083": [1, 1, 1],
|
||||
"2.2917": [1, 0.1, 1],
|
||||
"2.75": [1, 0.1, 1],
|
||||
"2.8333": [1, 1, 1],
|
||||
"3.0": [1, 1, 1]
|
||||
}
|
||||
},
|
||||
"body3_2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [1.28558, 0, 1.92836],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": ["23.7856-math.sin(q.anim_time*90*16)*7.5", 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [31.2856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [23.35, 0, 1.93],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [8.7856, 0, "1.9284+math.sin(q.anim_time*90*6-120)*15"],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": [-43.1823, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.2083": {
|
||||
"post": [-57.1266, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.25": {
|
||||
"post": [21.2856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.375": {
|
||||
"post": [27.6157, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.5833": {
|
||||
"post": [26.5571, 0, 1.994],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.8333": {
|
||||
"post": [44.7157, 0, 2.0597],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.125": {
|
||||
"post": [13.7856, 0, 1.9284],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.25": {
|
||||
"post": [-15.4247, 0, 0.3886],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.2917": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.75": {
|
||||
"post": [2.4019, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"2.9167": {
|
||||
"post": [-2.59808, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"3.0": {
|
||||
"post": [1.28558, 0, 1.92836],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.9583": [0, 0, 0],
|
||||
"1.125": [-0.05508, -1.63581, -0.30179],
|
||||
"1.2083": [-0.05508, -1.63581, -0.30179],
|
||||
"1.25": [0, 0, 0],
|
||||
"2.25": [0, 0, 0],
|
||||
"2.3333": [0, -8, 0],
|
||||
"2.75": [0, -4, 0],
|
||||
"2.9167": [0, 0, 0],
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.5, 0, 0]},
|
||||
"0.4583": {"pre": [-0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.625": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.9583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.625": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eye_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [-0.5, 0, 0]},
|
||||
"0.4583": {"pre": [-0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"pupil_right2": {
|
||||
"position": [0, 0, 0]
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.625": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.9583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_happy_right2": {
|
||||
"position": [1, 0, 0]
|
||||
},
|
||||
"eyelid_recoil_right2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.625": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0.5, 0, 0]},
|
||||
"0.5833": {"pre": [0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.875": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.5833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.5": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.7917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_happy_left1": {
|
||||
"position": [-1, 0, 0]
|
||||
},
|
||||
"eyelid_recoil_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0.5, 0, 0]},
|
||||
"0.5833": {"pre": [0.5, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eye_angry_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, -0.5, -0.1]},
|
||||
"1.875": {"pre": [0, -0.5, -0.1], "post": [0, 0, -0.1]},
|
||||
"2.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.5833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.25": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.5": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.7917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"eyelid_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.5833": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.0": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.0833": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]},
|
||||
"2.25": {"pre": [0, 0, 0.1], "post": [0, 0, -0.1]},
|
||||
"2.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.0": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.5833": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.0": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"2.0833": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]},
|
||||
"2.25": {"pre": [0, 0, 0.1], "post": [0, 0, -0.1]},
|
||||
"2.875": {"pre": [0, 0, -0.1], "post": [0, 0, 0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_recoil_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.0": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.0": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.dugtrio_alolan.faint": {
|
||||
"loop": "hold_on_last_frame",
|
||||
"animation_length": 3,
|
||||
@@ -1033,59 +327,29 @@
|
||||
"eyelid_left1": {
|
||||
"position": {
|
||||
"0.2917": [0, 0, 0],
|
||||
"0.3333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.5": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.2917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": [0, 0, 0],
|
||||
"1.7917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"1.7917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_right1": {
|
||||
"position": {
|
||||
"0.2917": [0, 0, 0],
|
||||
"0.3333": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.3333": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.4583": [0, 0, -0.1],
|
||||
"0.5": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.2917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": [0, 0, 0],
|
||||
"1.7917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"1.7917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"ground2": {
|
||||
@@ -1107,59 +371,29 @@
|
||||
"eyelid_left2": {
|
||||
"position": {
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2917": [0, 0, -0.1],
|
||||
"0.3333": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.75": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.875": [0, 0, -0.1],
|
||||
"0.9167": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0417": [0, 0, 0],
|
||||
"1.0833": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"1.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_right2": {
|
||||
"position": {
|
||||
"0.125": [0, 0, 0],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.2917": [0, 0, -0.1],
|
||||
"0.3333": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.3333": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.7083": [0, 0, 0],
|
||||
"0.75": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.75": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.875": [0, 0, -0.1],
|
||||
"0.9167": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.9167": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0417": [0, 0, 0],
|
||||
"1.0833": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"1.0833": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"ground3": {
|
||||
@@ -1181,59 +415,29 @@
|
||||
"eyelid_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.2083": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.2917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.375": [0, 0, 0],
|
||||
"2.4167": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
},
|
||||
"eyelid_right3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"0.1667": [0, 0, -0.1],
|
||||
"0.2083": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"0.2083": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.25": [0, 0, 0],
|
||||
"1.2917": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
},
|
||||
"1.2917": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
|
||||
"1.4167": [0, 0, -0.1],
|
||||
"1.4583": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
},
|
||||
"1.4583": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.375": [0, 0, 0],
|
||||
"2.4167": {
|
||||
"pre": [0, 0, 0],
|
||||
"post": [0, 0, -0.1]
|
||||
}
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1259,20 +463,14 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left1": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1298,20 +496,14 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left2": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1337,20 +529,14 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_left3": {
|
||||
"position": {
|
||||
"0.0": [0, 0, -0.1],
|
||||
"0.125": [0, 0, -0.1],
|
||||
"0.1667": {
|
||||
"pre": [0, 0, -0.1],
|
||||
"post": [0, 0, 0]
|
||||
}
|
||||
"0.1667": {"pre": [0, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+187
-1038
File diff suppressed because it is too large
Load Diff
-452
@@ -96,458 +96,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.poliwrath.ground_walk": {
|
||||
"loop": true,
|
||||
"animation_length": 1.3333,
|
||||
"bones": {
|
||||
"waist": {
|
||||
"rotation": ["9 - math.sin( q.anim_time * 90 * 6 - 45)*-4", "-math.sin( q.anim_time * 90 * 3)*8", "math.sin( q.anim_time * 90 * 3)*4"],
|
||||
"position": [0, "-0.3+math.sin( q.anim_time * 90 * 6)*1.5", 0]
|
||||
},
|
||||
"torso": {
|
||||
"rotation": ["8 - math.sin( q.anim_time * 90 * 6 - 45)*8", "-math.sin( q.anim_time * 90 * 3 - 25)*-8", "math.sin( q.anim_time * 90 * 3 - 25)*-8"],
|
||||
"position": [0, "math.sin( q.anim_time * 90 * 6 + 45)*0.3", 0]
|
||||
},
|
||||
"head": {
|
||||
"rotation": ["-math.sin( q.anim_time * 90 * 6 - 45)*-4", "-math.sin( q.anim_time * 90 * 3 - 25)*-1", 0]
|
||||
},
|
||||
"arm_left1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-13.63, -16.48493, 36.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.25": {
|
||||
"post": [-41, 8.77773, 38.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.625": {
|
||||
"post": [-8.15, -36.46773, 42.45],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": {
|
||||
"post": [24.5, -46.5535, 23.9],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [-13.63, -16.48493, 36.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"arm_left2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 61.31326, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2917": {
|
||||
"post": [0, 70.51, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.5833": {
|
||||
"post": [0, 45.6917, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [0, 32.9252, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.125": {
|
||||
"post": [0, 33.79, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [0, 61.31326, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hand_left": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-6.39933, 10.3524, 6.73624],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-6.4, 10.35, 6.74],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [-6.39933, 10.3524, 6.73624],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_front_left1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_front_left2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_back_left1": {
|
||||
"rotation": [0, 0, 70]
|
||||
},
|
||||
"finger_back_left2": {
|
||||
"rotation": [0, 0, 72.5]
|
||||
},
|
||||
"thumb_left1": {
|
||||
"rotation": [35.65498, -41.23664, 27.4926]
|
||||
},
|
||||
"arm_right1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-8.15, 36.46773, -42.45],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": {
|
||||
"post": [24.5, 46.5535, -23.9],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-13.63, 16.48493, -36.18],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9167": {
|
||||
"post": [-41, -8.77773, -38.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [-8.15, 36.46773, -42.45],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"arm_right2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, -45.6917, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [0, -32.9252, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4583": {
|
||||
"post": [0, -33.79, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, -61.31326, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.9583": {
|
||||
"post": [0, -70.51, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [0, -45.6917, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hand_right": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-6.4, -10.35, -6.74],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-6.39933, -10.3524, -6.73624],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0417": {
|
||||
"post": [-6.4, -10.35, -6.74],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [-6.4, -10.35, -6.74],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_front_right1": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_front_right2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [0, 0, -67.5],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"finger_back_right1": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, -70],
|
||||
"0.6667": [0, 0, -70],
|
||||
"1.3333": [0, 0, -70]
|
||||
}
|
||||
},
|
||||
"finger_back_right2": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, -72.5],
|
||||
"0.6667": [0, 0, -72.5],
|
||||
"1.3333": [0, 0, -72.5]
|
||||
}
|
||||
},
|
||||
"leg_left": {
|
||||
"rotation": {
|
||||
"0.0": [-3.5, 0, 0],
|
||||
"0.25": [28, 0, 0],
|
||||
"0.3333": [27, 0, 0],
|
||||
"0.4583": [36, 0, 0],
|
||||
"0.6667": {
|
||||
"pre": [-1, 0, 0],
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.8333": {
|
||||
"post": [-57.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": [-35, 0, 0],
|
||||
"1.3333": [-3.5, 0, 0]
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, -0.3, 0],
|
||||
"0.25": [0, -1.1, 2.3],
|
||||
"0.3333": [0, 0.25, 2.3],
|
||||
"0.4583": [0, 0.2, 1.8],
|
||||
"0.6667": {
|
||||
"pre": [0, 0.9, -0.4],
|
||||
"post": [0, 0.9, -0.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.8333": {
|
||||
"post": [0, 0.8, -2.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": [0, -0.7, -2.3],
|
||||
"1.0833": [0, -1.3, -2.3],
|
||||
"1.3333": [0, -0.3, 0]
|
||||
}
|
||||
},
|
||||
"leg_left2": {
|
||||
"rotation": {
|
||||
"0.0": [9, 0, 0],
|
||||
"0.25": [5, 0, 0],
|
||||
"0.3333": [14, 0, 0],
|
||||
"0.4583": [33, 0, 0],
|
||||
"0.5417": {
|
||||
"pre": [57.7, 0, 0],
|
||||
"post": [57.7, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [53, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.8333": {
|
||||
"post": [34.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": [17, 0, 0],
|
||||
"1.0833": [13, 0, 0],
|
||||
"1.3333": [9, 0, 0]
|
||||
}
|
||||
},
|
||||
"foot_left": {
|
||||
"rotation": {
|
||||
"0.0": [-5, 0, 0],
|
||||
"0.25": [-32, 0, 0],
|
||||
"0.3333": [1.5, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [29, 0, 0],
|
||||
"post": [29, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0": [-13, 0, 0],
|
||||
"1.0833": [22, 0, 0],
|
||||
"1.3333": [-5, 0, 0]
|
||||
}
|
||||
},
|
||||
"toes_left": {
|
||||
"rotation": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.25": [0, 0, 0],
|
||||
"0.3333": [-41, 0, 0],
|
||||
"0.5": {
|
||||
"pre": [-19, 0, 0],
|
||||
"post": [-19, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.6667": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.875": {
|
||||
"post": [-23.89, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0417": {
|
||||
"post": [-20.18, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.0833": [0, 0, 0],
|
||||
"1.3333": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"leg_right": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": [-57.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": [-35, 0, 0],
|
||||
"0.6667": [-3.5, 0, 0],
|
||||
"0.9167": [28, 0, 0],
|
||||
"1.0": [27, 0, 0],
|
||||
"1.125": [36, 0, 0],
|
||||
"1.3333": {
|
||||
"pre": [-1, 0, 0],
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"post": [0, 0.9, -0.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": [0, 0.8, -2.3],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [0, -0.7, -2.3],
|
||||
"0.4167": [0, -1.3, -2.3],
|
||||
"0.6667": [0, -0.3, 0],
|
||||
"0.9167": [0, -1.1, 2.3],
|
||||
"1.0": [0, 0.25, 2.3],
|
||||
"1.125": [0, 0.2, 1.8],
|
||||
"1.3333": {
|
||||
"pre": [0, 0.9, -0.4],
|
||||
"post": [0, 0.9, -0.4],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"leg_right2": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [53, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.1667": {
|
||||
"post": [34.5, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [17, 0, 0],
|
||||
"0.4167": [13, 0, 0],
|
||||
"0.9167": [5, 0, 0],
|
||||
"1.0": [-1, 0, 0],
|
||||
"1.125": [33, 0, 0],
|
||||
"1.2083": {
|
||||
"pre": [57.7, 0, 0],
|
||||
"post": [57.7, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [53, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"foot_right": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.3333": [-13, 0, 0],
|
||||
"0.4167": [22, 0, 0],
|
||||
"0.9167": [-32, 0, 0],
|
||||
"1.0": [-6, 0, 0],
|
||||
"1.1667": {
|
||||
"pre": [29, 0, 0],
|
||||
"post": [29, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [-1, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
},
|
||||
"toes_right": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.2083": {
|
||||
"post": [-23.89, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.375": {
|
||||
"post": [-20.18, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"0.4167": [0, 0, 0],
|
||||
"0.9167": [0, 0, 0],
|
||||
"1.0": [-41, 0, 0],
|
||||
"1.1667": {
|
||||
"pre": [-19, 0, 0],
|
||||
"post": [-19, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
},
|
||||
"1.3333": {
|
||||
"post": [0, 0, 0],
|
||||
"lerp_mode": "catmullrom"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.poliwrath.battle_idle": {
|
||||
"loop": true,
|
||||
"bones": {
|
||||
|
||||
+137
-2443
File diff suppressed because it is too large
Load Diff
+115
-2355
File diff suppressed because it is too large
Load Diff
+65
-5810
File diff suppressed because it is too large
Load Diff
+1307
-3006
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