Compare commits

...
Author SHA1 Message Date
Paul 550b99be36 Merge remote-tracking branch 'origin/main' into lang-updates 2025-04-18 22:01:33 +10:00
Polymeta bfbee7b1d7 Merge branch 'loot-fix' into 'main'
Improved parity with vanilla mobs' drop behavior

See merge request cable-mc/cobblemon!1576
2025-04-18 07:02:45 +00:00
Test f5d71390dd Merge branch 'dex-zoom' into 'main'
A few dex scanner fixes/improvements, closes #1328

Closes #1328

See merge request cable-mc/cobblemon!1608
2025-04-18 05:06:31 +00:00
Crater 6ff5d3df06 A few dex scanner fixes/improvements, closes #1328 2025-04-18 05:06:30 +00:00
gruxor 988766894a Review resolutions 2025-04-18 00:08:43 -04:00
Polymeta 34805ea496 oop typo - allow dragon breath to be used in a restoration tank
Closes #1539

Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-18 00:25:39 +01:00
Polymeta b670d44e21 reorder delegate molang functions to be added first so they are overridden by more specific functions
Also allow PoseableState sound molang to play without an entity present (in UIs)

Closes #1529

Signed-off-by: Polymeta <40173118+Polymeta@users.noreply.github.com>
2025-04-18 00:08:59 +01:00
Polymeta 159905eb3b Merge branch 'josh/left-handed-item-fix' into 'main'
Corrected item rotation for left hand display context

See merge request cable-mc/cobblemon!1609
2025-04-17 20:32:11 +00:00
Josh c10213480b Flip rotations when display context is left hand 2025-04-17 15:22:11 -04:00
gruxor 3d5a365a6e Added a configuration option for drops' behavior upon Pokémon death 2025-04-17 14:06:33 -04:00
gruxor 4b64b4307a Changelog update 2025-04-17 14:04:16 -04:00
gruxor 382f741db8 Improved parity with vanilla mobs' drop behavior 2025-04-17 14:04:16 -04:00
Teggy 6d62d911d6 Translated using Weblate (Spanish)
Currently translated at 96.6% (6787 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-17 11:38:28 +00:00
Alexis Salgueiro a1d40084c5 Translated using Weblate (French)
Currently translated at 92.2% (6479 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-04-17 04:04:45 +00:00
Teggy 8b1b63e110 Translated using Weblate (Spanish)
Currently translated at 96.4% (6775 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-17 04:04:44 +00:00
Polymeta baf3cd5f30 Merge branch 'moon-ball-fix-🌕🌒🌓🌔🌑🌘🌗🌖' into 'main'
Fix the messed up Moon Phase code for the Moon Ball catch rate

See merge request cable-mc/cobblemon!1605
2025-04-16 17:16:36 +00:00
Plastered_Crab 2327f1aa2c Add this to make Polymeta happy 2025-04-16 09:46:11 -07:00
plastered_crab 62036c0ac6 Fix the messed up Moon Phase code for the Moon Ball catch rate 2025-04-16 07:57:00 -07:00
Teggy 9e2e95e287 Translated using Weblate (Spanish)
Currently translated at 96.0% (6744 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-16 09:42:42 +00:00
Landon 2db494ff5e Merge branch 'Dex-Species-Forms' into 'main'
Update English Lang with official values and preliminary species form support for the dex

See merge request cable-mc/cobblemon!1454
2025-04-16 04:43:43 +00:00
Konoha 7fe1415551 Clean InfoWidget form parsing. 2025-04-15 23:24:56 -04:00
Konoha ca4d4ed3be Re-Run Lang Key Scrape & Changelog 2025-04-15 09:02:29 -04:00
Konoha 700227be41 Merge branch 'main' into Dex-Species-Forms
# Conflicts:
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2025-04-15 08:39:33 -04:00
Konoha 985a4f65dc Re-Run Lang Key Scrape & Changelog 2025-04-15 08:16:41 -04:00
Konoha e117100e34 Re-Run Lang Key Scrape & Changelog 2025-04-15 08:06:10 -04:00
Konoha 93ea13fa4d Merge branch 'main' into Dex-Species-Forms 2025-04-15 07:57:01 -04:00
Teggy 6694680c50 Translated using Weblate (Spanish)
Currently translated at 95.9% (6735 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-15 05:11:49 +00:00
Polymeta cd14881d17 Merge branch 'immersive-tweaks' into 'main'
Foods and Recipes

See merge request cable-mc/cobblemon!1554
2025-04-14 20:45:41 +00:00
dhi_holo 1393cc3ef3 Foods and Recipes 2025-04-14 20:45:40 +00:00
Konoha 23ebd0573a Merge branch 'implement_pokemon' into Dex-Species-Forms
# Conflicts:
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2025-04-14 08:05:18 -04:00
Polymeta 6447c2e2eb Merge branch 'per-world-gamerule-support' into 'main'
Add per-level gamerule support for doPokemonSpawning

See merge request cable-mc/cobblemon!1593
2025-04-14 11:32:54 +00:00
Teggy 8cafce0a4a Translated using Weblate (Spanish)
Currently translated at 95.7% (6724 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-14 10:33:04 +00:00
BlackBeltPanda 039a18a2bf Update CHANGELOG.md 2025-04-14 04:46:06 -04:00
Watuneni iteite de271f81b1 Translated using Weblate (Japanese)
Currently translated at 76.4% (5365 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-04-14 06:50:20 +00:00
Teggy feb78c5c58 Translated using Weblate (Spanish)
Currently translated at 95.3% (6698 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-14 06:50:19 +00:00
FrankTheFarmer 71736341f0 Merge branch 'main' into implement_pokemon 2025-04-14 13:55:12 +10:00
Landon bb6e5607f1 Merge branch 'stop-head-pitch' into 'main'
Make head moving actually stop this time.

See merge request cable-mc/cobblemon!1596
2025-04-13 04:55:00 +00:00
Landon 4603f5ac7a Merge branch 'riding-animation-01' into 'main'
Riding dynamic animation, riding fixes, and controller tweaks

See merge request cable-mc/cobblemon!1599
2025-04-12 23:59:31 +00:00
Jackson Bowes c683294227 Riding dynamic animation, riding fixes, and controller tweaks 2025-04-12 23:59:31 +00:00
JPAK f29c2343e6 Merge remote-tracking branch 'origin/stop-head-pitch' into stop-head-pitch 2025-04-12 16:41:40 -05:00
JPAK 3a2da5a87d Make head moving actually stop this time. 2025-04-12 16:41:13 -05:00
QriviateA 27d1de8e4e Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-04-12 17:14:04 +01:00
Mia e5d052a6bf Translated using Weblate (German)
Currently translated at 86.7% (6090 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/de/
2025-04-12 10:41:09 +00:00
QriviateA 8af62f800b Updated changelog 2025-04-12 01:27:10 +01:00
QriviateA a50da47a8e Updated Kangaskhan model + anims 2025-04-12 01:26:47 +01:00
QriviateA f690781b0d Updated Cinderace model + anims 2025-04-12 01:26:16 +01:00
FrankTheFarmer 6a7fc67ae1 Merge branch 'main' into implement_pokemon 2025-04-12 08:10:08 +10:00
JPAK 4722defec2 Make head moving actually stop this time. 2025-04-10 13:14:32 -05:00
FrankTheFarmer 7b7acb97d1 Changelog 2025-04-10 23:05:56 +10:00
FrankTheFarmer 53af92f254 Implemented Metagross with locators for testing 2025-04-10 23:04:07 +10:00
FrankTheFarmer 91bce4b153 Merge branch 'main' into implement_pokemon 2025-04-10 22:32:31 +10:00
BlackBeltPanda 511130d353 Remove redundant check for player UUID in spawnersForPlayers and early return in registerPlayerSpawner 2025-04-10 05:42:10 -04:00
BlackBeltPanda 476c3e54f1 Return early in CobbledWorldSpawnerManager#onDimensionChange when DO_POKEMON_SPAWNING gamerule is equal in origin and destination levels 2025-04-10 05:40:13 -04:00
FrankTheFarmer 4bfe8b808c Implemented Magnezone with locators for testing 2025-04-10 16:36:21 +10:00
FrankTheFarmer 8db943d2a9 Merge branch 'main' into implement_pokemon 2025-04-10 16:34:54 +10:00
FrankTheFarmer fdff6ecfa5 Implemented Magnezone with locators for testing 2025-04-10 16:33:51 +10:00
BlackBeltPanda 2eb698969d Add onDimensionChange method to CobbledWorldSpawnerManager 2025-04-10 01:52:12 -04:00
BlackBeltPanda bba60f0098 Check DO_POKEMON_SPAWNING gamerule for the correct Level in SpawnerManager#onServerTick and CobbledWorldSpawnerManager#onPLayerLogin 2025-04-10 01:50:33 -04:00
BlackBeltPanda 8ee2c95853 Add unregisterPlayerSpawner and registerPlayerSpawner methods to CobbledWorldSpawnerManager 2025-04-10 01:45:43 -04:00
BlackBeltPanda 77db2ce17a Add origin and destination ServerLevel properties to ChangeDimensionEvent 2025-04-10 01:43:59 -04:00
Teggy 0ea4641536 Translated using Weblate (Spanish)
Currently translated at 95.3% (6696 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-08 10:41:46 +00:00
FrankTheFarmer ff5ea6fa21 Merge branch 'main' into implement_pokemon 2025-04-08 19:42:22 +10:00
FrankTheFarmer 4820d78416 Implemented Jolteon's item holding animation 2025-04-08 19:05:35 +10:00
FrankTheFarmer 2f417e953c Added placeholder cry to the eeveelution animations 2025-04-08 18:38:39 +10:00
FrankTheFarmer 8fde0ed4f6 Added rootbone and cry back to the eeveelution posers 2025-04-08 18:38:08 +10:00
FrankTheFarmer 6715874a8f Merge branch 'main' into implement_pokemon 2025-04-08 16:00:52 +10:00
RedGenesectNinja 31f88a1f68 Implemented Druddigon 2025-04-08 00:37:09 -05:00
FrankTheFarmer f80aa2769a Restored Treecko line cries 2025-04-08 10:55:39 +10:00
FrankTheFarmer 20aa4d43b8 Delphox wand animation tweaks 2025-04-08 09:19:10 +10:00
FrankTheFarmer 9bec3e088f Changelog moment 2025-04-08 08:42:49 +10:00
FrankTheFarmer 5b4dbe1957 Imported old placeholder walk and cry for Braixen and Delphox 2025-04-08 08:36:19 +10:00
FrankTheFarmer 48f248d481 Fixed a crash caused by cosmetic remodels for Braixen and Delphox. 2025-04-08 08:36:00 +10:00
FrankTheFarmer d726c4d0ed Merge branch 'main' into implement_pokemon
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/render/models/blockbench/repository/VaryingModelRepository.kt
2025-04-08 08:19:12 +10:00
FrankTheFarmer c9c421ba2a Fixed Sneasler model issues from previous update for cosmetic basket. 2025-04-07 21:00:12 +10:00
FrankTheFarmer 2436a8ddcc Fixed Tropius typo in changelog 2025-04-07 20:04:13 +10:00
FrankTheFarmer 3364944c26 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-04-07 19:57:12 +10:00
FrankTheFarmer 9e6a6eabc7 Fixed the wrong type of Crocs mentioned in the changelog 2025-04-07 19:55:57 +10:00
FrankTheFarmer 78def7318e Treecko my beloved. Gave json poser and fixed t-pose 2025-04-07 19:55:09 +10:00
FrankTheFarmer fdf062bd4c oops, fixed dex number for grovyle poser 2025-04-07 19:44:37 +10:00
FrankTheFarmer ef5a682adb Fixed stick related Grovyle crash and gave it a JSON poser 2025-04-07 19:41:11 +10:00
Polymeta f76d28d29e updated changelog 2025-04-07 09:35:20 +00:00
FrankTheFarmer 9c70aad64d Fixed stick related Sceptile crash and gave it a JSON poser 2025-04-07 19:17:56 +10:00
FrankTheFarmer 25de1ad180 Merge branch 'main' into implement_pokemon 2025-04-07 15:13:02 +10:00
FrankTheFarmer f967d1ec11 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-04-07 15:12:10 +10:00
FrankTheFarmer efd0497de1 Fixed Garchomp using battle idle in its portrait and profile 2025-04-07 15:00:47 +10:00
Kenji_64 b30c0a4a9a Adjusted Nosepass' walk speed. (Thanks Lennie and Frank!) 2025-04-06 22:21:25 +02:00
Kenji_64 c99b26a44b Added animations to Nosepass and Probopass. Made new JSON posers and replaced the Kotlin ones (thanks Lennie!) 2025-04-06 21:06:37 +02:00
FrankTheFarmer b19bc1e4c7 updated changelog 2025-04-06 21:21:37 +10:00
FrankTheFarmer bc5ffda1a5 Expedited crobat with locators 2025-04-06 21:19:09 +10:00
FrankTheFarmer 491d6c9fd6 Expedited salamence with locators 2025-04-06 21:19:01 +10:00
FrankTheFarmer ccc6ad77a5 Garchomp and perchance the craziest poser that ever lived 2025-04-06 19:47:02 +10:00
FrankTheFarmer 00fd9d1278 oopsies forgot portrait and profile data on honchkrow 2025-04-06 19:47:02 +10:00
FrankTheFarmer 01464f8b71 Expediting more models for reasons the government will not allow me to explain 2025-04-06 19:47:01 +10:00
FrankTheFarmer d91fe0b876 Merge branch 'main' into implement_pokemon 2025-04-06 18:56:00 +10:00
FrankTheFarmer 3f6faf7796 Merge branch 'main' into implement_pokemon 2025-04-05 09:24:40 +10:00
Sterrezo d5efdeee68 More adjustments to the cry checker script 2025-04-04 19:06:22 +02:00
queao 57f446260c just gonna drop these in here (added remodels for eevee and all eeveelutions) 2025-04-04 15:53:56 +10:00
Kenji_64 d4cf44f8f0 Removed the old Three Segment Aspect 2025-04-03 18:54:29 +02:00
Kenji_64 a074ebbcce It has been du-dune: Implemented Dunsparce + Dudunsparce (2 & 3 Segment Form) 2025-04-03 18:54:00 +02:00
queao 6578ed55e3 whoopsies 2025-04-03 16:12:39 +10:00
Tyzillion f567ceadd8 Implemented Cosmetics for Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandle line, Treecko line, Braixen, Delphox, and Dragonite.
Removed Shulker aspect and replaced it with cosmetic_item-shulker_shell.
Shulker shell Forretress is now a cosmetic rather than a special evo.
2025-04-02 18:03:11 -04:00
FrankTheFarmer 5de92f78c6 Changelog 👨‍🌾🔫🐲 2025-04-02 22:50:23 +10:00
FrankTheFarmer a2402f78e7 Added Sandaconda 🐍🐍🐍 2025-04-02 22:47:37 +10:00
FrankTheFarmer 1ad6d63137 Added Silicobra 🪱 2025-04-02 22:45:54 +10:00
FrankTheFarmer 39d417c651 Added Bronzong 👁🔔👁 2025-04-02 22:44:14 +10:00
FrankTheFarmer ce1bf9f4f2 Added Bronzor 🔷 2025-04-02 22:43:41 +10:00
FrankTheFarmer a6136906f8 Added Musharna 💤🐖 2025-04-02 22:42:44 +10:00
FrankTheFarmer 37a99b528e Added Munna 🐖 2025-04-02 22:40:46 +10:00
FrankTheFarmer 048b237302 Added Zebstrika ⚡🦓⚡ 2025-04-02 22:38:17 +10:00
FrankTheFarmer 131773f9c8 Added Blitzle ⚡🦓 2025-04-02 22:37:56 +10:00
FrankTheFarmer 22e55b7e77 Added Arboliva 🌵 2025-04-02 22:36:29 +10:00
FrankTheFarmer 6c288f9cc8 Added Dolliv 🫒🦵 2025-04-02 22:31:52 +10:00
FrankTheFarmer b5e86a9460 Added Smoliv 🫒 2025-04-02 22:30:53 +10:00
FrankTheFarmer f199e7c1c0 Added Froslass ✨👩‍🦳❄ 2025-04-02 22:29:05 +10:00
FrankTheFarmer 4161d96707 Added Glalie ⚪ 2025-04-02 22:27:35 +10:00
FrankTheFarmer 59927dd701 Added Snorunt 📐 2025-04-02 22:26:58 +10:00
FrankTheFarmer 220d8ddc0f Added Grumpig 🐖🔮 2025-04-02 22:25:53 +10:00
FrankTheFarmer 0dd143e67e Added Spoink 🔮🐷 2025-04-02 22:24:57 +10:00
FrankTheFarmer d83eb62821 Added Garbodor 🤮 2025-04-02 22:22:52 +10:00
FrankTheFarmer a716fda023 Added Trubbish 🤢 2025-04-02 22:22:25 +10:00
FrankTheFarmer d14aad787c Added Orthworm 🪱♥❓🥺 2025-04-02 22:19:01 +10:00
FrankTheFarmer 2eb7b60dd1 Added Drampa 👴🐉🔥🏠 2025-04-02 22:11:41 +10:00
Teggy bc4699e354 Translated using Weblate (Spanish)
Currently translated at 95.1% (6683 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-04-02 11:09:46 +00:00
FrankTheFarmer d79ffc631b Merge branch 'main' into implement_pokemon 2025-04-02 08:41:27 +10:00
Teggy 9270119675 Translated using Weblate (Spanish)
Currently translated at 95.1% (6682 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-31 15:23:52 +00:00
Teggy 0058906022 Translated using Weblate (Spanish)
Currently translated at 95.1% (6678 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-31 00:16:23 +00:00
FrankTheFarmer 7cd1870f23 Merge branch 'main' into implement_pokemon 2025-03-31 07:42:53 +10:00
Kyo 14d2a76211 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/vi/
2025-03-27 12:41:50 +00:00
Watuneni iteite 7669000962 Translated using Weblate (Japanese)
Currently translated at 76.3% (5358 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-03-27 12:41:46 +00:00
Sterrezo 716d1b848e Fixed and renamed cries for Galarian Ponyta, Galarian Rapidash and Alolan Raichu 2025-03-26 16:19:26 +01:00
Sterrezo 4878fc517d Updated and cleaned up the cry checker script 2025-03-26 16:00:57 +01:00
Sterrezo 4d9d543110 STOP BREAKING THE SPREADSHEET
fixed script
2025-03-26 14:26:15 +01:00
FrankTheFarmer 718a9b922b Merge branch 'main' into implement_pokemon 2025-03-26 08:28:53 +10:00
GenotypeXD-Dev e2a152aeb3 Model Fixes didnt push 2025-03-24 19:34:11 -06:00
GenotypeXD-Dev 3e21226b27 Implemented Hawlucha + fixed z fighting on Noibat and scaled down to 0.6 2025-03-24 19:30:16 -06:00
queao c46c5b806c IT'S TIIIIIIIIIIME (implemented noibat and noivern - implementation work done by genotype) 2025-03-24 18:49:07 +10:00
FrankTheFarmer 3c37d93046 Merge branch 'main' into implement_pokemon 2025-03-24 16:40:53 +10:00
Teggy 8912911800 Translated using Weblate (Spanish)
Currently translated at 94.3% (6621 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-22 01:16:22 +00:00
阿鱼 62ecfaf54a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-20 23:47:02 +00:00
Teggy 6684177236 Translated using Weblate (Spanish)
Currently translated at 94.2% (6615 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-20 23:47:00 +00:00
Watuneni iteite deca5cf55b Translated using Weblate (Japanese)
Currently translated at 76.1% (5350 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-03-20 23:46:59 +00:00
FrankTheFarmer 7b2790de50 Changelog setup for 1.7 implementation stuff 2025-03-18 09:20:30 +10:00
FrankTheFarmer 7f2bb84c85 Merge branch 'main' into implement_pokemon 2025-03-18 09:12:06 +10:00
阿鱼 0f75797759 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-17 21:03:49 +00:00
FrankTheFarmer 331e1371d4 Illegal imports of Dragonite and Gyarados models with locators for testing 2025-03-16 09:42:56 +10:00
FrankTheFarmer bdd57ba1a4 Merge branch 'main' into implement_pokemon 2025-03-16 08:53:37 +10:00
Alexis Salgueiro c194aefce5 Translated using Weblate (French)
Currently translated at 91.5% (6425 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-03-15 14:17:58 +00:00
Aiser(CCHusky) f4798c8783 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-15 14:17:57 +00:00
chronicen 2178a5f10e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-15 14:17:57 +00:00
Teggy bc145a56d5 Translated using Weblate (Spanish)
Currently translated at 93.6% (6575 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-14 17:00:49 +00:00
FrankTheFarmer 670e7e9ca1 Merge branch 'main' into implement_pokemon 2025-03-13 13:55:26 +10:00
Nico Merenq 476ef3bb2f Translated using Weblate (Russian)
Currently translated at 73.9% (5189 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-03-12 13:19:09 +00:00
Alexis Salgueiro 460050289b Translated using Weblate (French)
Currently translated at 90.7% (6373 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-03-10 15:04:25 +00:00
Nico Merenq 01fd4dcc68 Translated using Weblate (Russian)
Currently translated at 73.8% (5182 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-03-09 18:06:58 +00:00
Nico Merenq 0392eb3b7e Translated using Weblate (Russian)
Currently translated at 73.6% (5172 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-03-09 15:29:58 +00:00
阿鱼 493f423a2f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-09 10:54:04 +00:00
阿鱼 cbcfa1bbfb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (7021 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-09 10:45:17 +00:00
Nico Merenq 17a3ff15db Translated using Weblate (Russian)
Currently translated at 73.6% (5171 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-03-09 10:30:06 +00:00
阿鱼 9c14cccc98 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.9% (7017 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-09 10:30:05 +00:00
Weblate 850cfbe755 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2025-03-08 22:51:12 +00:00
Teggy 28afa6a9e8 Translated using Weblate (Spanish)
Currently translated at 93.1% (6538 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-08 22:51:08 +00:00
阿鱼 7a76d95ce7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.7% (6936 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-08 22:51:07 +00:00
Teggy 54707d0618 Translated using Weblate (Spanish)
Currently translated at 92.1% (6470 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-08 15:08:19 +00:00
Aiser(CCHusky) 307c400e28 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.6% (6929 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-08 15:08:18 +00:00
阿鱼 5c9b3ab25d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.6% (6929 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-08 15:08:18 +00:00
阿鱼 532e991fb2 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.1% (6890 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-08 11:31:35 +00:00
Nico Merenq b1bf817329 Translated using Weblate (Russian)
Currently translated at 73.6% (5171 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ru/
2025-03-08 11:31:34 +00:00
Teggy c091f90487 Translated using Weblate (Spanish)
Currently translated at 91.7% (6445 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-08 08:23:13 +00:00
阿鱼 a49d4715ff Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.0% (6816 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-08 08:23:12 +00:00
阿鱼 652b15532e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 96.9% (6807 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-07 04:18:30 +00:00
Teggy e4064897b0 Translated using Weblate (Spanish)
Currently translated at 91.5% (6430 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-03-07 04:18:29 +00:00
阿鱼 f9ca8222da Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 96.7% (6793 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-06 12:30:15 +00:00
FrankTheFarmer 3ae349aea5 Merge branch 'main' into implement_pokemon 2025-03-06 18:28:14 +10:00
阿鱼 67480a945f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 95.5% (6708 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-06 06:42:04 +00:00
Alexis Salgueiro e6e811e6e6 Translated using Weblate (French)
Currently translated at 90.0% (6320 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-03-06 06:41:58 +00:00
Watuneni iteite 4635c531b9 Translated using Weblate (Japanese)
Currently translated at 73.7% (5178 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-03-06 06:41:56 +00:00
Watuneni iteite 3bdfac9a46 Translated using Weblate (Japanese)
Currently translated at 71.7% (5039 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-03-05 13:53:19 +00:00
chronicen 2b7a71cb1c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 91.4% (6424 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-05 13:53:19 +00:00
阿鱼 d47a500a0e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 91.4% (6424 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-05 13:53:19 +00:00
FrankTheFarmer 13650f98f9 Merge remote-tracking branch 'origin/implement_pokemon' into implement_pokemon 2025-03-05 14:23:08 +10:00
FrankTheFarmer d3379557fd 2 more Gen 5 monkeys jumping on the bed 2025-03-05 14:22:28 +10:00
FrankTheFarmer 143c2683fe Added placeholder animations to Pansage and Simisage 2025-03-05 14:21:54 +10:00
FrankTheFarmer 72d64d36e5 Changed panpour scale and hitbox size to match that of the other monkeys 2025-03-05 14:21:17 +10:00
Wi2tert c0b52c38e3 "implemented": Panpour、Simipour 💧🐒 2025-03-05 12:11:22 +08:00
FrankTheFarmer 12a0ee309e Merge branch 'main' into implement_pokemon 2025-03-05 08:01:14 +10:00
阿鱼 33e6dbb4c1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 87.4% (6143 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/zh_Hans/
2025-03-04 15:50:25 +00:00
RedGenesectNinja 824e37effd Implemented Pansage and Simisage 2025-03-03 23:12:27 -06:00
Alexis Salgueiro 482c57dd2e Translated using Weblate (French)
Currently translated at 89.1% (6259 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-03-03 19:14:47 +00:00
Alexis Salgueiro 503c62d78d Translated using Weblate (French)
Currently translated at 87.8% (6169 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-03-03 09:30:43 +00:00
Seonho Lee 708d0ab6d3 Translated using Weblate (Korean)
Currently translated at 70.0% (4915 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ko/
2025-03-03 09:30:42 +00:00
Teggy 19727542bd Translated using Weblate (Spanish)
Currently translated at 91.4% (6424 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-28 22:02:07 +00:00
Alexis Salgueiro c4e6714a95 Translated using Weblate (French)
Currently translated at 87.6% (6153 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/fr/
2025-02-28 02:41:41 +00:00
Teggy c116e612c6 Translated using Weblate (Spanish)
Currently translated at 90.4% (6354 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-28 02:41:41 +00:00
Fiestorra ISV 215a055ce6 Translated using Weblate (Spanish)
Currently translated at 90.4% (6354 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-28 02:41:40 +00:00
Fiestorra ISV 9c0b6b8d26 Translated using Weblate (Spanish)
Currently translated at 87.3% (6134 of 7021 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-25 22:27:22 +00:00
Fiestorra ISV 5c4462ee94 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-25 18:48:01 +00:00
Teggy 04edd6f9e2 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-25 18:48:01 +00:00
Polymeta 52821cc051 Merge branch 'main' into lang-updates 2025-02-25 18:38:33 +00:00
Watuneni iteite 0029deb029 Translated using Weblate (Japanese)
Currently translated at 81.6% (5218 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-02-23 23:03:25 +00:00
Teggy c6360e2a36 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-23 23:03:24 +00:00
Fiestorra ISV 2e77c647b6 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-23 23:03:22 +00:00
Watuneni iteite c3d3b19788 Translated using Weblate (Japanese)
Currently translated at 81.3% (5200 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-02-21 08:11:08 +00:00
Fiestorra ISV 219cd61beb Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-21 08:11:07 +00:00
Teggy 207e5a9142 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-19 13:03:51 +00:00
Watuneni iteite c721fb534d Translated using Weblate (Japanese)
Currently translated at 81.2% (5191 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/ja/
2025-02-18 15:00:29 +00:00
iván Segura dba2622fd7 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-18 15:00:28 +00:00
iván Segura da68675133 Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-16 12:57:27 +00:00
Kenji_64 975cdf050f Fixed Charcadet's cry sound event not being there and head pivot 2025-02-15 15:34:34 +01:00
iván Segura 9aea5a7daf Translated using Weblate (Spanish)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/es/
2025-02-15 13:26:10 +00:00
Gustavo Puerari 10402575fb Translated using Weblate (Portuguese (Brazil))
Currently translated at 68.3% (4369 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-13 23:43:36 +00:00
João Pedro Silva Afonso 0f82ade57c Translated using Weblate (Portuguese (Brazil))
Currently translated at 68.3% (4369 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-13 23:43:35 +00:00
Gustavo Puerari 450b041118 Translated using Weblate (Portuguese (Brazil))
Currently translated at 65.1% (4166 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-11 21:12:32 +00:00
Weblate 770c349ac4 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2025-02-10 00:41:50 +00:00
Gustavo Puerari f76648b6f2 Translated using Weblate (Portuguese (Brazil))
Currently translated at 59.8% (3826 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-10 00:41:46 +00:00
Gustavo Puerari 56e60667db Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.5% (3297 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-07 00:29:47 +00:00
Gustavo Puerari c4a60951c5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 49.7% (3178 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-05 07:22:58 +00:00
Kyo 814eee8125 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (6391 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/vi/
2025-02-03 09:44:44 +00:00
Gustavo Puerari 2a9ff3bfbd Translated using Weblate (Portuguese (Brazil))
Currently translated at 47.9% (3064 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-02-03 09:44:43 +00:00
Konoha 8fe2042127 Merge Basculin game evolutions 2025-02-02 08:17:05 -05:00
Konoha 538ad883ab Correct Spewpa evo tag reference in evolution to tag format 2025-02-02 08:02:49 -05:00
Konoha 136cb86492 Correct the consumption of held items on non-applicable item evolutions 2025-02-01 08:22:12 -05:00
Konoha e4eb1251d1 Fix Goomy & Bergmite branch evolutions, branching stone anticondition conflict. 2025-02-01 07:51:39 -05:00
Weblate 83350cb0db Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2025-01-31 22:57:44 +00:00
Patch Notes Guy 778761dbee Translated using Weblate (Vietnamese)
Currently translated at 99.1% (6335 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/vi/
2025-01-31 22:57:39 +00:00
Gustavo Puerari e9881b748a Translated using Weblate (Portuguese (Brazil))
Currently translated at 46.4% (2971 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-31 22:57:25 +00:00
Weblate dabaeefa23 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/
2025-01-31 09:41:51 +00:00
Patch Notes Guy 0e0bec2712 Added translation using Weblate (Vietnamese) 2025-01-31 09:41:47 +00:00
Gustavo Puerari 48fe160334 Translated using Weblate (Portuguese (Brazil))
Currently translated at 45.1% (2887 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-31 03:10:48 +00:00
Valerie Rice 1bc83d9045 poison frog man (only the little one) 2025-01-28 16:22:21 +10:00
Gustavo Puerari 7d599e12d0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 42.7% (2731 of 6391 strings)

Translation: Cobblemon/Mod
Translate-URL: http://lang.cobblemon.com/projects/cobblemon/mod/pt_BR/
2025-01-27 23:30:11 +00:00
Konoha 98775ffc1e Merge branch 'main' into Dex-Species-Forms
# Conflicts:
#	common/src/main/resources/assets/cobblemon/lang/en_us.json
2025-01-27 09:26:48 -05:00
Konoha bbeb3d45f0 Merge branch 'implement_pokemon' into Dex-Species-Forms 2025-01-21 11:37:28 -05:00
Konoha 8fd854f7f7 Merge branch 'main' into Dex-Species-Forms 2025-01-18 16:48:07 -05:00
Konoha f449cf27c5 Merge branch 'implement_pokemon' into Dex-Species-Forms 2025-01-18 10:59:31 -05:00
Konoha bf5fd5eed8 Merge remote-tracking branch 'origin/main' 2025-01-03 19:19:26 -05:00
Konoha facead5f0b Preliminary species form support for Pokedex 2025-01-03 19:12:31 -05:00
219 changed files with 35280 additions and 6652 deletions

No files matched your search

+25
View File
@@ -17,6 +17,8 @@
- Added cosmetics for Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandle line, Treecko line, Braixen, Delphox, and Dragonite.
- Added `/transformmodelpart (position|rotation|scale) <modelPart> <transform: x y z>` command that can add transformations to a pokemon's model part.
- The player executing the command must be facing the target pokemon entity. Transformations are not persistent and will revert when resources are reloaded.
- Added lang keys for all moves and abilities up to Generation 9.
- Fixed Moon Ball moon phase logic to actually work correctly
### Pokémon Added
@@ -76,6 +78,8 @@
- Sneasler
- Braixen
- Delphox
- Cinderace
- Kangaskhan
### Model updates for the following Pokémon
- Gyarados
@@ -97,18 +101,35 @@
- Pidgeot
- Nosepass
- Probopass
- Kangaskhan
- Cinderace
- Magnezone
- Metagross
- Added Syrupy Apples.
### Changes
- Renamed `chargeGainedPerTick` config to `secondsToChargeHealingMachine`.
- Made Blocks of Gold count as Big Nuggets when held by a Pokémon (for Fling functionality)
- Players can now eat Sweet and Tart Apples, Whipped Dreams, and the Alcremie Sweets.
- Updated Sweet and Tart Apple sprites
- Updated the following recipes: Air Balloon, Assault Vest, Binding Band, Black Belt, Blunder Policy, Choice Band, Choice Scarf, Cleanse Tag, Covert Cloak, Destiny Knot, Eject Button, Expert Belt, Focus Band, Focus Sash, Magnet, Metronome, Muscle Band, Power Anklet, Power Band, Power Belt, Power Bracer, Power Lens, Power Weight, Protective Pads, Protein, Punching Glove, Reaper Cloth, Rocky Helmet, Room Service, Sachet, Safety Goggles, Silk Scarf, Spell Tag, Utility Umbrella, Weakness Policy, Zinc
- Added alternate ingredient options to the following recipes: Cell Battery, Charcoal Stick, Dragon Fang, Miracle Seed, Mystic Water, Never Melt Ice, Twisted Spoon, Damp Rock, Heat Rock, Icy Rock, Smooth Rock
- Grouped together some recipes within the Recipe Book. Groups include: the seven basic Poké Balls, the seven basic Ancient Poké Balls, Gilded Chests, Pokedexes, and the Weather Rocks.
- Updated some item tags to better integrate behaviours between Cobblemon, Vanilla Minecraft, and other mods
- Removed Cooked Meat, Raw Meat, Protein Ingredients, and Zinc Ingredients, the first two are now using `c` namespace tags, the latter have better integrated use of tags within their recipes which removes need for custom tags.
- Added our seeds tag into `#c:seeds`, which is now made use of for the Miracle Seed recipe.
- Tweaked the Natural Materials Vanilla file to fit with the changes to tags
- Substantially optimised spawning checks mainly by front-loading biome filtering.
- When using the `cobblemon` or `generation_9` capture calculators a critical capture with a single shake will always play for successful captures when you've already registered the Pokémon as caught in your Pokédex.
- Improved the performance of saving Pokédex and player data.
- Pokémon hitbox now scales with entity attribute `generic.scale`.
- Removed Shulker aspect and replaced it with cosmetic_item-shulker_shell.
- Shulker shell Forretress is now a cosmetic rather than a special evo and thus all shulker Forretress will revert back to normal until a shulker shell is put in their cosmetic slot.
- Updated `doPokemonSpawning` gamerule to support per-dimension configurations.
- The Pokedex now displays a form name of a "normal" Pokémon for when the base form is still a named form.
- Improved the zoom functionality of the Pokédex Scanner by giving the levels logarithmic scaling.
- Added a subtle rotation effect to the Pokédex Scanner's wheel when zooming.
- Improved parity with vanilla mobs' drop behavior; loot and XP drop on death instead of after the entire death sequence finishes.
### Fixes
- Fixed Particles sometimes facing the wrong direction (looking at you, Swords Dance)
@@ -137,6 +158,9 @@
- Fixed Pokémon marked as silent still playing shiny sounds and effects.
- Fixed an issue with newer versions of Fabric API where underground Pokémon were spawning in The End.
- Fixed spawning not working well when you're at high points surrounded by lower altitude spawning areas, such as flying.
- Fixed certain Pokémon with forms not having appropriate stock Pokédex entries.
- Fixed issue with Pokédex Scanner that caused the open/close overlay to have the wrong opacity values
- Fixed dragon's breath not being usable on the restoration tank when it should be
### Developer
- A finished battle now has winners and losers set inside of `PokemonBattle` instead of them always being empty.
@@ -173,6 +197,7 @@
- Added `pokemon` as an available Molang function for the `battleActor` functions.
- Fixed `heldItem` property inside spawn files not working and causing crashes
- Fixed `spawn_bedrock_particles` MoLang causing crashes when used in a server environment
- The Pokédex form lang key definition now follows `cobblemon.ui.pokedex.info.form.{species}-{formname}` instead of `cobblemon.ui.pokedex.info.form.{formname}`.
## [1.6.1 (January 26th, 2025)](#1-6-1)
@@ -59,8 +59,21 @@ public class HumanoidModelMixin {
}
Entity vehicle = entity.getVehicle();
if (vehicle instanceof PokemonEntity && entity instanceof AbstractClientPlayer) {
MountedPlayerRenderer.INSTANCE.animate((PokemonEntity) vehicle, (AbstractClientPlayer) entity, relevantPartsByName, netHeadYaw, headPitch, ageInTicks, limbSwing, limbSwingAmount);
if (vehicle instanceof PokemonEntity pokemonEntity && entity instanceof AbstractClientPlayer) {
var shouldRotatePlayerHead = pokemonEntity.ifRidingAvailableSupply(false, (behaviour, settings, state) -> {
return behaviour.shouldRotatePlayerHead(settings, state, pokemonEntity);
});
if (!shouldRotatePlayerHead) {
netHeadYaw = 0f;
headPitch = 0f;
if (this.head != null) {
this.head.yRot = 0f;
this.head.xRot = 0f;
}
}
MountedPlayerRenderer.INSTANCE.animate(pokemonEntity, (AbstractClientPlayer) entity, relevantPartsByName, netHeadYaw, headPitch, ageInTicks, limbSwing, limbSwingAmount);
}
}
}
@@ -1,38 +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.mixin.client;
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(PlayerModel.class)
public class PlayerModelMixin {
@Inject(method = "setupAnim(Lnet/minecraft/world/entity/LivingEntity;FFFFF)V", at = @At(value = "HEAD"))
private void cobblemon$setHeadRotation(LivingEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, CallbackInfo ci) {
if (!(entity instanceof Player)) return;
Entity vehicle = entity.getVehicle();
if (!(vehicle instanceof PokemonEntity pokemonEntity)) return;
var shouldRotatePlayerHead = pokemonEntity.ifRidingAvailableSupply(false, (behaviour, settings, state) -> {
return behaviour.shouldRotatePlayerHead(settings, state, pokemonEntity);
});
if (shouldRotatePlayerHead) return;
netHeadYaw = 0f;
headPitch = 0f;
}
}
@@ -293,20 +293,21 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
@JvmField val REAPER_CLOTH = noSettingsItem("reaper_cloth")
@JvmField val PRISM_SCALE = noSettingsItem("prism_scale")
@JvmField val SACHET = noSettingsItem("sachet")
@JvmField val WHIPPED_DREAM = noSettingsItem("whipped_dream")
@JvmField val STRAWBERRY_SWEET = noSettingsItem("strawberry_sweet")
@JvmField val LOVE_SWEET = noSettingsItem("love_sweet")
@JvmField val BERRY_SWEET = noSettingsItem("berry_sweet")
@JvmField val CLOVER_SWEET = noSettingsItem("clover_sweet")
@JvmField val FLOWER_SWEET = noSettingsItem("flower_sweet")
@JvmField val STAR_SWEET = noSettingsItem("star_sweet")
@JvmField val RIBBON_SWEET = noSettingsItem("ribbon_sweet")
@JvmField val WHIPPED_DREAM = create("whipped_dream", foodItem(8, 0.3f))
@JvmField val STRAWBERRY_SWEET = create("strawberry_sweet", foodItem(6, 0.125f))
@JvmField val LOVE_SWEET = create("love_sweet", foodItem(6, 0.125f))
@JvmField val BERRY_SWEET = create("berry_sweet", foodItem(6, 0.125f))
@JvmField val CLOVER_SWEET = create("clover_sweet", foodItem(6, 0.125f))
@JvmField val FLOWER_SWEET = create("flower_sweet", foodItem(6, 0.125f))
@JvmField val STAR_SWEET = create("star_sweet", foodItem(6, 0.125f))
@JvmField val RIBBON_SWEET = create("ribbon_sweet", foodItem(6, 0.125f))
@JvmField val CHIPPED_POT = noSettingsItem("chipped_pot")
@JvmField val CRACKED_POT = noSettingsItem("cracked_pot")
@JvmField val MASTERPIECE_TEACUP = noSettingsItem("masterpiece_teacup")
@JvmField val UNREMARKABLE_TEACUP = noSettingsItem("unremarkable_teacup")
@JvmField val SWEET_APPLE = noSettingsItem("sweet_apple")
@JvmField val TART_APPLE = noSettingsItem("tart_apple")
@JvmField val SWEET_APPLE = create("sweet_apple", foodItem(4, 0.3f))
@JvmField val TART_APPLE = create("tart_apple", foodItem(4, 0.3f))
@JvmField val SYRUPY_APPLE = create("syrupy_apple", foodItem(4, 0.3f))
@JvmField val GALARICA_CUFF = noSettingsItem("galarica_cuff")
@JvmField val GALARICA_WREATH = noSettingsItem("galarica_wreath")
@JvmField val BLACK_AUGURITE = noSettingsItem("black_augurite")
@@ -1358,4 +1359,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
return createdItem
}
private fun foodItem(nutrition: Int, saturationModifier: Float): Item {
return Item(Item.Properties().food(FoodProperties.Builder().nutrition(nutrition).saturationModifier(saturationModifier).build()))
}
}
@@ -832,6 +832,7 @@ object MoLangFunctions {
map.put("is_moving") { DoubleValue((pokemonEntity.moveControl as? PokemonMoveControl)?.hasWanted() == true) }
map.put("is_flying") { DoubleValue(pokemonEntity.getBehaviourFlag(PokemonBehaviourFlag.FLYING)) }
map.put("is_gliding") { DoubleValue(pokemonEntity.useRidingAltPose()) }
map.put("is_ridden") { DoubleValue(pokemonEntity.hasControllingPassenger()) }
map.put("has_aspect") { DoubleValue(it.getString(0) in pokemonEntity.aspects) }
map.put("is_pokemon") { DoubleValue.ONE }
map.put("is_holding_item") { DoubleValue(!pokemonEntity.entityData.get(PokemonEntity.SHOWN_HELD_ITEM).let {
@@ -107,4 +107,22 @@ open class OrientationController(val entity: LivingEntity) {
val roll: Float
get() = Mth.wrapDegrees(-upVector.angleSigned(UP, forwardVector).toDegrees())
fun applyGlobalYaw(deltaYawDegrees: Float) = updateOrientation { original ->
val euler = Vector3f()
original.getEulerAnglesXYZ(euler)
val pitch0 = euler.x
val roll0 = euler.z
val unroll = Matrix3f().rotateZ(-roll0)
val unpitch = Matrix3f().rotateX(-pitch0)
val flattened = Matrix3f(original).mul(unroll).mul(unpitch)
//Flip to reflect current acceptance of what direction is pos for yaw
val globalYaw = Matrix3f().rotationY(-1.0f * deltaYawDegrees.toRadians())
val rePitch = Matrix3f().rotateX(pitch0)
val reRoll = Matrix3f().rotateZ(roll0)
return@updateOrientation Matrix3f(globalYaw).mul(flattened).mul(rePitch).mul(reRoll)
}
}
@@ -77,18 +77,18 @@ object CatchRateModifiers {
/**
* Used by [PokeBalls.MOON_BALL].
* Boosts the catch rate 1.5× during Moon Phases 3 and 7 between the times of 12000 – 24000.
* 2.5× during Moon Phases 2 and 8 between the times of 12000 – 24000.
* 4× during Moon Phase 1 between the times of 12000 – 24000.
* Boosts the catch rate 1.5× during Moon Phases 2 and 6 between the times of 12000 – 24000.
* 2.5× during Moon Phases 1 and 7 between the times of 12000 – 24000.
* 4× during Moon Phase 0 between the times of 12000 – 24000.
* 1× otherwise.
*/
val MOON_PHASES: CatchRateModifier = WorldStateModifier { _, entity ->
if (entity.level().gameTime in 12000..24000)
return@WorldStateModifier 1F
when (entity.level().moonPhase) {
3, 7 -> 1.5F
2, 8 -> 2.5F
1 -> 4F
2, 6 -> 1.5F
1, 7 -> 2.5F
0 -> 4F
else -> 1F
}
}
@@ -24,11 +24,11 @@ import net.minecraft.world.phys.Vec3
*/
open class RidingBehaviourState {
open val rideVelocity: SidedRidingState<Vec3> = ridingState(Vec3.ZERO, Side.BOTH)
open val stamina: SidedRidingState<Float> = ridingState(0F, Side.BOTH)
open val stamina: SidedRidingState<Float> = ridingState(1.0F, Side.BOTH)
open fun reset() {
rideVelocity.set(Vec3.ZERO, true)
stamina.set(0F, true)
stamina.set(1.0F, true)
}
open fun copy(): RidingBehaviourState {
@@ -25,6 +25,7 @@ object RidingBehaviours {
register(JetAirBehaviour.KEY, JetAirBehaviour())
register(SwimDashBehaviour.KEY, SwimDashBehaviour())
register(VehicleLandBehaviour.KEY, VehicleLandBehaviour())
register(HoverBehaviour.KEY, HoverBehaviour())
register(CompositeBehaviour.KEY, CompositeBehaviour())
}
@@ -41,6 +41,11 @@ class RidingController<Settings : RidingBehaviourSettings, State : RidingBehavio
return behaviour.speed(settings, state, vehicle, driver)
}
override fun clampPassengerRotation(settings: Settings, state: State, vehicle: PokemonEntity, driver: LivingEntity) {
if (!isActive(settings, state, vehicle)) return
return behaviour.clampPassengerRotation(settings, state, vehicle, driver)
}
override fun rotation(settings: Settings, state: State, vehicle: PokemonEntity, driver: LivingEntity): Vec2 {
if (!isActive(settings, state, vehicle)) return driver.rotationVector
return behaviour.rotation(settings, state, vehicle, driver)
@@ -27,6 +27,9 @@ import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.phys.Vec2
import net.minecraft.world.phys.Vec3
import org.joml.Matrix3f
import org.joml.Quaternionf
import org.joml.Vector3f
import kotlin.math.*
class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
@@ -179,26 +182,26 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
}
//Lateral movement based on driver input.
val latTopSpeed = topSpeed / 2.0
if (driver.xxa != 0.0f && state.stamina.get() > 0.0) {
newVelocity = Vec3(
(newVelocity.x + (accel * driver.xxa)).coerceIn(-latTopSpeed, latTopSpeed),
newVelocity.y,
newVelocity.z)
activeInput = true
}
else {
newVelocity = Vec3(
lerp(newVelocity.x, 0.0, latTopSpeed / 20.0),
newVelocity.y,
newVelocity.z)
}
// val latTopSpeed = topSpeed / 2.0
// if (driver.xxa != 0.0f && state.stamina.get() > 0.0) {
// newVelocity = Vec3(
// (newVelocity.x + (accel * driver.xxa)).coerceIn(-latTopSpeed, latTopSpeed),
// newVelocity.y,
// newVelocity.z)
// activeInput = true
// }
// else {
// newVelocity = Vec3(
// lerp(newVelocity.x, 0.0, latTopSpeed / 20.0),
// newVelocity.y,
// newVelocity.z)
// }
//Vertical movement based on driver input.
val vertTopSpeed = topSpeed / 2.0
val vertInput = when {
driver.jumping -> 1.0
driver.isShiftKeyDown -> -1.0
driver.jumping && state.rideVelocity.get().length() < 0.3 -> 1.0
driver.isShiftKeyDown && state.rideVelocity.get().length() < 0.3 -> -1.0
else -> 0.0
}
@@ -225,23 +228,24 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
}
}
//Only perform stamina logic if the ride does not have infinite stamina
if (!vehicle.runtime.resolveBoolean(settings.infiniteStamina)) {
if (activeInput) {
state.stamina.set(state.stamina.get() - (0.05 / staminaStat).toFloat())
}
//Lose a base amount of stamina just for being airborne
state.stamina.set(state.stamina.get() - (0.01 / staminaStat).toFloat())
}
else
{
state.stamina.set(1.0f)
}
//TODO: Reintroduce stamina drain once stats start to be polished and tweaked
// //Only perform stamina logic if the ride does not have infinite stamina
// if (!vehicle.runtime.resolveBoolean(settings.infiniteStamina)) {
// if (activeInput) {
// state.stamina.set(state.stamina.get() - (0.05 / staminaStat).toFloat())
// }
//
// //Lose a base amount of stamina just for being airborne
// state.stamina.set(state.stamina.get() - (0.01 / staminaStat).toFloat())
// }
// else
// {
// state.stamina.set(1.0f)
// }
//air resistance
if( abs(newVelocity.z) > 0) {
newVelocity = newVelocity.subtract(0.0, 0.0, min(0.003 * newVelocity.z.sign, newVelocity.z))
newVelocity = newVelocity.subtract(0.0, 0.0, min(0.0015 * newVelocity.z.sign, newVelocity.z))
}
state.rideVelocity.set(newVelocity)
}
@@ -256,10 +260,17 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
if (driver !is OrientationControllable) return Vec3.ZERO
val controller = (driver as OrientationControllable).orientationController
//TODO: Tie into handling
//limit rolling based on handling and current speed.
//modulated by speed so that when flapping idle in air you are ont wobbling around to look around
//TODO: Tie handling into yaw rate
val handling = vehicle.runtime.resolveDouble(settings.handlingExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val rotationChangeRate = 10.0
//This rotation limit will be used to know if the ride has exceeded it and its needs correcting.
val rotMin = 15.0
val rotLimit = max(handling * sqrt(normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed)), rotMin)
val rotationChangeRate = 100.0
var yawForce = rotationChangeRate * sin(Math.toRadians(controller.roll.toDouble()))
//for a bit of correction on the rolls limit it to a quarter the amount
@@ -269,7 +280,28 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
yawForce *= abs(cos(Math.toRadians(controller.pitch.toDouble())))
pitchForce *= abs(cos(Math.toRadians(controller.pitch.toDouble()))) * 1.5
return Vec3(yawForce, pitchForce, 0.0)
var yawDeltaDeg = deltaTime * rotationChangeRate * sin(Math.toRadians(controller.roll.toDouble())) //sin(Math.toRadians(controller.roll.toDouble())) * abs(cos(Math.toRadians(controller.pitch.toDouble())))
val trueYawDelt = yawDeltaDeg * abs(cos(Math.toRadians(controller.pitch.toDouble())))
//val pitchedYawDelt = yawDeltaDeg - trueYawDelt
controller.applyGlobalYaw(trueYawDelt.toFloat())
val correctionRate = 5.0
//Calculate correcting roll force.
if(abs(controller.roll) > rotLimit) {
state.currRollCorrectionForce.set(
state.currRollCorrectionForce.get() + ((abs(controller.roll) - rotLimit) / 180 - rotLimit) * controller.roll.sign * correctionRate * deltaTime * 0.01
)
} else {
state.currRollCorrectionForce.set(
//reduce rollCorrection gradually and make sure to
//state.currRollCorrectionForce.get() - max(correctionRate * deltaTime * 0.04, abs(state.currRollCorrectionForce.get())) * state.currRollCorrectionForce.get().sign
lerp(state.currRollCorrectionForce.get(), 0.0, deltaTime * 0.98)
)
}
//yaw, pitch, roll
return Vec3(0.0, 0.0, state.currRollCorrectionForce.get())
}
override fun rotationOnMouseXY(
@@ -303,13 +335,14 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
//modulated by speed so that when flapping idle in air you are ont wobbling around to look around
val rotMin = 15.0
var rollForce = xInput
val rotLimit = max(handling * normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).pow(3), rotMin)
val rotLimit = max(handling * sqrt(normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed)), rotMin)
//Limit roll by non linearly decreasing inputs towards
// a rotation limit based on the current distance from
// that rotation limit
if (abs(controller.roll + rollForce) < rotLimit) {
if (sign(rollForce) == sign(controller.roll).toDouble()) {
//Grab how far the current roll is away from the roll limit
val d = abs(abs(controller.roll) - rotLimit)
rollForce *= (d.pow(2)) / (rotLimit.pow(2))
}
@@ -318,10 +351,18 @@ class BirdAirBehaviour : RidingBehaviour<BirdAirSettings, BirdAirState> {
}
//Give the ability to yaw with x mouse input when at low speeds.
val yawForce = xInput * ( 1.0 - normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).pow(3))
val yawForce = xInput * ( 1.0 - sqrt(normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed)))
//Yaw locally a bit when up or down so that its more intuitive to make it out of a dive or a straight vertical
//climb
val yawForcePitched = xInput * sin(Math.toRadians(abs(controller.pitch.toDouble()))) * 0.25
//Apply yaw globally as we don't want roll or pitch changes due to local yaw when looking up or down.
controller.applyGlobalYaw(yawForce.toFloat())
//yaw, pitch, roll
return Vec3(yawForce, yInput, rollForce)
return Vec3(yawForcePitched, yInput, rollForce)
}
/*
@@ -486,6 +527,7 @@ class BirdAirSettings : RidingBehaviourSettings {
class BirdAirState : RidingBehaviourState() {
var gliding = ridingState(false, Side.CLIENT)
var lastGlide = ridingState(-100L, Side.CLIENT)
var currRollCorrectionForce = ridingState(0.0, Side.CLIENT)
override fun encode(buffer: FriendlyByteBuf) {
super.encode(buffer)
@@ -502,6 +544,7 @@ class BirdAirState : RidingBehaviourState() {
super.reset()
gliding.set(false, forced = true)
lastGlide.set(-100L, forced = true)
currRollCorrectionForce.set(0.0, forced = true)
}
override fun toString(): String {
@@ -513,11 +556,12 @@ class BirdAirState : RidingBehaviourState() {
it.stamina.set(this.stamina.get(), forced = true)
it.gliding.set(this.gliding.get(), forced = true)
it.lastGlide.set(this.lastGlide.get(), forced = true)
it.currRollCorrectionForce.set(this.currRollCorrectionForce.get(), forced = true)
}
override fun shouldSync(previous: RidingBehaviourState): Boolean {
if (previous !is BirdAirState) return false
if (previous.gliding != gliding) return true
if (previous.gliding.get() != gliding.get()) return true
return super.shouldSync(previous)
}
}
@@ -9,7 +9,7 @@
package com.cobblemon.mod.common.api.riding.behaviour.types
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.value.DoubleValue
import com.bedrockk.molang.runtime.MoLangMath.lerp
import com.cobblemon.mod.common.api.riding.RidingStyle
import com.cobblemon.mod.common.api.riding.behaviour.*
import com.cobblemon.mod.common.api.riding.posing.PoseOption
@@ -18,15 +18,14 @@ import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.*
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.util.Mth
import net.minecraft.util.SmoothDouble
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.phys.Vec2
import net.minecraft.world.phys.Vec3
import net.minecraft.world.phys.shapes.Shapes
import kotlin.math.max
import kotlin.math.min
import kotlin.math.pow
import kotlin.math.*
class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandState> {
companion object {
@@ -38,7 +37,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
val poseProvider = PoseProvider<GenericLandSettings, GenericLandState>(PoseType.STAND)
.with(PoseOption(PoseType.WALK) { _, state, _ ->
return@PoseOption state.rideVelocity.get().z > 0.1
return@PoseOption abs(state.rideVelocity.get().z) > 0.2
})
override fun isActive(
@@ -77,15 +76,99 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
return state.rideVelocity.get().length().toFloat()
}
override fun updatePassengerRotation(
settings: GenericLandSettings,
state: GenericLandState,
vehicle: PokemonEntity,
driver: LivingEntity
) {
//Take the inverse so that it cancels out how
//much the entity rotates.
val turnAmount = calcRotAmount(settings, state, vehicle, driver)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val maxYawDiff = 90.0f
//Normalize the current rotation diff
val rotMod = Mth.wrapDegrees(driver.yRot - vehicle.yRot) / maxYawDiff
val rotAmount = 10.0f
//Take the inverse so that you turn more at higher speeds
val normSpeed = 1.0f - 0.5f*normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).toFloat()
//driver.yRot += (entity.riding.deltaRotation.y - turnAmount)
//driver.setYHeadRot(driver.yHeadRot + (entity.riding.deltaRotation.y) - turnAmount)
}
override fun clampPassengerRotation(
settings: GenericLandSettings,
state: GenericLandState,
vehicle: PokemonEntity,
driver: LivingEntity
) {
val f = Mth.wrapDegrees(driver.yRot - vehicle.yRot)
val lookYawLimit = 90.0f
val g = Mth.clamp(f, -lookYawLimit, lookYawLimit)
driver.yRotO += g - f
driver.yRot = driver.yRot + g - f
driver.setYHeadRot(driver.yRot)
}
override fun rotation(
settings: GenericLandSettings,
state: GenericLandState,
vehicle: PokemonEntity,
driver: LivingEntity
): Vec2 {
return Vec2(driver.xRot * 0.5f, driver.yRot)
val turnAmount = calcRotAmount(settings, state, vehicle, driver)
return Vec2(vehicle.xRot, vehicle.yRot + turnAmount )
}
/*
* Calculates the rotation amount given the difference between
* the current player y rot and entity y rot. This gives the
* affect of influencing a rides rotation through the mouse
* without it being instant.
*/
fun calcRotAmount(
settings: GenericLandSettings,
state: GenericLandState,
vehicle: PokemonEntity,
driver: LivingEntity
): Float {
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
//In degrees per second
val handling = vehicle.runtime.resolveDouble(settings.handlingExpr)
val maxYawDiff = 90.0f
//Normalize the current rotation diff
val rotDiff = Mth.wrapDegrees(driver.yRot - vehicle.yRot)
val rotDiffNorm = rotDiff / maxYawDiff
//Take the square root so that the ride levels out quicker when at lower differences between entity
//y and driver y
//This influences the speed of the turn based on how far in one direction you're looking
val rotDiffMod = (sqrt(abs(rotDiffNorm)) * rotDiffNorm.sign)
//Take the inverse so that you turn less at higher speeds
val normSpeed = 1.0f // = 1.0f - 0.5f*normalizeVal(state.rideVelocityocity.length(), 0.0, topSpeed).toFloat()
// TODO: This needs to be tweaked with in game results and testing
val turnRate = (handling.toFloat() / 20.0f) * 2
//Ensure you only ever rotate as much difference as there is between the angles.
val turnSpeed = turnRate * rotDiffMod * normSpeed
val rotAmount = turnSpeed.coerceIn(-abs(rotDiff), abs(rotDiff))
return rotAmount
}
override fun velocity(
settings: GenericLandSettings,
state: GenericLandState,
@@ -93,24 +176,16 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
driver: Player,
input: Vec3
): Vec3 {
val runtime = vehicle.runtime
val driveFactor = runtime.resolveFloat(settings.driveFactor)
val strafeFactor = runtime.resolveFloat(settings.strafeFactor)
val f = driver.xxa * strafeFactor
var g = driver.zza * driveFactor
if (g <= 0.0f) {
g *= runtime.resolveFloat(settings.reverseDriveFactor)
}
val gravity = -1.0
//Limit horizontal velocity that may have accumulated through alternate behaviour
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val currVel = state.rideVelocity.get()
// state.rideVelocity.set(Vec3(
// max(currVel.x, topSpeed),
// currVel.y,
// max(currVel.z, topSpeed)
// ))
val newVelocity = calculateRideSpaceVel(settings, state, vehicle, driver)
//Jump the thang!
if (driver.jumping && vehicle.onGround()) {
state.rideVelocity.set(Vec3(newVelocity.x, 2.0, newVelocity.z))
} else {
state.rideVelocity.set(newVelocity)
}
state.rideVelocity.set(calculateRideSpaceVel(settings, state, vehicle, driver))
//This is cheap.
//Also make it stop quicker the slower it is.
@@ -129,35 +204,59 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
vehicle: PokemonEntity,
driver: Player
): Vec3 {
val topSpeed = vehicle.runtime.resolveDouble(settings.topSpeedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelExpr)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelerationExpr)
val speed = state.rideVelocity.get().length()
val minSpeed = 0.0
//Flag for determining if player is actively inputting
var activeInput = false
var newVelocity = Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, state.rideVelocity.get().z)
//speed up and slow down based on input
if (driver.zza > 0.0 && speed <= topSpeed && state.stamina.get() > 0.0f) {
//modify acceleration to be slower when at closer speeds to top speed
val accelMod = max((normalizeSpeed(speed, minSpeed, topSpeed) - 1).pow(2), 0.1)
newVelocity = Vec3(newVelocity.x, newVelocity.y, min(newVelocity.z + (accel * accelMod), topSpeed))
} else if (driver.zza >= 0.0 && state.stamina.get() == 0.0f || speed > topSpeed) {
newVelocity = Vec3(newVelocity.x, newVelocity.y, max(newVelocity.z - ((accel) / 4), minSpeed))
} else if (driver.zza < 0.0 && speed > minSpeed) {
//modify deccel to be slower when at closer speeds to minimum speed
val deccelMod = max(-(normalizeSpeed(speed, minSpeed, topSpeed)) + 1, 0.0)
//Decelerate currently always a constant half of max acceleration.
newVelocity =
Vec3(newVelocity.x, newVelocity.y, max(newVelocity.z - ((accel * deccelMod) / 2), minSpeed))
//speed up and slow down based on input
if (driver.zza != 0.0f && state.stamina.get() > 0.0) {
//make sure it can't exceed top speed
val forwardInput = when {
driver.zza > 0 && newVelocity.z > topSpeed -> 0.0
driver.zza < 0 && newVelocity.z < (-topSpeed / 3.0) -> 0.0
else -> driver.zza.sign
}
newVelocity = Vec3(
newVelocity.x,
newVelocity.y,
(newVelocity.z + (accel * forwardInput.toDouble())))
activeInput = true
}
//Gravity logic
if (vehicle.onGround()) {
newVelocity = Vec3(newVelocity.x, 0.0, newVelocity.z)
} else {
newVelocity = Vec3(newVelocity.x, max(newVelocity.y - 0.2, -1.0), newVelocity.z)
val gravity = (9.8 / ( 20.0)) * 0.2
val terminalVel = 2.0
val fallingForce = gravity - ( newVelocity.z.sign *gravity *(abs(newVelocity.z) / 2.0))
newVelocity = Vec3(newVelocity.x, max(newVelocity.y - fallingForce, -terminalVel), newVelocity.z)
}
//ground Friction
if( abs(newVelocity.z) > 0 && vehicle.onGround() && !activeInput) {
newVelocity = newVelocity.subtract(0.0, 0.0, min(0.03 * newVelocity.z.sign, newVelocity.z))
}
//Jump the thang!
if (driver.jumping && vehicle.onGround()) {
val jumpVel = 1.0
newVelocity = newVelocity.add(0.0, 1.0, 0.0)
//Ensure this doesn't add unwanted forward velocity
val mag = if(newVelocity.length() < topSpeed) newVelocity.length() else topSpeed
newVelocity = newVelocity.normalize().scale(mag)
}
return newVelocity
}
@@ -165,7 +264,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
* Normalizes the current speed between minSpeed and maxSpeed.
* The result is clamped between 0.0 and 1.0, where 0.0 represents minSpeed and 1.0 represents maxSpeed.
*/
private fun normalizeSpeed(currSpeed: Double, minSpeed: Double, maxSpeed: Double): Double {
private fun normalizeVal(currSpeed: Double, minSpeed: Double, maxSpeed: Double): Double {
require(maxSpeed > minSpeed) { "maxSpeed must be greater than minSpeed" }
return ((currSpeed - minSpeed) / (maxSpeed - minSpeed)).coerceIn(0.0, 1.0)
}
@@ -217,8 +316,6 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
driver: Player
): Float {
//Retrieve stamina from state and tick up at a rate of 0.1 a second
val staminaGain = (1.0 / 20.0) * 0.1
state.stamina.set(min(state.stamina.get() + staminaGain, 1.0).toFloat())
return (state.stamina.get() / 1.0f)
}
@@ -229,10 +326,7 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
driver: Player,
jumpStrength: Int
): Vec3 {
val runtime = vehicle.runtime
runtime.environment.query.addFunction("jump_strength") { DoubleValue(jumpStrength.toDouble()) }
val jumpVector = settings.jumpVector.map { runtime.resolveFloat(it) }
return Vec3(jumpVector[0].toDouble(), jumpVector[1].toDouble(), jumpVector[2].toDouble())
return Vec3.ZERO
}
override fun gravity(
@@ -324,24 +418,15 @@ class GenericLandBehaviour : RidingBehaviour<GenericLandSettings, GenericLandSta
class GenericLandSettings : RidingBehaviourSettings {
override val key = GenericLandBehaviour.KEY
var driveFactor = "1.0".asExpression()
var canJump = "true".asExpression()
private set
var strafeFactor = "0.2".asExpression()
private set
var reverseDriveFactor = "0.25".asExpression()
private set
var topSpeedExpr: Expression = "q.get_ride_stats('SPEED', 'LAND', 1.0, 0.3)".asExpression()
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'LAND', 1.0, 0.3)".asExpression()
private set
// Max accel is a whole 1.0 in 1 second. The conversion in the function below is to convert seconds to ticks
var accelExpr: Expression =
"q.get_ride_stats('ACCELERATION', 'LAND', (1.0 / (20.0 * 0.5)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
var jumpVector = listOf("0".asExpression(), "0.3".asExpression(), "0".asExpression())
var accelerationExpr: Expression =
"q.get_ride_stats('ACCELERATION', 'LAND', (1.0 / (20.0 * 1.5)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
// Between 30 seconds and 10 seconds at the lowest when at full speed.
@@ -357,30 +442,16 @@ class GenericLandSettings : RidingBehaviourSettings {
override fun encode(buffer: RegistryFriendlyByteBuf) {
buffer.writeResourceLocation(key)
buffer.writeExpression(driveFactor)
buffer.writeExpression(strafeFactor)
buffer.writeExpression(reverseDriveFactor)
buffer.writeExpression(topSpeedExpr)
buffer.writeExpression(accelExpr)
buffer.writeExpression(jumpVector[0])
buffer.writeExpression(jumpVector[1])
buffer.writeExpression(jumpVector[2])
buffer.writeExpression(speedExpr)
buffer.writeExpression(accelerationExpr)
buffer.writeExpression(staminaExpr)
buffer.writeExpression(jumpExpr)
buffer.writeExpression(handlingExpr)
}
override fun decode(buffer: RegistryFriendlyByteBuf) {
driveFactor = buffer.readExpression()
strafeFactor = buffer.readExpression()
reverseDriveFactor = buffer.readExpression()
topSpeedExpr = buffer.readExpression()
accelExpr = buffer.readExpression()
jumpVector = listOf(
buffer.readExpression(),
buffer.readExpression(),
buffer.readExpression()
)
speedExpr = buffer.readExpression()
accelerationExpr = buffer.readExpression()
staminaExpr = buffer.readExpression()
jumpExpr = buffer.readExpression()
handlingExpr = buffer.readExpression()
@@ -394,7 +465,6 @@ class GenericLandState : RidingBehaviourState() {
override fun copy() = GenericLandState().also {
it.rideVelocity.set(this.rideVelocity.get(), forced = true)
it.stamina.set(this.stamina.get(), forced = true)
it.currSpeed.set(this.currSpeed.get(), forced = true)
}
override fun shouldSync(previous: RidingBehaviourState): Boolean {
@@ -0,0 +1,479 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.riding.behaviour.types
import com.bedrockk.molang.Expression
import com.bedrockk.molang.runtime.MoLangMath.lerp
import com.cobblemon.mod.common.api.riding.RidingStyle
import com.cobblemon.mod.common.api.riding.behaviour.*
import com.cobblemon.mod.common.api.riding.posing.PoseOption
import com.cobblemon.mod.common.api.riding.posing.PoseProvider
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.*
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.util.Mth
import net.minecraft.util.SmoothDouble
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.phys.Vec2
import net.minecraft.world.phys.Vec3
import net.minecraft.world.phys.shapes.Shapes
import kotlin.math.*
class HoverBehaviour : RidingBehaviour<HoverSettings, HoverState> {
companion object {
val KEY = cobblemonResource("air/hover")
}
override val key = KEY
override val style = RidingStyle.AIR
val poseProvider = PoseProvider<HoverSettings, HoverState>(PoseType.STAND)
.with(PoseOption(PoseType.WALK) { _, state, _ ->
return@PoseOption abs(state.rideVelocity.get().z) > 0.2
})
override fun isActive(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return Shapes.create(vehicle.boundingBox).blockPositionsAsListRounded().any {
//Need to check other fluids
if (vehicle.isInWater || vehicle.isUnderWater) {
return@any false
}
//This might not actually work, depending on what the yPos actually is. yPos of the middle of the entity? the feet?
if (it.y.toDouble() == (vehicle.position().y)) {
val blockState = vehicle.level().getBlockState(it.below())
return@any !blockState.isAir && blockState.fluidState.isEmpty
}
true
}
}
override fun pose(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): PoseType {
return this.poseProvider.select(settings, state, vehicle)
}
override fun speed(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Float {
return state.rideVelocity.get().length().toFloat()
}
override fun updatePassengerRotation(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: LivingEntity
) {
//Take the inverse so that it cancels out how
//much the entity rotates.
val turnAmount = calcRotAmount(settings, state, vehicle, driver)
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val maxYawDiff = 90.0f
//Normalize the current rotation diff
val rotMod = Mth.wrapDegrees(driver.yRot - vehicle.yRot) / maxYawDiff
val rotAmount = 10.0f
//Take the inverse so that you turn more at higher speeds
val normSpeed = 1.0f - 0.5f*normalizeVal(state.rideVelocity.get().length(), 0.0, topSpeed).toFloat()
//driver.yRot += (entity.riding.deltaRotation.y - turnAmount)
//driver.setYHeadRot(driver.yHeadRot + (entity.riding.deltaRotation.y) - turnAmount)
}
override fun clampPassengerRotation(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: LivingEntity
) {
val f = Mth.wrapDegrees(driver.yRot - vehicle.yRot)
val lookYawLimit = 90.0f
val g = Mth.clamp(f, -lookYawLimit, lookYawLimit)
driver.yRotO += g - f
driver.yRot = driver.yRot + g - f
driver.setYHeadRot(driver.yRot)
}
override fun rotation(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: LivingEntity
): Vec2 {
val turnAmount = calcRotAmount(settings, state, vehicle, driver)
return Vec2(driver.xRot, vehicle.yRot + turnAmount )
}
/*
* Calculates the rotation amount given the difference between
* the current player y rot and entity y rot. This gives the
* affect of influencing a rides rotation through the mouse
* without it being instant.
*/
fun calcRotAmount(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: LivingEntity
): Float {
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
//In degrees per second
val handling = vehicle.runtime.resolveDouble(settings.handlingExpr)
val maxYawDiff = 90.0f
//Normalize the current rotation diff
val rotDiff = Mth.wrapDegrees(driver.yRot - vehicle.yRot)
val rotDiffNorm = rotDiff / maxYawDiff
//Take the square root so that the ride levels out quicker when at lower differences between entity
//y and driver y
//This influences the speed of the turn based on how far in one direction you're looking
val rotDiffMod = (sqrt(abs(rotDiffNorm)) * rotDiffNorm.sign)
//Take the inverse so that you turn less at higher speeds
val normSpeed = 1.0f // = 1.0f - 0.5f*normalizeVal(state.rideVelocityocity.length(), 0.0, topSpeed).toFloat()
// TODO: This needs to be tweaked with in game results and testing
val turnRate = (handling.toFloat() / 20.0f) * 2
//Ensure you only ever rotate as much difference as there is between the angles.
val turnSpeed = turnRate * rotDiffMod * normSpeed
val rotAmount = turnSpeed.coerceIn(-abs(rotDiff), abs(rotDiff))
return rotAmount
}
override fun velocity(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player,
input: Vec3
): Vec3 {
val strafeFactor = 0.2
val f = driver.xxa * strafeFactor
var g = driver.zza
if (g <= 0.0f) {
g *= -1.0f
}
return calculateRideSpaceVel(settings, state, vehicle, driver).scale(10.0)
}
private fun calculateRideSpaceVel(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Vec3 {
val topSpeed = vehicle.runtime.resolveDouble(settings.speedExpr)
val accel = vehicle.runtime.resolveDouble(settings.accelerationExpr)
val speed = state.rideVelocity.get().length()
//Flag for determining if player is actively inputting
var activeInput = false
val minSpeed = 0.0
var newVelocity = Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, state.rideVelocity.get().z)
var jumpVec = Vec3.ZERO
//speed up and slow down based on input
if (driver.zza != 0.0f && state.stamina.get() > 0.0) {
//make sure it can't exceed top speed
val forwardInput = when {
driver.zza > 0 && newVelocity.z > topSpeed -> 0.0
driver.zza < 0 && newVelocity.z < (-topSpeed / 3.0) -> 0.0
else -> driver.zza.sign
}
newVelocity = Vec3(
newVelocity.x,
newVelocity.y,
(newVelocity.z + (accel * forwardInput.toDouble())))
activeInput = true
jumpVec = jumpVec.add(0.0, 0.0, forwardInput.toDouble())
}
//speed up and slow down based on input
if (driver.xxa != 0.0f && state.stamina.get() > 0.0) {
//make sure it can't exceed top speed
val forwardInput = when {
driver.xxa > 0 && newVelocity.x > topSpeed -> 0.0
driver.xxa < 0 && newVelocity.x < (-topSpeed / 3.0) -> 0.0
else -> driver.xxa.sign
}
newVelocity = Vec3(
newVelocity.x + (accel * forwardInput.toDouble()),
newVelocity.y,
(newVelocity.z ))
activeInput = true
}
//Vertical movement based on driver input.
val vertTopSpeed = topSpeed / 2.0
val vertInput = when {
driver.jumping -> 1.0
driver.isShiftKeyDown -> -1.0
else -> 0.0
}
if (vertInput != 0.0 && state.stamina.get() > 0.0) {
newVelocity = Vec3(
newVelocity.x,
(newVelocity.y + (accel * vertInput)).coerceIn(-vertTopSpeed, vertTopSpeed),
newVelocity.z)
activeInput = true
}
//air Friction
return newVelocity
}
/*
* Normalizes the current speed between minSpeed and maxSpeed.
* The result is clamped between 0.0 and 1.0, where 0.0 represents minSpeed and 1.0 represents maxSpeed.
*/
private fun normalizeVal(currSpeed: Double, minSpeed: Double, maxSpeed: Double): Double {
require(maxSpeed > minSpeed) { "maxSpeed must be greater than minSpeed" }
return ((currSpeed - minSpeed) / (maxSpeed - minSpeed)).coerceIn(0.0, 1.0)
}
override fun angRollVel(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player,
deltaTime: Double
): Vec3 {
return Vec3.ZERO
}
override fun rotationOnMouseXY(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player,
mouseY: Double,
mouseX: Double,
mouseYSmoother: SmoothDouble,
mouseXSmoother: SmoothDouble,
sensitivity: Double,
deltaTime: Double
): Vec3 {
//Smooth out mouse input.
val smoothingSpeed = 4
val xInput = mouseXSmoother.getNewDeltaValue(mouseX * 0.1, deltaTime * smoothingSpeed);
val yInput = mouseYSmoother.getNewDeltaValue(mouseY * 0.1, deltaTime * smoothingSpeed);
//yaw, pitch, roll
return Vec3(0.0, yInput, xInput)
}
override fun canJump(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Boolean {
return false
}
override fun setRideBar(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Float {
//Retrieve stamina from state and use it to set the "stamina bar"
return (state.stamina.get() / 1.0f)
}
override fun jumpForce(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player,
jumpStrength: Int
): Vec3 {
return Vec3.ZERO
}
override fun gravity(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
regularGravity: Double
): Double {
return 0.0
}
override fun rideFovMultiplier(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Float {
return 1.0f
}
override fun useAngVelSmoothing(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun useRidingAltPose(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity,
driver: Player
): Boolean {
return false
}
override fun inertia(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Double {
return 0.05
}
override fun shouldRoll(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun turnOffOnGround(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun dismountOnShift(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun shouldRotatePokemonHead(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun shouldRotatePlayerHead(
settings: HoverSettings,
state: HoverState,
vehicle: PokemonEntity
): Boolean {
return false
}
override fun createDefaultState(settings: HoverSettings) = HoverState()
}
class HoverSettings : RidingBehaviourSettings {
override val key = HoverBehaviour.KEY
var canJump = "true".asExpression()
private set
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 1.0, 0.3)".asExpression()
private set
// Max accel is a whole 1.0 in 1 second. The conversion in the function below is to convert seconds to ticks
var accelerationExpr: Expression =
"q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 0.5)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
// Between 30 seconds and 10 seconds at the lowest when at full speed.
var staminaExpr: Expression = "q.get_ride_stats('STAMINA', 'AIR', 30.0, 10.0)".asExpression()
private set
//Between a one block jump and a ten block jump
var jumpExpr: Expression = "q.get_ride_stats('JUMP', 'AIR', 10.0, 1.0)".asExpression()
private set
var handlingExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 140.0, 20.0)".asExpression()
private set
override fun encode(buffer: RegistryFriendlyByteBuf) {
buffer.writeResourceLocation(key)
buffer.writeExpression(speedExpr)
buffer.writeExpression(accelerationExpr)
buffer.writeExpression(staminaExpr)
buffer.writeExpression(jumpExpr)
buffer.writeExpression(handlingExpr)
}
override fun decode(buffer: RegistryFriendlyByteBuf) {
speedExpr = buffer.readExpression()
accelerationExpr = buffer.readExpression()
staminaExpr = buffer.readExpression()
jumpExpr = buffer.readExpression()
handlingExpr = buffer.readExpression()
}
}
class HoverState : RidingBehaviourState() {
override fun copy() = HoverState().also {
it.rideVelocity.set(this.rideVelocity.get(), forced = true)
it.stamina.set(this.stamina.get(), forced = true)
}
override fun shouldSync(previous: RidingBehaviourState): Boolean {
if (previous !is HoverState) return false
return super.shouldSync(previous)
}
}
@@ -26,6 +26,7 @@ import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.phys.Vec2
import net.minecraft.world.phys.Vec3
import net.minecraft.world.phys.shapes.Shapes
import kotlin.math.*
class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
@@ -40,7 +41,18 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
.with(PoseOption(PoseType.FLY) { _, state, _ -> state.rideVelocity.get().z > 0.1 })
override fun isActive(settings: JetAirSettings, state: JetAirState, vehicle: PokemonEntity): Boolean {
return true
return Shapes.create(vehicle.boundingBox).blockPositionsAsListRounded().any {
//Need to check other fluids
if (vehicle.isInWater || vehicle.isUnderWater) {
return@any false
}
//This might not actually work, depending on what the yPos actually is. yPos of the middle of the entity? the feet?
if (it.y.toDouble() == (vehicle.position().y)) {
val blockState = vehicle.level().getBlockState(it.below())
return@any !(!blockState.isAir && blockState.fluidState.isEmpty)
}
true
}
}
override fun pose(settings: JetAirSettings, state: JetAirState, vehicle: PokemonEntity): PoseType {
@@ -55,22 +67,24 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
//retrieve minSpeed
val minSpeed = vehicle.runtime.resolveDouble(settings.minSpeed)
//Reduce stamina unless stamina is infinite
if (!vehicle.runtime.resolveBoolean(settings.infiniteStamina)) {
//Calculate stamina loss due to speed
//At max speed it will tick down 0.1 a second so the stamina will last ten seconds
//There has got to be a better way to express this equation. It interpolates between 0.5 and 1.0
var staminaRate = (normalizeSpeed(state.rideVelocity.get().length(), minSpeed, topSpeed))
//interpolate between 0.25 and 1.0 so that you always have at least a min of 0.25 stam loss
staminaRate = 0.25 + (0.75 * staminaRate.pow(3))
//Calculate stamina loss in seconds achievable at top speed
val staminaLoss = staminaRate * (1.0 / (20.0 * staminaStat))
state.stamina.set(max(state.stamina.get() - staminaLoss, 0.0).toFloat())
} else {
state.stamina.set(1.0f)
}
//TODO: Reintroduce stamina drain once stats start to be polished and tweaked
state.stamina.set(1.0f)
// //Reduce stamina unless stamina is infinite
// if (!vehicle.runtime.resolveBoolean(settings.infiniteStamina)) {
// //Calculate stamina loss due to speed
// //At max speed it will tick down 0.1 a second so the stamina will last ten seconds
// //There has got to be a better way to express this equation. It interpolates between 0.5 and 1.0
// var staminaRate = (normalizeSpeed(state.rideVelocity.get().length(), minSpeed, topSpeed))
//
// //interpolate between 0.25 and 1.0 so that you always have at least a min of 0.25 stam loss
// staminaRate = 0.25 + (0.75 * staminaRate.pow(3))
//
// //Calculate stamina loss in seconds achievable at top speed
// val staminaLoss = staminaRate * (1.0 / (20.0 * staminaStat))
// state.stamina.set(max(state.stamina.get() - staminaLoss, 0.0).toFloat())
// } else {
// state.stamina.set(1.0f)
// }
return state.rideVelocity.get().length().toFloat()
}
@@ -160,7 +174,7 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
state.rideVelocity.set(Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, max(state.rideVelocity.get().z - ((accel) / 4), minSpeed)))
} else if (driver.zza < 0.0 && speed > minSpeed) {
//modify deccel to be slower when at closer speeds to minimum speed
val deccelMod = max((normalizeSpeed(speed, minSpeed, topSpeed) - 1).pow(2), 0.1)
val deccelMod = max((normalizeSpeed(speed, minSpeed, topSpeed) - 1).pow(2) * 8, 0.1)
//Decelerate currently always a constant half of max acceleration.
state.rideVelocity.set(Vec3(state.rideVelocity.get().x, state.rideVelocity.get().y, max(state.rideVelocity.get().z - ((accel * deccelMod) / 2), minSpeed)))
@@ -212,8 +226,13 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
val invertRoll = if (Cobblemon.config.invertRoll) -1 else 1
val invertPitch = if (Cobblemon.config.invertPitch) -1 else 1
// Accumulate the mouse input
state.currMouseXForce.set((state.currMouseXForce.get() + (0.0015 * mouseX * invertRoll)).coerceIn(-1.0, 1.0))
// Smooth out and accumulate roll input
val smoothingSpeed = 4.0
val mouseXc = (mouseX).coerceIn(-60.0, 60.0)
val xInput = mouseXSmoother.getNewDeltaValue(mouseXc * 0.1 * invertRoll, deltaTime * smoothingSpeed);
// Accumulate the y mouse input for pitch
//state.currMouseXForce.set((state.currMouseXForce.get() + (0.0015 * mouseX * invertRoll)).coerceIn(-1.0, 1.0))
state.currMouseYForce.set((state.currMouseYForce.get() + (0.0015 * mouseY * invertPitch)).coerceIn(-1.0, 1.0))
//Get handling in degrees per second
@@ -235,8 +254,9 @@ class JetAirBehaviour : RidingBehaviour<JetAirSettings, JetAirState> {
val pitchRot = handling * state.currMouseYForce.get()
//Roll is 1.5 times as fast as pitch
val rollRot = handling * 1.5 * state.currMouseXForce.get()
//val rollRot = handling * 1.5 * state.currMouseXForce.get()
val rollRot = handling * 1.5 * xInput.coerceIn(-1.0,1.0)
//yaw, pitch, roll
return Vec3(0.0, pitchRot, rollRot)
}
@@ -345,10 +365,10 @@ class JetAirSettings : RidingBehaviourSettings {
var gravity: Expression = "0".asExpression()
private set
var minSpeed: Expression = "1.2".asExpression()
var minSpeed: Expression = "0.8".asExpression()
private set
var handlingYawExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 25.0, 8.0)".asExpression()
var handlingYawExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 50.0, 25.0)".asExpression()
private set
// Make configurable by json
@@ -362,7 +382,7 @@ class JetAirSettings : RidingBehaviourSettings {
private set
var handlingExpr: Expression = "q.get_ride_stats('SKILL', 'AIR', 140.0, 20.0)".asExpression()
private set
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 2.5, 1.0)".asExpression()
var speedExpr: Expression = "q.get_ride_stats('SPEED', 'AIR', 1.8, 1.0)".asExpression()
private set
var accelerationExpr: Expression = "q.get_ride_stats('ACCELERATION', 'AIR', (1.0 / (20.0 * 1.0)), (1.0 / (20.0 * 5.0)))".asExpression()
private set
@@ -399,8 +419,8 @@ class JetAirSettings : RidingBehaviourSettings {
class JetAirState : RidingBehaviourState() {
var currSpeed = ridingState(0.0, Side.CLIENT)
var currMouseXForce = ridingState(0.0, Side.BOTH)
var currMouseYForce = ridingState(0.0, Side.BOTH)
var currMouseXForce = ridingState(0.0, Side.CLIENT)
var currMouseYForce = ridingState(0.0, Side.CLIENT)
override fun encode(buffer: FriendlyByteBuf) {
super.encode(buffer)
@@ -424,8 +444,8 @@ class JetAirState : RidingBehaviourState() {
it.currSpeed.set(currSpeed.get(), forced = true)
it.stamina.set(stamina.get(), forced = true)
it.rideVelocity.set(rideVelocity.get(), forced = true)
it.currMouseXForce.set(currMouseXForce.get(), forced = true)
it.currMouseYForce.set(currMouseYForce.get(), forced = true)
// it.currMouseXForce.set(currMouseXForce.get(), forced = true)
// it.currMouseYForce.set(currMouseYForce.get(), forced = true)
}
override fun shouldSync(previous: RidingBehaviourState): Boolean {
@@ -387,6 +387,8 @@ class CompositeState(
super.reset()
activeController.set(defaultBehaviour, forced = true)
lastTransition.set(-100L, forced = true)
defaultBehaviourState.reset()
alternateBehaviourState.reset()
}
override fun copy(): CompositeState {
@@ -402,17 +404,23 @@ class CompositeState(
override fun shouldSync(previous: RidingBehaviourState): Boolean {
if (previous !is CompositeState) return false
if (previous.activeController.get() != activeController.get()) return true
if (defaultBehaviourState.shouldSync(previous.defaultBehaviourState)) return true
if (alternateBehaviourState.shouldSync(previous.alternateBehaviourState)) return true
return super.shouldSync(previous)
}
override fun encode(buffer: FriendlyByteBuf) {
super.encode(buffer)
buffer.writeResourceLocation(activeController.get())
defaultBehaviourState.encode(buffer)
alternateBehaviourState.encode(buffer)
}
override fun decode(buffer: FriendlyByteBuf) {
super.decode(buffer)
activeController.set(buffer.readResourceLocation(), forced = true)
defaultBehaviourState.decode(buffer)
alternateBehaviourState.decode(buffer)
}
}
@@ -43,6 +43,7 @@ interface CompositeRidingStrategy<T : CompositeSettings> {
) {
toState.stamina.set(fromState.stamina.get())
toState.rideVelocity.set(fromState.rideVelocity.get())
fromState.reset()
state.activeController.set(toSettings.key)
state.lastTransition.set(vehicle.level().gameTime)
val behaviour = RidingBehaviours.get(toSettings.key)
@@ -46,9 +46,11 @@ object RunStrategy : CompositeRidingStrategy<CompositeSettings> {
driver: Player
): Boolean {
if (state.activeController.get() == defaultSettings.key) return false
if (!entity.onGround()) return false
if (state.lastTransition.get() + 20 >= entity.level().gameTime) return false
val defaultBehaviour = RidingBehaviours.get(defaultSettings.key)
return !driver.isSprinting || defaultBehaviour.isActive(defaultSettings, state.defaultBehaviourState, entity)
val ret = defaultBehaviour.isActive(defaultSettings, state.defaultBehaviourState, entity)
return ret
}
private fun shouldTransitionToAlternate(
@@ -0,0 +1,143 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.riding.util
import com.cobblemon.mod.common.OrientationControllable
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.math.geometry.toRadians
import net.minecraft.util.Mth
import net.minecraft.world.phys.Vec3
import org.joml.Matrix3f
import org.joml.Quaternionf
import org.joml.Vector3f
/**
* Class to handle the updating and containment of ride data used in animation.
*
* @author Jackowes
* @since April 7th, 2025
*/
class RidingAnimationData
{
var prevOrientation: Matrix3f = Matrix3f()
var prevRot: Vec3 = Vec3.ZERO
var velocitySpring: Vec3Spring = Vec3Spring()
var rotSpring: Vec3Spring = Vec3Spring()
var rotDeltaSpring: Vec3Spring = Vec3Spring()
var localVelocitySpring: Vec3Spring = Vec3Spring()
fun update(entity: PokemonEntity) {
var currRot = Vec3.ZERO
var angDelta = Vec3.ZERO
// val stiffness = 90.0
// val damping = 18.0
val stiffness = 16.0
val damping = 8.0
// Update velocity first
val currentVelocity = Vec3(
entity.x - entity.xOld,
entity.y - entity.yOld,
entity.z - entity.zOld
)
val r = entity.ifRidingAvailableSupply(false) { behaviour, settings, state ->
behaviour.shouldRoll(settings, state, entity);
}
if( r ) {
//TODO: should this return?
val controller = (entity.firstPassenger as? OrientationControllable)?.orientationController ?: return
val orientation = controller.orientation ?: Matrix3f()
val currPitch = controller.pitch
val currYaw = controller.yaw
val currRoll = controller.roll
currRot = Vec3(currPitch.toDouble(), currYaw.toDouble(), currRoll.toDouble())
val currOrientation = orientation
/******************************************************
* Calculate current 3d euler rotation deltas in the
* entities local space
*****************************************************/
// Get current and previous orientation as quaternions
val currQuat = Quaternionf().setFromUnnormalized(currOrientation)
val prevQuat = Quaternionf().setFromUnnormalized(prevOrientation)
// Compute deltaQuat = current * inverse(previous)
val deltaQuat = Quaternionf(currQuat).mul(Quaternionf(prevQuat).invert())
// Transform delta into the local space of the current orientation
val localDeltaQuat = Quaternionf(currQuat).invert().mul(deltaQuat).mul(currQuat)
// Convert delta rotation to Euler angles
val euler = Vector3f()
localDeltaQuat.getEulerAnglesXYZ(euler) // Angles are in radians
// Convert to degrees
val pitchDegrees = Math.toDegrees(euler.x.toDouble()) // Rotation around X axis = pitch
val yawDegrees = Math.toDegrees(euler.y.toDouble()) // Rotation around Y axis = yaw
val rollDegrees = Math.toDegrees(euler.z.toDouble()) // Rotation around Z axis = roll
//Scale rotation delta by 20 to represent degree per second instead of tick
angDelta = Vec3(pitchDegrees, yawDegrees, rollDegrees).scale(20.0)
/******************************************************
* Calculate ride local velocity
*****************************************************/
val velocityWorldF = Vector3f(currentVelocity.x.toFloat(), currentVelocity.y.toFloat(), currentVelocity.z.toFloat())
val localVelocityF = Matrix3f(orientation).transpose().transform(velocityWorldF)
val localVelocity = Vec3(localVelocityF.x.toDouble(), localVelocityF.y.toDouble(), localVelocityF.z.toDouble())
localVelocitySpring.update(localVelocity, stiffness, damping)
// Update previous values
prevOrientation.set(currOrientation)
} else {
val currPitch = entity.xRot
val currYaw = entity.yRot
val currRoll = 0.0f
currRot = Vec3(currPitch.toDouble(), currYaw.toDouble(), currRoll.toDouble())
//Scale rotation delta by 20 to represent degree per second instead of tick
angDelta = Vec3(
(currRot.x - prevRot.x),
Mth.degreesDifference(currRot.y.toFloat(), prevRot.y.toFloat()).toDouble(),
Mth.degreesDifference(currRot.z.toFloat(), prevRot.z.toFloat()).toDouble()
).scale(20.0)
/******************************************************
* Calculate ride local velocity
*****************************************************/
val yaw360 = -1.0 * (entity.yRot + 360.0f) % 360.0f
val orientationNonRollable = Matrix3f().rotateY(yaw360.toRadians())
//Convert to Vector3f
var velocityWorldF = Vector3f(currentVelocity.x.toFloat(), currentVelocity.y.toFloat(), currentVelocity.z.toFloat())
val localVelocityF = Matrix3f(orientationNonRollable).transpose().transform(velocityWorldF)
val localVelocity = Vec3(localVelocityF.x.toDouble(), localVelocityF.y.toDouble(), localVelocityF.z.toDouble())
localVelocitySpring.update(localVelocity, stiffness, damping)
}
/******************************************************
* Update springs
*****************************************************/
rotDeltaSpring.update(angDelta, stiffness, damping)
velocitySpring.update(currentVelocity, stiffness, damping)
rotSpring.update(currRot, stiffness, damping)
prevRot = currRot
}
}
@@ -0,0 +1,68 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.api.riding.util
import net.minecraft.world.phys.Vec3
import kotlin.math.min
/**
* A spring-based smoother for Vec3 values, designed for applying damped spring motion to riding data.
* Stores the previous and current values, along with a history buffer for lookback-based interpolation.
*
* @author Jackowes
* @since March 27th, 2025
*/
class Vec3Spring(
var value: Vec3 = Vec3.ZERO,
var velocity: Vec3 = Vec3.ZERO
) {
val history = ArrayDeque<Vec3>()
//Hold up to a seconds worth of values
val lookBackSize = 20
fun update(target: Vec3, stiffness: Double, damping: Double) {
//Hooke's Law f = kx where:
//f is force
//k is the spring constant or stiffness of this spring
//x is the distance from rest and in this case the difference between the most recent
//rotation delta ( the target ) and the springs current value for delta rot
val force = target.subtract(value).scale(stiffness)
//Now calculate acceleration and apply damping
val accel = force.subtract(velocity.scale(damping))
velocity = velocity.add(accel.scale(1.0/20.0))
value = value.add(velocity.scale(1.0/20.0))
history.addFirst(value)
//Adding one since if we want to check max look back point it needs something to interp with.
if( history.size > lookBackSize + 1) {
history.removeLast()
}
}
fun getInterpolated(partialTick: Double, lookBackTick: Int): Vec3 {
if (history.size < 2) {
return value // or Vec3.ZERO if you prefer
}
val tick = min(lookBackTick, history.size - 2)
var ret = Vec3.ZERO
for( i in 0..tick) {
val older = history.get(i + 1).scale(1.0)
val newer = history.get(i).scale(1.0)
ret = ret.add(older.add(newer.subtract(older).scale(partialTick)))
}
return ret.scale(1.0/(tick+1))
}
}
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.api.spawning.spawner.PlayerSpawnerFactory
import com.cobblemon.mod.common.platform.events.PlatformEvents
import com.cobblemon.mod.common.util.server
import com.cobblemon.mod.common.world.gamerules.CobblemonGameRules
import net.minecraft.server.level.ServerLevel
import java.util.UUID
import net.minecraft.server.level.ServerPlayer
@@ -32,24 +33,45 @@ object CobblemonWorldSpawnerManager : SpawnerManager() {
init {
PlatformEvents.SERVER_PLAYER_LOGIN.subscribe { this.onPlayerLogin(it.player) }
PlatformEvents.SERVER_PLAYER_LOGOUT.subscribe { this.onPlayerLogout(it.player) }
PlatformEvents.CHANGE_DIMENSION.subscribe { this.onDimensionChange(it.player, it.origin, it.destination) }
}
fun onPlayerLogin(player: ServerPlayer) {
// Disables spawning
if (!Cobblemon.config.enableSpawning || server()?.gameRules?.getBoolean(CobblemonGameRules.DO_POKEMON_SPAWNING) == false) {
if (!Cobblemon.config.enableSpawning || player.level().gameRules.getBoolean(CobblemonGameRules.DO_POKEMON_SPAWNING) == false) {
return;
}
val spawner = PlayerSpawnerFactory.create(this, player)
spawnersForPlayers[player.uuid] = spawner
registerSpawner(spawner)
registerPlayerSpawner(player)
}
fun onPlayerLogout(player: ServerPlayer) {
val spawner = spawnersForPlayers[player.uuid]
if (spawner != null) {
spawnersForPlayers.remove(player.uuid)
unregisterSpawner(spawner)
unregisterPlayerSpawner(player)
}
fun onDimensionChange(player: ServerPlayer, origin: ServerLevel?, destination: ServerLevel?) {
fun getSpawnRule(level: ServerLevel?) = level?.gameRules?.getBoolean(CobblemonGameRules.DO_POKEMON_SPAWNING)
if (!Cobblemon.config.enableSpawning || getSpawnRule(origin) == getSpawnRule(destination)) {
return
}
val spawnerAction = if (destination?.gameRules?.getBoolean(CobblemonGameRules.DO_POKEMON_SPAWNING) == false) {
::unregisterPlayerSpawner
} else {
::registerPlayerSpawner
}
spawnerAction(player)
}
private fun unregisterPlayerSpawner(player: ServerPlayer) {
spawnersForPlayers.remove(player.uuid)?.let { unregisterSpawner(it) }
}
private fun registerPlayerSpawner(player: ServerPlayer) {
PlayerSpawnerFactory.create(this, player).also {
spawnersForPlayers[player.uuid] = it
registerSpawner(it)
}
}
}
@@ -71,10 +71,15 @@ open class SpawnerManager {
open fun onServerTick() {
// Disables spawning
if (!Cobblemon.config.enableSpawning || server()?.gameRules?.getBoolean(DO_POKEMON_SPAWNING) == false) {
if (!Cobblemon.config.enableSpawning) {
return
}
influences.removeIf { it.isExpired() }
getSpawnersOfType<TickingSpawner>().forEach(TickingSpawner::tick)
getSpawnersOfType<TickingSpawner>().forEach {
if (it.getCauseEntity()?.level()?.gameRules?.getBoolean(DO_POKEMON_SPAWNING) == false) {
return@forEach
}
it.tick()
}
}
}
@@ -58,8 +58,8 @@ class NPCClientDelegate : PosableState(), NPCSideDelegate {
override fun addToStruct(struct: QueryStruct) {
super.addToStruct(struct)
struct.addFunctions(functions.functions)
struct.addFunctions(ClientMoLangFunctions.clientFunctions)
struct.addFunctions(functions.functions)
runtime.environment.query.addFunctions(struct.functions)
}
}
@@ -340,8 +340,8 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
override fun addToStruct(struct: QueryStruct) {
super.addToStruct(struct)
struct.addFunctions(functions.functions)
struct.addFunctions(ClientMoLangFunctions.clientFunctions)
struct.addFunctions(functions.functions)
runtime.environment.query = struct
}
@@ -458,10 +458,11 @@ class PokemonInfoWidget(val pX: Int, val pY: Int, val updateForm: (PokedexForm)
formRightButton.render(context,mouseX, mouseY, delta)
val form = showableForms[selectedFormIndex]
val formName = if (form.displayForm.lowercase() == "normal") "" else "-${form.displayForm.lowercase().replace("-", "")}"
drawScaledTextJustifiedRight(
context = context,
font = CobblemonResources.DEFAULT_LARGE,
text = lang("ui.pokedex.info.form.${form.displayForm.lowercase()}").bold(),
text = lang("ui.pokedex.info.form.${species}${formName}").bold(),
x = pX + 136,
y = pY + 15,
shadow = true
@@ -282,12 +282,12 @@ class PokedexScannerRenderer {
val effectiveIntervals = clamp(usageContext.transitionIntervals + (if (usageContext.scanningGuiOpen) 1 else -1) * tickDelta, 0F, 12F)
if (effectiveIntervals <= PokedexUsageContext.TRANSITION_INTERVALS) {
val scale = 1 + (if (effectiveIntervals <= 2) 0F else ((effectiveIntervals - 2) * 0.075F))
val scale = 1F + (if (effectiveIntervals <= 2) 0F else ((effectiveIntervals - 2) * 0.075F))
val centerX = (screenWidth - (BASE_WIDTH * scale)) / 2
val centerY = (screenHeight - (BASE_HEIGHT * scale)) / 2
val opacity = if (effectiveIntervals <= 2) 1F else (10F - (effectiveIntervals - 2F)) / 10F
val opacity = if (effectiveIntervals > 11) 0F else effectiveIntervals / PokedexUsageContext.TRANSITION_INTERVALS
blitk(matrixStack = matrices, texture = CobblemonClient.pokedexUsageContext.type.getTexturePath(), x = centerX / scale, y = centerY / scale, width = BASE_WIDTH, height = BASE_HEIGHT, scale = scale, alpha = opacity)
blitk(matrixStack = matrices, texture = SCAN_SCREEN, x = centerX / scale, y = centerY / scale, width = BASE_WIDTH, height = BASE_HEIGHT, scale = scale, alpha = opacity)
}
@@ -90,16 +90,17 @@ class HeldItemRenderer {
poseStack.mulPose(Axis.XP.rotationDegrees(90.0f))
}
ItemDisplayContext.THIRD_PERSON_RIGHT_HAND, ItemDisplayContext.THIRD_PERSON_LEFT_HAND -> {
val isLeft = displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND
//For Minecraft player models
if (state is NPCClientDelegate) {
poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F))
poseStack.mulPose(Axis.XP.rotationDegrees(-90.0f))
poseStack.translate(0.025f * if (isLeft) 1 else -1 , 0.0f, 0.0f)
}
//for T-Posing Models
else if (state is PokemonClientDelegate || state is FloatingState) {
poseStack.mulPose(Axis.YP.rotationDegrees(-90.0F))
poseStack.mulPose(Axis.ZP.rotationDegrees(90.0F))
poseStack.mulPose(Axis.YP.rotationDegrees(-90.0f * if (isLeft) -1f else 1f))
poseStack.mulPose(Axis.ZP.rotationDegrees(90.0f * if (isLeft) -1f else 1f))
}
poseStack.translate(0.025f * if (displayContext==ItemDisplayContext.THIRD_PERSON_LEFT_HAND) 1 else -1 , 0.0f, 0.0f)
}
ItemDisplayContext.HEAD -> {
if (state is NPCClientDelegate) {
@@ -35,6 +35,7 @@ import com.cobblemon.mod.common.client.render.models.blockbench.quirk.ModelQuirk
import com.cobblemon.mod.common.client.render.models.blockbench.quirk.QuirkData
import com.cobblemon.mod.common.entity.PosableEntity
import com.cobblemon.mod.common.entity.PoseType
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
import com.cobblemon.mod.common.util.asIdentifierDefaultingNamespace
import com.mojang.brigadier.StringReader
import com.mojang.brigadier.exceptions.CommandSyntaxException
@@ -131,8 +132,137 @@ abstract class PosableState : Schedulable {
/** A list of items to be rendered on a PosableModel during an animation */
val animationItems = mutableMapOf<String, ItemStack>()
/** All of the MoLang functions that can be expose current riding data. */
val ridingFunctions = QueryStruct(hashMapOf())
.addFunction("pitch") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickPitch = pokemon.ridingAnimationData.rotSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).x
val maxPitch = 90.0
return@addFunction DoubleValue((partialTickPitch / maxPitch).coerceIn(-1.0,1.0))
}
.addFunction("yaw") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickYaw = pokemon.ridingAnimationData.rotSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).y
val maxYaw = 180.0
return@addFunction DoubleValue((partialTickYaw / maxYaw).coerceIn(-1.0,1.0))
}
.addFunction("roll") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickRoll = pokemon.ridingAnimationData.rotSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).z
val maxRoll = 180.0
return@addFunction DoubleValue((partialTickRoll / maxRoll).coerceIn(-1.0,1.0))
}
.addFunction("pitch_change") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickPitchDelta = pokemon.ridingAnimationData.rotDeltaSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).x
//TODO: hook back up the retrieval of the current behaviors stat for this and the following functions
val maxRotRate = 140.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SKILL)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickPitchDelta / maxRotRate).coerceIn(-1.0,1.0))
}
.addFunction("yaw_change") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickYawDelta = pokemon.ridingAnimationData.rotDeltaSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).y
//TODO: make this not hardcoded
val maxRotRate = 140.0 //pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SKILL)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickYawDelta / maxRotRate).coerceIn(-1.0,1.0))
}
.addFunction("roll_change") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickRollDelta = pokemon.ridingAnimationData.rotDeltaSpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).z
val maxRotRate = 140.0 //pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SKILL)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickRollDelta / maxRotRate).coerceIn(-1.0,1.0))
}
.addFunction("speed") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickSpeed = pokemon.ridingAnimationData.velocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).length()
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickSpeed / topSpeed).coerceIn(-1.0,1.0))
}
.addFunction("velocity_x") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickXVel = pokemon.ridingAnimationData.velocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).x
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickXVel / topSpeed).coerceIn(-1.0,1.0))
}
.addFunction("velocity_y") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickYVel = pokemon.ridingAnimationData.velocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).y
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickYVel / topSpeed).coerceIn(-1.0,1.0))
}
.addFunction("velocity_z") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickZVel = pokemon.ridingAnimationData.velocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).z
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickZVel / topSpeed).coerceIn(-1.0,1.0))
}
.addFunction("velocity_right") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickZVel = pokemon.ridingAnimationData.localVelocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).x
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickZVel / topSpeed).coerceIn(-1.0,1.0) * -1.0)
}
.addFunction("velocity_upward") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickZVel = pokemon.ridingAnimationData.localVelocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).y
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickZVel / topSpeed).coerceIn(-1.0,1.0))
}
.addFunction("velocity_forward") { params ->
val lookBackTick = params.getInt(0)
val pokemon = getEntity() as? PokemonEntity ?: return@addFunction DoubleValue(0.0)
val partialTickZVel = pokemon.ridingAnimationData.localVelocitySpring.getInterpolated(currentPartialTicks.toDouble(), lookBackTick).z
val topSpeed = 1.0//pokemon.riding.getController(pokemon)?.getStat(pokemon, RidingStat.SPEED)
//?: return@addFunction DoubleValue(0.0)
return@addFunction DoubleValue((partialTickZVel / topSpeed).coerceIn(-1.0,1.0))
}
/** All of the MoLang functions that can be applied to something with this state. */
val functions = QueryStruct(hashMapOf())
val functions = QueryStruct(hashMapOf(
"riding" to java.util.function.Function { ridingFunctions },
"r" to java.util.function.Function { ridingFunctions }
))
.addFunction("anim_time") {
reusableAnimTime.value = animationSeconds.toDouble()
reusableAnimTime
@@ -142,17 +272,19 @@ abstract class PosableState : Schedulable {
.addFunction("has_entity") { DoubleValue(getEntity() != null) }
.addFunction("pose") { StringValue(currentPose ?: "") }
.addFunction("sound") { params ->
val entity = getEntity() ?: return@addFunction Unit
if (params.get<MoValue>(0) !is StringValue) {
return@addFunction Unit
}
val entity = getEntity()
val soundEvent = SoundEvent.createVariableRangeEvent(params.getString(0).asIdentifierDefaultingNamespace())
if (soundEvent != null) {
val volume = if (params.contains(1)) params.getDouble(1).toFloat() else 1F
val pitch = if (params.contains(2)) params.getDouble(2).toFloat() else 1F
Minecraft.getInstance().soundManager.play(
SimpleSoundInstance(soundEvent, SoundSource.NEUTRAL, volume, pitch, entity.level().random, entity.x, entity.y, entity.z)
)
if (entity != null) {
entity.level().playLocalSound(entity, soundEvent, entity.soundSource, volume, pitch)
} else {
Minecraft.getInstance().soundManager.play(SimpleSoundInstance.forUI(soundEvent, volume, pitch))
}
}
}
.addFunction("render_item") { params ->
@@ -1,64 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.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 KangaskhanModel(root: ModelPart) : PokemonPosableModel(root), HeadedFrame {
override val rootPart = root.registerChildWithAllChildren("kangaskhan")
override val head = getPart("head")
override var portraitScale = 1.7F
override var portraitTranslation = Vec3(-0.15, 1.1, 0.0)
override var profileScale = 0.7F
override var profileTranslation = Vec3(0.0, 0.65, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
override fun registerPoses() {
val blink = quirk { bedrockStateful("kangaskhan", "blink")}
val blink2 = quirk { bedrockStateful("kangaskhan", "blink2")}
standing = registerPose(
poseName = "standing",
poseTypes = STATIONARY_POSES + UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink, blink2),
animations = arrayOf(
singleBoneLook(),
bedrock("kangaskhan", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink, blink2),
animations = arrayOf(
singleBoneLook(),
bedrock("kangaskhan", "ground_idle")
//bedrock("kangaskhan", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("kangaskhan", "faint") else null
}
@@ -1,76 +0,0 @@
/*
* Copyright (C) 2023 Cobblemon Contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen7
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPosableModel
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.frame.QuadrupedFrame
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
import com.cobblemon.mod.common.client.render.models.blockbench.pose.Pose
import com.cobblemon.mod.common.entity.PoseType
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.world.phys.Vec3
class MudsdaleModel (root: ModelPart) : PokemonPosableModel(root), HeadedFrame, QuadrupedFrame {
override val rootPart = root.registerChildWithAllChildren("mudsdale")
override val head = getPart("neck")
override val foreLeftLeg = getPart("leg_front_left")
override val foreRightLeg = getPart("leg_front_right")
override val hindLeftLeg = getPart("leg_back_left")
override val hindRightLeg = getPart("leg_back_right")
override var portraitScale = 1.5F
override var portraitTranslation = Vec3(-1.0, 1.76, 0.0)
override var profileScale = 0.5F
override var profileTranslation = Vec3(0.0, 1.0, 0.0)
lateinit var standing: Pose
lateinit var walk: Pose
lateinit var sleep: Pose
override val cryAnimation = CryProvider { bedrockStateful("mudsdale", "cry") }
override fun registerPoses() {
val blink = quirk { bedrockStateful("mudsdale", "blink") }
sleep = registerPose(
poseType = PoseType.SLEEP,
animations = arrayOf(bedrock("mudsdale", "sleep"))
)
standing = registerPose(
poseName = "standing",
poseTypes = PoseType.STATIONARY_POSES + PoseType.UI_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(disableY = true),
bedrock("mudsdale", "ground_idle")
)
)
walk = registerPose(
poseName = "walk",
poseTypes = PoseType.MOVING_POSES,
transformTicks = 10,
quirks = arrayOf(blink),
animations = arrayOf(
singleBoneLook(disableY = true),
bedrock("mudsdale", "ground_walk")
)
)
}
// override fun getFaintAnimation(
// pokemonEntity: PokemonEntity,
// state: PosableState<PokemonEntity>
// ) = if (state.isPosedIn(standing, walk)) bedrockStateful("mudsdale", "faint") else null
}
@@ -287,7 +287,6 @@ object VaryingModelRepository {
inbuilt("kabuto", ::KabutoModel)
inbuilt("kabutops", ::KabutopsModel)
inbuilt("kadabra", ::KadabraModel)
inbuilt("kangaskhan", ::KangaskhanModel)
inbuilt("koffing", ::KoffingModel)
inbuilt("krabby", ::KrabbyModel)
inbuilt("lickitung", ::LickitungModel)
@@ -481,7 +480,6 @@ object VaryingModelRepository {
inbuilt("taillow", ::TaillowModel)
inbuilt("swellow", ::SwellowModel)
inbuilt("mudbray", ::MudbrayModel)
inbuilt("mudsdale", ::MudsdaleModel)
inbuilt("comfey", ::ComfeyModel)
inbuilt("tandemaus", ::TandemausModel)
inbuilt("maushold", ::MausholdModel)
@@ -46,6 +46,9 @@ class CobblemonConfig {
var announceDropItems = true
@CobblemonConfigField(Category.Pokemon, lang = "default_drop_item_method")
var defaultDropItemMethod = ItemDropMethod.ON_ENTITY
@CobblemonConfigField(Category.Pokemon, lang = "drops_after_death_animation")
var dropAfterDeathAnimation = false
@CobblemonConfigField(Category.Pokemon, lang = "ambient_pokemon_cry_ticks")
@LastChangedVersion("1.4.0")
var ambientPokemonCryTicks = 1080
@@ -49,6 +49,8 @@ import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviourState
import com.cobblemon.mod.common.api.riding.behaviour.RidingBehaviours
import com.cobblemon.mod.common.api.riding.events.SelectDriverEvent
import com.cobblemon.mod.common.api.riding.stats.RidingStat
import com.cobblemon.mod.common.api.riding.util.RidingAnimationData
import com.cobblemon.mod.common.api.riding.util.Vec3Spring
import com.cobblemon.mod.common.api.scheduling.Schedulable
import com.cobblemon.mod.common.api.scheduling.SchedulingTracker
import com.cobblemon.mod.common.api.scheduling.afterOnServer
@@ -251,6 +253,7 @@ open class PokemonEntity(
var enablePoseTypeRecalculation = true
val ridingAnimationData: RidingAnimationData = RidingAnimationData()
var previousRidingState: RidingBehaviourState? = null
var ridingState: RidingBehaviourState? = null
@@ -483,6 +486,11 @@ open class PokemonEntity(
entityData.get(MOVING)
super.tick()
if (passengers.isNotEmpty()) {
ridingAnimationData.update(this)
}
flyDistO = flyDist
if (isBattling) {
@@ -1565,6 +1573,8 @@ open class PokemonEntity(
inp.z * g.toDouble() + inp.x * f.toDouble()
)
val diff = v.subtract(this.deltaMovement)
val inertia = ifRidingAvailableSupply(fallback = 0.5) { behaviour, settings, state ->
@@ -1924,7 +1934,7 @@ open class PokemonEntity(
// }
override fun onPassengerTurned(entityToUpdate: Entity) {
if (entityToUpdate !is LivingEntity) return
if (entityToUpdate !is LivingEntity) return
ifRidingAvailable { behaviour, settings, state ->
behaviour.clampPassengerRotation(settings, state, this, entityToUpdate)
}
@@ -1942,6 +1952,22 @@ open class PokemonEntity(
}
}
// When riding mimic RemotePlayers logic for rendering players at farther
// distances than usual. Otherwise the player may render when the pokemon
// entity is not, causing a floating player.
override fun shouldRenderAtSqrDistance(distance: Double): Boolean {
if (!passengers.isEmpty()) {
var d = (boundingBox.getSize() * 10.0)
if (d.isNaN()) {
d = 1.0
}
val scale = 64.0 * getViewScale()
return distance < d * scale * scale
}
return super.shouldRenderAtSqrDistance(distance)
}
override fun getControllingPassenger(): LivingEntity? {
val riders = this.passengers.filterIsInstance<LivingEntity>()
if (riders.isEmpty()) {
@@ -11,6 +11,7 @@ package com.cobblemon.mod.common.entity.pokemon
import com.bedrockk.molang.runtime.struct.QueryStruct
import com.bedrockk.molang.runtime.value.DoubleValue
import com.bedrockk.molang.runtime.value.MoValue
import com.cobblemon.mod.common.Cobblemon
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.OrientationControllable
import com.cobblemon.mod.common.api.entity.PokemonSender
@@ -287,6 +288,14 @@ class PokemonServerDelegate : PokemonSideDelegate {
}
}
fun doDeathDrops() {
if (entity.ownerUUID == null && entity.owner == null && entity.level().gameRules.getBoolean(CobblemonGameRules.DO_POKEMON_LOOT)) {
val heldItem = (entity as PokemonEntity?)?.pokemon?.heldItemNoCopy() ?: ItemStack.EMPTY
if (!heldItem.isEmpty) entity.spawnAtLocation(heldItem.item)
(entity.drops ?: entity.pokemon.form.drops).drop(entity, entity.level() as ServerLevel, entity.position(), entity.killer)
}
}
override fun updatePostDeath() {
// clear active effects before proceeding
val owner = entity.owner
@@ -299,6 +308,7 @@ class PokemonServerDelegate : PokemonSideDelegate {
if (entity.deathTime == 0) {
entity.effects.wipe()
entity.deathTime = 1
if (!Cobblemon.config.dropAfterDeathAnimation) doDeathDrops()
return
} else if (entity.effects.progress?.isDone == false) {
return
@@ -316,15 +326,8 @@ class PokemonServerDelegate : PokemonSideDelegate {
}
if (entity.deathTime == 60) {
if (entity.ownerUUID == null && entity.owner == null) {
entity.level().broadcastEntityEvent(entity, 60.toByte()) // Sends smoke effect
if(entity.level().gameRules.getBoolean(CobblemonGameRules.DO_POKEMON_LOOT)) {
val heldItem = (entity as PokemonEntity?)?.pokemon?.heldItemNoCopy() ?: ItemStack.EMPTY
if (!heldItem.isEmpty) entity.spawnAtLocation(heldItem.item)
(entity.drops ?: entity.pokemon.form.drops).drop(entity, entity.level() as ServerLevel, entity.position(), entity.killer)
}
}
entity.level().broadcastEntityEvent(entity, 60.toByte()) // Sends smoke effect
if (Cobblemon.config.dropAfterDeathAnimation) doDeathDrops()
entity.remove(Entity.RemovalReason.KILLED)
}
}
@@ -353,6 +353,18 @@ object CobblemonItemGroups {
entries.accept(CobblemonItems.LEEK_AND_POTATO_STEW)
entries.accept(CobblemonItems.BRAISED_VIVICHOKE)
entries.accept(CobblemonItems.VIVICHOKE_DIP)
entries.accept(CobblemonItems.TART_APPLE)
entries.accept(CobblemonItems.SWEET_APPLE)
entries.accept(CobblemonItems.SYRUPY_APPLE)
entries.accept(CobblemonItems.WHIPPED_DREAM)
entries.accept(CobblemonItems.STRAWBERRY_SWEET)
entries.accept(CobblemonItems.LOVE_SWEET)
entries.accept(CobblemonItems.BERRY_SWEET)
entries.accept(CobblemonItems.CLOVER_SWEET)
entries.accept(CobblemonItems.FLOWER_SWEET)
entries.accept(CobblemonItems.STAR_SWEET)
entries.accept(CobblemonItems.RIBBON_SWEET)
entries.accept(CobblemonItems.BERRY_JUICE)
entries.accept(CobblemonItems.REMEDY)
entries.accept(CobblemonItems.FINE_REMEDY)
@@ -475,6 +487,7 @@ object CobblemonItemGroups {
entries.accept(CobblemonItems.WHIPPED_DREAM)
entries.accept(CobblemonItems.TART_APPLE)
entries.accept(CobblemonItems.SWEET_APPLE)
entries.accept(CobblemonItems.SYRUPY_APPLE)
entries.accept(CobblemonItems.CRACKED_POT)
entries.accept(CobblemonItems.CHIPPED_POT)
entries.accept(CobblemonItems.MASTERPIECE_TEACUP)
@@ -644,9 +657,23 @@ object CobblemonItemGroups {
}
private fun foodInjections(injector: Injector) {
injector.putAfter(CobblemonItems.TART_APPLE, Items.ENCHANTED_GOLDEN_APPLE)
injector.putAfter(CobblemonItems.SWEET_APPLE, CobblemonItems.TART_APPLE)
injector.putAfter(CobblemonItems.SYRUPY_APPLE, CobblemonItems.SWEET_APPLE)
injector.putAfter(CobblemonItems.MEDICINAL_LEEK, Items.POISONOUS_POTATO)
injector.putAfter(CobblemonItems.ROASTED_LEEK, CobblemonItems.MEDICINAL_LEEK)
injector.putAfter(CobblemonItems.BRAISED_VIVICHOKE, CobblemonItems.ROASTED_LEEK)
injector.putAfter(CobblemonItems.WHIPPED_DREAM, Items.PUMPKIN_PIE)
injector.putAfter(CobblemonItems.STRAWBERRY_SWEET, CobblemonItems.WHIPPED_DREAM)
injector.putAfter(CobblemonItems.LOVE_SWEET, CobblemonItems.STRAWBERRY_SWEET)
injector.putAfter(CobblemonItems.BERRY_SWEET, CobblemonItems.LOVE_SWEET)
injector.putAfter(CobblemonItems.CLOVER_SWEET, CobblemonItems.BERRY_SWEET)
injector.putAfter(CobblemonItems.FLOWER_SWEET, CobblemonItems.CLOVER_SWEET)
injector.putAfter(CobblemonItems.STAR_SWEET, CobblemonItems.FLOWER_SWEET)
injector.putAfter(CobblemonItems.RIBBON_SWEET, CobblemonItems.STAR_SWEET)
injector.putAfter(CobblemonItems.LEEK_AND_POTATO_STEW, Items.RABBIT_STEW)
injector.putAfter(CobblemonItems.VIVICHOKE_DIP, CobblemonItems.LEEK_AND_POTATO_STEW)
}
@@ -8,6 +8,7 @@
package com.cobblemon.mod.common.platform.events
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
class ChangeDimensionEvent(val player: ServerPlayer)
class ChangeDimensionEvent(val player: ServerPlayer, val origin: ServerLevel?, val destination: ServerLevel?)
@@ -28,11 +28,14 @@ import net.minecraft.client.player.LocalPlayer
import net.minecraft.client.resources.sounds.SimpleSoundInstance
import net.minecraft.resources.ResourceLocation
import net.minecraft.sounds.SoundEvent
import net.minecraft.util.Mth.clamp
import kotlin.math.exp
import kotlin.math.ln
class PokedexUsageContext {
companion object {
const val ZOOM_STAGES = 10
const val ZOOM_MAX_STEP = 9F
const val ZOOM_TARGET_FOV = 10F // the FOV we get at max zoom (probably somewhat inaccurate, but irrelevant)
const val ZOOM_BASE_FOV = 80F // getting FOV from MC is easy, but pin it for consistent step count/zoom dist
const val BLOCK_LENGTH_PER_ZOOM_STAGE = 2
const val OPEN_SCANNER_BUFFER_TICKS = 5 // Open scanner interface if usage ticks are above this threshold
const val VIEW_INFO_BUFFER_TICKS = 10
@@ -59,6 +62,7 @@ class PokedexUsageContext {
var focusIntervals: Float = 0F
var innerRingRotation: Float = 0F
var zoomLevel: Float = 0F
var zoomModifier: Float = 1F
var newPokemonInfo: PokedexLearnedInformation = PokedexLearnedInformation.NONE
var type: PokedexType = PokedexType.RED
var availableInfoFrames: MutableList<Boolean?> = mutableListOf(null, null, null, null)
@@ -204,6 +208,7 @@ class PokedexUsageContext {
fun resetState(resetAnimationStates: Boolean = true) {
scanningGuiOpen = false
zoomLevel = 0F
zoomModifier = 1F
focusIntervals = 0F
resetFocusedPokemonState()
@@ -215,14 +220,22 @@ class PokedexUsageContext {
}
fun adjustZoom(verticalScrollAmount: Double) {
zoomLevel = clamp(zoomLevel + verticalScrollAmount.toFloat(), 0F, ZOOM_STAGES.toFloat())
if (zoomLevel > 0F && zoomLevel < ZOOM_STAGES.toFloat()) {
playSound(CobblemonSounds.POKEDEX_SCAN_ZOOM_INCREMENT)
}
if ((zoomLevel <= 0F && verticalScrollAmount < 0) || (zoomLevel >= ZOOM_MAX_STEP && verticalScrollAmount > 0))
return
playSound(CobblemonSounds.POKEDEX_SCAN_ZOOM_INCREMENT)
zoomLevel = (zoomLevel + verticalScrollAmount.toFloat()).coerceIn(0F, ZOOM_MAX_STEP)
innerRingRotation = (innerRingRotation + 15) % 360
val startLog = ln(ZOOM_BASE_FOV)
val targetLog = ln(ZOOM_TARGET_FOV)
val stepSize = (startLog - targetLog) / ZOOM_MAX_STEP
val currentZoomLog = startLog - (zoomLevel * stepSize)
val currentFov = exp(currentZoomLog)
zoomModifier = currentFov / ZOOM_BASE_FOV
}
// Higher multiplier = more zoomed out
fun getFovMultiplier() = 1 - (zoomLevel / ZOOM_STAGES)
// 1 = normal FOV; 0 = max zoom; this runs on render update, best to keep logic out of here
fun getFovMultiplier() = zoomModifier
fun playSound(soundEvent: SoundEvent) {
Minecraft.getInstance().soundManager.play(SimpleSoundInstance.forUI(soundEvent, 1.0F))
@@ -38,6 +38,7 @@ object RidingBehaviourSettingsAdapter : JsonDeserializer<RidingBehaviourSettings
JetAirBehaviour.KEY to JetAirSettings::class.java,
SwimDashBehaviour.KEY to SwimDashSettings::class.java,
VehicleLandBehaviour.KEY to VehicleLandSettings::class.java,
HoverBehaviour.KEY to HoverSettings::class.java,
CompositeBehaviour.KEY to CompositeSettings::class.java,
/*
@@ -0,0 +1,28 @@
{
"format_version": "1.8.0",
"animations": {
"animation.ride_test.sitting": {
"loop": true,
"bones": {
"body": {
"position": [0, -9, 0]
},
"torso": {
"rotation": [25, 0, 0]
},
"arm_right": {
"rotation": [0, 0, 22.5]
},
"arm_left": {
"rotation": [0, 0, -27.5]
},
"leg_right": {
"rotation": [-90, 20, 0]
},
"leg_left": {
"rotation": [-90, -20, 0]
}
}
}
}
}
@@ -2272,23 +2272,59 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.4167": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"0.5833": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.0417": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.375": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"3.0": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"5.875": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.4167": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"0.5833": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.0417": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.375": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"3.0": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"5.875": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.4167": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"0.5833": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.0417": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.375": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"3.0": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"5.875": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.4167": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"0.5833": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.0417": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.375": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"3.0": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"5.875": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
}
}
@@ -2553,15 +2589,27 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"1.25": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"3.6667": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"1.25": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"3.6667": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"1.25": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"3.6667": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"1.25": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"3.6667": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"jaw": {
@@ -8763,19 +8811,43 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"0.5": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.25": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.4583": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.25": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"0.5": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.25": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.4583": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"0.5": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.25": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.4583": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.25": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"0.5": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.25": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.4583": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
}
}
@@ -11221,23 +11293,59 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"0.4167": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"0.8333": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"1.125": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5417": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.6667": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.25": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"0.4167": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"0.8333": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"1.125": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5417": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.6667": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.25": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"0.4167": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"0.8333": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"1.125": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5417": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.6667": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.25": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"0.4167": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"0.8333": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"1.125": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5417": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.6667": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"locator_target": {
@@ -13529,19 +13637,43 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"1.2083": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5417": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.7083": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"1.2083": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5417": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.7083": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"1.2083": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5417": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.7083": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"1.2083": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5417": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.7083": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"locator_mouth": {
@@ -13740,14 +13872,20 @@
"position": {
"0.0": [-0.1, 0.1, 0],
"0.125": [-0.1, 0.1, 0],
"0.1667": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.1667": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0.1, 0],
"0.125": [0.1, 0.1, 0],
"0.1667": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.1667": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"jaw": {
@@ -14543,7 +14681,7 @@
"rotation": [0, -6, -15]
},
"wing_right_elbow": {
"rotation": [0, "-6", -15],
"rotation": [0, "-6+", -15],
"position": [0.45, 0.1, 0]
},
"wing_right_membrane": {
@@ -16036,7 +16174,7 @@
"animation_length": 4,
"bones": {
"body": {
"rotation": [22.5, 0, "math.sin(q.anim_time*90*1-90)*-0.5"],
"rotation": ["22.5 + q.riding.pitch(0)*-90", 0, "math.sin(q.anim_time*90*1-90)*-0.5"],
"position": ["math.cos(q.anim_time*90*1-60)*1", "12+math.cos((q.anim_time*90*2-60)+math.sin(q.anim_time*90*2)*20)*3", 0]
},
"torso": {
@@ -17357,6 +17495,14 @@
"locator_top": {
"position": [0, 13, 0]
}
},
"sound_effects": {
"1.125": {
"effect": "animation.leather.wing_flap.medium"
},
"3.1667": {
"effect": "animation.leather.wing_flap.medium"
}
}
},
"animation.charizard.air_fly": {
@@ -18633,6 +18779,17 @@
},
"locator_top": {
"position": [0, -1, 0]
},
"locator_seat_1": {
"rotation": [-60, 0, 0]
}
},
"sound_effects": {
"1.0833": {
"effect": "animation.leather.wing_flap.medium"
},
"3.0833": {
"effect": "animation.leather.wing_flap.medium"
}
}
},
@@ -18898,6 +19055,9 @@
},
"locator_top": {
"position": [0, -6, 0]
},
"locator_seat_1": {
"rotation": [-60, 0, 0]
}
}
},
@@ -19097,23 +19257,59 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.4167": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"0.5833": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.4167": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.5833": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"3.9167": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"4.0833": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.4167": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"0.5833": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.4167": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.5833": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"3.9167": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"4.0833": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.4167": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"0.5833": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.4167": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.5833": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"3.9167": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"4.0833": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.4167": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"0.5833": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.4167": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.5833": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"3.9167": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"4.0833": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
}
}
@@ -22458,7 +22654,10 @@
},
"0.5": [0.78, -10.13, 0.45],
"0.5417": [-0.45, -8.03, 0.45],
"0.5833": {"pre": [-0.45, -8.03, 0.45], "post": [-0.45, "-7.79+360", 0.45]},
"0.5833": {
"pre": [-0.45, -8.03, 0.45],
"post": [-0.45, "-7.79+360", 0.45]
},
"0.625": [-2.7, 355.37, 0.45],
"1.0": {
"pre": [-9.46, "10.71+360", 0.5],
@@ -26129,23 +26328,59 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.0833": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"0.3333": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"1.625": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"1.8333": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.625": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.0833": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"0.3333": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"1.625": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"1.8333": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.625": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.0833": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"0.3333": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"1.625": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"1.8333": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.5": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.625": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.0833": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"0.3333": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"1.625": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"1.8333": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.5": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.625": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"locator_root": {
@@ -29385,9 +29620,15 @@
"brow": {
"position": {
"0.9583": [0, 0, 0],
"1.1667": {"pre": [0, 0, 0], "post": [0, 0, -0.3]},
"1.1667": {
"pre": [0, 0, 0],
"post": [0, 0, -0.3]
},
"2.2917": [0, 0, -0.3],
"2.5417": {"pre": [0, 0, -0.3], "post": [0, 0, 0]}
"2.5417": {
"pre": [0, 0, -0.3],
"post": [0, 0, 0]
}
}
},
"jaw": {
@@ -29722,19 +29963,43 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"1.2083": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.375": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.6667": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"1.2083": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.375": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.6667": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"1.2083": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.375": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.6667": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"1.2083": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.375": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.6667": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"locator_root": {
@@ -29753,6 +30018,106 @@
}
}
},
"animation.charizard.ride_air_look": {
"loop": true,
"bones": {
"body": {
"rotation": ["q.riding.pitch_change(0)*-0", "q.riding.yaw_change(0)*-15", "q.riding.roll_change(0)*15"]
},
"neck": {
"rotation": ["math.clamp(q.riding.pitch_change(0),-0.5,1.0)*-20", 0, "q.riding.yaw_change(0)*7"]
},
"neck2": {
"rotation": ["math.clamp(q.riding.pitch_change(0),-0.5,1.0)*-12", 0, "q.riding.yaw_change(0)*12"]
},
"neck3": {
"rotation": ["q.riding.pitch_change(0)*-7", 0, "q.riding.yaw_change(0)*7"]
},
"neck4": {
"rotation": ["q.riding.pitch_change(0)*-7", 0, "q.riding.yaw_change(0)*7"]
},
"head_angle": {
"rotation": ["q.riding.pitch_change(0)*-7", 0, "q.riding.yaw_change(0)*7"]
},
"shoulder_right": {
"rotation": [0, "-12.5*q.riding.pitch_change(0)", "27.5*q.riding.yaw_change(0)"]
},
"arm_right": {
"rotation": [0, "15*q.riding.yaw_change(0)", 0]
},
"forearm_right": {
"rotation": [0, "15*q.riding.yaw_change(0)", "-12.5*q.riding.pitch_change(0)"]
},
"shoulder_left": {
"rotation": [0, "12.5*q.riding.pitch_change(0)", "27.5*q.riding.yaw_change(0)"]
},
"arm_left": {
"rotation": [0, "15*q.riding.yaw_change(0)", 0]
},
"forearm_left": {
"rotation": [0, "15*q.riding.yaw_change(0)", "12.5*q.riding.pitch_change(0)"]
},
"wing_right_base": {
"rotation": ["-5*q.riding.pitch_change(0)", 0, 0]
},
"wing_right_bend": {
"rotation": ["10*q.riding.yaw_change(0)", "7.5*q.riding.pitch_change(0)", "10*q.riding.yaw_change(0)"]
},
"wing_right_mid": {
"rotation": ["-5*q.riding.pitch_change(0)", 0, 0]
},
"wing_right_elbow": {
"rotation": ["-2.5*q.riding.pitch_change(0)", "5*q.riding.pitch_change(0)", 0]
},
"wing_left_base": {
"rotation": ["-5*q.riding.pitch_change(0)", 0, 0]
},
"wing_left_bend": {
"rotation": ["-10*q.riding.yaw_change(0)", "-7.5*q.riding.pitch_change(0)", "-10*q.riding.yaw_change(0)"]
},
"wing_left_mid": {
"rotation": ["-5*q.riding.pitch_change(0)", 0, 0]
},
"wing_left_elbow": {
"rotation": ["-2.5*q.riding.pitch_change(0)", "-(5*q.riding.pitch_change(0))", 0]
},
"tail": {
"rotation": ["q.riding.pitch_change(0)*7", 0, "q.riding.yaw_change(0)*-10"]
},
"tail2": {
"rotation": ["q.riding.pitch_change(0)*7", "q.riding.yaw_change(0)*15", 0]
},
"tail3": {
"rotation": ["q.riding.pitch_change(0)*7", "q.riding.yaw_change(0)*20", 0]
},
"tail4": {
"rotation": ["q.riding.pitch_change(0)*7", "q.riding.yaw_change(0)*20", 0]
},
"tail5": {
"rotation": ["q.riding.pitch_change(0)*8", "q.riding.yaw_change(0)*20", 0]
},
"leg_right": {
"rotation": ["-12.5*q.riding.pitch_change(0)", "q.riding.yaw_change(0)*20", 0],
"position": ["-1.5*q.riding.yaw_change(0)", 0, 0]
},
"knee_right": {
"rotation": ["-12.5*q.riding.pitch_change(0)", 0, 0]
},
"foot_right": {
"rotation": ["-12.5*q.riding.pitch_change(0)", 0, 0]
},
"leg_left": {
"rotation": ["-12.5*q.riding.pitch_change(0)", "q.riding.yaw_change(0)*20", 0],
"position": ["-1.5*q.riding.yaw_change(0)", 0, 0]
},
"knee_left": {
"rotation": ["-12.5*q.riding.pitch_change(0)", 0, 0]
},
"foot_left": {
"rotation": ["-12.5*q.riding.pitch_change(0)", 0, 0]
}
}
},
"animation.charizard.air_status": {
"animation_length": 3,
"bones": {
@@ -32994,19 +33359,43 @@
"eyelid_right": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"1.2083": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]},
"2.2083": {"pre": [0, 0, 0], "post": [-0.1, 0.1, 0]},
"2.4583": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"1.2083": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.2083": {
"pre": [0, 0, 0],
"post": [-0.1, 0.1, 0]
},
"2.4583": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0, 0, 0],
"0.3333": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"1.2083": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]},
"2.2083": {"pre": [0, 0, 0], "post": [0.1, 0.1, 0]},
"2.4583": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.3333": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"1.2083": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
},
"2.2083": {
"pre": [0, 0, 0],
"post": [0.1, 0.1, 0]
},
"2.4583": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"locator_root": {
@@ -34432,14 +34821,20 @@
"position": {
"0.0": [-0.1, 0.1, 0],
"0.125": [-0.1, 0.1, 0],
"0.1667": {"pre": [-0.1, 0.1, 0], "post": [0, 0, 0]}
"0.1667": {
"pre": [-0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
},
"eyelid_left": {
"position": {
"0.0": [0.1, 0.1, 0],
"0.125": [0.1, 0.1, 0],
"0.1667": {"pre": [0.1, 0.1, 0], "post": [0, 0, 0]}
"0.1667": {
"pre": [0.1, 0.1, 0],
"post": [0, 0, 0]
}
}
}
}
@@ -535,6 +535,11 @@
}
}
}
},
"sound_effects": {
"0.5": {
"effect": "animation.plumage.wing_flap.medium"
}
}
},
"animation.pidgeot.air_fly": {
@@ -710,6 +715,9 @@
},
"wing_open_right4": {
"rotation": [0, 0, "7.5+math.sin(q.anim_time*90*0.8-240)*-10+math.sin(q.anim_time*90*12-120)*0.4"]
},
"locator_seat1": {
"position": [0, 1.5, -4]
}
}
},
@@ -1566,6 +1574,11 @@
}
}
}
},
"sound_effects": {
"1.375": {
"effect": "animation.plumage.wing_flap.medium"
}
}
},
"animation.pidgeot.air_fly_quirk2": {
@@ -2721,6 +2734,14 @@
}
}
}
},
"sound_effects": {
"1.4583": {
"effect": "animation.plumage.wing_flap.medium"
},
"3.0833": {
"effect": "animation.plumage.wing_flap.medium"
}
}
},
"animation.pidgeot.blink": {
@@ -467,6 +467,7 @@
},
"animation.aerodactyl.air_idle": {
"loop": true,
"animation_length": 1.33333,
"bones": {
"aerodactyl": {
"position": [0, 3, 0]
@@ -642,10 +643,16 @@
"right_wing_membrane": {
"rotation": [0, "0+math.sin(q.anim_time*90*3+90)*3", "0+math.sin(q.anim_time*90*3+90)*1.5"]
}
},
"sound_effects": {
"1.0833": {
"effect": "animation.leather.wing_flap.medium"
}
}
},
"animation.aerodactyl.air_fly": {
"loop": true,
"animation_length": 1.33333,
"bones": {
"aerodactyl": {
"position": [0, 3, 0]
@@ -827,6 +834,11 @@
"right_horn": {
"rotation": ["math.sin(q.anim_time*90*12-160)*2", 0, 0]
}
},
"sound_effects": {
"0.9583": {
"effect": "animation.leather.wing_flap.medium"
}
}
},
"animation.aerodactyl.sleep": {
@@ -1237,6 +1237,20 @@
"rotation": ["-math.sin(q.anim_time*90*2-120)*4", 0, 0],
"position": [0, "7.8+math.sin(q.anim_time*90*2)*2", -5.6]
}
},
"sound_effects": {
"1.5": {
"effect": "animation.leather.wing_flap.medium"
},
"3.5": {
"effect": "animation.leather.wing_flap.medium"
},
"5.5": {
"effect": "animation.leather.wing_flap.medium"
},
"7.5": {
"effect": "animation.leather.wing_flap.medium"
}
}
},
"animation.dragonite.water_idle": {
@@ -2053,6 +2067,89 @@
"effect": "pokemon.dragonite.cry"
}
}
},
"animation.dragonite.shock": {
"loop": true,
"bones": {
"pupil_left": {
"scale": [0.7, 0.7, 1]
},
"eye_shine_left": {
"position": [0, -0.5, 0]
},
"pupil_right": {
"scale": [0.7, 0.7, 1]
},
"eye_shine_right": {
"position": [0, -0.5, 0]
},
"jaw": {
"rotation": [27.5, 0, 0]
},
"eye_left": {
"position": [0, 0, 0],
"scale": 1
},
"eye_shocked_left": {
"position": [0.25, 0, -0.26]
},
"eye_shocked_right": {
"position": [-0.125, 0, -0.18]
}
}
},
"animation.dragonite.angry": {
"loop": true,
"bones": {
"eye_angry_left": {
"position": [0.1, 0, -0.1]
},
"eye_shine_left": {
"position": [0, -1, 0]
},
"eye_shine_right": {
"position": [0, -1, 0]
},
"eye_angry_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.dragonite.sad": {
"loop": true,
"bones": {
"eye_sad_left": {
"position": [0.1, 0, -0.1]
},
"eye_sad_right": {
"position": [-0.1, 0, -0.1]
}
}
},
"animation.dragonite.happy": {
"loop": true,
"bones": {
"eyelid_happy_left": {
"position": [0.1, 0, -0.1]
},
"eyelid_happy_right": {
"position": [-0.1, 0, -0.1]
},
"jaw": {
"rotation": [27.5, 0, 0]
}
}
},
"animation.dragonite.hurt": {
"loop": true,
"bones": {
"eyelid_recoil_left": {
"position": [0.1, 0, -0.1]
},
"eyelid_recoil_right": {
"position": [-0.1, 0, -0.1]
}
}
}
}
}
@@ -5,7 +5,11 @@
"loop": true,
"bones": {
"body": {
"rotation": [0, "0 - Math.Sin(((q.anim_time + 0.1) * 180 * 0.5) * 1) * 5", "Math.Sin(((q.anim_time + 0.4) * 180 * 0.5) * 1) * 5"],
"rotation": [
"45*q.riding.velocity_forward(0)",
"0 - Math.Sin(((q.anim_time + 0.1) * 180 * 0.5) * 1) * 5",
"Math.Sin(((q.anim_time + 0.4) * 180 * 0.5) * 1) * 5 + 45*q.riding.velocity_right(0)"
],
"position": ["Math.Sin((q.anim_time * 180 * 0.5) * 1) * 1.5", "7+Math.Sin((q.anim_time * 90 * 0.5) * 1) * 1.5", 0]
},
"magnet_back_rotation": {
@@ -45,7 +49,11 @@
"loop": true,
"bones": {
"body": {
"rotation": [15, "0 - Math.Sin(((q.anim_time + 0.1) * 180 * 0.5) * 1) * 5", "Math.Sin(((q.anim_time + 0.4) * 180 * 0.5) * 1) * 5"],
"rotation": [
"2.5 + 45*q.riding.velocity_forward(0)",
"- Math.Sin(((q.anim_time + 0.1) * 180 * 0.5) * 1) * 5",
"Math.Sin(((q.anim_time + 0.4) * 180 * 0.5) * 1) * 5 - 45*q.riding.velocity_right(0)"
],
"position": ["Math.Sin((q.anim_time * 180 * 0.5) * 1) * 1.5", "7+Math.Sin((q.anim_time * 90 * 0.5) * 1) * 1.5", 0]
},
"magnet_back_rotation": {
@@ -266,45 +274,117 @@
"pupil_left": {
"position": {
"0.0": [0, 0, 0],
"0.5": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"0.5417": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"1.75": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"1.7917": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
"2.0833": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"2.125": {"pre": [0, 0, 0], "post": [0, 0, 0.1]}
"0.5": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"0.5417": {
"pre": [0, 0, 0],
"post": [0, 0, 0.1]
},
"1.75": {
"pre": [0, 0, 0.1],
"post": [0, 0, 0.1]
},
"1.7917": {
"pre": [0, 0, 0.1],
"post": [0, 0, 0]
},
"2.0833": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"2.125": {
"pre": [0, 0, 0],
"post": [0, 0, 0.1]
}
}
},
"pupil_closed_left": {
"position": {
"0.0": [0, 0, 0],
"0.5": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"0.5417": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"1.75": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"1.7917": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
"2.0833": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"2.125": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
"0.5": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"0.5417": {
"pre": [0, 0, 0],
"post": [0, 0, -0.1]
},
"1.75": {
"pre": [0, 0, -0.1],
"post": [0, 0, -0.1]
},
"1.7917": {
"pre": [0, 0, -0.1],
"post": [0, 0, 0]
},
"2.0833": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"2.125": {
"pre": [0, 0, 0],
"post": [0, 0, -0.1]
}
}
},
"pupil_right": {
"position": {
"0.0": [0, 0, 0],
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"0.25": {"pre": [0, 0, 0], "post": [0, 0, 0.1]},
"0.5": {"pre": [0, 0, 0.1], "post": [0, 0, 0.1]},
"0.5417": {"pre": [0, 0, 0.1], "post": [0, 0, 0]},
"1.9583": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"2.0": {"pre": [0, 0, 0], "post": [0, 0, 0.1]}
"0.2083": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"0.25": {
"pre": [0, 0, 0],
"post": [0, 0, 0.1]
},
"0.5": {
"pre": [0, 0, 0.1],
"post": [0, 0, 0.1]
},
"0.5417": {
"pre": [0, 0, 0.1],
"post": [0, 0, 0]
},
"1.9583": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"2.0": {
"pre": [0, 0, 0],
"post": [0, 0, 0.1]
}
}
},
"pupil_closed_right": {
"position": {
"0.0": [0, 0, 0],
"0.2083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"0.25": {"pre": [0, 0, 0], "post": [0, 0, -0.1]},
"0.5": {"pre": [0, 0, -0.1], "post": [0, 0, -0.1]},
"0.5417": {"pre": [0, 0, -0.1], "post": [0, 0, 0]},
"1.9583": {"pre": [0, 0, 0], "post": [0, 0, 0]},
"2.0": {"pre": [0, 0, 0], "post": [0, 0, -0.1]}
"0.2083": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"0.25": {
"pre": [0, 0, 0],
"post": [0, 0, -0.1]
},
"0.5": {
"pre": [0, 0, -0.1],
"post": [0, 0, -0.1]
},
"0.5417": {
"pre": [0, 0, -0.1],
"post": [0, 0, 0]
},
"1.9583": {
"pre": [0, 0, 0],
"post": [0, 0, 0]
},
"2.0": {
"pre": [0, 0, 0],
"post": [0, 0, -0.1]
}
}
}
},
@@ -155,6 +155,9 @@
"back_neck_braid_right4": {
"rotation": [2.5, 0, -10],
"position": [-0.5, 0, 0]
},
"body": {
"rotation": ["q.riding.velocity_y(0)*-90", 0, 0]
}
}
},
@@ -650,7 +653,7 @@
}
},
"neck2": {
"rotation": ["5+math.sin(q.anim_time*90*4-60)*2", 0, 0]
"rotation": ["5+math.sin(q.anim_time*90*4-60)*2 - math.pow(q.riding.yaw_change(0),2)*20", "q.riding.yaw_change(0)*-10", "q.riding.yaw_change(0)*10"]
},
"tail5": {
"rotation": ["-7.5+math.sin(q.anim_time*90*4-90)*2", "math.sin(q.anim_time*90*2)*1", "math.sin(q.anim_time*90*2)*4"]
@@ -677,7 +680,7 @@
}
},
"neck": {
"rotation": ["3+math.sin(q.anim_time*90*4-30)*1", 0, "math.sin(q.anim_time*90*2-30)*2"]
"rotation": ["3+math.sin(q.anim_time*90*4-30)*1", "q.riding.yaw_change(0)*-10", "math.sin(q.anim_time*90*2-30)*2 + q.riding.yaw_change(0)*10"]
},
"front_neck_braid_left": {
"rotation": ["5+math.sin(q.anim_time*90*4-60)*1", 0.5, 5]
@@ -844,6 +847,7 @@
"position": [-0.5, 0, 0]
},
"body": {
"rotation": ["q.riding.velocity_y(0)*-90", 0, 0],
"position": {
"0.0": [0, 0, 0],
"0.0417": [0, -0.25, 0],
@@ -1257,7 +1261,7 @@
}
},
"neck2": {
"rotation": ["math.sin(q.anim_time*90*4-60)*4", 0, 0]
"rotation": ["math.sin(q.anim_time*90*4-60)*4 - math.pow(q.riding.yaw_delta(0),2)*20", "q.riding.yaw_delta(0)*-10", "q.riding.yaw_delta(0)*10"]
},
"tail5": {
"rotation": ["-10+math.sin(q.anim_time*90*4-100)*6", "math.sin(q.anim_time*90*4-40)*2", "math.sin(q.anim_time*90*4-20)*1"]
@@ -1279,7 +1283,7 @@
}
},
"neck": {
"rotation": ["13+math.sin(q.anim_time*90*4-30)*7", 0, 0],
"rotation": ["13+math.sin(q.anim_time*90*4-30)*7", "q.riding.yaw_delta(0)*-10", "q.riding.yaw_delta(0)*10"],
"position": [0, 0, "-0.5+math.sin(q.anim_time*90*4-30)*0.2"]
},
"front_neck_braid_left": {
@@ -7,8 +7,8 @@
"texture_width": 256,
"texture_height": 128,
"visible_bounds_width": 10,
"visible_bounds_height": 5,
"visible_bounds_offset": [0, 1.5, 0]
"visible_bounds_height": 6,
"visible_bounds_offset": [0, 2, 0]
},
"bones": [
{
@@ -20,7 +20,7 @@
"parent": "charizard",
"pivot": [0, 0, -1],
"locators": {
"root": [0, 0, 0]
"root": [0, 0, -1]
}
},
{
@@ -28,7 +28,7 @@
"parent": "charizard",
"pivot": [0, 41, -1],
"locators": {
"top": [0, 41, 0]
"top": [0, 41, -1]
}
},
{
@@ -116,7 +116,8 @@
{
"name": "head_correction",
"parent": "head",
"pivot": [0, 43.5, -0.5]
"pivot": [0, 43.5, -0.5],
"rotation": [-95, 0, 0]
},
{
"name": "head_ai",
@@ -127,20 +128,15 @@
"name": "head_angle",
"parent": "head_ai",
"pivot": [0, 43.5, -0.5],
"rotation": [95, 0, 0],
"cubes": [
{"origin": [-3.5, 41.5, -2], "size": [7, 7, 5], "uv": [48, 0]},
{"origin": [-3.5, 41.5, -4], "size": [7, 4, 2], "uv": [95, 64]}
{"origin": [-3.5, 41.5, -4], "size": [7, 4, 2], "uv": [95, 64]},
{"origin": [-2.5, 48, -2], "size": [5, 5, 2], "inflate": 0.02, "uv": [37, 31]},
{"origin": [-2, 51.48744, -3.03033], "size": [0, 1, 1], "inflate": 0.01, "pivot": [-2, 52.51777, -2], "rotation": [45, 0, 15], "uv": [43, 42]},
{"origin": [2, 51.48744, -3.03033], "size": [0, 1, 1], "inflate": 0.01, "pivot": [2, 52.51777, -2], "rotation": [45, 0, -15], "uv": [41, 42]}
]
},
{
"name": "item_hat",
"parent": "head_angle",
"pivot": [0, 45, 3],
"rotation": [-90, 0, 0],
"locators": {
"item_hat": [0, 45, 3]
}
},
{
"name": "locator_head",
"parent": "head_angle",
@@ -150,51 +146,59 @@
"head": [0, 46.5, 3]
}
},
{
"name": "locator_face",
"parent": "head_angle",
"pivot": [0, 53.75, -0.25],
"rotation": [-90, 0, 0],
"locators": {
"face": [0, 53.75, -0.25]
}
},
{
"name": "locator_item_face",
"parent": "head_angle",
"pivot": [0, 48.5, 0.5],
"rotation": [-90, 0, 0],
"locators": {
"item_face": [0, 48.5, 0.5]
}
},
{
"name": "locator_mouth",
"parent": "head_angle",
"pivot": [0, 45.75, -2],
"pivot": [0, 48.75, -3],
"rotation": [-90, 0, 0],
"locators": {
"mouth": [0, 45.75, -2],
"special": [0, 45.75, -2]
"mouth": [0, 48.75, -3]
}
},
{
"name": "eyes",
"name": "locator_special_attack",
"parent": "head_angle",
"pivot": [0, -3.5, 1.5]
"pivot": [0, 48.75, -3],
"rotation": [-90, 0, 0],
"locators": {
"special_attack": [0, 48.75, -3]
}
},
{
"name": "locator_jaw_upper",
"parent": "head_angle",
"pivot": [0, 51.75, -2.25],
"rotation": [-90, 0, 0],
"locators": {
"jaw1": [0, 51.75, -2.25]
}
},
{
"name": "brow",
"parent": "eyes",
"parent": "head_angle",
"pivot": [0, 48.275, 1.765],
"cubes": [
{"origin": [-2.5, 48.55, 1], "size": [5, 0, 1], "uv": [0, 14]},
{"origin": [-3.5, 47.5, 1.53], "size": [7, 1, 1], "inflate": 0.04, "uv": [0, 12]}
]
},
{
"name": "eye",
"parent": "head_angle",
"pivot": [0, -3.5, 1.5]
},
{
"name": "locator_face",
"parent": "eye",
"pivot": [0, 53.75, -0.25],
"rotation": [-90, 0, 0],
"locators": {
"face": [0, 53.75, -0.25]
}
},
{
"name": "eye_right",
"parent": "eyes",
"parent": "eye",
"pivot": [-2.75, 47.75, 0.875],
"cubes": [
{"origin": [-3.5, 47.5, 0], "size": [2, 1, 2], "inflate": 0.01, "uv": [106, 36]},
@@ -222,7 +226,7 @@
},
{
"name": "eye_left",
"parent": "eyes",
"parent": "eye",
"pivot": [2.75, 47.75, 0.875],
"cubes": [
{"origin": [1.5, 47.5, 0], "size": [2, 1, 2], "inflate": 0.01, "uv": [44, 82]},
@@ -251,91 +255,6 @@
{"origin": [2.41, 46.4, 0.5], "size": [1, 1, 1], "inflate": 0.03, "uv": [39, 86]}
]
},
{
"name": "muzzle",
"parent": "head_angle",
"pivot": [-3, 48.5, -2],
"cubes": [
{"origin": [-2.5, 48, -2], "size": [5, 5, 2], "inflate": 0.02, "uv": [37, 31]},
{"origin": [-2, 51.48744, -3.03033], "size": [0, 1, 1], "inflate": 0.01, "pivot": [-2, 52.51777, -2], "rotation": [45, 0, 15], "uv": [43, 42]},
{"origin": [2, 51.48744, -3.03033], "size": [0, 1, 1], "inflate": 0.01, "pivot": [2, 52.51777, -2], "rotation": [45, 0, -15], "uv": [41, 42]}
]
},
{
"name": "locator_jaw_upper",
"parent": "muzzle",
"pivot": [0, 51.75, -2.25],
"rotation": [-90, 0, 0],
"locators": {
"jaw1": [0, 51.75, -2.25]
}
},
{
"name": "nose",
"parent": "muzzle",
"pivot": [0, 53, 0],
"rotation": [-40, 0, 0],
"cubes": [
{"origin": [-2.5, 51.36698, -1.67861], "size": [5, 2, 2], "inflate": 0.03, "uv": [48, 12]},
{"origin": [-2, 53.40698, -1.17861], "size": [4, 0, 1], "uv": [0, 15]}
]
},
{
"name": "jaw",
"parent": "head_angle",
"pivot": [0, 45.5, -2],
"cubes": [
{"origin": [-3.5, 45.5, -4], "size": [7, 3, 2], "inflate": 0.01, "uv": [76, 20]}
]
},
{
"name": "jaw2",
"parent": "jaw",
"pivot": [0, 48.5, -4],
"rotation": [-7.5, 0, 0],
"cubes": [
{"origin": [-2, 48.49, -4], "size": [4, 4, 2], "uv": [0, 51]},
{"origin": [-1.5, 48.5, -2], "size": [3, 4, 0], "uv": [90, 0]},
{"origin": [1.5, 51.49749, -3.03033], "size": [0, 1, 1], "pivot": [1.5, 52.52782, -2], "rotation": [45, 0, -7.5], "uv": [37, 39]},
{"origin": [-1.5, 51.49749, -3.03033], "size": [0, 1, 1], "pivot": [-1.5, 52.52782, -2], "rotation": [45, 0, 7.5], "uv": [37, 38]}
]
},
{
"name": "locator_jaw_lower",
"parent": "jaw2",
"pivot": [0, 51.75, -1.75],
"locators": {
"jaw2": {
"offset": [0, 51.75, -1.75],
"rotation": [-90, 0, 0]
}
}
},
{
"name": "tongue",
"parent": "jaw",
"pivot": [0, 45.5, -2],
"cubes": [
{"origin": [-1.5, 45.5, -2], "size": [3, 3, 0], "uv": [87, 29]}
]
},
{
"name": "tongue2",
"parent": "tongue",
"pivot": [0, 48.5, -2],
"cubes": [
{"origin": [-1, 48.5, -2], "size": [2, 2, 0], "inflate": 0.01, "uv": [46, 38]}
]
},
{
"name": "tongue3",
"parent": "tongue2",
"pivot": [0, 50.5, -2],
"cubes": [
{"origin": [-1, 50.5, -2], "size": [2, 1, 0], "uv": [37, 43]},
{"origin": [-0.5, 51.5, -2], "size": [1, 1, 0], "uv": [45, 43]}
]
},
{
"name": "horns",
"parent": "head_angle",
@@ -381,6 +300,72 @@
"horn2": [2.5, 39, 2]
}
},
{
"name": "nose",
"parent": "head_angle",
"pivot": [0, 53, 0],
"rotation": [-40, 0, 0],
"cubes": [
{"origin": [-2.5, 51.36698, -1.67861], "size": [5, 2, 2], "inflate": 0.03, "uv": [48, 12]},
{"origin": [-2, 53.40698, -1.17861], "size": [4, 0, 1], "uv": [0, 15]}
]
},
{
"name": "jaw",
"parent": "head_angle",
"pivot": [0, 45.5, -2],
"cubes": [
{"origin": [-3.5, 45.5, -4], "size": [7, 3, 2], "inflate": 0.01, "uv": [76, 20]}
]
},
{
"name": "jaw2",
"parent": "jaw",
"pivot": [0, 48.5, -4],
"rotation": [-7.5, 0, 0],
"cubes": [
{"origin": [-2, 48.49, -4], "size": [4, 4, 2], "uv": [0, 51]},
{"origin": [-1.5, 48.5, -1.99], "size": [3, 4, 0], "uv": [90, 0]},
{"origin": [1.5, 51.49749, -3.03033], "size": [0, 1, 1], "pivot": [1.5, 52.52782, -2], "rotation": [45, 0, -7.5], "uv": [37, 39]},
{"origin": [-1.5, 51.49749, -3.03033], "size": [0, 1, 1], "pivot": [-1.5, 52.52782, -2], "rotation": [45, 0, 7.5], "uv": [37, 38]}
]
},
{
"name": "locator_jaw_lower",
"parent": "jaw2",
"pivot": [0, 51.75, -1.75],
"locators": {
"jaw2": {
"offset": [0, 51.75, -1.75],
"rotation": [-90, 0, 0]
}
}
},
{
"name": "tongue",
"parent": "jaw",
"pivot": [0, 45.5, -2],
"cubes": [
{"origin": [-1.5, 45.5, -2], "size": [3, 3, 0], "uv": [87, 29]}
]
},
{
"name": "tongue2",
"parent": "tongue",
"pivot": [0, 48.5, -2],
"cubes": [
{"origin": [-1, 48.5, -2], "size": [2, 2, 0], "inflate": 0.01, "uv": [46, 38]}
]
},
{
"name": "tongue3",
"parent": "tongue2",
"pivot": [0, 50.5, -2],
"cubes": [
{"origin": [-1, 50.5, -2], "size": [2, 1, 0], "uv": [37, 43]},
{"origin": [-0.5, 51.5, -2], "size": [1, 1, 0], "uv": [45, 43]}
]
},
{
"name": "arms",
"parent": "torso2",
@@ -418,14 +403,6 @@
{"origin": [-21.5, 22, -1.5], "size": [3, 2, 3], "inflate": 0.1, "uv": [0, 58]}
]
},
{
"name": "locator_item",
"parent": "hand_right",
"pivot": [-21.6, 23, 0],
"locators": {
"item": [-21.6, 23, 0]
}
},
{
"name": "locator_hand_primary",
"parent": "hand_right",
@@ -936,14 +913,6 @@
{"origin": [0, 9.5, 58.5], "size": [0, 13, 7], "pivot": [0, 14.45, 62], "rotation": [0, 90, 0], "uv": [0, 92]}
]
},
{
"name": "locator_fire",
"parent": "fire2",
"pivot": [0, 11, 62],
"locators": {
"fire": [0, 11, 62]
}
},
{
"name": "legs",
"parent": "body",
@@ -976,10 +945,9 @@
{
"name": "locator_foot_primary",
"parent": "foot_right",
"pivot": [-9, 1.5, -5],
"rotation": [90, 0, 0],
"pivot": [-9, 1.5, -7],
"locators": {
"foot_primary": [-9, 1.5, -5]
"foot_primary": [-9, 1.5, -7]
}
},
{
@@ -1041,10 +1009,9 @@
{
"name": "locator_foot_secondary",
"parent": "foot_left",
"pivot": [9, 1.5, -5],
"rotation": [90, 0, 0],
"pivot": [9, 1.5, -7],
"locators": {
"foot_secondary": [9, 1.5, -5]
"foot_secondary": [9, 1.5, -7]
}
},
{
@@ -405,6 +405,14 @@
"cubes": [
{"origin": [-5, 6.5, 25.92], "size": [10, 3, 0], "uv": [77, 7]}
]
},
{
"name": "locator_seat_1",
"parent": "body",
"pivot": [0, 0, 0],
"locators": {
"seat_1": [0, 17.5, 4]
}
}
]
}
@@ -7,8 +7,8 @@
"texture_width": 128,
"texture_height": 128,
"visible_bounds_width": 6,
"visible_bounds_height": 4.5,
"visible_bounds_offset": [0, 1.75, 0]
"visible_bounds_height": 5,
"visible_bounds_offset": [0, 1.5, 0]
},
"bones": [
{
@@ -480,6 +480,14 @@
{"origin": [-4.5, 24.5, 26.5], "size": [9, 9, 7], "uv": [66, 109]}
]
},
{
"name": "locator_seat_1",
"parent": "torso",
"pivot": [0, 0, 0],
"locators": {
"seat_1": [0, 30, 0]
}
},
{
"name": "legs",
"parent": "body",
@@ -99,7 +99,14 @@
"poseTypes": ["FLY"],
"isBattle": false,
"condition": "!q.is_gliding",
"animations": ["q.look('head_ai')", "q.bedrock('charizard', 'air_fly')"],
"animations": [
"q.look('head_ai')",
"q.bedrock('charizard', 'air_fly')",
{
"condition": "q.is_ridden",
"animation": "q.bedrock('charizard', 'ride_air_look')"
}
],
"quirks": [
"q.bedrock_quirk('charizard', 'blink')",
"q.bedrock_quirk('charizard', 'air_fly_quirk')"
@@ -109,7 +116,14 @@
"poseTypes": ["FLY"],
"isBattle": false,
"condition": "q.is_gliding",
"animations": ["q.look('head_ai')", "q.bedrock('charizard', 'air_glide_TEST')"],
"animations": [
"q.look('head_ai')",
"q.bedrock('charizard', 'air_glide_TEST')",
{
"condition": "q.is_ridden",
"animation": "q.bedrock('charizard', 'ride_air_look')"
}
],
"quirks": [
"q.bedrock_quirk('charizard', 'blink')"
]
@@ -0,0 +1,63 @@
{
"portraitScale": 0.89,
"portraitTranslation": [-0.17,2.04,0],
"profileScale": 0.37,
"profileTranslation": [0,1.14,0],
"rootBone": "kangaskhan",
"animations": {
"cry": "q.bedrock_stateful('kangaskhan', 'cry')",
"recoil": "q.bedrock_stateful('kangaskhan', 'recoil')"
},
"poses": {
"battle-standing": {
"poseTypes": [
"STAND"
],
"isBattle": true,
"animations": [
"q.look('kid_head')",
"q.bedrock('kangaskhan', 'battle_idle')"
],
"quirks": [
"q.bedrock_quirk('kangaskhan', 'blink')"
]
},
"standing": {
"poseTypes": [
"STAND",
"NONE",
"PORTRAIT",
"PROFILE"
],
"isBattle": false,
"animations": [
"q.look('kid_head')",
"q.bedrock('kangaskhan', 'ground_idle')"
],
"quirks": [
"q.bedrock_quirk('kangaskhan', 'blink')"
]
},
"walking": {
"poseTypes": [
"WALK",
"SWIM"
],
"animations": [
"q.look('kid_head')",
"q.bedrock('kangaskhan', 'ground_walk')"
],
"quirks": [
"q.bedrock_quirk('kangaskhan', 'blink')"
]
},
"sleep": {
"poseTypes": [
"SLEEP"
],
"animations": [
"q.bedrock('kangaskhan', 'sleep')"
]
}
}
}
@@ -4,6 +4,18 @@
"profileScale": 0.28,
"profileTranslation": [ 0, 1.26, 0 ],
"rootBone": "tropius",
"seatToCameraOffset": {
"seat_1": [
0,
5,
10
],
"seat_1_reverse": [
0,
2,
4
]
},
"animations": {
"faint": "q.bedrock_primary('tropius', 'faint', q.curve('one'))",
"cry": "q.bedrock_stateful('tropius', 'cry')",
@@ -139,8 +139,7 @@
"poseTypes": ["FLY"],
"animations": ["q.look('head')", "q.bedrock('garchomp', 'air_fly')"],
"quirks": [
"q.bedrock_quirk('garchomp', 'blink')",
"q.bedrock_quirk('garchomp', q.array('air_fly_quirk1', 'air_fly_quirk2'), 5, 10, 1)"
"q.bedrock_quirk('garchomp', 'blink')"
],
"transformedParts": [
{
@@ -0,0 +1,36 @@
{
"portraitScale": 1.5,
"portraitTranslation": [-1.0, 1.76, 0.0],
"profileScale": 0.5,
"profileTranslation": [0.0, 1.0, 0.0],
"rootBone": "mudsdale",
"animations": {
"cry": "q.bedrock_stateful('mudsdale', 'cry')"
},
"poses": {
"sleep": {
"poseName": "sleep",
"poseTypes": ["SLEEP"],
"animations": ["q.bedrock('mudsdale', 'sleep')"]
},
"standing": {
"poseName": "standing",
"poseTypes": ["STAND", "FLOAT", "NONE", "PORTRAIT", "PROFILE"],
"animations": [
"q.look('head')",
"q.bedrock('mudsdale', 'ground_idle')",
"q.bedrock_stateful('mudsdale', 'blink')"
]
},
"walk": {
"poseName": "walk",
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.look('head')",
"q.bedrock('mudsdale', 'ground_walk')",
"q.bedrock_stateful('mudsdale', 'blink')"
]
}
}
}
@@ -1,28 +1,58 @@
{
"portraitScale": 1.7,
"portraitTranslation": [-0.07, 2.95, 0],
"profileScale": 0.33,
"profileTranslation": [0, 1.23, 0],
"rootBone": "cinderace",
"animations": {
"cry": "q.bedrock_stateful('cinderace', 'cry')"
},
"poses": {
"standing": {
"poseName": "standing",
"poseTypes": ["STAND", "FLOAT", "PORTRAIT", "PROFILE", "NONE"],
"animations": ["q.bedrock('cinderace', 'ground_idle')"],
"quirks": ["q.bedrock_quirk('cinderace', 'blink')"]
"portraitScale": 1.5,
"portraitTranslation": [-0.13, 2.74, 0],
"profileScale": 0.37,
"profileTranslation": [0, 1.22, 0],
"rootBone": "cinderace",
"animations": {
"faint": "q.bedrock_primary('cinderace', math.random(0, 1) < 0.25 ? 'faint2' : 'faint', q.curve('one'))",
"cry": "q.bedrock_stateful('cinderace', 'cry')",
"recoil": "q.bedrock_stateful('cinderace', 'recoil')",
"physical": "q.bedrock_primary('cinderace', 'physical', q.curve('symmetrical'))",
"special": "q.bedrock_primary('cinderace', 'special', q.curve('symmetrical'))",
"status": "q.bedrock_primary('cinderace', 'status', q.curve('symmetrical'))"
},
"walking": {
"poseName": "walking",
"poseTypes": ["WALK", "SWIM"],
"animations": [
"q.bedrock('cinderace', 'ground_idle')",
"q.biped_walk(0.66, 0.6, 'leg_left0', 'leg_right0')",
"q.bimanual_swing(0.66, 0.6, 'arm_left', 'arm_right')"
],
"quirks": ["q.bedrock_quirk('cinderace', 'blink')"]
"poses": {
"battle-standing": {
"poseTypes": ["STAND"],
"isBattle": true,
"animations": [
"q.look('head')",
"q.bedrock('cinderace', 'battle_idle')"
],
"namedAnimations": {
"cry": "q.bedrock_primary('cinderace', 'battle_cry', q.curve('one'))"
},
"quirks": ["q.bedrock_quirk('cinderace', 'blink')"]
},
"standing": {
"poseTypes": ["STAND", "NONE", "PORTRAIT", "PROFILE"],
"isBattle": false,
"animations": [
"q.look('head')",
"q.bedrock('cinderace', 'ground_idle')"
],
"quirks": [
"q.bedrock_quirk('cinderace', 'blink')"
],
"transitions": {
"battle-standing": "q.bedrock_primary('cinderace', 'battle_intro'), q.curve('symmetrical'))"
}
},
"walking": {
"poseTypes": ["WALK"],
"animations": [
"q.look('head')",
"q.bedrock('cinderace', 'ground_walk')"
],
"quirks": ["q.bedrock_quirk('cinderace', 'blink')"]
},
"sleeping": {
"poseTypes": ["SLEEP"],
"namedAnimations": {
"cry": "q.bedrock_stateful('dummy', 'cry')"
},
"animations": ["q.bedrock('cinderace', 'sleep')"]
}
}
}
}
}
@@ -1,17 +1,19 @@
{
"species": "cobblemon:kangaskhan",
"order": 0,
"variations": [
{
"aspects": [],
"poser": "cobblemon:kangaskhan",
"model": "cobblemon:kangaskhan.geo",
"texture": "cobblemon:textures/pokemon/0115_kangaskhan/kangaskhan.png",
"layers": []
},
{
"aspects": ["shiny"],
"texture": "cobblemon:textures/pokemon/0115_kangaskhan/kangaskhan_shiny.png"
}
]
}
"species": "cobblemon:kangaskhan",
"order": 0,
"variations": [
{
"aspects": [],
"poser": "cobblemon:kangaskhan",
"model": "cobblemon:kangaskhan.geo",
"texture": "cobblemon:textures/pokemon/0115_kangaskhan/kangaskhan.png",
"layers": []
},
{
"aspects": [
"shiny"
],
"texture": "cobblemon:textures/pokemon/0115_kangaskhan/kangaskhan_shiny.png"
}
]
}
@@ -7,11 +7,20 @@
"poser": "cobblemon:cinderace",
"model": "cobblemon:cinderace.geo",
"texture": "cobblemon:textures/pokemon/0815_cinderace/cinderace.png",
"layers": []
"layers": [
{
"name": "emissive",
"emissive": true,
"texture": "cobblemon:textures/pokemon/0815_cinderace/cinderace_emissive.png",
"translucent": true
}
]
},
{
"aspects": ["shiny"],
"aspects": [
"shiny"
],
"texture": "cobblemon:textures/pokemon/0815_cinderace/cinderace_shiny.png"
}
]
}
}
@@ -419,12 +419,12 @@
"cobblemon.fossil.sail": "Flosse",
"cobblemon.fossil.skull": "Kopf",
"cobblemon.fossilmachine.protected": "Dieses Fossil gehört %s!",
"itemGroup.cobblemon.blocks": "Blöcke",
"itemGroup.cobblemon.blocks": "Cobblemon: Blöcke",
"itemGroup.cobblemon.pokeball": "Pokébälle",
"itemGroup.cobblemon.agriculture": "Agrikultur",
"itemGroup.cobblemon.consumables": "Verwendbare Items",
"itemGroup.cobblemon.held_item": "Getragene Items",
"itemGroup.cobblemon.evolution_item": "Evolution Items",
"itemGroup.cobblemon.agriculture": "Cobblemon: Agrikultur",
"itemGroup.cobblemon.consumables": "Cobblemon: Verwendbare Items",
"itemGroup.cobblemon.held_item": "Cobblemon: Getragene Items",
"itemGroup.cobblemon.evolution_item": "Cobblemon: Evolution Items",
"itemGroup.cobblemon.archaeology": "Archaeology",
"block.cobblemon.apricorn_log": "Aprikoko Stamm",
"block.cobblemon.stripped_apricorn_log": "Entrindeter Aprikoko Stamm",
@@ -943,7 +943,7 @@
"cobblemon.battle.side_subject.ally": "dein",
"cobblemon.battle.side_subject.opponent": "der feindlicher",
"cobblemon.battle.transform": "%1$s transformed into %2$s",
"cobblemon.battle.endability": "%1$s's Ability was suppressed!",
"cobblemon.battle.endability": "Die Fähigkeit von %1$s wirkt nicht mehr!",
"cobblemon.battle.weather.raindance.start": "Es fängt an zu regnen!",
"cobblemon.battle.weather.raindance.upkeep": "Der strömende Regen lässt nicht nach!",
"cobblemon.battle.weather.raindance.end": "Der Regen lässt nach!",
@@ -3674,7 +3674,7 @@
"cobblemon.move.zippyzap": "Britzelturbo",
"cobblemon.move.zippyzap.desc": "Ein stürmischer Blitz-Angriff mit hoher Erstschlag- und Volltrefferquote.",
"cobblemon.species.bulbasaur.name": "Bisasam",
"cobblemon.species.bulbasaur.desc": "Nach der Geburt nimmt es für eine Weile Nährstoffe über den Samen auf seinem Rücken auf.",
"cobblemon.species.bulbasaur.desc": "Obwohl selten und schwer fassbar in der Wilderniss, ist Bisasam dennoch unter Anfängeren beliebt für seine ruhige, gelassane Natur. Die Knospe auf seinem Rücken ist noch unterentwickelt, also braucht dieses Pokémon hohe Mengen an Energie, um dessen Wachstum zu fördern. Folglich ist es oft in Kompostern zu finden, wo es nach wertvollem Dünger sucht.",
"cobblemon.species.ivysaur.name": "Bisaknosp",
"cobblemon.species.ivysaur.desc": "Die Sonne macht es stärker. Die Knospe auf seinem Rücken wächst unter dem Einfluss von Sonnenlicht.",
"cobblemon.species.venusaur.name": "Bisaflor",
@@ -6237,8 +6237,8 @@
"cobblemon.challenge.multi.team_request.accept.sender": "Du hast %1$ss Einladung angenommen!",
"key.cobblemon.pokedex": "Öffne Pokédex",
"cobblemon.challenge.multi.team_reject.existing_team": "Du bist schon teil eines Teams!",
"cobblemon.challenge.multi.decline.receiver": "%1$s hat die Herausforderung abgelehnt...",
"cobblemon.challenge.decline.sender": "Du hast %1$s's Herausforderung abgelehnt...",
"cobblemon.challenge.multi.decline.receiver": "Dein team hat %1$s's Herausforderung abgelehnt.",
"cobblemon.challenge.decline.sender": "%1$s hat deine Herausforderung abgelehnt...",
"cobblemon.ui.pokenav.narrator.backbutton": "PokéNav Knopf gedrückt",
"cobblemon.fishing_bait_effect_header": "Fisch Köder Effekte:",
"cobblemon.fishing_bait_effects.iv.tooltip": "%1$s%% - %2$s IV +%3$s",
@@ -6253,17 +6253,17 @@
"cobblemon.ui.pokedex.info.form.maushold-family-four": "Familie",
"cobblemon.ui.starter.narrator.backbutton": "Zurück-Knopf gedrückt",
"cobblemon.pokerod.bobber": "Schwimmer: %1$s",
"cobblemon.pokerod.bait": "Köder: %1$s x%2$s",
"cobblemon.pokerod.bait": "Köder: %1$s ×%2$s",
"block.cobblemon.lectern": "Pult",
"cobblemon.fishing_bait_effects.level_raise.tooltip": "%1$s%% - Erhöhe Level +%3$s",
"cobblemon.fishing_bait_effects.shiny_reroll.tooltip": "%1$sx - %3$sx Shiny Chance",
"cobblemon.fishing_bait_effects.shiny_reroll.tooltip": "%1$s%% - %3$s× Shiny Chance",
"entity.minecraft.villager.cobblemon.nurse": "Schwester",
"cobblemon.fishing_bait_effects.friendship.tooltip": "%1$s%% - Erhöht Freundschaft +%3$s",
"cobblemon.ui.stash.gold": "Münzlager",
"cobblemon.ui.interact.accept": "Akzeptieren",
"cobblemon.ui.interact.decline": "Ablehnen",
"cobblemon.ui.interact.team_request": "Zusammenschließen",
"cobblemon.ui.interact.too_far": "Das Ziel ist zu weit entfernt",
"cobblemon.ui.interact.too_far": "Das Ziel ist zu weit entfernt!",
"cobblemon.ui.pokedex.scan.registered_suffix": "%1$s registriert",
"cobblemon.ui.pokedex.scan.trainer_owned": "Trainerbesitz",
"cobblemon.ui.pokedex.info.drops_display": "%1$s %2$s",
@@ -6291,7 +6291,7 @@
"cobblemon.challenge.multi.sender": "Du hast %1$s (%2$s Mitglieder) zu einen Multikampf herausgefordert!",
"cobblemon.challenge.multi.receiver": "%1$s (%2$s Mitglieder) hat dich zu einen Multikampf herausgefordert!",
"cobblemon.challenge.multi.decline.disband": "Das generische Team wurde aufgelöst, Multikampf abgebrochen...",
"cobblemon.challenge.multi.decline.sender": "%1$s hat %2$s's Multikampf Herausforderung abgelehnt...",
"cobblemon.challenge.multi.decline.sender": "%1$s's team hat die Herausforderung abgelehnt...",
"cobblemon.challenge.multi.decline.sender.personal": "Du hast %1$s's Multikampf Herausforderung abgelehnt...",
"cobblemon.challenge.decline.receiver": "%1$s hat deine Herausforderung abgelehnt...",
"cobblemon.command.freezepokemon.non_pokemon": "Du musst auf ein Pokémon zielen.",
@@ -6316,5 +6316,16 @@
"cobblemon.ui.pokedex.info.form.hisui": "Hisui",
"cobblemon.ui.pokedex.info.form.region-bias-hisui": "Hisui-Einfluss",
"cobblemon.ui.pokedex.info.form.region-bias-paldea": "Paldea-Einfluss",
"cobblemon.ui.pokedex.info.form.no_ice": "Wohlfühlkopf"
"cobblemon.ui.pokedex.info.form.no_ice": "Wohlfühlkopf",
"cobblemon.ui.pokedex.info.form.tree-warped": "Wirr",
"cobblemon.config.ui.starters": "Starter",
"cobblemon.battle.start.flashfire": "Die Stärke der Feuer-Attacken von %1$s wurde erhöht!",
"cobblemon.battle.activate.mummy": "%1$s hat die Fähigkeit Mumie angenommen!",
"cobblemon.battle.activate.allyswitch": "%1$s und %2$s haben den Platz getauscht!",
"cobblemon.battle.activate.insomnia": "Das Pokémon leidet von Insomnia, und kann nicht Einschlafen.",
"cobblemon.battle.activate.custapberry": "Dank seiner Eipfelbeere kann %1$s schneller handeln als sonst!",
"cobblemon.battle.enditem.ejectpack": "%1$s wird dank Fluchttasche ausgewechselt!",
"item.cobblemon.galarica_nuts": "Galarnüsse",
"cobblemon.ui.pokedex.info.form.tree-crimson": "Karmesin",
"cobblemon.battle.enditem.focussash": "%1$s hält mithilfe seinem Fokusgurt durch!"
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -280,7 +280,7 @@
"item.cobblemon.lure_ball.tooltip": "Taux de capture ×2 sur un Pokémon de type Eau, jusqu'à ce que la pêche soit ajoutée",
"item.cobblemon.heavy_ball.tooltip": "Taux de capture ×1 à ×4, augmente selon la masse de la cible",
"item.cobblemon.love_ball.tooltip": "Taux de capture ×2,5 si la cible est du genre opposé du Pokémon du joueur, ×8 s'ils sont aussi de la même espèce",
"item.cobblemon.friend_ball.tooltip": "Taux de capture ×1, le Pokémon attrapé commencera avec 150 de bonheur",
"item.cobblemon.friend_ball.tooltip": "Taux de capture ×1, le Pokémon attrapé commencera avec 150 de Bonheur",
"item.cobblemon.moon_ball.tooltip": "Taux de capture ×1 à ×4, augmente durant la nuit en fonction de la proximité de la pleine lune",
"item.cobblemon.sport_ball.tooltip": "Taux de capture ×1,5",
"item.cobblemon.net_ball.tooltip": "Taux de capture ×3 sur un Pokémon de type Eau ou Insecte",
@@ -288,7 +288,7 @@
"item.cobblemon.nest_ball.tooltip": "Taux de capture ×1 à ×4, selon le niveau de la cible en allant du niveau 30 à 1",
"item.cobblemon.repeat_ball.tooltip": "Taux de capture ×1, jusqu'à ce que le Pokédex soit ajouté",
"item.cobblemon.timer_ball.tooltip": "Taux de capture ×1 à ×4, augmente à chaque tour passé, jusqu'au tour 10",
"item.cobblemon.luxury_ball.tooltip": "Taux de capture ×1, le Pokémon attrapé gagne du bonheur deux fois plus rapidement",
"item.cobblemon.luxury_ball.tooltip": "Taux de capture ×1, le Pokémon attrapé gagne du Bonheur deux fois plus rapidement",
"item.cobblemon.premier_ball.tooltip": "Taux de capture ×1",
"item.cobblemon.dusk_ball.tooltip": "Taux de capture ×3 si la cible est dans un niveau de lumière de 0, ×1,5 dans un niveau de lumière de 1 à 7",
"item.cobblemon.heal_ball.tooltip": "Taux de capture ×1, restaure tous les PV, PP et les changements de statut lors de la capture",
@@ -696,13 +696,13 @@
"item.cobblemon.kelpsy_berry": "Baie Alga",
"item.cobblemon.kelpsy_berry.tooltip": "Ne peut pas être consommée par le porteur",
"item.cobblemon.lansat_berry": "Baie Lansat",
"item.cobblemon.lansat_berry.tooltip": "Augmente le taux de coups critiques lorsque le porteur a moins d'1/4 de ses PV max",
"item.cobblemon.lansat_berry.tooltip": "Augmente le Taux de critiques lorsque le porteur a moins d'1/4 de ses PV max",
"item.cobblemon.leppa_berry": "Baie Mepo",
"item.cobblemon.leppa_berry.tooltip": "Restaure 10 PP de la première capacité qui atteint 0 PP",
"item.cobblemon.liechi_berry": "Baie Lichii",
"item.cobblemon.liechi_berry.tooltip": "Augmente l'Attaque de 1 niveau lorsque le porteur a moins d'1/4 de ses PV max",
"item.cobblemon.lum_berry": "Baie Prine",
"item.cobblemon.lum_berry.tooltip": "Soigne tous les problèmes de statut du porteur",
"item.cobblemon.lum_berry.tooltip": "Le porteur se soigne s'il a un problème de statut non volatile ou s'il est confus",
"item.cobblemon.mago_berry": "Baie Mago",
"item.cobblemon.mago_berry.tooltip": "Restaure 1/3 des PV lorsque le porteur a moins d'1/4 de ses PV max ; rend confus si le Pokémon n'aime pas les Baies sucrées",
"item.cobblemon.magost_berry": "Baie Mangou",
@@ -781,11 +781,11 @@
"cobblemon.command.teach": "%1$s de %2$s a appris %3$s.",
"cobblemon.command.teach.already_knows": "%1$s connait déjà %2$s !",
"cobblemon.command.healpokemon.heal": "L'équipe de %1$s est complètement soignée.",
"cobblemon.command.friendship": "%1$s a %2$s de bonheur.",
"cobblemon.command.friendship": "%1$s a %2$s de Bonheur.",
"cobblemon.command.givepokemon.nospecies": "Erreur : Vous devez inclure le nom d'un Pokémon ou 'random'",
"cobblemon.command.spawnpokemon.nospecies": "Erreur : Vous devez inclure le nom d'un Pokémon ou 'random'",
"cobblemon.command.held_item": "%2$s de %1$s a récupéré l'objet %3$s.",
"cobblemon.command.pokeheal.in_battle": "Vous ne pouvez pas soigner votre équipe pendant un combat !",
"cobblemon.command.pokeheal.in_battle": "Vous ne pouvez pas soigner votre équipe pendant un Combat !",
"cobblemon.command.spawnpokemonfrompool": "%1$s est apparu dans les environs.",
"cobblemon.command.spawnpokemonfrompool.unable_to_spawn": "Impossible de faire apparaître un Pokémon.",
"cobblemon.command.pokebox.box_does_not_exist": "Ce joueur n'a pas de boîte %1$s.",
@@ -827,7 +827,7 @@
"advancements.cobblemon.first_shiny_catch.description": "Attrapez votre premier Pokémon chromatique",
"advancements.cobblemon.healing_machine": "Repos bien mérité",
"advancements.cobblemon.healing_machine.description": "Attendez que la machine de soin soit chargée, puis soignez votre équipe",
"advancements.cobblemon.obtain_leek": "Que quelqu'un soigne le bateau !",
"advancements.cobblemon.obtain_leek": "Mare de Poireauter",
"advancements.cobblemon.obtain_leek.description": "Obtenez un Soignon, une plante sauvage qui pousse dans l'eau douce",
"advancements.cobblemon.medicinal_brew": "Apothicaire local",
"advancements.cobblemon.medicinal_brew.description": "Utilisez un Soignon pour confectionner la base de vos remèdes",
@@ -1533,7 +1533,7 @@
"tag.item.cobblemon.type_gems": "Types de joyaux",
"tag.item.cobblemon.feathers": "Plumes",
"tag.item.cobblemon.ability_changers": "Changeurs de talent",
"tag.item.cobblemon.held.is_friendship_booster": "Boosteurs de bonheur",
"tag.item.cobblemon.held.is_friendship_booster": "Boosteurs de Bonheur",
"cobblemon.ability.adaptability": "Adaptabilité",
"cobblemon.ability.adaptability.desc": "Quand le Pokémon utilise une capacité du même type que lui, le bonus de puissance qu’elle reçoit est encore plus important que normalement.",
"cobblemon.ability.aerilate": "Peau Céleste",
@@ -2251,7 +2251,7 @@
"cobblemon.move.blastburn": "Rafale Feu",
"cobblemon.move.blastburn.desc": "Une explosion ardente consume la cible. Le lanceur doit se reposer au tour suivant.",
"cobblemon.move.blazekick": "Pied Brûleur",
"cobblemon.move.blazekick.desc": "Le lanceur envoie un coup de pied au taux de critiques élevé. Peut aussi brûler la cible.",
"cobblemon.move.blazekick.desc": "Le lanceur envoie un coup de pied au Taux de critiques élevé. Peut aussi brûler la cible.",
"cobblemon.move.blazingtorque": "Couple Ardent",
"cobblemon.move.blazingtorque.desc": "A 30% de chance de brûler la cible.",
"cobblemon.move.bleakwindstorm": "Tempête Hivernale",
@@ -2655,7 +2655,7 @@
"cobblemon.move.focusblast": "Exploforce",
"cobblemon.move.focusblast.desc": "Le lanceur rassemble ses forces et laisse éclater son pouvoir. Peut aussi baisser la Défense Spéciale de l’ennemi.",
"cobblemon.move.focusenergy": "Puissance",
"cobblemon.move.focusenergy.desc": "Le lanceur prend une profonde inspiration et se concentre pour augmenter son taux de critiques.",
"cobblemon.move.focusenergy.desc": "Le lanceur prend une profonde inspiration et se concentre pour augmenter son Taux de critiques.",
"cobblemon.move.focuspunch": "Mitra-Poing",
"cobblemon.move.focuspunch.desc": "Le lanceur se concentre avant d’attaquer. Échoue s’il est touché avant d’avoir frappé.",
"cobblemon.move.followme": "Par Ici",
@@ -3207,7 +3207,7 @@
"cobblemon.move.poisonsting": "Dard-Venin",
"cobblemon.move.poisonsting.desc": "Un dard toxique qui transperce l’ennemi. Peut aussi l’empoisonner.",
"cobblemon.move.poisontail": "Queue-Poison",
"cobblemon.move.poisontail.desc": "Attaque à taux de critiques élevé. Peut aussi empoisonner l’ennemi.",
"cobblemon.move.poisontail.desc": "Attaque à Taux de critiques élevé. Peut aussi empoisonner l’ennemi.",
"cobblemon.move.pollenpuff": "Boule Pollen",
"cobblemon.move.pollenpuff.desc": "Utilisée sur l’ennemi, envoie une boule explosive qui fait des dégâts ; sur un allié, donne du bon pollen nutritif qui fait récupérer des PV.",
"cobblemon.move.poltergeist": "Esprit Frappeur",
@@ -3471,7 +3471,7 @@
"cobblemon.move.skullbash": "Coud’Krâne",
"cobblemon.move.skullbash.desc": "Le lanceur baisse la tête pour augmenter sa Défense au premier tour et percuter l’ennemi au second.",
"cobblemon.move.skyattack": "Piqué",
"cobblemon.move.skyattack.desc": "Une attaque en deux tours au taux de critiques élevé. Peut aussi apeurer l’ennemi.",
"cobblemon.move.skyattack.desc": "Une attaque en deux tours au Taux de critiques élevé. Peut aussi apeurer l’ennemi.",
"cobblemon.move.skydrop": "Chute Libre",
"cobblemon.move.skydrop.desc": "Le lanceur emmène l’ennemi dans les airs au premier tour et le lâche dans le vide au second. L’ennemi saisi ne peut pas attaquer.",
"cobblemon.move.skyuppercut": "Stratopercut",
@@ -6236,7 +6236,7 @@
"cobblemon.move.gmaxcannonade.desc": "Une attaque de type Eau que seul un Tortank Gigamax peut utiliser. Inflige des dégâts à la cible pendant quatre tours.",
"cobblemon.move.gmaxcentiferno": "Combustion G-Max",
"cobblemon.move.gmaxchistrike": "Frappe G-Max",
"cobblemon.move.gmaxchistrike.desc": "Une attaque de type Combat que seul un Mackogneur Gigamax peut utiliser. Augmente le taux de critiques du lanceur et de ses alliés.",
"cobblemon.move.gmaxchistrike.desc": "Une attaque de type Combat que seul un Mackogneur Gigamax peut utiliser. Augmente le Taux de critiques du lanceur et de ses alliés.",
"cobblemon.move.gmaxcuddle": "Câlin G-Max",
"cobblemon.move.gmaxdepletion": "Usure G-Max",
"cobblemon.move.gmaxdrumsolo": "Percussion G-Max",
@@ -6289,7 +6289,7 @@
"cobblemon.move.shatteredpsyche.desc": "Le Pokémon utilise la Force Z pour manipuler l'adversaire et lui infliger de sérieux dégâts. La puissance varie selon celle de la capacité originale.",
"cobblemon.move.supersonicskystrike.desc": "Le Pokémon utilise la Force Z pour s'envoler très haut dans le ciel avant de plonger sur l'adversaire. La puissance varie selon celle de la capacité originale.",
"cobblemon.move.twinkletackle.desc": "Le Pokémon utilise la Force Z pour créer une dimension irréelle où l'adversaire est à sa merci. La puissance varie selon celle de la capacité originale.",
"cobblemon.move.10000000voltthunderbolt.desc": "Le Pikachu à casquette utilise la Force Z pour augmenter sa puissance électrique avant de la déchaîner sur la cible. Taux de critique élevé.",
"cobblemon.move.10000000voltthunderbolt.desc": "Le Pikachu à casquette utilise la Force Z pour augmenter sa puissance électrique avant de la déchaîner sur la cible. Taux de critiques élevé.",
"cobblemon.move.alloutpummeling.desc": "Le Pokémon utilise la Force Z pour créer une boule d'énergie qu'il projette sur l'adversaire. La puissance varie selon celle de la capacité originale.",
"cobblemon.move.blackholeeclipse.desc": "Le Pokémon utilise la Force Z pour rassembler l'énergie négative et y aspirer l'adversaire. La puissance varie selon celle de la capacité originale.",
"cobblemon.move.gmaxbefuddle": "Illusion G-Max",
@@ -6396,5 +6396,355 @@
"cobblemon.pokerod.bobber": "Flotteur : %1$s",
"cobblemon.pokerod.bait": "Appât : %1$s x%2$s",
"cobblemon.challenge.rule.level": "Tous niveau %1$s",
"cobblemon.pokedex.variation.wood": "Bois"
"cobblemon.pokedex.variation.wood": "Bois",
"cobblemon.pokerod.remove": "Clic-droit pour retirer l'âppat",
"item.cobblemon.galarica_nuts": "Branche Galanoa",
"item.cobblemon.metal_coat.tooltip_2": "Fait évoluer Onix en Steelix et Insécateur en Cizayox lorsqu'il est tenu pendant un échange",
"item.cobblemon.dubious_disc.tooltip": "Fait évoluer Porygon2 en Porygon-Z lorsqu'il est tenu pendant un échange",
"item.cobblemon.deep_sea_scale.tooltip_1": "Double la Défense Spéciale de Coquiperl",
"item.cobblemon.oval_stone.tooltip": "Fait évoluer Ptiravi en Leveinard lorsqu'il est tenu pendant la journée",
"item.cobblemon.reaper_cloth.tooltip": "Fait évoluer Téraclope en Noctunoir lorsqu'il est tenu pendant un échange",
"item.cobblemon.prism_scale.tooltip": "Fait évoluer Barpau en Milobellus lorsqu'il est tenu pendant un échange",
"item.cobblemon.sachet.tooltip": "Fait évoluer Fluvetin en Cocotine lorsqu'il est tenu pendant un échange",
"item.cobblemon.strawberry_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Fraise lorsqu'il est tenu pendant un échange",
"item.cobblemon.berry_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Baie",
"item.cobblemon.clover_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Trèfle",
"item.cobblemon.flower_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Fleur",
"item.cobblemon.ribbon_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Ruban",
"item.cobblemon.chipped_pot.tooltip": "Fait évoluer Théffroi forme Authentique en Polthégeist",
"item.cobblemon.cracked_pot.tooltip": "Fait évoluer Théffroi forme Contrefaçon en Polthégeist",
"item.cobblemon.star_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Étoile",
"cobblemon.pokerod.apply": "Clic-droit pour appliquer l'âppat",
"item.cobblemon.npc_editor": "Éditeur de PNJ",
"item.cobblemon.metal_coat.tooltip_1": "Augmente la puissance des capacités de type Acier",
"item.cobblemon.upgrade.tooltip": "Fait évoluer Porygon en Porygon2 lorsqu'il est tenu pendant un échange",
"item.cobblemon.whipped_dream.tooltip": "Fait évoluer Sucroquin en Cupcanaille lorsqu'il est tenu pendant un échange",
"item.cobblemon.protector.tooltip": "Fait évoluer Rhinoféros en Rhinastoc lorsqu'il est tenu pendant un échange",
"item.cobblemon.love_sweet.tooltip": "Fait évoluer Crémy en Charmilly forme Cœur",
"item.cobblemon.link_cable.tooltip": "Fait évoluer les Pokémon qui nécessitent un échange",
"item.cobblemon.dragon_scale.tooltip": "Fait évoluer Hypocéan en Hyporoi lorsqu'il est tenu pendant un échange",
"item.cobblemon.kings_rock.tooltip_1": "Les capacités du porteur peuvent parfois apeurer l'adversaire",
"item.cobblemon.kings_rock.tooltip_2": "Fait évoluer Têtarte en Tarpaud et Ramoloss en Roigada lorsqu'elle est tenue pendant un échange",
"item.cobblemon.deep_sea_scale.tooltip_2": "Fait évoluer Coquiperl en Rosabyss lorsqu'elle est tenue pendant un échange",
"item.cobblemon.deep_sea_tooth.tooltip_1": "Augmente l'Attaque Spéciale de Coquiperl",
"item.cobblemon.deep_sea_tooth.tooltip_2": "Fait évoluer Coquiperl en Serpang lorsqu'elle est tenue pendant un échange",
"item.cobblemon.electirizer.tooltip": "Fait évoluer Élektek en Élekable lorsqu'il est tenu pendant un échange",
"item.cobblemon.magmarizer.tooltip": "Fait évoluer Magmar en Maganon lorsqu'il est tenu pendant un échange",
"item.cobblemon.masterpiece_teacup.tooltip": "Fait évoluer Poltchageist Forme Onéreuse en Théffroyable Exceptionnelle",
"item.cobblemon.unremarkable_teacup.tooltip": "Fait évoluer Poltchageist Imitation en Théffroyable Médiocre",
"item.cobblemon.sweet_apple.tooltip": "Fait évoluer Verpom en Dratatin",
"item.cobblemon.tart_apple.tooltip": "Fait évoluer Verpom en Pomdrapi",
"item.cobblemon.galarica_cuff.tooltip": "Fait évoluer Ramoloss de Galar en Flagadoss de Galar",
"item.cobblemon.galarica_wreath.tooltip": "Fait évoluer Ramoloss de Galar en Roigada de Galar",
"item.cobblemon.black_augurite.tooltip": "Fait évoluer Insécateur en Hachécateur",
"item.cobblemon.peat_block.tooltip": "Fait évoluer Ursaring en Ursaking lorsqu'il est utilisé pendant une pleine lune la nuit",
"item.cobblemon.dawn_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.dusk_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.fire_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.exp_candy_xl.tooltip": "Augmente l'expérience d'un Pokémon de 30 000 points d'Exp",
"item.cobblemon.carbos.tooltip": "Augmente les EVs de Vitesse du Pokémon de 10",
"item.cobblemon.hp_up.tooltip": "Augmente les EVs de PV du Pokémon de 10",
"item.cobblemon.iron.tooltip": "Augmente les EVs de Défense du Pokémon de 10",
"item.cobblemon.protein.tooltip": "Augmente les EVs d'Attaque du Pokémon de 10",
"item.cobblemon.potion.tooltip": "Restaure 60 PV d'un Pokémon",
"item.cobblemon.super_potion.tooltip": "Restaure 100 PV d'un Pokémon",
"item.cobblemon.hyper_potion.tooltip": "Restaure 150 PV d'un Pokémon",
"item.cobblemon.ice_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.leaf_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.shiny_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.sun_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.water_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.rare_candy.tooltip": "Permet à un Pokémon de monter d'un niveau",
"item.cobblemon.exp_candy_xs.tooltip": "Augmente l'expérience d'un Pokémon de 100 points d'Exp",
"item.cobblemon.exp_candy_m.tooltip": "Augmente l'expérience d'un Pokémon de 3000 points d'Exp",
"item.cobblemon.exp_candy_l.tooltip": "Augmente l'expérience d'un Pokémon de 10 000 points d'Exp",
"item.cobblemon.full_restore.tooltip": "Restaure totalement les PV et soigne tous les problèmes de statut d'un Pokémon",
"item.cobblemon.health_feather.tooltip": "Augmente les EVs de PV du Pokémon de 1",
"item.cobblemon.resist_feather.tooltip": "Augmente les EVs de Défense du Pokémon de 1",
"item.cobblemon.genius_feather.tooltip": "Augmente les EVs d'Attaque Spéciale du Pokémon de 1",
"item.cobblemon.clever_feather.tooltip": "Augmente les EVs de Défense Spéciale du Pokémon de 1",
"item.cobblemon.swift_feather.tooltip": "Augmente les EVs de Vitesse du Pokémon de 1",
"item.cobblemon.ability_patch.tooltip": "Change le talent du Pokémon en son talent caché",
"item.cobblemon.lonely_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Solo",
"item.cobblemon.adamant_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Rigide",
"item.cobblemon.bold_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Assuré",
"item.cobblemon.impish_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Malin",
"item.cobblemon.relaxed_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Relax",
"item.cobblemon.modest_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Modeste",
"item.cobblemon.mild_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Doux",
"item.cobblemon.quiet_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Discret",
"item.cobblemon.calm_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Calme",
"item.cobblemon.gentle_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Gentil",
"item.cobblemon.sassy_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Malpoli",
"item.cobblemon.timid_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Timide",
"item.cobblemon.hasty_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Pressé",
"item.cobblemon.naive_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Naïf",
"item.cobblemon.serious_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Sérieux",
"item.cobblemon.ability_shield.tooltip": "Le talent du Pokémon tenant cet objet ne peut pas être changé par un adversaire",
"item.cobblemon.absorb_bulb.tooltip_2": "Consommé après usage",
"item.cobblemon.air_balloon.tooltip_2": "Éclate quand touché par une attaque",
"item.cobblemon.assault_vest.tooltip": "Augmente la Déf. Spé. du porteur mais empêche l'utilisation des capacités de statut",
"item.cobblemon.auspicious_armor.tooltip": "Fait évoluer Charbambin en Carmadura",
"item.cobblemon.malicious_armor.tooltip": "Fait évoluer Charbambin en Malvalame",
"item.cobblemon.binding_band.tooltip": "Augmente la puissance des attaques immobilisantes",
"item.cobblemon.black_glasses.tooltip": "Augmente la puissance des capacités de type Ténèbres",
"item.cobblemon.blunder_policy.tooltip_2": "Consommée après usage",
"item.cobblemon.cell_battery.tooltip_2": "Consommée après usage",
"item.cobblemon.charcoal_stick.tooltip": "Augmente la puissance des capacités de type Feu",
"item.cobblemon.choice_scarf.tooltip": "Ce bandeau augmente la Vitesse, mais ne permet d'utiliser qu'une seule capacité",
"item.cobblemon.choice_specs.tooltip": "Ce bandeau augmente l'Attaque Spéciale, mais ne permet d'utiliser qu'une seule capacité",
"item.cobblemon.cleanse_tag.tooltip": "N'a aucun effet",
"item.cobblemon.covert_cloak.tooltip": "Le porteur est immunisé aux effets additionnels des capacités qu'il reçoit",
"item.cobblemon.dragon_fang.tooltip": "Augmente la puissance des capacités de type Dragon",
"item.cobblemon.eject_pack.tooltip_2": "Consommé après usage",
"item.cobblemon.electric_seed.tooltip": "Augmente d'un cran la Défense du porteur lorsque le terrain est couvert d'un Champ Électrifié",
"item.cobblemon.exp_share.tooltip": "Permet au porteur de recevoir de l'Exp. sans participer au combat",
"item.cobblemon.expert_belt.tooltip": "Augmente les dégâts des capacités super efficaces",
"item.cobblemon.thunder_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.exp_candy_s.tooltip": "Augmente l'expérience d'un Pokémon de 800 points d'Exp",
"item.cobblemon.lax_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Lâche",
"item.cobblemon.black_sludge.tooltip": "Si le porteur est de type Poison, ses PV se régénèrent progressivement pendant le combat. Il inflige des dégâts à tout autre type",
"item.cobblemon.choice_band.tooltip": "Ce bandeau augmente l'Attaque, mais ne permet d'utiliser qu'une seule capacité",
"item.cobblemon.everstone.tooltip": "Empêche le porteur d'évoluer",
"item.cobblemon.max_potion.tooltip": "Restaure la totalité des PV d'un Pokémon",
"item.cobblemon.absorb_bulb.tooltip_1": "Augmente l'Atq. Spé. du porteur lorsqu'il est touché par une capacité de type Eau",
"item.cobblemon.eviolite.tooltip": "Augmente la Défense et la Défense Spéciale du porteur, s'il peut évoluer",
"item.cobblemon.ability_capsule.tooltip": "Change le talent du Pokémon en son autre talent standard",
"item.cobblemon.eject_button.tooltip_2": "Consommé après usage",
"item.cobblemon.eject_pack.tooltip_1": "Permet au porteur de quitter le combat s'il subit une baisse de statistiques",
"item.cobblemon.fairy_feather.tooltip": "Augmente la puissance des capacités de type Fée",
"item.cobblemon.zinc.tooltip": "Augmente les EVs de Défense Spéciale du Pokémon de 10",
"item.cobblemon.moon_stone.tooltip": "Une pierre étrange qui fait évoluer certaines espèces de Pokémon",
"item.cobblemon.muscle_feather.tooltip": "Augmente les EVs d'Attaque du Pokémon de 1",
"item.cobblemon.brave_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Brave",
"item.cobblemon.careful_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Prudent",
"item.cobblemon.jolly_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Jovial",
"item.cobblemon.air_balloon.tooltip_1": "Il permet au porteur de flotter dans les airs",
"item.cobblemon.black_belt.tooltip": "Augmente la puissance des capacités de type Combat",
"item.cobblemon.calcium.tooltip": "Augmente les EVs d'Attaque Spéciale du Pokémon de 10",
"item.cobblemon.naughty_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Mauvais",
"item.cobblemon.rash_mint.tooltip": "Change les stats d'un Pokémon pour correspondre à la nature Foufou",
"item.cobblemon.blunder_policy.tooltip_1": "Augmente la Vitesse du porteur lorsqu'une capacité est ratée",
"item.cobblemon.cell_battery.tooltip_1": "Augmente l'Attaque du porteur lorsqu'il est touché par une capacité de type Électrik",
"item.cobblemon.eject_button.tooltip_1": "Permet au porteur de quitter le combat s'il subit des dégâts d'une capacité offensive",
"item.cobblemon.float_stone.tooltip": "Le poids du porteur est divisé par deux",
"item.cobblemon.focus_band.tooltip": "Donne une chance au porteur de survivre à une attaque si il a tous ses PV, le laissant à 1 PV",
"item.cobblemon.focus_sash.tooltip_1": "Empêche le porteur de se faire tuer en un coup",
"item.cobblemon.focus_sash.tooltip_2": "Consommé après usage",
"item.cobblemon.grassy_seed.tooltip": "Augmente d'un cran la Défense du porteur lorsque le terrain est couvert d'un Champ Herbu",
"item.cobblemon.hard_stone.tooltip": "Augmente la puissance des capacités de type Roche",
"item.cobblemon.heavy_duty_boots.tooltip": "Cet objet immunise le Pokémon qui le tient à tous les pièges sur le terrain",
"item.cobblemon.iron_ball.tooltip": "Diminue la vitesse du porteur de moitié et le clou au sol",
"item.cobblemon.leftovers.tooltip": "Rend des PV au porteur à chaque tour",
"item.cobblemon.light_ball.tooltip": "Augmente l'Attaque et l'Atq. Spé. de Pikachu",
"item.cobblemon.light_clay.tooltip": "Les capacités de protection comme Mur Lumière, Protection et Voile Aurore durent plus longtemps",
"item.cobblemon.loaded_dice.tooltip": "Les capacités Multi-Coups frappent au moins quatre fois",
"item.cobblemon.lucky_egg.tooltip": "Augmente la quatité d'Exp. gagnée par le porteur en Combat",
"item.cobblemon.magnet.tooltip": "Augmente la puissance des capacités de type Électrik",
"item.cobblemon.metronome.tooltip": "Augmente la puissance des capacités utilisées de façon répétées",
"item.cobblemon.miracle_seed.tooltip": "Augmente la puissance des capacités de type Plante",
"item.cobblemon.mystic_water.tooltip": "Augmente la puissance des capacités de type Eau",
"item.cobblemon.poison_barb.tooltip": "Augmente la puissance des capacités de type Poison",
"item.cobblemon.protective_pads.tooltip": "Protège le porteur des effets de contact",
"item.cobblemon.quick_claw.tooltip": "Le porteur peut frapper en premier occasionnellement",
"item.cobblemon.razor_claw.tooltip_1": "Augmente les chances de coup critique du porteur",
"item.cobblemon.razor_claw.tooltip_2": "Fait évoluer Farfuret en Farfurex ou Dimoret lorsqu'elle est tenue en montant d'un niveau pendant le jour ou la nuit",
"item.cobblemon.razor_fang.tooltip_1": "Peut appeurer l'ennemi lorsque le porteur lui inflige des dégâts",
"item.cobblemon.red_card.tooltip_1": "Le Pokémon qui inflige des dégâts au porteur est obligé de sortir du combat",
"item.cobblemon.red_card.tooltip_2": "Consommé après usage",
"item.cobblemon.ring_target.tooltip": "Annule les immunités de type du porteur",
"item.cobblemon.rocky_helmet.tooltip": "Renvoie des dégâts en cas de contact direct",
"item.cobblemon.room_service.tooltip_1": "Diminue la vitesse du lanceur quand Distorsion est activée",
"item.cobblemon.room_service.tooltip_2": "Consommé après usage",
"item.cobblemon.scope_lens.tooltip": "Augmente les chances de coup critique du porteur",
"item.cobblemon.sharp_beak.tooltip": "Augmente la puissance des capacités de type Vol",
"item.cobblemon.shed_shell.tooltip": "Permet au porteur d'être changé, dans n'importe quelle situation",
"item.cobblemon.shell_bell.tooltip": "Rend des PV au porteur à chaque tour",
"item.cobblemon.silk_scarf.tooltip": "Augmente la puissance des capacités de type Normal",
"item.cobblemon.silver_powder.tooltip": "Augmente la puissance des capacités de type Insecte",
"item.cobblemon.soft_sand.tooltip": "Augmente la puissance des capacités de type Sol",
"item.cobblemon.spell_tag.tooltip": "Augmente la puissance des capacités de type Spectre",
"item.cobblemon.sticky_barb.tooltip": "Inflige des dégâts au porteur chaque tour, et change de porteur en cas de contact physique",
"item.cobblemon.throat_spray.tooltip_1": "Augmente l'Atk. Spé. du porteur lorsqu'il utilise une attaque basée sur le son",
"item.cobblemon.throat_spray.tooltip_2": "Consommé après usage",
"item.cobblemon.twisted_spoon.tooltip": "Augmente la puissance des capacités de type Psy",
"item.cobblemon.utility_umbrella.tooltip": "Le porteur n'est pas affecté par la Pluie ni par l'Ensoleillement",
"item.cobblemon.weakness_policy.tooltip_2": "Consommée après usage",
"item.cobblemon.wide_lens.tooltip": "Augmente la Précision du porteur",
"item.cobblemon.wise_glasses.tooltip": "Augmente la puissance des capacités Spéciales",
"item.cobblemon.zoom_lens.tooltip": "Augmente la Précision du porteur",
"item.cobblemon.mental_herb.tooltip_2": "Consommée après usage",
"item.cobblemon.mirror_herb.tooltip_1": "Si un Pokémon adverse augmente l'une de ses statistiques, le porteur copie cette augmentation",
"item.cobblemon.mirror_herb.tooltip_2": "Consommée après usage",
"item.cobblemon.misty_seed.tooltip": "Augmente d'un cran la Défense Spéciale du porteur lorsque le terrain est couvert d'un Champ Brumeux",
"item.cobblemon.razor_fang.tooltip_2": "Fait évoluer Scorplane en Scorvol lorsqu'elle est tenue en montant d'un niveau pendant la nuit",
"item.cobblemon.safety_goggles.tooltip": "Immunise le porteur aux attaques à base de poudres, spores et aux effets de météo",
"item.cobblemon.mental_herb.tooltip_1": "Soigne le porteur et permet de choisir sa capacité normalement lorsque la sélection a été limitée",
"item.cobblemon.shell_helmet": "Casquillage",
"item.cobblemon.shell_helmet.tooltip": "Fait évoluer Carabing en Lançargot",
"item.cobblemon.muscle_band.tooltip": "Augmente la puissance des capacités Physiques",
"item.cobblemon.weakness_policy.tooltip_1": "Augmente l'Atk. et l'Atk. Spé. du porteur quand il est frappé par une attaque Super Efficace",
"item.cobblemon.terrain_extender.tooltip": "Allonge la durée des effets des compétences et talents qui influencent le terrain",
"item.cobblemon.never_melt_ice.tooltip": "Augmente la puissance des capacités de type Glace",
"item.cobblemon.punching_glove.tooltip": "Augmente la puissance des capacités Coups de Poing et évite les effets de contact",
"item.cobblemon.soothe_bell.tooltip": "Augmente les gains de Bonheur du porteur",
"item.cobblemon.power_herb.tooltip_2": "Consommé après usage",
"item.cobblemon.white_herb.tooltip_1": "Restaure toute statistique diminuée au combat",
"item.cobblemon.white_herb.tooltip_2": "Consommé après usage",
"item.cobblemon.bright_powder.tooltip": "Réduit de 10% la précision des capacités du pokemon adverse",
"item.cobblemon.metal_powder.tooltip": "Augmente de 50% la Défense et Défense spéciale d'un Métamorph non transformé",
"item.cobblemon.quick_powder.tooltip": "Double la vitesse d'un Métamorph non transformé",
"item.cobblemon.power_anklet.tooltip": "Augmente de 8 les EVs de Vitesse lorsque de l'Exp. est gagnée en combat",
"item.cobblemon.power_band.tooltip": "Augmente de 8 les EVs de Défense Spéciale lorsque de l'expérience est gagnée en combat",
"item.cobblemon.power_belt.tooltip": "Augmente de 8 les EVs de Défense lorsque de l'expérience est gagnée en combat",
"item.cobblemon.power_lens.tooltip": "Augmente de 8 les EVs d'Attaque Spéciale lorsque de l'expérience est gagnée en combat",
"item.cobblemon.power_weight.tooltip": "Augmente de 8 les EVs de PV lorsque de l'expérience est gagnée en combat",
"item.cobblemon.flame_orb.tooltip": "Brûle le porteur",
"item.cobblemon.smoke_ball.tooltip": "N'a aucun effet",
"item.cobblemon.toxic_orb.tooltip": "Empoisonne le porteur",
"item.cobblemon.life_orb.tooltip": "Le porteur subit des dégâts mais augmente sa puissance",
"item.cobblemon.damp_rock.tooltip": "Étend la durée de la Pluie",
"item.cobblemon.heat_rock.tooltip": "Étend la durée du Soleil",
"item.cobblemon.smooth_rock.tooltip": "Étend la durée de la Tempête de sable",
"item.cobblemon.icy_rock.tooltip": "Étend la durée de la Tempête de neige ou Grêle",
"item.cobblemon.medicinal_leek.tooltip_1": "Utilisé pour faire des boissons médicinales",
"item.cobblemon.energy_root.tooltip": "Restaure 120 PV d'un Pokémon mais réduit son Bonheur",
"item.cobblemon.revival_herb.tooltip": "Réanime complètement un Pokémon K.O. tout en réduisant son Bonheur",
"item.cobblemon.berry_juice.tooltip": "Restaure 20 PV au porteur lorsque ses PV descendent sous 50%",
"item.cobblemon.remedy.tooltip": "Restaure 60 PV à un Pokémon",
"item.cobblemon.fine_remedy.tooltip": "Restaure 100 PV à un Pokémon",
"item.cobblemon.revive.tooltip": "Réanime un Pokémon K.O avec 50% de ses PV max",
"item.cobblemon.max_revive.tooltip": "Réanime et restaure la totalité de ses PV à un Pokémon K.O",
"item.cobblemon.pp_max.tooltip": "Augmente de 60 % les PP maximum d'une capacité d'un Pokémon une seule fois",
"item.cobblemon.x_attack.tooltip": "Augmente temporairement l'Attaque de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.x_defence.tooltip": "Augmente temporairement la Défense de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.x_speed.tooltip": "Augmente temporairement la Vitesse de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.x_special_attack.tooltip": "Augmente temporairement l'Atq. Spé. de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.dire_hit.tooltip": "Augmente temporairement le Taux de critiques de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.guard_spec.tooltip": "Empêche temporairement les baisses de statistiques quand utilisé en Combat",
"item.cobblemon.full_heal.tooltip": "Soigne toute altération de statut d'un Pokémon",
"item.cobblemon.antidote.tooltip": "Soigne un Pokémon empoisonné",
"item.cobblemon.awakening.tooltip": "Réveille un Pokémon endormi",
"item.cobblemon.burn_heal.tooltip": "Soigne un Pokémon brûlé",
"item.cobblemon.paralyze_heal.tooltip": "Soigne un Pokémon paralysé",
"item.cobblemon.max_ether.tooltip": "Restaure la totalité des PP d'une capacité au choix d'un Pokémon",
"item.cobblemon.elixir.tooltip": "Restaure 10 PP de toutes les capacités d'un Pokémon",
"item.cobblemon.power_herb.tooltip_1": "Permet au porteur d’utiliser sans tour de charge une capacité qui nécessite un tour de charge",
"item.cobblemon.destiny_knot.tooltip": "Si le porteur devient amoureux du Pokémon adverse, ce dernier devient également amoureux du porteur",
"item.cobblemon.x_accuracy.tooltip": "Augmente temporairement la Précision de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.ice_heal.tooltip": "Libère un Pokémon gelé",
"item.cobblemon.heal_powder.tooltip": "Soigne toute altération de statut d'un Pokémon mais réduit son Bonheur",
"item.cobblemon.pp_up.tooltip": "Augmente de 20 % les PP maximum d'une capacité d'un Pokémon jusqu'à un maximum d'augmentation de 60%",
"item.cobblemon.power_bracer.tooltip": "Augmente de 8 les EVs d'Attaque lorsque de l'expérience est gagnée en combat",
"item.cobblemon.psychic_seed.tooltip": "Augmente d'un cran la Défense Spéciale du porteur lorsque le terrain est couvert d'un Champ Psychique",
"item.cobblemon.superb_remedy.tooltip": "Restaure 150 PV à un Pokémon",
"item.cobblemon.x_special_defence.tooltip": "Augmente temporairement la Déf. Spé. de la cible d'un cran lorsque utilisé en combat",
"item.cobblemon.medicinal_leek.tooltip_2": "Augmente aussi le Taux de critiques de deux crans pour les Canarticho et Palarticho qui le portent",
"item.cobblemon.ether.tooltip": "Restaure 10 PP d'une capacité au choix d'un Pokémon",
"item.cobblemon.max_elixir.tooltip": "Restaure totalement tous les PP de toutes les capacités d'un Pokémon",
"item.cobblemon.normal_gem.tooltip_1": "Augmente la puissance de la première capacité de type Normal",
"item.cobblemon.normal_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.water_gem.tooltip_1": "Augmente la puissance de la première capacité de type Eau",
"item.cobblemon.water_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.fire_gem.tooltip_1": "Augmente la puissance de la première capacité de type Feu",
"item.cobblemon.fire_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.grass_gem.tooltip_1": "Augmente la puissance de la première capacité de type Plante",
"item.cobblemon.grass_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.dragon_gem.tooltip_1": "Augmente la puissance de la première capacité de type Dragon",
"item.cobblemon.ghost_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.ground_gem.tooltip_1": "Augmente la puissance de la première capacité de type Sol",
"item.cobblemon.ground_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.steel_gem.tooltip_1": "Augmente la puissance de la première capacité de type Acier",
"item.cobblemon.steel_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.fairy_gem.tooltip_1": "Augmente la puissance de la première capacité de type Fée",
"item.cobblemon.fairy_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.rock_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.psychic_gem.tooltip_1": "Augmente la puissance de la première capacité de type Psy",
"item.cobblemon.psychic_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.electric_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.bug_gem.tooltip_1": "Augmente la puissance de la première capacité de type Insecte",
"item.cobblemon.bug_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.poison_gem.tooltip_1": "Augmente la puissance de la première capacité de type Poison",
"item.cobblemon.poison_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.ice_gem.tooltip_1": "Augmente la puissance de la première capacité de type Glace",
"item.cobblemon.ice_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.dark_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.fighting_gem.tooltip_1": "Augmente la puissance de la première capacité de type Combat",
"item.cobblemon.fighting_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.flying_gem.tooltip_2": "Consommé après usage",
"block.cobblemon.big_root.tooltip": "Augmente la quantité de PV que récupère le porteur avec les capacités de vampirisme",
"cobblemon.fishing.no_bite": "Pas de quoi grignoter.",
"cobblemon.egg_group.monster": "Monstrueux",
"cobblemon.egg_group.water_1": "Aquatique 1",
"cobblemon.egg_group.bug": "Insectoïde",
"cobblemon.egg_group.flying": "Aérien",
"cobblemon.egg_group.field": "Terrain",
"cobblemon.egg_group.fairy": "Féerique",
"cobblemon.egg_group.grass": "Végétal",
"cobblemon.egg_group.human_like": "Humanoïde",
"cobblemon.egg_group.water_3": "Aquatique 3",
"cobblemon.egg_group.mineral": "Minéral",
"cobblemon.egg_group.amorphous": "Amorphe",
"cobblemon.egg_group.water_2": "Aquatique 2",
"cobblemon.egg_group.ditto": "Métamorph",
"item.cobblemon.dragon_gem.tooltip_2": "Consommé après usage",
"item.cobblemon.ghost_gem.tooltip_1": "Augmente la puissance de la première capacité de type Spectre",
"item.cobblemon.rock_gem.tooltip_1": "Augmente la puissance de la première capacité de type Roche",
"item.cobblemon.electric_gem.tooltip_1": "Augmente la puissance de la première capacité de type Électrik",
"item.cobblemon.dark_gem.tooltip_1": "Augmente la puissance de la première capacité de type Ténèbres",
"item.cobblemon.flying_gem.tooltip_1": "Augmente la puissance de la première capacité de type Vol",
"cobblemon.fishing_bait_effects.typing.tooltip": "%1$s%% - %3$s× Chance pour Type %2$s",
"cobblemon.fishing_bait_effects.egg_group.tooltip": "%1$s%% - %3$s× Chance pour Groupe Œuf %2$s",
"cobblemon.egg_group.dragon": "Draconique",
"cobblemon.egg_group.undiscovered": "Inconnu",
"cobblemon.ui.generic.save": "Enregistrer",
"cobblemon.trade.expired.receiver": "La demande d'échange de %1$s a expiré !",
"cobblemon.trade.canceled.sender": "Vous avez annulmé votre demande d'échange avec %1$s.",
"cobblemon.trade.canceled.receiver": "%1$s a annulé sa demande d'échange...",
"cobblemon.trade.sent": "Demande d'échange envoyée à %1$s.",
"cobblemon.trade.received": "%1$s veut échanger des Pokémon !",
"cobblemon.trade.accept.receiver": "Vous acceptez la demande d'échange de %1$s !",
"cobblemon.trade.decline.sender": "%1$s a refusé de vous échanger des Pokémon...",
"cobblemon.trade.decline.receiver": "Vous avez refusé la demande d'échange de %1$s.",
"cobblemon.trade.error.insufficient_pokemon.other": "%1$s n'a pas de Pokémon à échanger !",
"cobblemon.trade.error.pending": "Vous avez déjà une requête en attente de %1$s !",
"cobblemon.trade.error.duplicate": "Vous avez déjà envoyé une requête à %1$s !",
"cobblemon.ui.wallpapers": "Fonds d'écran",
"cobblemon.ui.pc.search": "Rechercher",
"cobblemon.ui.interact.give.cosmetic_item": "Changer le cosmétique",
"cobblemon.ui.interact.ride": "Chevaucher",
"cobblemon.ui.pokedex.search.search_by": "Rechercher par %1$s",
"cobblemon.ui.pokedex.search.type.species": "Espèce",
"cobblemon.ui.pokedex.search.type.abilities": "Talent",
"cobblemon.ui.pokedex.search.type.drops": "Butins",
"cobblemon.cosmetic.held_logs.spruce": "Sapin",
"cobblemon.cosmetic.held_logs.birch": "Bouleau",
"cobblemon.cosmetic.held_logs.acacia": "Acacia",
"cobblemon.cosmetic.held_logs.crimson": "Carmin",
"cobblemon.cosmetic.held_logs.mangrove": "Palétuvier",
"cobblemon.cosmetic.held_logs.cherry": "Cerisier",
"cobblemon.cosmetic_item": "Cosmétique",
"cobblemon.cosmetic_item.give": "%1$s porte %2$s.",
"cobblemon.cosmetic_item.replace": "%1$s ne porte plus %2$s, mais %3$s oui !",
"cobblemon.cosmetic_item.take": "%1$s ne porte plus %2$s.",
"cobblemon.cosmetic_item.already_wearing": "%1$s porte déjà %2$s !",
"cobblemon.ui.challenge.challenge_title": "Demande de Combat",
"cobblemon.challenge.sent": "Vous défiez %1$s à %2$s.",
"cobblemon.challenge.accept.receiver": "Vous acceptez le défi de %1$s !",
"cobblemon.challenge.accept.sender": "%1$s a accepté le défi !",
"cobblemon.ui.challenge.challenge": "Défi",
"cobblemon.challenge.expired.receiver": "Le défi de %1$s a expiré !",
"cobblemon.challenge.canceled.sender": "Vous avez annulé votre défi contre %1$s.",
"cobblemon.challenge.expired.sender": "Votre défi contre %1$s a expiré !",
"cobblemon.trade.accept.sender": "%1$s a accepté votre demande !",
"cobblemon.trade.error.insufficient_pokemon.self": "Vous n'avez pas de Pokémon à échanger !",
"cobblemon.ui.interact.request_already_expired": "Cette requête a déjà expiré !",
"cobblemon.cosmetic.held_logs.oak": "Chêne",
"cobblemon.command.pc.invalid-box": "Boîte numéro %1$s dépasse le nombre max de boîtes de %2$s.",
"cobblemon.cosmetic.held_logs.jungle": "Acajou",
"cobblemon.cosmetic.held_logs.dark_oak": "Chêne noir",
"cobblemon.cosmetic.held_logs.warped": "Biscornue",
"cobblemon.challenge.received": "%1$s vous défie à un %2$s !",
"cobblemon.ui.pokedex.info.form.noice-face": "Dégel",
"cobblemon.trade.expired.sender": "Votre demande d'échange avec %1$s a expiré !"
}
@@ -178,7 +178,7 @@
"item.cobblemon.black_sludge": "くろいヘドロ",
"item.cobblemon.blunder_policy": "からぶりほけん",
"item.cobblemon.cell_battery": "じゅうでんち",
"item.cobblemon.charcoal_stick": "もくたん",
"item.cobblemon.charcoal_stick": "おおきなもくたん",
"item.cobblemon.choice_band": "こだわりハチマキ",
"item.cobblemon.choice_scarf": "こだわりスカーフ",
"item.cobblemon.choice_specs": "こだわりメガネ",
@@ -277,7 +277,7 @@
"item.cobblemon.safari_ball.tooltip": "戦闘していない場合1.5倍",
"item.cobblemon.fast_ball.tooltip": "素早さの種族値が100を超えるポケモンに対して4倍",
"item.cobblemon.level_ball.tooltip": "自分のポケモンのレベルより低いほど1倍から4倍になる",
"item.cobblemon.lure_ball.tooltip": "釣ったみずタイプのポケモンに対して2倍",
"item.cobblemon.lure_ball.tooltip": "ボールのつりざおで釣ったポケモンに対して4倍",
"item.cobblemon.heavy_ball.tooltip": "重いほど1倍から4倍になる",
"item.cobblemon.love_ball.tooltip": "性別が違うポケモンに対して2.5倍 さらに同じ種族のポケモンの場合8倍",
"item.cobblemon.friend_ball.tooltip": "捕獲率1倍 なかよし度が150から始まる",
@@ -402,7 +402,7 @@
"item.cobblemon.relic_coin": "こだいのこうか",
"block.cobblemon.relic_coin_pouch": "こだいのぽちぶくろ",
"block.cobblemon.relic_coin_sack": "こだいのぜにぶくろ",
"trim_pattern.cobblemon.automaton": "ゴーレム",
"trim_pattern.cobblemon.automaton": "ゴーレム風の装飾",
"cobblemon.fossil.armor": "たて",
"cobblemon.fossil.bird": "トリ",
"cobblemon.fossil.claw": "ツメ",
@@ -419,13 +419,13 @@
"cobblemon.fossil.sail": "ヒレ",
"cobblemon.fossil.skull": "ずがい",
"cobblemon.fossilmachine.protected": "このカセキは %sの ものだ!",
"itemGroup.cobblemon.blocks": "ブロック",
"itemGroup.cobblemon.blocks": "Cobblemon:ブロック",
"itemGroup.cobblemon.pokeball": "ボール",
"itemGroup.cobblemon.agriculture": "農業",
"itemGroup.cobblemon.consumables": "消費アイテム",
"itemGroup.cobblemon.held_item": "もちもの",
"itemGroup.cobblemon.evolution_item": "進化アイテム",
"itemGroup.cobblemon.archaeology": "考古学",
"itemGroup.cobblemon.agriculture": "Cobblemon:農業",
"itemGroup.cobblemon.consumables": "Cobblemon:消費アイテム",
"itemGroup.cobblemon.held_item": "Cobblemon:もちもの",
"itemGroup.cobblemon.evolution_item": "Cobblemon:進化アイテム",
"itemGroup.cobblemon.archaeology": "Cobblemon:考古学",
"block.cobblemon.apricorn_log": "ぼんぐりの原木",
"block.cobblemon.stripped_apricorn_log": "樹皮を剥いだぼんぐりの原木",
"block.cobblemon.apricorn_wood": "ぼんぐりの木",
@@ -5841,5 +5841,434 @@
"cobblemon.ability.wonderskin.desc": "変化技を 受けにくい 体に なっている。",
"cobblemon.ability.zenmode": "ダルマモード",
"cobblemon.ability.zenmode.desc": "HPが 半分 以下に なると 姿が 変化する。",
"cobblemon.ability.zerotohero": "マイティチェンジ"
"cobblemon.ability.zerotohero": "マイティチェンジ",
"item.cobblemon.smithing_template.pokerod.base_slot_description": "釣り竿を追加",
"upgrade.cobblemon.pokerod": "ボールのつりざお強化",
"cobblemon.pokerod.bobber": "ウキ:%1$s",
"cobblemon.pokerod.bait": "エサ:%1$s x%2$s",
"item.cobblemon.pokedex_black": "ポケモン図鑑",
"item.cobblemon.pokedex_blue": "ポケモン図鑑",
"item.cobblemon.pokedex_green": "ポケモン図鑑",
"item.cobblemon.pokedex_red": "ポケモン図鑑",
"item.cobblemon.automaton_armor_trim_smithing_template": "鍛冶型",
"cobblemon.tooltip.see_more_info": "shiftキーを押して詳細を表示",
"cobblemon.item_class.fishing_bait": "釣りエサ",
"cobblemon.gender.male": "オス",
"cobblemon.gender.genderless": "性別不明",
"block.cobblemon.black_apricorn": "くろぼんぐり",
"block.cobblemon.blue_apricorn": "あおぼんぐり",
"block.cobblemon.green_apricorn": "みどぼんぐり",
"block.cobblemon.red_apricorn": "あかぼんぐり",
"itemGroup.cobblemon.utility_item": "Cobblemon:有用アイテム",
"block.cobblemon.polished_tumblestone": "磨かれたたまいしブロック",
"block.cobblemon.polished_tumblestone_slab": "磨かれたたまいしハーフブロック",
"block.cobblemon.polished_tumblestone_stairs": "磨かれたたまいしの階段",
"block.cobblemon.polished_tumblestone_wall": "磨かれたたまいしの塀",
"block.cobblemon.chiseled_polished_tumblestone": "模様入りの磨かれたたまいしブロック",
"block.cobblemon.tumblestone_bricks": "磨かれたたまいしレンガ",
"block.cobblemon.tumblestone_brick_slab": "たまいしレンガのハーフブロック",
"block.cobblemon.tumblestone_brick_stairs": "たまいしレンガの階段",
"block.cobblemon.tumblestone_brick_wall": "たまいしレンガの塀",
"block.cobblemon.chiseled_tumblestone_bricks": "模様入りのたまいしレンガ",
"block.cobblemon.smooth_tumblestone": "滑らかなたまいしブロック",
"block.cobblemon.smooth_tumblestone_slab": "滑らかなたまいしハーフブロック",
"block.cobblemon.smooth_tumblestone_stairs": "滑らかなたまいしの階段",
"block.cobblemon.polished_sky_tumblestone": "磨かれたそらいろたまいしブロック",
"block.cobblemon.polished_sky_tumblestone_slab": "磨かれたそらいろたまいしハーフブロック",
"block.cobblemon.polished_sky_tumblestone_stairs": "磨かれたそらいろたまいしの階段",
"block.cobblemon.polished_sky_tumblestone_wall": "磨かれたそらいろたまいしの塀",
"block.cobblemon.chiseled_polished_sky_tumblestone": "模様入りの磨かれたそらいろたまいしブロック",
"block.cobblemon.sky_tumblestone_bricks": "そらいろたまいしレンガ",
"block.cobblemon.sky_tumblestone_brick_slab": "そらいろたまいしレンガのハーフブロック",
"block.cobblemon.sky_tumblestone_brick_stairs": "そらいろたまいしレンガの階段",
"block.cobblemon.sky_tumblestone_brick_wall": "そらいろたまいしレンガの塀",
"block.cobblemon.chiseled_sky_tumblestone_bricks": "模様入りのそらいろたまいしレンガ",
"block.cobblemon.smooth_sky_tumblestone": "滑らかなそらいろたまいしブロック",
"block.cobblemon.smooth_sky_tumblestone_slab": "滑らかなそらいろたまいしハーフブロック",
"block.cobblemon.smooth_sky_tumblestone_stairs": "滑らかなそらいろたまいしの階段",
"block.cobblemon.polished_black_tumblestone": "磨かれたくろいろたまいしブロック",
"block.cobblemon.polished_black_tumblestone_slab": "磨かれたくろいろたまいしハーフブロック",
"block.cobblemon.polished_black_tumblestone_stairs": "磨かれたくろいろたまいしの階段",
"block.cobblemon.polished_black_tumblestone_wall": "磨かれたくろいろたまいしの塀",
"block.cobblemon.chiseled_polished_black_tumblestone": "模様入りの磨かれたくろいろたまいしブロック",
"block.cobblemon.black_tumblestone_bricks": "くろいろたまいしレンガ",
"block.cobblemon.black_tumblestone_brick_slab": "くろいろたまいしレンガのハーフブロック",
"block.cobblemon.black_tumblestone_brick_stairs": "くろいろたまいしレンガの階段",
"block.cobblemon.chiseled_black_tumblestone_bricks": "模様入りのくろいろたまいしレンガ",
"block.cobblemon.smooth_black_tumblestone": "滑らかなくろいろたまいしブロック",
"block.cobblemon.smooth_black_tumblestone_slab": "滑らかなくろいろたまいしハーフブロック",
"block.cobblemon.smooth_black_tumblestone_stairs": "滑らかなくろいろたまいしの階段",
"block.cobblemon.fire_stone_block": "ほのおのいしブロック",
"block.cobblemon.water_stone_block": "みずのいしブロック",
"block.cobblemon.thunder_stone_block": "かみなりのいしブロック",
"block.cobblemon.leaf_stone_block": "リーフのいしブロック",
"block.cobblemon.ice_stone_block": "こおりのいしブロック",
"block.cobblemon.sun_stone_block": "たいようのいしブロック",
"block.cobblemon.moon_stone_block": "つきのいしブロック",
"block.cobblemon.shiny_stone_block": "ひかりのいしブロック",
"block.cobblemon.dawn_stone_block": "めざめいしブロック",
"block.cobblemon.dusk_stone_block": "やみのいしブロック",
"cobblemon.fishing_bait_effect_header": "釣りエサ効果:",
"item.cobblemon.pokedex_pink": "ポケモン図鑑",
"item.cobblemon.pokedex_white": "ポケモン図鑑",
"item.cobblemon.smithing_template.pokerod.ingredients": "モンスターボール",
"item.cobblemon.smithing_template.pokerod.additions_slot_description": "モンスターボールを追加",
"item.cobblemon.poke_rod": "ボールのつりざお",
"item.cobblemon.psychic_seed": "サイコシード",
"item.cobblemon.misty_seed": "ミストシード",
"item.cobblemon.pokerod_smithing_template": "鍛冶型",
"block.cobblemon.yellow_apricorn": "きぼんぐり",
"block.cobblemon.lectern": "書見台",
"block.cobblemon.black_tumblestone_brick_wall": "くろいろたまいしレンガの塀",
"block.cobblemon.white_apricorn": "しろぼんぐり",
"item.cobblemon.pokedex_yellow": "ポケモン図鑑",
"cobblemon.gender.female": "メス",
"block.cobblemon.pink_apricorn": "ももぼんぐり",
"item.cobblemon.electric_seed": "エレキシード",
"item.cobblemon.grassy_seed": "グラスシード",
"cobblemon.fishing_bait_effects.nature.tooltip": "%1$s%% - %2$s↑ 性格引き寄せ",
"cobblemon.fishing_bait_effects.iv.tooltip": "%1$s%% - %2$s 個体値 +%3$s",
"cobblemon.fishing_bait_effects.ev.tooltip": "%1$s%% - %2$s努力値持ち引き寄せ",
"cobblemon.fishing_bait_effects.bite_time.tooltip": "%1$s%% - 食いつきまでの時間短縮 %3$s%%",
"cobblemon.fishing_bait_effects.gender_chance.tooltip": "%1$s%% - 性別 %2$s 引き寄せ",
"cobblemon.fishing_bait_effects.level_raise.tooltip": "%1$s%% - レベル上昇 +%3$s",
"cobblemon.fishing_bait_effects.tera.tooltip": "%1$s%% - %2$s テラスタイプ引き寄せ",
"cobblemon.fishing_bait_effects.shiny_reroll.tooltip": "%1$s%% - %3$s× 色違い運",
"cobblemon.fishing_bait_effects.ha_chance.tooltip": "%1$s%% - 隠れ特性引き寄せ",
"cobblemon.fishing_bait_effects.pokemon_chance.tooltip": "%1$s%% - ポケモンの食いつき",
"cobblemon.fishing_bait_effects.friendship.tooltip": "%1$s%% - すぐに懐く +%3$s",
"cobblemon.fishing_bait_effects.inert.tooltip": "効果は知られていないようだ",
"entity.minecraft.villager.nurse": "ポケモンナース",
"entity.minecraft.villager.cobblemon.nurse": "ポケモンナース",
"cobblemon.ui.starter.narrator.backbutton": "戻るボタンが押されました",
"cobblemon.ui.moves.forget": "技を忘れる",
"cobblemon.ui.stash.gold": "コインの蓄え",
"cobblemon.ui.stash.netherite": "欠片の蓄え",
"cobblemon.ui.interact.accept": "受け入れる",
"cobblemon.ui.interact.decline": "拒否する",
"cobblemon.ui.interact.failed": "ターゲットが遮られているか、遠すぎます。",
"cobblemon.ui.interact.team_leave": "チームを離れる",
"cobblemon.ui.interact.team_request": "チームを組む",
"cobblemon.ui.interact.too_far": "ターゲットが遠すぎます!",
"cobblemon.ui.pokedex.scan.registered_suffix": "%1$s が新しく図鑑に登録されます!",
"cobblemon.ui.pokenav.narrator.backbutton": "ポケナビのボタンが押されました",
"cobblemon.ui.interact.unavailable": "現在、ターゲットはその行動を行うことができません。",
"cobblemon.pokerod.remove": "右クリックして餌を外す",
"item.cobblemon.galarica_nuts": "ガラナツのナッツ",
"cobblemon.pokerod.apply": "右クリックでエサを付ける",
"item.cobblemon.npc_editor": "NPCのトレーナーカード",
"item.cobblemon.link_cable.tooltip": "なにかしらのつながりを感じさせる 不思議なエネルギーを秘めているヒモ。ポケモン交換で進化するポケモンを進化させる。",
"item.cobblemon.dragon_scale.tooltip": "硬くて 丈夫な ウロコ。シードラに持たせてポケモン交換すると キングドラに進化する。",
"item.cobblemon.kings_rock.tooltip_1": "持たせると 攻撃して ダメージを 与えたときに 相手を ひるませることが ある。",
"item.cobblemon.metal_coat.tooltip_1": "特殊な金属の 膜。 持たせると はがねタイプの 技の威力が 上がる。",
"item.cobblemon.metal_coat.tooltip_2": "イワーク・ストライクに持たせてポケモン交換すると それぞれハガネール・ハッサムに進化する。",
"item.cobblemon.upgrade.tooltip": "中にいろんな情報が つまった透明な機械。ポリゴンに持たせてポケモン交換すると ポリゴン2に進化する。",
"item.cobblemon.dubious_disc.tooltip": "なかに怪しい情報が つまった透明な機械。ポリゴン2に持たせてポケモン交換すると ポリゴンZに進化する。",
"item.cobblemon.deep_sea_scale.tooltip_1": "パールルに 持たせると 特防が あがる ウロコ。",
"item.cobblemon.deep_sea_scale.tooltip_2": "パールルに持たせてポケモン交換すると サクラビスに進化する。",
"item.cobblemon.deep_sea_tooth.tooltip_1": "パールルに 持たせると 特攻が あがる キバ。",
"item.cobblemon.deep_sea_tooth.tooltip_2": "パールルに持たせてポケモン交換すると ハンテールに進化する。",
"item.cobblemon.electirizer.tooltip": "とてつもない 電気の エネルギーが 蓄えられている 箱。エレブーに持たせてポケモン交換すると エレキブルに進化する。",
"item.cobblemon.magmarizer.tooltip": "とてつもない マグマの エネルギーが 蓄えられている 箱。ブーバーに持たせてポケモン交換すると ブーバーンに進化する。",
"item.cobblemon.oval_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。 たまのように まるい。",
"item.cobblemon.reaper_cloth.tooltip": "おそろしく 強い霊力が こめられている 布。サマヨールに持たせてポケモン交換すると ヨノワールに進化する。",
"item.cobblemon.sachet.tooltip": "ちょっと きつめの 香りをだす 香料を 詰めた 袋。シュシュプに持たせてポケモン交換すると それぞれヤドラン・ニョロトノに進化する。",
"item.cobblemon.strawberry_sweet.tooltip": "いちごの形をした アメ細工。 マホミルに使うと いちごのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.berry_sweet.tooltip": "ベリーの形をした アメ細工。 マホミルに使うと ベリーのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.clover_sweet.tooltip": "よつばの形をした アメ細工。 マホミルに使うと よつばのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.star_sweet.tooltip": "スターの形をした アメ細工。 マホミルに使うと スターのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.sweet_apple.tooltip": "とにかく 甘い 不思議なりんご。カジッチュに使うと タルップルに進化する。",
"item.cobblemon.cracked_pot.tooltip": "割れている 不思議なポット。がんさくフォルムのヤバチャに使うと ポットデスに進化する。",
"item.cobblemon.chipped_pot.tooltip": "欠けている 不思議なポット。しんさくフォルムのヤバチャに使うと ポットデスに進化する。",
"item.cobblemon.tart_apple.tooltip": "とにかく 酸っぱい 不思議なりんご。カジッチュに使うと アップリューに進化する。",
"item.cobblemon.galarica_wreath.tooltip": "ガラナツのナッツを 編み込んだ 冠。ガラルのすがたのヤドンに使うと ヤドキングに進化する。",
"item.cobblemon.black_augurite.tooltip": "割ると鋭い切れ味を持つ ガラスに似た性質の黒い石。ストライクに使うと バサギリに進化する。",
"item.cobblemon.peat_block.tooltip": "泥のような石炭のかたまり。満月の夜に リングマに使うと ガチグマに進化する。",
"item.cobblemon.dawn_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。ひとみのように まばゆい。",
"item.cobblemon.dusk_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。やみのように 暗い。",
"item.cobblemon.fire_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。だいだい色を している。",
"item.cobblemon.ice_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。雪の模様が ある。",
"item.cobblemon.leaf_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。葉っぱの模様が ある。",
"item.cobblemon.shiny_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。ひかりのように まぶしい。",
"item.cobblemon.thunder_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。稲妻の模様が ある。",
"item.cobblemon.water_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。澄んだ水色を している。",
"item.cobblemon.exp_candy_xs.tooltip": "エネルギーの つまった アメ。 与えると ポケモン 1匹の 経験値が 100 増える。",
"item.cobblemon.exp_candy_m.tooltip": "エネルギーの つまった アメ。 与えると ポケモン 1匹の 経験値が 3000 増える。",
"item.cobblemon.exp_candy_l.tooltip": "ネルギーの つまった アメ。 与えると ポケモン 1匹の 経験値が 10000 増える。",
"item.cobblemon.iron.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の 防御の 基礎ポイントを 10 あげる。",
"item.cobblemon.carbos.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の 素早さの 基礎ポイントを 10 あげる。",
"item.cobblemon.calcium.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の 特攻の 基礎ポイントを 10 あげる。",
"item.cobblemon.protein.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の 攻撃の 基礎ポイントを 10 あげる。",
"item.cobblemon.potion.tooltip": "スプレー式の キズぐすり。 ポケモン 1匹の HPを 60だけ 回復する。",
"item.cobblemon.super_potion.tooltip": "スプレー式の キズぐすり。 ポケモン 1匹の HPを 100だけ 回復する。",
"item.cobblemon.max_potion.tooltip": "スプレー式の キズぐすり。ポケモン 1匹の HPを すべて 回復する。",
"item.cobblemon.full_restore.tooltip": "スプレー式の キズぐすり。ポケモン 1匹の HPと 状態異常を すべて 回復する。",
"item.cobblemon.health_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の HPの 基礎ポイントを ちょっと あげる。",
"item.cobblemon.muscle_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の 攻撃の 基礎ポイントを ちょっと あげる。",
"item.cobblemon.genius_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の 特攻の 基礎ポイントを ちょっと あげる。",
"item.cobblemon.clever_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の 特防の 基礎ポイントを ちょっと あげる。",
"item.cobblemon.ability_capsule.tooltip": "2種類の特性を 持つ ポケモンに 使うと 今とは違う 特性に 変えられる カプセル。",
"item.cobblemon.adamant_mint.tooltip": "ポケモンに 香りを かがせると 攻撃が 上がりやすく なるが 特攻は 上がりにくくなる ミント。",
"item.cobblemon.brave_mint.tooltip": "ポケモンに 香りを かがせると 攻撃が 上がりやすく なるが 素早さは 上がりにくくなる ミント。",
"item.cobblemon.impish_mint.tooltip": "ポケモンに 香りを かがせると 防御が 上がりやすく なるが 特攻は 上がりにくくなる ミント。",
"item.cobblemon.lax_mint.tooltip": "ポケモンに 香りを かがせると 防御が 上がりやすく なるが 特防は 上がりにくくなる ミント。",
"item.cobblemon.modest_mint.tooltip": "ポケモンに 香りを かがせると 特攻が 上がりやすく なるが 攻撃は 上がりにくくなる ミント。",
"item.cobblemon.rash_mint.tooltip": "ポケモンに 香りを かがせると 特攻が 上がりやすく なるが 特防は 上がりにくくなる ミント。",
"item.cobblemon.quiet_mint.tooltip": "ポケモンに 香りを かがせると 特攻が 上がりやすく なるが 素早さは 上がりにくくなる ミント。",
"item.cobblemon.gentle_mint.tooltip": "ポケモンに 香りを かがせると 特防が 上がりやすく なるが 防御は 上がりにくくなる ミント。",
"item.cobblemon.sassy_mint.tooltip": "ポケモンに 香りを かがせると 特防が 上がりやすく なるが 素早さは 上がりにくくなる ミント。",
"item.cobblemon.naive_mint.tooltip": "ポケモンに 香りを かがせると 素早さが 上がりやすく なるが 特防は 上がりにくくなる ミント。",
"item.cobblemon.ability_shield.tooltip": "かわいらしく 個性的な 盾。 持たせると 相手に 特性を 変えられることがなく 無視もされない。",
"item.cobblemon.absorb_bulb.tooltip_1": "使い捨ての きゅうこん。 持たせて みずの技の ダメージを 受けると 特攻が あがる。",
"item.cobblemon.absorb_bulb.tooltip_2": "使うとなくなる。",
"item.cobblemon.air_balloon.tooltip_2": "攻撃を 受けると 割れてしまう。",
"item.cobblemon.assault_vest.tooltip": "攻撃的になる チョッキ。 持たせると 特防が あがるが 変化技を だせなくなる。",
"item.cobblemon.malicious_armor.tooltip": "呪いの感情が 秘められている 不思議なヨロイ。カルボウに使うと ソウブレイズに進化させる。",
"item.cobblemon.black_belt.tooltip": "気が ひきしまる 帯。 持たせると かくとうタイプの 技の威力が あがる。",
"item.cobblemon.black_glasses.tooltip": "怪しく見える メガネ。 持たせると あくタイプの 技の威力が あがる。",
"item.cobblemon.blunder_policy.tooltip_2": "使うとなくなる。",
"item.cobblemon.cell_battery.tooltip_2": "使うとなくなる。",
"item.cobblemon.eject_button.tooltip_2": "使うとなくなる。",
"item.cobblemon.eject_pack.tooltip_2": "使うとなくなる。",
"item.cobblemon.blunder_policy.tooltip_1": "命中率に よって 技が はずれたとき 素早さが ぐーんと 上がる。",
"item.cobblemon.charcoal_stick.tooltip": "少し大きな棒型の木炭。持たせると ほのおタイプの 技の威力が あがる。",
"item.cobblemon.choice_band.tooltip": "ちょっと こだわった ハチマキ。 持たせると 攻撃は あがるが 同じ技しか だせなくなる。",
"item.cobblemon.choice_specs.tooltip": "ちょっと こだわった メガネ。 持たせると 特攻は あがるが 同じ技しか だせなくなる。",
"item.cobblemon.cleanse_tag.tooltip": "効果なし",
"item.cobblemon.dragon_fang.tooltip": "硬くて 鋭い キバ。 持たせると ドラゴンタイプの 技の威力が あがる。",
"item.cobblemon.eject_button.tooltip_1": "持たせて 技のダメージを 受けると 戦闘から 脱出して 手持ちと 入れ替わる ことができる。",
"item.cobblemon.eject_pack.tooltip_1": "持たせたポケモンの 能力が 下がると 手持ちと 入れ替わる。",
"item.cobblemon.everstone.tooltip": "ポケモンに 持たせると そのあいだ 進化しなくなる 不思議な石。",
"item.cobblemon.eviolite.tooltip": "進化の不思議な かたまり。 持たせると 進化前ポケモンの 防御と 特防が あがる。",
"item.cobblemon.focus_sash.tooltip_2": "使うとなくなる。",
"item.cobblemon.room_service.tooltip_2": "使うとなくなる。",
"item.cobblemon.throat_spray.tooltip_2": "使うとなくなる。",
"item.cobblemon.weakness_policy.tooltip_2": "使うとなくなる。",
"item.cobblemon.mental_herb.tooltip_2": "使うとなくなる。",
"item.cobblemon.mirror_herb.tooltip_2": "使うとなくなる。",
"item.cobblemon.power_herb.tooltip_2": "使うとなくなる。",
"item.cobblemon.water_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.fire_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.grass_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.dragon_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.ghost_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.whipped_dream.tooltip": "ふんわり ふわふわに 泡立てた ほんのり 甘い クリーム。ペロッパフに持たせてポケモン交換すると ペロリームに進化する。",
"item.cobblemon.sun_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。太陽のように 赤い。",
"item.cobblemon.prism_scale.tooltip": "にじ色に 輝く 不思議なウロコ。ヒンバスに持たせてポケモン交換すると ミロカロスに進化する。",
"item.cobblemon.love_sweet.tooltip": "ハートの形をした アメ細工。 マホミルに使うと ハートのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.flower_sweet.tooltip": "おはなの形をした アメ細工。 マホミルに使うと おはなのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.swift_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の 素早さの 基礎ポイントを ちょっと あげる。",
"item.cobblemon.ability_patch.tooltip": "通常の特性を 持つ ポケモンに 使うと めずらしい 隠れ特性に 変えられる パッチ。",
"item.cobblemon.mild_mint.tooltip": "ポケモンに 香りを かがせると 特攻が 上がりやすく なるが 防御は 上がりにくくなる ミント。",
"item.cobblemon.jolly_mint.tooltip": "ポケモンに 香りを かがせると 素早さが 上がりやすく なるが 特攻は 上がりにくくなる ミント。",
"item.cobblemon.air_balloon.tooltip_1": "ポケモンに 持たせると ポケモンが 宙に 浮く。",
"item.cobblemon.cell_battery.tooltip_1": "持たせて でんきの技の ダメージを 受けると 攻撃が あがる。",
"item.cobblemon.protector.tooltip": "なにかの プロテクター。 とても 硬くて 重い。サイドンに持たせてポケモン交換すると ドサイドンに進化する。",
"item.cobblemon.ribbon_sweet.tooltip": "リボンの形をした アメ細工。 マホミルに使うと リボンのアメざいくを身に付けた マホイップになる。",
"item.cobblemon.exp_candy_xl.tooltip": "エネルギーの つまった アメ。 与えると ポケモン 1匹の 経験値が 30000 増える。",
"item.cobblemon.zinc.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の 特防の 基礎ポイントを 10 あげる。",
"item.cobblemon.resist_feather.tooltip": "ポケモンに 使う 道具。 ポケモン 1匹の 防御の 基礎ポイントを ちょっと あげる。",
"item.cobblemon.bold_mint.tooltip": "ポケモンに 香りを かがせると 防御が 上がりやすく なるが 攻撃は 上がりにくくなる ミント。",
"item.cobblemon.covert_cloak.tooltip": "敵の目を あざむく フード付き マント。 持たせると 体を 包み隠し 技の 追加効果を 受けなくなる。",
"item.cobblemon.unremarkable_teacup.tooltip": "割れている 不思議な茶碗。マガイモノのすがたのチャデスに使うと ヤバソチャに進化する。",
"item.cobblemon.galarica_cuff.tooltip": "ガラナツのナッツを 編み込んだ ブレスレット。ガラルのすがたのヤドンに使うと ヤドランに進化する。",
"item.cobblemon.lonely_mint.tooltip": "ポケモンに 香りを かがせると 攻撃が 上がりやすく なるが 防御は 上がりにくくなる ミント。",
"item.cobblemon.normal_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.auspicious_armor.tooltip": "祝いの感情が 秘められている 不思議なヨロイ。カルボウに使うと グレンアルマに進化させる。",
"item.cobblemon.kings_rock.tooltip_2": "ヤドン・ニョロゾに持たせてポケモン交換すると それぞれヤドラン・ニョロトノに進化する。",
"item.cobblemon.masterpiece_teacup.tooltip": "欠けている 不思議な茶碗。タカイモノのすがたのチャデスに使うと ヤバソチャに進化する。",
"item.cobblemon.moon_stone.tooltip": "ある特定の ポケモンを 進化させる 不思議な石。夜空のように 黒い。",
"item.cobblemon.rare_candy.tooltip": "エネルギーの つまった アメ。あたえると ポケモン 1匹の レベルが 1だけ あがる。",
"item.cobblemon.hyper_potion.tooltip": "スプレー式の キズぐすり。 ポケモン 1匹の HPを 150だけ 回復する。",
"item.cobblemon.naughty_mint.tooltip": "ポケモンに 香りを かがせると 攻撃が 上がりやすく なるが 特防は 上がりにくくなる ミント。",
"item.cobblemon.relaxed_mint.tooltip": "ポケモンに 香りを かがせると 防御が 上がりやすく なるが 素早さは 上がりにくくなる ミント。",
"item.cobblemon.timid_mint.tooltip": "ポケモンに 香りを かがせると 素早さが 上がりやすく なるが 攻撃は 上がりにくくなる ミント。",
"item.cobblemon.serious_mint.tooltip": "ポケモンに 香りを かがせると 攻撃 防御 素早さ 特防 特攻が 万遍なく 育つ ミント。",
"item.cobblemon.red_card.tooltip_2": "使うとなくなる。",
"item.cobblemon.black_sludge.tooltip": "持たせると どくタイプの ポケモンは 少しずつ HPを 回復する。それ以外は HPが 減ってしまう。",
"item.cobblemon.exp_candy_s.tooltip": "エネルギーの つまった アメ。 与えると ポケモン 1匹の 経験値が 800 増える。",
"item.cobblemon.hp_up.tooltip": "ポケモンの 栄養ドリンク。ポケモン 1匹の HPの 基礎ポイントを 10 あげる。",
"item.cobblemon.calm_mint.tooltip": "ポケモンに 香りを かがせると 特防が 上がりやすく なるが 攻撃は 上がりにくくなる ミント。",
"item.cobblemon.careful_mint.tooltip": "ポケモンに 香りを かがせると 特防が 上がりやすく なるが 特攻は 上がりにくくなる ミント。",
"item.cobblemon.hasty_mint.tooltip": "ポケモンに 香りを かがせると 素早さが 上がりやすく なるが 防御は 上がりにくくなる ミント。",
"item.cobblemon.white_herb.tooltip_2": "使うとなくなる。",
"item.cobblemon.binding_band.tooltip": "締めつける技を 補助する バンド。持たせると 締めつける技の 威力が 強くなる。",
"item.cobblemon.choice_scarf.tooltip": "ちょっと こだわった スカーフ。 持たせると 素早さは あがるが 同じ技しか だせなくなる。",
"item.cobblemon.electric_seed.tooltip": "ポケモンに 持たせると エレキフィールドのときに 使って 防御が あがる。",
"item.cobblemon.exp_share.tooltip": "持たせた ポケモンは 戦闘に でなくても 経験値を わけてもらえる 便利な 装置。",
"item.cobblemon.expert_belt.tooltip": "使いこまれた 黒い帯。 持たせると 効果バツグンのとき 技の威力が 少し あがる。",
"item.cobblemon.fairy_feather.tooltip": "光にあてると 淡く光る ハネ。 持たせると フェアリータイプの 技の威力が あがる。",
"item.cobblemon.float_stone.tooltip": "とても軽い 石。 持たせると ポケモンの 体重が 軽くなる。",
"item.cobblemon.focus_band.tooltip": "持たせると ひんしに なりそうな 技を 受けても HPを 1だけ 残して 耐えることが ある。",
"item.cobblemon.focus_sash.tooltip_1": "持たせると HPが 満タンのとき ひんしになりそうな 技を 受けても HP1で 1度だけ 耐える。",
"item.cobblemon.grassy_seed.tooltip": "ポケモンに 持たせると グラスフィールドのときに 使って 防御が あがる。",
"item.cobblemon.hard_stone.tooltip": "絶対に 割れない石。 持たせると いわタイプの 技の威力が あがる。",
"item.cobblemon.heavy_duty_boots.tooltip": "足場に しかけられた 罠などの影響を 受けなくなる。",
"item.cobblemon.iron_ball.tooltip": "持たせると 素早さが さがる。ひこうタイプや ふゆうポケモンは じめん技が 当たってしまう。",
"item.cobblemon.light_ball.tooltip": "ピカチュウに 持たせると 攻撃と 特攻が あがる 不思議な玉。",
"item.cobblemon.loaded_dice.tooltip": "いい目しか 出ない サイコロ。持たせて 連続技を 使うと 多めに 技を 出すことが できる。",
"item.cobblemon.lucky_egg.tooltip": "しあわせが つまった タマゴ。持たせたポケモンは もらえる 経験値が 少し増える。",
"item.cobblemon.magnet.tooltip": "強力な 磁石。持たせると でんきタイプの 技の威力が あがる。",
"item.cobblemon.miracle_seed.tooltip": "生命が宿る タネ。持たせると くさタイプの 技の威力が あがる。",
"item.cobblemon.muscle_band.tooltip": "ちからが わいてくる ハチマキ。持たせると 物理技の 威力が 少し あがる。",
"item.cobblemon.never_melt_ice.tooltip": "熱を よせつけない 氷。持たせると こおりタイプの 技の威力が あがる。",
"item.cobblemon.poison_barb.tooltip": "どくのある ちいさな ハリ。持たせると どくタイプの 技の威力が あがる。",
"item.cobblemon.punching_glove.tooltip": "こぶしを 保護する グローブ。持たせると パンチ技の 威力が あがり 相手に 接触しない パンチに なる。",
"item.cobblemon.quick_claw.tooltip": "軽くて 鋭い ツメ。持たせると 相手より 先に 行動できることが ある。",
"item.cobblemon.razor_fang.tooltip_1": "鋭く とがった キバ。持たせると ダメージを 与えたとき ひるませることが ある。",
"item.cobblemon.razor_fang.tooltip_2": "グライガーに持たせて夜にレベルアップさせると、グライオンに進化する。",
"item.cobblemon.red_card.tooltip_1": "不思議な ちからのある カード。持たせると ダメージを 与えてきた 相手を 退場させることが できる。",
"item.cobblemon.rocky_helmet.tooltip": "ポケモンに 持たせると 自分に さわった相手に ダメージを 与える。",
"item.cobblemon.room_service.tooltip_1": "ポケモンに 持たせると トリックルームのときに 使って 素早さが 下がる。",
"item.cobblemon.scope_lens.tooltip": "弱点が みえる レンズ。持たせた ポケモンの技が 急所に 当たりやすくなる。",
"item.cobblemon.sharp_beak.tooltip": "長く とがった くちばし。持たせると ひこうタイプの 技の威力が あがる。",
"item.cobblemon.shed_shell.tooltip": "丈夫で 硬い ぬけがら。持たせた ポケモンは 控えの ポケモンと 必ず いれかわれる。",
"item.cobblemon.silk_scarf.tooltip": "はだざわりの よい スカーフ。持たせると ノーマルタイプの 技の 威力が あがる。",
"item.cobblemon.silver_powder.tooltip": "銀色に 輝く 粉。持たせると むしタイプの 技の威力が あがる。",
"item.cobblemon.soothe_bell.tooltip": "心地よい 音色の鈴。持たせたポケモンは 心が 安らぎ なかよく なりやすくなる。",
"item.cobblemon.spell_tag.tooltip": "怪しくて 不気味な お札。持たせると ゴーストタイプの 技の威力が あがる。",
"item.cobblemon.sticky_barb.tooltip": "持たせると 毎ターン ダメージを 受ける。自分に ふれてきた 相手に くっつくことも ある。",
"item.cobblemon.terrain_extender.tooltip": "持たせたポケモンが 技や 特性で フィールドを 張ったとき いつもよりも 長く 残る。",
"item.cobblemon.throat_spray.tooltip_1": "音に 関する 技を 使うと 特攻が 上がる。",
"item.cobblemon.twisted_spoon.tooltip": "念力を こめた スプーン。持たせると エスパータイプの 技の威力が あがる。",
"item.cobblemon.utility_umbrella.tooltip": "持たせた ポケモンは 雨と 日差しが強いときの 影響を 受けなくなる。",
"item.cobblemon.weakness_policy.tooltip_1": "弱点を つかれたとき 攻撃と 特攻が それぞれ ぐーんと あがる。",
"item.cobblemon.wide_lens.tooltip": "ものが 大きく見える レンズ。持たせると 技の命中率が 少し あがる。",
"item.cobblemon.wise_glasses.tooltip": "ぶあつい レンズの ついた メガネ。持たせると 特殊技の 威力が 少し あがる。",
"item.cobblemon.mental_herb.tooltip_1": "持たせたポケモンが 自由に 技を だせなくなったときに 1度だけ 回復する。",
"item.cobblemon.misty_seed.tooltip": "ポケモンに 持たせると ミストフィールドのときに 使って 特防が あがる。",
"item.cobblemon.power_herb.tooltip_1": "持たせたポケモンは 1度だけ 1ターン目に ちからを ためる技を すぐに 使うことが できる。",
"item.cobblemon.bright_powder.tooltip": "キラキラ 光る粉。持たせると 光が 相手を 惑わして 技が 10% 命中しにくくなる。",
"item.cobblemon.metal_powder.tooltip": "メタモンに 持たせると 50% 防御が あがる 不思議な粉。とても こまかくて 硬い。",
"item.cobblemon.quick_powder.tooltip": "メタモンに 持たせると 素早さが あがる 不思議な粉。とても こまかくて 硬い。",
"item.cobblemon.destiny_knot.tooltip": "細くて 長い 真っ赤な糸。持たせると メロメロに なったとき 相手も メロメロに できる。",
"item.cobblemon.power_anklet.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの 素早さの基礎ポイントが 8 多く 育つ。",
"item.cobblemon.power_band.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの 特防の基礎ポイントが 8 多く 育つ。",
"item.cobblemon.power_bracer.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの 攻撃の基礎ポイントが 8 多く 育つ。",
"item.cobblemon.power_lens.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの 特攻の基礎ポイントが 8 多く 育つ。",
"item.cobblemon.power_weight.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの HPの基礎ポイントが 8 多く 育つ。",
"item.cobblemon.psychic_seed.tooltip": "ポケモンに 持たせると サイコフィールドのときに 使って 特防が あがる。",
"item.cobblemon.flame_orb.tooltip": "触ると 熱をだす 不思議な玉。持たせると 戦闘中に やけどの状態に なる。",
"item.cobblemon.smoke_ball.tooltip": "効果なし",
"item.cobblemon.toxic_orb.tooltip": "触ると 毒をだす 不思議な玉。持たせると 戦闘中に 猛毒の状態に なる。",
"item.cobblemon.life_orb.tooltip": "持たせると 攻撃するたびに HPが 少し 減ってしまうが 技の威力が あがる。",
"item.cobblemon.damp_rock.tooltip": "持たせた ポケモンが 天気を あめにすると いつもより あめの時間が 長くなる。",
"item.cobblemon.heat_rock.tooltip": "持たせた ポケモンが 日差しを 強くすると いつもより はれの時間が 長くなる。",
"item.cobblemon.smooth_rock.tooltip": "持たせたポケモンが すなあらしを 起こすと いつもより すなあらしの時間が 長くなる。",
"item.cobblemon.icy_rock.tooltip": "持たせたポケモンが 天気を ゆき または あられにすると いつもより 時間が 長くなる。",
"item.cobblemon.medicinal_leek.tooltip_1": "クスリチャの調合に必要となる。世界の各地に自生しており 旅の供とも呼ばれる。",
"item.cobblemon.medicinal_leek.tooltip_2": "カモネギや カモネギ(ガラルのすがた)、ネギガナイトに 持たせると 急所に当てる確率が 2段階 あがる。",
"item.cobblemon.revival_herb.tooltip": "とても にがい 薬草。 ひんしの ポケモン 1匹の HPを 4分の1 回復するが なかよし度は 下がる。",
"item.cobblemon.berry_juice.tooltip": "きのみ 100%の ジュース。 ポケモンに 使ったり 持たせたりすると HPを 20だけ 回復する。",
"item.cobblemon.remedy.tooltip": "キズぐすりと同じで ポケモン1匹のHPが60回復するが 苦く なかよし度がさがる。",
"item.cobblemon.fine_remedy.tooltip": "いいキズぐすりと同じで ポケモン1匹のHPが100回復するが 苦く なかよし度がさがる。",
"item.cobblemon.superb_remedy.tooltip": "すごいキズぐすりと同じで ポケモン1匹のHPが150回復するが 苦く なかよし度がさがる。",
"item.cobblemon.revive.tooltip": "ひんしになった ポケモン 1匹を 元気に したうえで HPを 半分まで 回復する。",
"item.cobblemon.max_revive.tooltip": "ひんしになった ポケモン 1匹を 元気に したうえで HPを すべて 回復する。",
"item.cobblemon.pp_up.tooltip": "ポケモンが 覚えている 技のうち 1つの PPの 最大値を 20% あげる。上げられるのは 60%まで。",
"item.cobblemon.pp_max.tooltip": "ポケモンが 覚えている 技のうち 1つの PPの 最大値を +60%分まで 一気に 上げる。",
"item.cobblemon.full_heal.tooltip": "スプレー式の 薬。ポケモン 1匹の 状態の 異常を すべて 回復する。",
"item.cobblemon.antidote.tooltip": "スプレー式の 薬。ポケモン 1匹の どくの 状態を 回復する。",
"item.cobblemon.awakening.tooltip": "スプレー式の 薬。ポケモン 1匹の ねむりの 状態を 回復する。",
"item.cobblemon.burn_heal.tooltip": "スプレー式の 薬。ポケモン 1匹の やけどの 状態を 回復する。",
"item.cobblemon.ice_heal.tooltip": "スプレー式の 薬。ポケモン 1匹の こおりの 状態を 回復する。",
"item.cobblemon.paralyze_heal.tooltip": "スプレー式の 薬。ポケモン 1匹の まひの 状態を 回復する。",
"item.cobblemon.ether.tooltip": "ポケモンが 覚えている 技のうち 1つのPPを 10だけ 回復する。",
"item.cobblemon.elixir.tooltip": "ポケモンが 覚えている 4つの技の PPを 10ずつ 回復する。",
"item.cobblemon.max_elixir.tooltip": "ポケモンが 覚えている 4つの技の PPを すべて 回復する。",
"item.cobblemon.water_gem.tooltip_1": "みずのタイプの ジュエル。持たせると 1度だけ みずの 技の威力が 強まる。",
"item.cobblemon.grass_gem.tooltip_1": "くさのタイプの ジュエル。持たせると 1度だけ くさの 技の威力が 強まる。",
"item.cobblemon.fire_gem.tooltip_1": "ほのおのタイプの ジュエル。持たせると 1度だけ ほのおの 技の威力が 強まる。",
"item.cobblemon.ground_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.steel_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.fairy_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.rock_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.psychic_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.electric_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.dragon_gem.tooltip_1": "ドラゴンのタイプの ジュエル。持たせると 1度だけ ドラゴンの 技の威力が 強まる。",
"item.cobblemon.ghost_gem.tooltip_1": "ゴーストのタイプの ジュエル。持たせると 1度だけ ゴーストの 技の威力が 強まる。",
"item.cobblemon.steel_gem.tooltip_1": "はがねのタイプの ジュエル。持たせると 1度だけ はがねの 技の威力が 強まる。",
"item.cobblemon.fairy_gem.tooltip_1": "フェアリーのタイプの ジュエル。持たせると 1度だけ フェアリーの 技の威力が 強まる。",
"item.cobblemon.psychic_gem.tooltip_1": "エスパーのタイプの ジュエル。持たせると 1度だけ エスパーの 技の威力が 強まる。",
"item.cobblemon.electric_gem.tooltip_1": "でんきのタイプの ジュエル。持たせると 1度だけ でんきの 技の威力が 強まる。",
"item.cobblemon.ice_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.bug_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.poison_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.dark_gem.tooltip_1": "あくのタイプの ジュエル。持たせると 1度だけ あくの 技の威力が 強まる。",
"item.cobblemon.ice_gem.tooltip_1": "こおりのタイプの ジュエル。持たせると 1度だけ こおりの 技の威力が 強まる。",
"item.cobblemon.dark_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.bug_gem.tooltip_1": "むしのタイプの ジュエル。持たせると 1度だけ むしの 技の威力が 強まる。",
"item.cobblemon.poison_gem.tooltip_1": "どくのタイプの ジュエル。持たせると 1度だけ どくの 技の威力が 強まる。",
"item.cobblemon.fighting_gem.tooltip_2": "Consumed after use",
"item.cobblemon.flying_gem.tooltip_2": "使うとなくなる。",
"item.cobblemon.flying_gem.tooltip_1": "ひこうのタイプの ジュエル。 持たせると 1度だけ ひこうの 技の威力が 強まる。",
"block.cobblemon.big_root.tooltip": "持たせると HPを 吸いとる 技で いつもより多く 自分の HPを 回復できる。",
"cobblemon.fishing_bait_effects.typing.tooltip": "%1$s%% - %3$s× %2$s タイプと出会える運",
"cobblemon.fishing_bait_effects.egg_group.tooltip": "%1$s%% - %3$s× タマゴグループ %2$s と出会える運",
"cobblemon.egg_group.monster": "怪獣",
"cobblemon.egg_group.water_1": "水中①",
"cobblemon.egg_group.bug": "虫",
"cobblemon.egg_group.flying": "飛行",
"cobblemon.egg_group.field": "陸上",
"cobblemon.egg_group.fairy": "妖精",
"cobblemon.egg_group.grass": "植物",
"cobblemon.egg_group.human_like": "人型",
"cobblemon.egg_group.water_3": "水中③",
"cobblemon.egg_group.mineral": "鉱物",
"cobblemon.egg_group.amorphous": "不定形",
"cobblemon.egg_group.water_2": "水中②",
"cobblemon.egg_group.ditto": "メタモン",
"cobblemon.egg_group.dragon": "ドラゴン",
"cobblemon.egg_group.undiscovered": "タマゴ未発見",
"cobblemon.trade.canceled.sender": "%1$s との交換リクエストをキャンセルしました。",
"cobblemon.trade.canceled.receiver": "%1$s が交換リクエストをキャンセルしました...",
"cobblemon.trade.sent": "%1$s との交換をリクエストしました。",
"cobblemon.trade.received": "%1$s からポケモンの交換を申し込まれました!",
"cobblemon.trade.accept.sender": "%1$sはあなたの交換リクエストを受け入れました!",
"cobblemon.trade.decline.sender": "%1$sはあなたの交換リクエストを拒否しました。",
"cobblemon.trade.decline.receiver": "あなたは %1$s の交換リクエストを拒否しました。",
"cobblemon.trade.error.insufficient_pokemon.other": "%1$sは交換するポケモンを持っていない!",
"item.cobblemon.metronome.tooltip": "持たせると 同じ技を 連続で 使ったとき 威力が あがる。やめると 威力は もどる。",
"item.cobblemon.razor_claw.tooltip_1": "鋭く とがった ツメ。持たせると 技が 急所に 当たりやすくなる。",
"item.cobblemon.ring_target.tooltip": "持っている ポケモンは タイプの相性で 無効だった 技が 相性に関係なく 当たるように なってしまう。",
"item.cobblemon.zoom_lens.tooltip": "持たせたポケモンが 相手よりも 行動するのが 遅いとき 技が 命中しやすくなる。",
"item.cobblemon.power_belt.tooltip": "持たせると バトル中の 素早さが さがるが ふつうよりも ポケモンの 防御の基礎ポイントが 8 多く 育つ。",
"item.cobblemon.max_ether.tooltip": "ポケモンが 覚えている 技のうち 1つのPPを すべて 回復する。",
"item.cobblemon.rock_gem.tooltip_1": "いわのタイプの ジュエル。持たせると 1度だけ いわの 技の威力が 強まる。",
"item.cobblemon.soft_sand.tooltip": "さわると サラサラする砂。持たせると じめんタイプの 技の威力が あがる。",
"cobblemon.command.pc.invalid-box": "ボックス番号 %1$s が最大ボックス数 %2$s を超えています。",
"cobblemon.trade.expired.receiver": "%1$s からの交換リクエストがタイムアウトしました。",
"item.cobblemon.leftovers.tooltip": "持たせると ポケモンの HPが 戦闘のあいだ 少しずつ 回復する。",
"item.cobblemon.mystic_water.tooltip": "しずくの形の 宝石。持たせると みずタイプの 技の威力が あがる。",
"item.cobblemon.shell_helmet": "カラっぽのシェルメット",
"item.cobblemon.fighting_gem.tooltip_1": "かくとうのタイプの ジュエル。 持たせると 1度だけ かくとうの 技の威力が 強まる。",
"item.cobblemon.energy_root.tooltip": "とても にがい ねっこ。ポケモン 1匹の HPを 半分回復するが なかよし度は 下がる。",
"item.cobblemon.heal_powder.tooltip": "とても にがい 粉薬。 ポケモン 1匹の 状態の 異常を すべて 回復するが なかよし度は 下がる。",
"cobblemon.trade.error.insufficient_pokemon.self": "交換するポケモンがいません!",
"item.cobblemon.light_clay.tooltip": "持たせたポケモンが ひかりのかべや リフレクターを 使ったとき いつもよりも 長く 残る。",
"item.cobblemon.protective_pads.tooltip": "攻撃する 相手に さわって 受ける 効果を 受けないように する。",
"item.cobblemon.razor_claw.tooltip_2": "ニューラに持たせて夜にレベルアップさせるとマニューラ、ニューラ(ヒスイのすがた)に持たせて昼にレベルアップさせるとオオニューラに進化する。",
"item.cobblemon.mirror_herb.tooltip_1": "持たせたポケモンは 1度だけ 相手の 能力が あがったとき まねして 同じように 能力を 上げる。",
"item.cobblemon.white_herb.tooltip_1": "持たせた ポケモンの能力が さがったとき 1度だけ 元の状態に 戻す。",
"item.cobblemon.normal_gem.tooltip_1": "ノーマルのタイプの ジュエル。持たせると 1度だけ ノーマルの 技の威力が 強まる。",
"cobblemon.trade.accept.receiver": "あなたは %1$s の交換リクエストを受け入れました!",
"item.cobblemon.safety_goggles.tooltip": "天候の ダメージだけでなく 粉を だす 技の 効果も 防げる ゴーグル。",
"item.cobblemon.shell_bell.tooltip": "持たせた ポケモンが 攻撃して 相手に ダメージを あたえたとき HPを 少し 回復できる。",
"item.cobblemon.shell_helmet.tooltip": "とあるポケモンが身に付けていた殻。カブルモに使うと シュバルゴに進化する。",
"cobblemon.trade.expired.sender": "%1$s との交換リクエストがタイムアウトしました。",
"item.cobblemon.ground_gem.tooltip_1": "じめんのタイプの ジュエル。持たせると 1度だけ じめんの 技の威力が 強まる。",
"item.cobblemon.x_attack.tooltip": "戦闘中の ポケモンの 攻撃を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.x_defence.tooltip": "戦闘中の ポケモンの 防御を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.x_accuracy.tooltip": "戦闘中の ポケモンの 命中率を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.x_speed.tooltip": "戦闘中の ポケモンの 素早さを 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.x_special_defence.tooltip": "戦闘中の ポケモンの 特防を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.x_special_attack.tooltip": "戦闘中の ポケモンの 特攻を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.dire_hit.tooltip": "戦闘中のポケモンが 急所に当てる確率を 2段階 あげる 道具。ひっこめると 元に 戻る。",
"item.cobblemon.guard_spec.tooltip": "戦闘中 5ターンの あいだ 味方の 能力を さげられなくする 道具。",
"cobblemon.trade.error.pending": "既に%1$sからの保留中の交換リクエストがあります!",
"cobblemon.trade.error.duplicate": "あなたは既に%1$sに交換リクエストを送信しました!",
"cobblemon.ui.pc.search": "検索",
"cobblemon.ui.wallpapers": "壁紙",
"cobblemon.ui.interact.ride": "騎乗",
"cobblemon.ui.interact.give.cosmetic_item": "コスメティックアイテムの変更"
}
@@ -5551,5 +5551,108 @@
"cobblemon.species.koraidon.name": "코라이돈",
"cobblemon.species.miraidon.name": "미라이돈",
"cobblemon.species.walkingwake.name": "굽이치는물결",
"cobblemon.species.ironleaves.name": "무쇠잎새"
"cobblemon.species.ironleaves.name": "무쇠잎새",
"item.cobblemon.poke_rod": "포켓몬 낚싯대",
"item.cobblemon.pokedex_black": "포켓몬 도감",
"item.cobblemon.pokedex_green": "포켓몬 도감",
"item.cobblemon.pokedex_pink": "포켓몬 도감",
"item.cobblemon.pokedex_red": "포켓몬 도감",
"item.cobblemon.pokedex_white": "포켓몬 도감",
"item.cobblemon.pokedex_yellow": "포켓몬 도감",
"item.cobblemon.npc_editor": "NPC의 트레이너 카드",
"item.cobblemon.dragon_scale.tooltip": "시드라에게 지니게 한 뒤 통신교환을 하면 킹드라로 진화한다",
"item.cobblemon.metal_coat.tooltip_1": "지니게 하면 강철타입 기술의 위력이 올라간다",
"item.cobblemon.upgrade.tooltip": "폴리곤에게 지니게 한 뒤 통신교환을 하면 폴리곤2로 진화한다",
"item.cobblemon.dubious_disc.tooltip": "폴리곤2에게 지니게 한 뒤 통신교환을 하면 폴리곤Z로 진화한다",
"item.cobblemon.deep_sea_scale.tooltip_1": "진주몽에게 지니게 하면 진주몽의 특수방어력이 2배가 된다",
"item.cobblemon.deep_sea_tooth.tooltip_1": "진주몽에게 지니게 하면 진주몽의 특수공격력이 2배가 된다",
"item.cobblemon.oval_stone.tooltip": "핑복에게 지니게 한 뒤 낮에 레벨업을 하면 럭키로 진화한다",
"item.cobblemon.protector.tooltip": "코뿌리에게 지니게 한 뒤 통신교환을 하면 거대코뿌리로 진화한다",
"item.cobblemon.sachet.tooltip": "슈쁘에게 지니게 한 뒤 통신교환을 하면 프레프티르로 진화한다",
"item.cobblemon.prism_scale.tooltip": "빈티나에게 지니게 한 뒤 통신교환을 하면 밀로틱으로 진화한다",
"item.cobblemon.strawberry_sweet.tooltip": "마빌크를 마휘핑 딸기폼으로 진화한다",
"item.cobblemon.love_sweet.tooltip": "마빌크를 마휘핑 사랑폼으로 진화한다",
"item.cobblemon.berry_sweet.tooltip": "마빌크를 마휘핑 열매폼으로 진화한다",
"item.cobblemon.clover_sweet.tooltip": "마빌크를 마휘핑 네잎폼으로 진화한다",
"item.cobblemon.flower_sweet.tooltip": "마빌크를 마휘핑 꽃폼으로 진화한다",
"item.cobblemon.ribbon_sweet.tooltip": "마빌크를 마휘핑 리본폼으로 진화한다",
"item.cobblemon.chipped_pot.tooltip": "데인차에게 사용하면 포트데스로 진화한다",
"item.cobblemon.cracked_pot.tooltip": "데인차에게 사용하면 포트데스로 진화한다",
"item.cobblemon.unremarkable_teacup.tooltip": "가짜배기 모습의 차데스에게 사용하면 범작의 모습의 그우린차로 진화한다",
"item.cobblemon.sweet_apple.tooltip": "과사삭벌레에게 사용하면 단지래플로 진화한다",
"item.cobblemon.tart_apple.tooltip": "과사삭벌레에게 사용하면 애프룡으로 진화한다",
"item.cobblemon.peat_block.tooltip": "보름달 상태인 밤에 링곰한테 사용하면 다투곰으로 진화한다",
"item.cobblemon.dawn_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.dusk_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.fire_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.leaf_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.moon_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.shiny_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.sun_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.water_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.rare_candy.tooltip": "사용한 포켓몬의 레벨을 1 올린다",
"item.cobblemon.exp_candy_xs.tooltip": "사용한 포켓몬의 경험치를 100 올려준다",
"item.cobblemon.exp_candy_m.tooltip": "사용한 포켓몬의 경험치를 3000 올려준다",
"item.cobblemon.exp_candy_l.tooltip": "사용한 포켓몬의 경험치를 10000 올려준다",
"item.cobblemon.carbos.tooltip": "포켓몬의 스피드 노력치를 10만큼 올려준다",
"item.cobblemon.hp_up.tooltip": "포켓몬의 체력 노력치를 10만큼 올려준다",
"item.cobblemon.protein.tooltip": "포켓몬의 공격 노력치를 10만큼 올려준다",
"item.cobblemon.potion.tooltip": "데리고 있는 1마리의 포켓몬에게 사용하면 HP를 60만큼 회복시켜 준다",
"item.cobblemon.super_potion.tooltip": "데리고 있는 1마리의 포켓몬에게 사용하면 HP를 100만큼 회복시켜 준다",
"item.cobblemon.max_potion.tooltip": "데리고 있는 1마리의 포켓몬에게 사용하면 HP를 모두 회복시켜 준다",
"item.cobblemon.health_feather.tooltip": "포켓몬의 체력 노력치를 1만큼 올려준다",
"item.cobblemon.muscle_feather.tooltip": "포켓몬의 공격 노력치를 1만큼 올려준다",
"item.cobblemon.resist_feather.tooltip": "포켓몬의 방어 노력치를 1만큼 올려준다",
"item.cobblemon.genius_feather.tooltip": "포켓몬의 특수공격 노력치를 1만큼 올려준다",
"item.cobblemon.clever_feather.tooltip": "포켓몬의 특수방어 노력치를 1만큼 올려준다",
"item.cobblemon.ability_capsule.tooltip": "현재 특성과는 다른 특성으로 바뀐다",
"item.cobblemon.adamant_mint.tooltip": "성격의 능력치를 고집스런의 능력치로 변경해준다",
"item.cobblemon.naughty_mint.tooltip": "성격의 능력치를 개구쟁이같은의 능력치로 변경해준다",
"item.cobblemon.brave_mint.tooltip": "성격의 능력치를 용감한의 능력치로 변경해준다",
"item.cobblemon.bold_mint.tooltip": "성격의 능력치를 대담한의 능력치로 변경해준다",
"item.cobblemon.impish_mint.tooltip": "성격의 능력치를 장난꾸러기같은의 능력치로 변경해준다",
"item.cobblemon.lax_mint.tooltip": "성격의 능력치를 촐랑거리는의 능력치로 변경해준다",
"item.cobblemon.modest_mint.tooltip": "성격의 능력치를 조심스러운의 능력치로 변경해준다",
"item.cobblemon.mild_mint.tooltip": "성격의 능력치를 의젓한의 능력치로 변경해준다",
"item.cobblemon.rash_mint.tooltip": "성격의 능력치를 덜렁거리는의 능력치로 변경해준다",
"item.cobblemon.calm_mint.tooltip": "성격의 능력치를 차분한의 능력치로 변경해준다",
"item.cobblemon.gentle_mint.tooltip": "성격의 능력치를 얌전한의 능력치로 변경해준다",
"item.cobblemon.careful_mint.tooltip": "성격의 능력치를 신중한의 능력치로 변경해준다",
"item.cobblemon.timid_mint.tooltip": "성격의 능력치를 겁쟁이같은의 능력치로 변경해준다",
"item.cobblemon.hasty_mint.tooltip": "성격의 능력치를 성급한의 능력치로 변경해준다",
"item.cobblemon.jolly_mint.tooltip": "성격의 능력치를 명랑한의 능력치로 변경해준다",
"item.cobblemon.serious_mint.tooltip": "성격의 능력치를 성실한의 능력치로 변경해준다",
"item.cobblemon.whipped_dream.tooltip": "나룸퍼프에게 지니게 한 뒤 통신교환을 하면 나루림로 진화한다",
"item.cobblemon.masterpiece_teacup.tooltip": "알짜배기 모습의 차데스에게 사용하면 걸작의 모습의 그우린차로 진화한다",
"item.cobblemon.swift_feather.tooltip": "포켓몬의 스피드 노력치를 1만큼 올려준다",
"item.cobblemon.naive_mint.tooltip": "성격의 능력치를 천진만난한의 능력치로 변경해준다",
"item.cobblemon.galarica_cuff.tooltip": "야돈에게 사용하면 가라르지방의 야도란으로 진화한다",
"item.cobblemon.galarica_nuts": "가라두구열매",
"item.cobblemon.pokedex_blue": "포켓몬 도감",
"item.cobblemon.kings_rock.tooltip_1": "지니게 하면 공격해서 데미지를 줄 때 상대를 풀죽이기도 한다",
"item.cobblemon.deep_sea_scale.tooltip_2": "진주몽에게 지니게 한 뒤 통신교환을 하면 분홍장이로 진화한다",
"item.cobblemon.magmarizer.tooltip": "마그마에게 지니게 한 뒤 통신교환을 하면 마그마번으로 진화한다",
"item.cobblemon.reaper_cloth.tooltip": "미라몽에게 지니게 한뒤 통신교환을 하면 야느와르몽으로 진화한다",
"item.cobblemon.star_sweet.tooltip": "마빌크를 마휘핑 별모양 폼으로 진화한다",
"item.cobblemon.thunder_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.exp_candy_s.tooltip": "사용한 포켓몬의 경험치를 800 올려준다",
"item.cobblemon.calcium.tooltip": "포켓몬의 특수공격 노력치를 10만큼 올려준다",
"item.cobblemon.iron.tooltip": "포켓몬의 방어 노력치를 10만큼 올려준다",
"item.cobblemon.hyper_potion.tooltip": "데리고 있는 1마리의 포켓몬에게 사용하면 HP를 150만큼 회복시켜 준다",
"item.cobblemon.lonely_mint.tooltip": "성격의 능력치를 외로움을 타는의 능력치로 변경해준다",
"item.cobblemon.relaxed_mint.tooltip": "성격의 능력치를 무사태평한의 능력치로 변경해준다",
"item.cobblemon.kings_rock.tooltip_2": "이 포켓몬들에게 지니게 한뒤 통신교환을 하면 슈륙챙이를 왕구리로 또한 야돈을 야도킹으로 진화시킨다",
"item.cobblemon.electirizer.tooltip": "에레브에게 지니게 한뒤 통신교환을 하면 에레키블으로 진화한다",
"item.cobblemon.galarica_wreath.tooltip": "야돈에게 사용하면 가라르지방의 야도킹으로 진화한다",
"item.cobblemon.exp_candy_xl.tooltip": "사용한 포켓몬의 경험치를 30000 올려준다",
"item.cobblemon.link_cable.tooltip": "진화에 교환이 필요한 포켓몬을 진화시킨다",
"item.cobblemon.metal_coat.tooltip_2": "이 포켓몬들에게 지니게 한뒤 통신교환을 하면 롱스톤을 강털톤으로 또한 스라크를 핫삼으로 진화시킨다",
"item.cobblemon.ice_stone.tooltip": "특정한 포켓몬을 진화시킨다",
"item.cobblemon.zinc.tooltip": "포켓몬의 특수방어 노력치를 10만큼 올려준다",
"item.cobblemon.full_restore.tooltip": "데리고 있는 1마리의 포켓몬에게 사용하면 HP를 모두 회복시켜 주고 상태이상을 치료해준다",
"item.cobblemon.sassy_mint.tooltip": "성격의 능력치를 건방진의 능력치로 변경해준다",
"item.cobblemon.deep_sea_tooth.tooltip_2": "진주몽에게 지니게 한 뒤 통신교환을 하면 헌테일로 진화한다",
"item.cobblemon.ability_patch.tooltip": "일반적인 특성을 가진 포켓몬에게 사용하면 숨겨진 특성으로 변경할 수 있다",
"item.cobblemon.black_augurite.tooltip": "스라크에게 사용하면 사마자르로 진화한다",
"item.cobblemon.quiet_mint.tooltip": "성격의 능력치를 냉정한의 능력치로 변경해준다"
}
File diff suppressed because it is too large. Load diff
@@ -5886,133 +5886,133 @@
"cobblemon.ability.soundproof": "Звукоизоляция",
"cobblemon.ability.soundproof.desc": "Soundproofing gives the Pokémon full immunity to all sound-based moves.",
"cobblemon.ability.speedboost": "Ускорение",
"cobblemon.ability.speedboost.desc": "Its Speed stat is boosted every turn.",
"cobblemon.ability.speedboost.desc": "Скорость Покемона увеличивается каждый ход.",
"cobblemon.ability.stakeout": "Засада",
"cobblemon.ability.stakeout.desc": "Doubles the damage dealt to the target’s replacement if the target switches out.",
"cobblemon.ability.stakeout.desc": "Удваивает урон, наносимый по цели, которая только что заменила другого Покемона.",
"cobblemon.ability.stall": "Застой",
"cobblemon.ability.stall.desc": "The Pokémon moves after all other Pokémon do.",
"cobblemon.ability.stall.desc": "Покемон всегда ходит последним.",
"cobblemon.ability.stalwart": "Стойкий",
"cobblemon.ability.stalwart.desc": "Ignores the effects of opposing Pokémon’s Abilities and moves that draw in moves.",
"cobblemon.ability.stalwart.desc": "Игнорирует эффекты Способностей у вражеского Покемона, а также игнорирует приёмы, которые притягивают к себе другие приёмы.",
"cobblemon.ability.stamina": "Выносливость",
"cobblemon.ability.stamina.desc": "Boosts the Defense stat when hit by an attack.",
"cobblemon.ability.stamina.desc": "Повышает Защиту, когда Покемона атакуют.",
"cobblemon.ability.stancechange": "Смена стойки",
"cobblemon.ability.stancechange.desc": "The Pokémon changes its form to Blade Forme when it uses an attack move and changes to Shield Forme when it uses King’s Shield.",
"cobblemon.ability.static": "Статичное электричество",
"cobblemon.ability.static.desc": "The Pokémon is charged with static electricity, so contact with it may cause paralysis.",
"cobblemon.ability.stancechange.desc": "Покемон меняет форму на Форму клинка, когда использует атакующий приём, и меняет на Форму щита, когда использует Королевский щит.",
"cobblemon.ability.static": "Статическое электричество",
"cobblemon.ability.static.desc": "Покемон заряжен статическим электричеством и может парализовать тех, кто вступает с ним в прямой контакт.",
"cobblemon.ability.steadfast": "Непоколебимый",
"cobblemon.ability.steadfast.desc": "The Pokémon’s determination boosts the Speed stat each time the Pokémon flinches.",
"cobblemon.ability.steadfast.desc": "Решительность Покемона увеличивает его Скорость каждый раз, когда он вздрагивает.",
"cobblemon.ability.steamengine": "Паровой двигатель",
"cobblemon.ability.steamengine.desc": "Boosts the Pokémon’s Speed stat drastically if hit by a Fire- or Water-type move.",
"cobblemon.ability.steamengine.desc": "Значительно увеличивает Скорость, когда Покемона атакуют приёмом Огненного или Водного типа.",
"cobblemon.ability.steelworker": "Сталевар",
"cobblemon.ability.steelworker.desc": "Powers up Steel-type moves.",
"cobblemon.ability.steelworker.desc": "Усиливает приёмы Стального типа.",
"cobblemon.ability.steelyspirit": "Стальной дух",
"cobblemon.ability.steelyspirit.desc": "Powers up ally Pokémon’s Steel-type moves.",
"cobblemon.ability.steelyspirit.desc": "Усиливает приёмы Стального типа у Покемона и его союзников.",
"cobblemon.ability.stench": "Вонь",
"cobblemon.ability.stench.desc": "By releasing stench when attacking, this Pokémon may cause the target to flinch.",
"cobblemon.ability.stench.desc": "Когда Покемона атакуют, он выпускает вонь, что может заставить цель вздрогнуть.",
"cobblemon.ability.stickyhold": "Липкий",
"cobblemon.ability.stickyhold.desc": "Items held by the Pokémon are stuck fast and cannot be removed by other Pokémon.",
"cobblemon.ability.stickyhold.desc": "Удерживаемые предметы Покемона прилипают к его телу и не могут быть убраны другими Покемонами.",
"cobblemon.ability.stormdrain": "Водосток",
"cobblemon.ability.stormdrain.desc": "Draws in all Water-type moves. Instead of being hit by Water-type moves, it boosts its Sp. Atk.",
"cobblemon.ability.stormdrain.desc": "Покемон притягивает к себе все приёмы Водного типа. Вместо того, чтобы получать от них урон, его Спец. Атака увеличивается.",
"cobblemon.ability.strongjaw": "Сильная челюсть",
"cobblemon.ability.strongjaw.desc": "The Pokémon’s strong jaw boosts the power of its biting moves.",
"cobblemon.ability.strongjaw.desc": "Сильная челюсть Покемона увеличивает силу его кусающих приёмов.",
"cobblemon.ability.sturdy": "Крепкий",
"cobblemon.ability.sturdy.desc": "It cannot be knocked out with one hit. One-hit KO moves cannot knock it out, either.",
"cobblemon.ability.sturdy.desc": "Покемон не может быть повержен одним ударом, пока у него полные ОЗ. Приёмы, которые могут повергнуть одним ударом также не работают.",
"cobblemon.ability.suctioncups": "Присоски",
"cobblemon.ability.suctioncups.desc": "This Pokémon uses suction cups to stay in one spot to negate all moves and items that force switching out.",
"cobblemon.ability.suctioncups.desc": "Покемон использует присоски, чтобы оставаться на одном месте. Это защищает его от приёмов и предметов, которые вынуждают замену Покемона.",
"cobblemon.ability.superluck": "Супер удача",
"cobblemon.ability.superluck.desc": "The Pokémon is so lucky that the critical-hit ratios of its moves are boosted.",
"cobblemon.ability.superluck.desc": "Покемон настолько удачлив, что шанс критических ударов у его приёмов повышен.",
"cobblemon.ability.supersweetsyrup": "Суперсладкий сироп",
"cobblemon.ability.supersweetsyrup.desc": "Lowers the evasion of opposing Pok�mon by 1 stage when first sent into battle",
"cobblemon.ability.supersweetsyrup.desc": "Тошнотворно-сладкий аромат распространяется по полю, когда Покемон впервые вступает в битву, что снижает уклонение у вражеских Покемонов.",
"cobblemon.ability.supremeoverlord": "Верховный повелитель",
"cobblemon.ability.supremeoverlord.desc": "This Pokemon's moves have their power multiplied by 1+(X*0.1), where X is the total number of times any Pokemon has fainted on the user's side when this Ability became active, and X cannot be greater than 5.",
"cobblemon.ability.supremeoverlord.desc": "Когда Покемон вступает в бой, его Атака и Спец. Атака немного повышаются за каждого побеждённого союзника из его команды.",
"cobblemon.ability.surgesurfer": "Электросёрфер",
"cobblemon.ability.surgesurfer.desc": "Doubles the Pokémon’s Speed stat on Electric Terrain.",
"cobblemon.ability.surgesurfer.desc": "Вдвое увеличивает Скорость Покемона, когда он находится на Электрическом поле.",
"cobblemon.ability.swarm": "Рой",
"cobblemon.ability.swarm.desc": "Powers up Bug-type moves when the Pokémon’s HP is low.",
"cobblemon.ability.swarm.desc": "Повышает силу приёмов Насекомого типа, когда у Покемона мало ОЗ.",
"cobblemon.ability.sweetveil": "Сладкая завеса",
"cobblemon.ability.sweetveil.desc": "Prevents itself and ally Pokémon from falling asleep.",
"cobblemon.ability.sweetveil.desc": "Не даёт уснуть Покемону и его союзникам.",
"cobblemon.ability.swiftswim": "Быстрое плавание",
"cobblemon.ability.swiftswim.desc": "Boosts the Pokémon’s Speed stat in rain.",
"cobblemon.ability.swiftswim.desc": "Повышает Скорость Покемона во время дождя.",
"cobblemon.ability.swordofruin": "Меч руин",
"cobblemon.ability.swordofruin.desc": "The Defense stat of all other active Pokemon is multiplied by 0.75.",
"cobblemon.ability.swordofruin.desc": "Сила разрушительного меча Покемона снижает Защиту у всех Покемонов, кроме себя.",
"cobblemon.ability.symbiosis": "Симбиоз",
"cobblemon.ability.symbiosis.desc": "The Pokémon passes its item to an ally that has used up an item.",
"cobblemon.ability.symbiosis.desc": "Покемон передаёт свой предмет союзнику, который уже использовал предмет.",
"cobblemon.ability.synchronize": "Синхронизация",
"cobblemon.ability.synchronize.desc": "The attacker will receive the same status condition if it inflicts a burn, poison, or paralysis to the Pokémon.",
"cobblemon.ability.synchronize.desc": "Если атакующий обжигает, парализует или отравляет Покемона, он получает такое же статусное состояние.",
"cobblemon.ability.tabletsofruin": "Таблички руин",
"cobblemon.ability.tabletsofruin.desc": "The Attack stat of all other active Pokemon is multiplied by 0.75.",
"cobblemon.ability.tabletsofruin.desc": "Сила разрушительных деревянных табличек этого Покемона снижает Атаку у всех Покемонов, кроме себя.",
"cobblemon.ability.tangledfeet": "Запутанные ноги",
"cobblemon.ability.tangledfeet.desc": "Raises evasiveness if the Pokémon is confused.",
"cobblemon.ability.tangledfeet.desc": "Повышает уклонение Покемона, если он в замешательстве.",
"cobblemon.ability.tanglinghair": "Запутывающие волосы",
"cobblemon.ability.tanglinghair.desc": "Contact with the Pokémon lowers the attacker’s Speed stat.",
"cobblemon.ability.tanglinghair.desc": "Прямой контакт с Покемоном снижает Скорость атакующего.",
"cobblemon.ability.technician": "Техника",
"cobblemon.ability.technician.desc": "Powers up the Pokémon’s weaker moves.",
"cobblemon.ability.technician.desc": "Усиливает слабые приёмы, чтобы Покемон мог наносить ими больше урона.",
"cobblemon.ability.telepathy": "Телепатия",
"cobblemon.ability.telepathy.desc": "Anticipates an ally’s attack and dodges it.",
"cobblemon.ability.telepathy.desc": "Покемон предвидит атаку своего союзника и уклоняется от неё.",
"cobblemon.ability.teraformzero": "Нулевая тераформа",
"cobblemon.ability.teraformzero.desc": "When Terapagos changes into its Stellar Form, it uses its hidden powers to eliminate all effects of weather and terrain, reducing them to zero.",
"cobblemon.ability.teraformzero.desc": "Когда Терапагос переходит в свою Звёздную форму, он использует свои скрытые силы, чтобы устранить все эффекты погоды и поля, сводя их к нулю.",
"cobblemon.ability.terashell": "Тера панцирь",
"cobblemon.ability.terashell.desc": "The Pokémon's shell contains the powers of each type. All damage-dealing moves that hit the Pokémon when its HP is full will not be very effective.",
"cobblemon.ability.terashell.desc": "Панцирь Покемона содержит силы каждого типа. Все наносящие урон приёмы, которые попадают в этого Покемона с полным ОЗ, будут не очень эффективны.",
"cobblemon.ability.terashift": "Тера сдвиг",
"cobblemon.ability.terashift.desc": "When the Pokémon enters a battle, it absorbs the energy around itself and transforms into its Terastal Form.",
"cobblemon.ability.terashift.desc": "Когда Покемон вступает в битву, он поглощает энергию вокруг себя и трансформируется в Терастал форму.",
"cobblemon.ability.teravolt": "Теравольт",
"cobblemon.ability.teravolt.desc": "Moves can be used on the target regardless of its Abilities.",
"cobblemon.ability.teravolt.desc": "Приёмы Покемона не зависят от Способностей цели.",
"cobblemon.ability.thermalexchange": "Теплообмен",
"cobblemon.ability.thermalexchange.desc": "This Pokemon's Attack is raised 1 stage after it is damaged by a Fire-type move. This Pokemon cannot be burned. Gaining this Ability while burned cures it.",
"cobblemon.ability.thermalexchange.desc": "Повышает Атаку, когда Покемона атакуют приёмом Огненного типа. Покемона также нельзя обжечь.",
"cobblemon.ability.thickfat": "Подкожный жир",
"cobblemon.ability.thickfat.desc": "The Pokémon is protected by a layer of thick fat, which halves the damage taken from Fire- and Ice-type moves.",
"cobblemon.ability.thickfat.desc": "Покемон защищён слоем толстого жира, который вдвое снижает урон от приёмов Огненного и Ледяного типа.",
"cobblemon.ability.tintedlens": "Тонированные линзы",
"cobblemon.ability.tintedlens.desc": "The Pokémon can use “not very effective” moves to deal regular damage.",
"cobblemon.ability.tintedlens.desc": "Покемон может использовать не очень эффективные приёмы, чтобы нанести обычный урон.",
"cobblemon.ability.torrent": "Поток",
"cobblemon.ability.torrent.desc": "Powers up Water-type moves when the Pokémon’s HP is low.",
"cobblemon.ability.torrent.desc": "Усиливает приёмы Водного типа, когда у Покемона мало ОЗ.",
"cobblemon.ability.toughclaws": "Жёсткие когти",
"cobblemon.ability.toughclaws.desc": "Powers up moves that make direct contact.",
"cobblemon.ability.toughclaws.desc": "Усиливает приёмы, которые создают прямой контакт.",
"cobblemon.ability.toxicboost": "Токсичное усиление",
"cobblemon.ability.toxicboost.desc": "Powers up physical attacks when the Pokémon is poisoned.",
"cobblemon.ability.toxicboost.desc": "Усиливает физические приёмы, когда Покемон отравлен.",
"cobblemon.ability.toxicchain": "Токсичная цепь",
"cobblemon.ability.toxicchain.desc": "The power of the Pokémon's toxic chain may badly poison any target the Pok�mon hits with a move",
"cobblemon.ability.toxicchain.desc": "Сила токсичной цепи Покемона может сильно отравить любую цель, по которой Покемон попадёт своим приёмом.",
"cobblemon.ability.toxicdebris": "Токсичные осколки",
"cobblemon.ability.toxicdebris.desc": "If this Pokémon is hit by a physical attack, Toxic Spikes are set on the opposing side.",
"cobblemon.ability.toxicdebris.desc": "Разбрасывает ядовитые шипы под ноги противнику, когда Покемон получает урон от физических приёмов.",
"cobblemon.ability.trace": "Отпечаток",
"cobblemon.ability.trace.desc": "When it enters a battle, the Pokémon copies an opposing Pokémon’s Ability.",
"cobblemon.ability.trace.desc": "Вступая в бой, Покемон копирует Способность вражеского Покемона.",
"cobblemon.ability.transistor": "Транзистор",
"cobblemon.ability.transistor.desc": "Powers up Electric-type moves.",
"cobblemon.ability.transistor.desc": "Усиливает приёмы Электрического типа.",
"cobblemon.ability.triage": "Триаж",
"cobblemon.ability.triage.desc": "Gives priority to a healing move.",
"cobblemon.ability.triage.desc": "Отдаёт приоритет лечащим приёмам Покемона.",
"cobblemon.ability.truant": "Прогульщик",
"cobblemon.ability.truant.desc": "The Pokémon can’t use a move if it had used a move on the previous turn.",
"cobblemon.ability.truant.desc": "Каждый раз, когда Покемон использует приём, следующий ход он будет валять дурака.",
"cobblemon.ability.turboblaze": "Турбопламя",
"cobblemon.ability.turboblaze.desc": "Moves can be used on the target regardless of its Abilities.",
"cobblemon.ability.turboblaze.desc": "Приёмы Покемона не зависят от Способностей цели.",
"cobblemon.ability.unaware": "Незнающий",
"cobblemon.ability.unaware.desc": "When attacking, the Pokémon ignores the target Pokémon’s stat changes.",
"cobblemon.ability.unaware.desc": "Когда Покемон атакует, он игнорирует изменения характеристик у цели.",
"cobblemon.ability.unburden": "Разгрузка",
"cobblemon.ability.unburden.desc": "Boosts the Speed stat if the Pokémon’s held item is used or lost.",
"cobblemon.ability.unburden.desc": "Повышает Скорость Покемона, если его удерживаемый предмет использован или потерян.",
"cobblemon.ability.unnerve": "Нервирование",
"cobblemon.ability.unnerve.desc": "Unnerves opposing Pokémon and makes them unable to eat Berries.",
"cobblemon.ability.unnerve.desc": "Нервирует вражеского Покемона и не позволяет ему съесть ягоды.",
"cobblemon.ability.unseenfist": "Невидимый кулак",
"cobblemon.ability.unseenfist.desc": "If the Pokémon uses moves that make direct contact, it can attack the target even if the target protects itself.",
"cobblemon.ability.unseenfist.desc": "Если Покемон использует приёмы, которые создают прямой контакт, он может атаковать цель, даже если та защищается.",
"cobblemon.ability.vesselofruin": "Сосуд руин",
"cobblemon.ability.vesselofruin.desc": "The Special Attack stat of all other active Pokemon is multiplied by 0.75.",
"cobblemon.ability.vesselofruin.desc": "Сила разрушительного сосуда Покемона снижает Спец. Атаку у всех Покемонов, кроме себя.",
"cobblemon.ability.victorystar": "Звезда победы",
"cobblemon.ability.victorystar.desc": "Boosts the accuracy of its allies and itself.",
"cobblemon.ability.victorystar.desc": "Повышает точность Покемона и его союзников.",
"cobblemon.ability.vitalspirit": "Бодрый дух",
"cobblemon.ability.vitalspirit.desc": "The Pokémon is full of vitality, and that prevents it from falling asleep.",
"cobblemon.ability.vitalspirit.desc": "Покемон полон жизненных сил, и это не дает ему уснуть.",
"cobblemon.ability.voltabsorb": "Поглощение вольт",
"cobblemon.ability.voltabsorb.desc": "Restores HP if hit by an Electric-type move instead of taking damage.",
"cobblemon.ability.voltabsorb.desc": "Заместо получения урона, Покемон восстанавливает ОЗ, если его ударяют приёмом Электрического типа.",
"cobblemon.ability.wanderingspirit": "Блуждающий дух",
"cobblemon.ability.wanderingspirit.desc": "Покемон обменивается способностями с врагом, который наносит ему удар, создающий прямой контакт.",
"cobblemon.ability.waterabsorb": "Поглощение воды",
"cobblemon.ability.waterabsorb.desc": "Заместо получения урона, Покемон восстанавливает ОЗ, если его ударяют атакой Водного типа.",
"cobblemon.ability.waterabsorb.desc": "Заместо получения урона, Покемон восстанавливает ОЗ, когда его атакуют приёмом Водного типа.",
"cobblemon.ability.waterbubble": "Водяной пузырь",
"cobblemon.ability.waterbubble.desc": "Снижает получаемый урон от приёмов Огненного типа и предотвращает ожоги.",
"cobblemon.ability.watercompaction": "Уплотнение водой",
"cobblemon.ability.watercompaction.desc": "Резко увеличивает Защиту, когда Покемона ударяют приёмом Водного типа.",
"cobblemon.ability.watercompaction.desc": "Резко увеличивает Защиту, когда Покемон получает урон от приёма Водного типа.",
"cobblemon.ability.waterveil": "Водяное покрытие",
"cobblemon.ability.waterveil.desc": "Водяное покрытие Покемона не даёт ему обжечься.",
"cobblemon.ability.weakarmor": "Хрупкая броня",
"cobblemon.ability.weakarmor.desc": "Защита Покемона понижается, когда он получает урон от физических приёмов, но взамен его Скорость резко повышается.",
"cobblemon.ability.wellbakedbody": "Пропечённое тело",
"cobblemon.ability.wellbakedbody.desc": "Покемон не получает урона от приёмов Огненного типа. Вместо этого его Защита резко повышается.",
"cobblemon.ability.wellbakedbody.desc": "Покемон не получает урона от приёмов Огненного типа. Вместо этого, его Защита резко повышается.",
"cobblemon.ability.whitesmoke": "Белый дым",
"cobblemon.ability.whitesmoke.desc": "Покемон защищён белым дымом, который не позволяет другим Покемонам понижать его характеристики.",
"cobblemon.ability.wimpout": "Трус",
@@ -6022,7 +6022,7 @@
"cobblemon.ability.windrider": "Ветряной наездник",
"cobblemon.ability.windrider.desc": "Повышает Атаку Покемона, если срабатывает Попутный ветер, или если Покемона атакуют ветряным приёмом. Покемон также не получает урон от ветра.",
"cobblemon.ability.wonderguard": "Причудливая защита",
"cobblemon.ability.wonderguard.desc": "Её таинственная сила позволяет получать урон только от суперэффективных приёмов.",
"cobblemon.ability.wonderguard.desc": "Её таинственная сила позволяет получать урон только от супер эффективных приёмов.",
"cobblemon.ability.wonderskin": "Причудливая кожа",
"cobblemon.ability.wonderskin.desc": "Увеличивает шанс того, что вражеские статусные приёмы промахнутся.",
"cobblemon.ability.zenmode": "Режим дзен",
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "cobblemon:item/evolution/syrupy_apple"
}
}
@@ -1026,6 +1026,50 @@
{ "name": "cobblemon:shiny/wild_shiny_ambient_chime_4", "volume": 0.8, "attenuation_distance": 128.0 }
]
},
"animation.plumage.wing_flap.small": {
"sounds": [
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_1", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_2", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_3", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_4", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_5", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_6", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_small_7", "volume": 0.25 }
]
},
"animation.plumage.wing_flap.medium": {
"sounds": [
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_1", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_2", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_3", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_4", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_5", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_6", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/plumage_wing_flap_medium_7", "volume": 0.3 }
]
},
"animation.leather.wing_flap.small": {
"sounds": [
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_1", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_2", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_3", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_4", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_5", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_6", "volume": 0.25 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_small_7", "volume": 0.25 }
]
},
"animation.leather.wing_flap.medium": {
"sounds": [
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_1", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_2", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_3", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_4", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_5", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_6", "volume": 0.3 },
{ "name": "cobblemon:animation/wings/leather_wing_flap_medium_7", "volume": 0.3 }
]
},
"pokemon.bulbasaur.ambient": {
"sounds": [ "cobblemon:pokemon/bulbasaur/bulbasaur_ambient" ]
},
Loaded 100 of 219 files, more files were not shown because too many files have changed in this diff. Show more