From 3546f3b5a7f066b823a17ad9983db0681e10be27 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 20 Apr 2023 15:46:05 -0400 Subject: [PATCH] Refactor source files and add berries --- public/audio/se/m_bubble.wav | Bin 82812 -> 0 bytes public/audio/se/m_bubble2.wav | Bin 56740 -> 0 bytes public/audio/se/m_bubble3.wav | Bin 98076 -> 0 bytes public/audio/se/m_crabhammer.wav | Bin 70492 -> 0 bytes public/audio/se/pp_restore.wav | Bin 79900 -> 0 bytes public/battle-anims/bounce-charging.json | 1 - public/battle-anims/common-attract.json | 1 - public/battle-anims/common-bide.json | 1 - public/battle-anims/common-bind.json | 1 - public/battle-anims/common-burn.json | 1 - public/battle-anims/common-clamp.json | 1 - public/battle-anims/common-confusion.json | 1 - public/battle-anims/common-covet.json | 1 - .../battle-anims/common-curse-no-ghost.json | 1 - public/battle-anims/common-curse.json | 1 - .../battle-anims/common-electric-terrain.json | 1 - public/battle-anims/common-fire-spin.json | 1 - public/battle-anims/common-frozen.json | 1 - .../battle-anims/common-grassy-terrain.json | 1 - public/battle-anims/common-hail.json | 1 - public/battle-anims/common-harsh-sun.json | 1 - public/battle-anims/common-health-up.json | 1 - public/battle-anims/common-heavy-rain.json | 1 - public/battle-anims/common-leech-seed.json | 1 - public/battle-anims/common-magma-storm.json | 1 - public/battle-anims/common-misty-terrain.json | 1 - public/battle-anims/common-paralysis.json | 1 - public/battle-anims/common-poison.json | 1 - public/battle-anims/common-protect.json | 1 - .../battle-anims/common-psychic-terrain.json | 1 - public/battle-anims/common-quick-guard.json | 1 - public/battle-anims/common-rain.json | 1 - public/battle-anims/common-sand-tomb.json | 1 - public/battle-anims/common-sandstorm.json | 1 - public/battle-anims/common-sleep.json | 1 - public/battle-anims/common-strong-winds.json | 1 - public/battle-anims/common-sunny.json | 1 - public/battle-anims/common-toxic.json | 1 - public/battle-anims/common-use-item.json | 1217 +++++++++++ public/battle-anims/common-whirlpool.json | 1 - public/battle-anims/common-wide-guard.json | 1 - public/battle-anims/common-wind.json | 1 - public/battle-anims/common-wrap.json | 1 - public/battle-anims/dig-charging.json | 1 - public/battle-anims/dive-charging.json | 1 - public/battle-anims/doom-desire-charging.json | 1 - public/battle-anims/fly-charging.json | 1 - .../battle-anims/freeze-shock-charging.json | 1 - public/battle-anims/ice-burn-charging.json | 1 - public/battle-anims/razor-wind-charging.json | 1 - .../battle-anims/shadow-force-charging.json | 1 - public/battle-anims/skull-bash-charging.json | 1 - public/battle-anims/sky-attack-charging.json | 1 - public/battle-anims/sky-drop-charging.json | 1 - public/battle-anims/solar-beam-charging.json | 1 - public/images/items.json | 1807 +++++++++-------- public/images/items.png | Bin 40663 -> 18807 bytes public/images/items/berry_pouch.png | Bin 0 -> 354 bytes public/images/items/lum_berry,png.png | Bin 0 -> 256 bytes public/images/items/sitrus_berry.png | Bin 0 -> 303 bytes src/arena.ts | 14 +- src/battle-phases.ts | 64 +- src/battle-scene.ts | 47 +- src/{abilities.ts => data/ability.ts} | 0 src/{ => data}/battle-anims.ts | 76 +- src/{ => data}/battle-stat.ts | 0 src/{ => data}/battle-tag.ts | 10 +- src/data/berry.ts | 60 + src/{ => data}/biome.ts | 2 +- src/{ => data}/exp.ts | 0 src/{ => data}/gender.ts | 0 src/{ => data}/move.ts | 8 +- src/{ => data}/pokeball.ts | 4 +- src/{ => data}/pokemon-evolutions.ts | 8 +- src/{ => data}/pokemon-level-moves.ts | 0 src/{ => data}/pokemon-species.ts | 7 +- src/{ => data}/pokemon-stat.ts | 2 +- src/{ => data}/species.ts | 0 src/{ => data}/status-effect.ts | 2 +- src/data/temp-battle-stat.ts | 36 + src/{ => data}/tms.ts | 0 src/{ => data}/type.ts | 0 src/{ => data}/weather.ts | 6 +- src/evolution-phase.ts | 2 +- src/{ => modifier}/modifier-type.ts | 92 +- src/{ => modifier}/modifier.ts | 105 +- src/pokemon.ts | 40 +- src/{ => system}/auto-play.ts | 28 +- src/{ => system}/game-data.ts | 14 +- src/{ => system}/game-speed.ts | 4 +- src/ui/ball-ui-handler.ts | 4 +- src/{ => ui}/battle-info.ts | 12 +- src/ui/battle-message-ui-handler.ts | 4 +- src/ui/biome-select-ui-handler.ts | 4 +- src/ui/command-ui-handler.ts | 2 +- src/ui/confirm-ui-handler.ts | 2 +- src/ui/fight-ui-handler.ts | 4 +- src/ui/modifier-bar.ts | 3 - src/ui/modifier-select-ui-handler.ts | 6 +- src/ui/party-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 12 +- src/ui/summary-ui-handler.ts | 10 +- src/{ => ui}/text.ts | 0 103 files changed, 2598 insertions(+), 1171 deletions(-) delete mode 100644 public/audio/se/m_bubble.wav delete mode 100644 public/audio/se/m_bubble2.wav delete mode 100644 public/audio/se/m_bubble3.wav delete mode 100644 public/audio/se/m_crabhammer.wav delete mode 100644 public/audio/se/pp_restore.wav create mode 100644 public/battle-anims/common-use-item.json create mode 100644 public/images/items/berry_pouch.png create mode 100644 public/images/items/lum_berry,png.png create mode 100644 public/images/items/sitrus_berry.png rename src/{abilities.ts => data/ability.ts} (100%) rename src/{ => data}/battle-anims.ts (94%) rename src/{ => data}/battle-stat.ts (100%) rename src/{ => data}/battle-tag.ts (97%) create mode 100644 src/data/berry.ts rename src/{ => data}/biome.ts (99%) rename src/{ => data}/exp.ts (100%) rename src/{ => data}/gender.ts (100%) rename src/{ => data}/move.ts (99%) rename src/{ => data}/pokeball.ts (96%) rename src/{ => data}/pokemon-evolutions.ts (99%) rename src/{ => data}/pokemon-level-moves.ts (100%) rename src/{ => data}/pokemon-species.ts (99%) rename src/{ => data}/pokemon-stat.ts (91%) rename src/{ => data}/species.ts (100%) rename src/{ => data}/status-effect.ts (98%) create mode 100644 src/data/temp-battle-stat.ts rename src/{ => data}/tms.ts (100%) rename src/{ => data}/type.ts (100%) rename src/{ => data}/weather.ts (98%) rename src/{ => modifier}/modifier-type.ts (91%) rename src/{ => modifier}/modifier.ts (87%) rename src/{ => system}/auto-play.ts (93%) rename src/{ => system}/game-data.ts (96%) rename src/{ => system}/game-speed.ts (94%) rename src/{ => ui}/battle-info.ts (97%) delete mode 100644 src/ui/modifier-bar.ts rename src/{ => ui}/text.ts (100%) diff --git a/public/audio/se/m_bubble.wav b/public/audio/se/m_bubble.wav deleted file mode 100644 index 4a786ab547c23a1e09efc94e57cca40603cb0fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82812 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 TGY!l%Fw?+KsR8F=L+$=Qs_svm diff --git a/public/audio/se/m_bubble2.wav b/public/audio/se/m_bubble2.wav deleted file mode 100644 index 1efc76345b1b5c5de684aa96ae86749cd8933147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56740 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 CU(gc( diff --git a/public/audio/se/m_crabhammer.wav b/public/audio/se/m_crabhammer.wav deleted file mode 100644 index 5bfc38deef6b2f3dd845a81b0e821d519af8bf0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70492 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 R26hbW7GqIV12AScVti#JeEyVvIm`YDQO2 zGd0sa{a4jh)qUOsOm|nEI`vfp61rEs{_)kTuV3CRKY#br55NBQ?wk8%S?-oc%lCgS z%l%)EmdDHe^2^(IZ~yuB?#s#b&&%g{I0=0Ch=-E^=WL*LBfvQyXnpvIdsR*V_oj?M zIpMi8%IG3`CE)eO{Qa!o^WqbpJ%N7YeN@`B!TXC(KBm^sCGNz0cVf1g_xs(XUkS6- zpMj)(HU%V57n&-P<$vbWm9|22q z_3VXjB6BNA-hmmuOR)CX>-z*F*O}$6NcB1L-RRMq)LdrK?J=VfYs_*#xceOOF7)b& zdln<>?Y|G%@}0yPbNB4-Fcj1#MkgpP{zDHoD_yYtP4O{qZMX-=Wo+Y5S@tI(DY^ zTqNuN{$Ks`{t2EVfqI%_W*+%q?T5gaH?qDfKa=a{w4Uaenf=K7s5Iu3>$>tWF?pAD z^v27QC+(-gc+;)x$j`*&oYs*WCrgg359M(tS>K6|Ny)jaC+9y?j;eiS|I@4M!2V=p z9M;hqBTI&;ebq6hm*0i`iSRqjr!z(*KSA4yV@xf-3)|D+cb8AbcO*YKn~J`tl<(dq zeSTN@M0`i`le4GjdqQdV_K5R3N)zxM!Ar}Yn(ygcySGQ1*U@$NeouKR*--O4jceyN z=<>U`?%L-mKP4NAKBp0PZG$SGi+HF0PWY(UQ1Ul{xMLec`CP<1^>@NYMOVom`LknP zf;`pFUHRPMp`okdlRR~;OOU5J?a1GXhk}lZKiZpP9b!CHw=Vp>@et5a@kg6F)}hu` zm3H7`)z-02whyw@r4FgKswfk1yRo@J|#A>-O>)##Um|7Is8c(u zvM%~Y+o43A^retrjk>h8%I~6Yq%BIDo4ypvs%~{hdl(hvO)REpwn}uHI@1JP)uG#lmd)D4H z`(A5n&Rw&2&Aw;6?;5k#m@)d4BY=6z5s;f&Tv@K0xN_W$+)3OG|A|}|XJvl(Va0Q0 zxt*{BnO(UqsIrXvuqv%Ay9ztt-<9oxs`I;#E7HnxtGEOH6S*#K%KVP0qO|{2pH}2w zN%z3-_^jx?2WkJfN9Q{e+L4|^s3zy0lz&c-doB3A5!f@~d{!nWp8V5oc>x_9rHQ8VXpNwk8^2V*EF6IL(Vt*cD4$|{DVsbbwKtX#HRS9!}StF}dN z3gvH`O8HxPwOdAcr7fej=9;&ul)Y)xTpiZdE$fa(*VY7I$}zSA-!y?3yVQPKnMS1a zj^{Kxy*lRStkbGAB1dx{L$lMXeQwTsT9HQNXdYvzLV9(~Pp#96G$N&UJg3>|)iFP3 zomQn0Ihy+znw?(lb93I)iZmie^B6-F(yL>BYMoZ35h=anIn7S5j`^u|TJaW<(s?+~ z(R+wZ{hFh-#-w!Cb55;Xy&PY;TIiF~#5^ehN+-UeS>aVYo1TQT&$~1$ygFxvcf#4{ z-EcPDJ!ge?XjXg`&fa$8nb&`YUFEH3TZQx6Rqi=@+mXnF*XzHBHu~qct9gJcxLUmf HOXko2VqN}P diff --git a/public/battle-anims/bounce-charging.json b/public/battle-anims/bounce-charging.json index fdd8d307b..ce949a7aa 100644 --- a/public/battle-anims/bounce-charging.json +++ b/public/battle-anims/bounce-charging.json @@ -1,5 +1,4 @@ { - "id": 1001, "graphic": "", "frames": [ [ diff --git a/public/battle-anims/common-attract.json b/public/battle-anims/common-attract.json index 3102a04d5..b943bee6e 100644 --- a/public/battle-anims/common-attract.json +++ b/public/battle-anims/common-attract.json @@ -1,5 +1,4 @@ { - "id": 2008, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-bide.json b/public/battle-anims/common-bide.json index d0c635e79..3b63f2561 100644 --- a/public/battle-anims/common-bide.json +++ b/public/battle-anims/common-bide.json @@ -1,5 +1,4 @@ { - "id": 2017, "graphic": "PRAS- Bide", "frames": [ [ diff --git a/public/battle-anims/common-bind.json b/public/battle-anims/common-bind.json index b1cae760f..199000d73 100644 --- a/public/battle-anims/common-bind.json +++ b/public/battle-anims/common-bind.json @@ -1,5 +1,4 @@ { - "id": 2009, "graphic": "PRAS- Wrapping", "frames": [ [ diff --git a/public/battle-anims/common-burn.json b/public/battle-anims/common-burn.json index d9f779d45..08e9ab044 100644 --- a/public/battle-anims/common-burn.json +++ b/public/battle-anims/common-burn.json @@ -1,5 +1,4 @@ { - "id": 2006, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-clamp.json b/public/battle-anims/common-clamp.json index 4185883c8..d90010b37 100644 --- a/public/battle-anims/common-clamp.json +++ b/public/battle-anims/common-clamp.json @@ -1,5 +1,4 @@ { - "id": 2023, "graphic": "PRAS- Shell Smash", "frames": [ [ diff --git a/public/battle-anims/common-confusion.json b/public/battle-anims/common-confusion.json index 77b2cde7d..ed1f66260 100644 --- a/public/battle-anims/common-confusion.json +++ b/public/battle-anims/common-confusion.json @@ -1,5 +1,4 @@ { - "id": 2007, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-covet.json b/public/battle-anims/common-covet.json index f74bcf2ec..40d8f0f3f 100644 --- a/public/battle-anims/common-covet.json +++ b/public/battle-anims/common-covet.json @@ -1,5 +1,4 @@ { - "id": 2015, "graphic": "PRAS- Covet", "frames": [ [ diff --git a/public/battle-anims/common-curse-no-ghost.json b/public/battle-anims/common-curse-no-ghost.json index 87afddb68..9dad0bbc8 100644 --- a/public/battle-anims/common-curse-no-ghost.json +++ b/public/battle-anims/common-curse-no-ghost.json @@ -1,5 +1,4 @@ { - "id": 2011, "graphic": "PRAS- CURSE2", "frames": [ [ diff --git a/public/battle-anims/common-curse.json b/public/battle-anims/common-curse.json index 5c1a8cf44..593ec00b7 100644 --- a/public/battle-anims/common-curse.json +++ b/public/battle-anims/common-curse.json @@ -1,5 +1,4 @@ { - "id": 2021, "graphic": "PRAS- Curse", "frames": [ [ diff --git a/public/battle-anims/common-electric-terrain.json b/public/battle-anims/common-electric-terrain.json index 7d8ba8117..1e25116be 100644 --- a/public/battle-anims/common-electric-terrain.json +++ b/public/battle-anims/common-electric-terrain.json @@ -1,5 +1,4 @@ { - "id": 2111, "graphic": "PRAS- Electric", "frames": [ [ diff --git a/public/battle-anims/common-fire-spin.json b/public/battle-anims/common-fire-spin.json index b65afba13..71389641f 100644 --- a/public/battle-anims/common-fire-spin.json +++ b/public/battle-anims/common-fire-spin.json @@ -1,5 +1,4 @@ { - "id": 2013, "graphic": "PRAS- Fire Spin", "frames": [ [ diff --git a/public/battle-anims/common-frozen.json b/public/battle-anims/common-frozen.json index df738b1b6..c604dde1f 100644 --- a/public/battle-anims/common-frozen.json +++ b/public/battle-anims/common-frozen.json @@ -1,5 +1,4 @@ { - "id": 2005, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-grassy-terrain.json b/public/battle-anims/common-grassy-terrain.json index b33ef37a4..616c28b7f 100644 --- a/public/battle-anims/common-grassy-terrain.json +++ b/public/battle-anims/common-grassy-terrain.json @@ -1,5 +1,4 @@ { - "id": 2112, "graphic": "PRAS- Grass", "frames": [ [ diff --git a/public/battle-anims/common-hail.json b/public/battle-anims/common-hail.json index 58c292e3b..2b71c4a5d 100644 --- a/public/battle-anims/common-hail.json +++ b/public/battle-anims/common-hail.json @@ -1,5 +1,4 @@ { - "id": 2103, "graphic": "PRAS- Weather", "frames": [ [ diff --git a/public/battle-anims/common-harsh-sun.json b/public/battle-anims/common-harsh-sun.json index 670b3e4a6..20e930501 100644 --- a/public/battle-anims/common-harsh-sun.json +++ b/public/battle-anims/common-harsh-sun.json @@ -1,5 +1,4 @@ { - "id": 2106, "graphic": "weather", "frames": [ [ diff --git a/public/battle-anims/common-health-up.json b/public/battle-anims/common-health-up.json index c36ad7ef3..d94847ade 100644 --- a/public/battle-anims/common-health-up.json +++ b/public/battle-anims/common-health-up.json @@ -1,5 +1,4 @@ { - "id": 2000, "graphic": "PRAS- Recovery", "frames": [ [ diff --git a/public/battle-anims/common-heavy-rain.json b/public/battle-anims/common-heavy-rain.json index d05abe2bd..87a8b9106 100644 --- a/public/battle-anims/common-heavy-rain.json +++ b/public/battle-anims/common-heavy-rain.json @@ -1,5 +1,4 @@ { - "id": 2105, "graphic": "PRAS- Weather", "frames": [ [ diff --git a/public/battle-anims/common-leech-seed.json b/public/battle-anims/common-leech-seed.json index e0dd28397..219691ec7 100644 --- a/public/battle-anims/common-leech-seed.json +++ b/public/battle-anims/common-leech-seed.json @@ -1,5 +1,4 @@ { - "id": 2012, "graphic": "PRAS- Absorption2", "frames": [ [ diff --git a/public/battle-anims/common-magma-storm.json b/public/battle-anims/common-magma-storm.json index 1aac0f13d..097c76dae 100644 --- a/public/battle-anims/common-magma-storm.json +++ b/public/battle-anims/common-magma-storm.json @@ -1,5 +1,4 @@ { - "id": 2022, "graphic": "PRAS- Magma Storm", "frames": [ [ diff --git a/public/battle-anims/common-misty-terrain.json b/public/battle-anims/common-misty-terrain.json index a0391e975..d2f87ed9b 100644 --- a/public/battle-anims/common-misty-terrain.json +++ b/public/battle-anims/common-misty-terrain.json @@ -1,5 +1,4 @@ { - "id": 2110, "graphic": "PRAS- Orbs", "frames": [ [ diff --git a/public/battle-anims/common-paralysis.json b/public/battle-anims/common-paralysis.json index 8508270f4..200402be8 100644 --- a/public/battle-anims/common-paralysis.json +++ b/public/battle-anims/common-paralysis.json @@ -1,5 +1,4 @@ { - "id": 2003, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-poison.json b/public/battle-anims/common-poison.json index 42f640315..485ae0e01 100644 --- a/public/battle-anims/common-poison.json +++ b/public/battle-anims/common-poison.json @@ -1,5 +1,4 @@ { - "id": 2001, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-protect.json b/public/battle-anims/common-protect.json index 0f7e9ba83..59ac040d2 100644 --- a/public/battle-anims/common-protect.json +++ b/public/battle-anims/common-protect.json @@ -1,5 +1,4 @@ { - "id": 2014, "graphic": "PRAS- Protect", "frames": [ [ diff --git a/public/battle-anims/common-psychic-terrain.json b/public/battle-anims/common-psychic-terrain.json index 7b642e13d..05311a3a7 100644 --- a/public/battle-anims/common-psychic-terrain.json +++ b/public/battle-anims/common-psychic-terrain.json @@ -1,5 +1,4 @@ { - "id": 2113, "graphic": "PRAS- Mirror Coat", "frames": [ [ diff --git a/public/battle-anims/common-quick-guard.json b/public/battle-anims/common-quick-guard.json index a524359db..03d8b4db3 100644 --- a/public/battle-anims/common-quick-guard.json +++ b/public/battle-anims/common-quick-guard.json @@ -1,5 +1,4 @@ { - "id": 2019, "graphic": "PRAS- Lucky Chant", "frames": [ [ diff --git a/public/battle-anims/common-rain.json b/public/battle-anims/common-rain.json index 5d47e8c58..5ceecfd65 100644 --- a/public/battle-anims/common-rain.json +++ b/public/battle-anims/common-rain.json @@ -1,5 +1,4 @@ { - "id": 2101, "graphic": "PRAS- Weather", "frames": [ [ diff --git a/public/battle-anims/common-sand-tomb.json b/public/battle-anims/common-sand-tomb.json index 6b004df69..514c60d09 100644 --- a/public/battle-anims/common-sand-tomb.json +++ b/public/battle-anims/common-sand-tomb.json @@ -1,5 +1,4 @@ { - "id": 2018, "graphic": "PRAS- Sand Tomb", "frames": [ [ diff --git a/public/battle-anims/common-sandstorm.json b/public/battle-anims/common-sandstorm.json index cfa47ae8a..bbdae8416 100644 --- a/public/battle-anims/common-sandstorm.json +++ b/public/battle-anims/common-sandstorm.json @@ -1,5 +1,4 @@ { - "id": 2102, "graphic": "weather", "frames": [ [ diff --git a/public/battle-anims/common-sleep.json b/public/battle-anims/common-sleep.json index 929cdc288..44a1ad900 100644 --- a/public/battle-anims/common-sleep.json +++ b/public/battle-anims/common-sleep.json @@ -1,5 +1,4 @@ { - "id": 2004, "graphic": "PRAS- Status", "frames": [ [ diff --git a/public/battle-anims/common-strong-winds.json b/public/battle-anims/common-strong-winds.json index d42a845fa..1d47bade6 100644 --- a/public/battle-anims/common-strong-winds.json +++ b/public/battle-anims/common-strong-winds.json @@ -1,5 +1,4 @@ { - "id": 2107, "graphic": "PRAS- Gust", "frames": [ [ diff --git a/public/battle-anims/common-sunny.json b/public/battle-anims/common-sunny.json index ea63175ba..98f41e811 100644 --- a/public/battle-anims/common-sunny.json +++ b/public/battle-anims/common-sunny.json @@ -1,5 +1,4 @@ { - "id": 2100, "graphic": "weather", "frames": [ [ diff --git a/public/battle-anims/common-toxic.json b/public/battle-anims/common-toxic.json index 9a65df4ff..1d1f90d30 100644 --- a/public/battle-anims/common-toxic.json +++ b/public/battle-anims/common-toxic.json @@ -1,5 +1,4 @@ { - "id": 2002, "graphic": "PRAS- Poison", "frames": [ [ diff --git a/public/battle-anims/common-use-item.json b/public/battle-anims/common-use-item.json new file mode 100644 index 000000000..d0fe93db7 --- /dev/null +++ b/public/battle-anims/common-use-item.json @@ -0,0 +1,1217 @@ +{ + "graphic": "", + "frames": [ + [ + { + "x": 0, + "y": 0, + "zoomX": 95, + "zoomY": 105, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 90, + "zoomY": 110, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 85, + "zoomY": 115, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 80, + "zoomY": 120, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 75, + "zoomY": 125, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 80, + "zoomY": 120, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 90, + "zoomY": 110, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 95, + "zoomY": 105, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 90, + "zoomY": 110, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 85, + "zoomY": 115, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 80, + "zoomY": 120, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 75, + "zoomY": 125, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 80, + "zoomY": 120, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 90, + "zoomY": 110, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 2 + }, + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "angle": 0, + "mirror": false, + "visible": false, + "blendType": 0, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "color": [ + 0, + 0, + 0, + 0 + ], + "tone": [ + 0, + 0, + 0, + 0 + ], + "flash": [ + 0, + 0, + 0, + 0 + ], + "locked": false, + "priority": 1, + "focus": 1 + } + ] + ], + "frameTimedEvents": { + "0": [ + { + "frameIndex": 0, + "resourceName": "PRSFX- Bite.wav", + "volume": 60, + "pitch": 70, + "eventType": "AnimTimedSoundEvent" + } + ], + "9": [ + { + "frameIndex": 9, + "resourceName": "PRSFX- Bite.wav", + "volume": 60, + "pitch": 70, + "eventType": "AnimTimedSoundEvent" + } + ] + }, + "position": 4, + "hue": 0 +} \ No newline at end of file diff --git a/public/battle-anims/common-whirlpool.json b/public/battle-anims/common-whirlpool.json index 29a2e5ee8..3dfc75b35 100644 --- a/public/battle-anims/common-whirlpool.json +++ b/public/battle-anims/common-whirlpool.json @@ -1,5 +1,4 @@ { - "id": 2016, "graphic": "PRAS- Whirlpool", "frames": [ [ diff --git a/public/battle-anims/common-wide-guard.json b/public/battle-anims/common-wide-guard.json index 4c20249d8..44a90f38a 100644 --- a/public/battle-anims/common-wide-guard.json +++ b/public/battle-anims/common-wide-guard.json @@ -1,5 +1,4 @@ { - "id": 2020, "graphic": "PRAS- Lucky Chant", "frames": [ [ diff --git a/public/battle-anims/common-wind.json b/public/battle-anims/common-wind.json index f61aa4ffe..d5b3ae008 100644 --- a/public/battle-anims/common-wind.json +++ b/public/battle-anims/common-wind.json @@ -1,5 +1,4 @@ { - "id": 2104, "graphic": "weather", "frames": [ [ diff --git a/public/battle-anims/common-wrap.json b/public/battle-anims/common-wrap.json index fc394f54a..199000d73 100644 --- a/public/battle-anims/common-wrap.json +++ b/public/battle-anims/common-wrap.json @@ -1,5 +1,4 @@ { - "id": 2010, "graphic": "PRAS- Wrapping", "frames": [ [ diff --git a/public/battle-anims/dig-charging.json b/public/battle-anims/dig-charging.json index 1ded6503a..36c773d64 100644 --- a/public/battle-anims/dig-charging.json +++ b/public/battle-anims/dig-charging.json @@ -1,5 +1,4 @@ { - "id": 1002, "graphic": "PRAS- Dig", "frames": [ [ diff --git a/public/battle-anims/dive-charging.json b/public/battle-anims/dive-charging.json index bf6d6d02f..5ff931bdb 100644 --- a/public/battle-anims/dive-charging.json +++ b/public/battle-anims/dive-charging.json @@ -1,5 +1,4 @@ { - "id": 1003, "graphic": "PRAS- Dive", "frames": [ [ diff --git a/public/battle-anims/doom-desire-charging.json b/public/battle-anims/doom-desire-charging.json index 5ce0be2a3..619043482 100644 --- a/public/battle-anims/doom-desire-charging.json +++ b/public/battle-anims/doom-desire-charging.json @@ -1,5 +1,4 @@ { - "id": 1011, "graphic": "PRAS- Wish", "frames": [ [ diff --git a/public/battle-anims/fly-charging.json b/public/battle-anims/fly-charging.json index 3b306eea8..f3be210f9 100644 --- a/public/battle-anims/fly-charging.json +++ b/public/battle-anims/fly-charging.json @@ -1,5 +1,4 @@ { - "id": 1000, "graphic": "PRAS- Fly", "frames": [ [ diff --git a/public/battle-anims/freeze-shock-charging.json b/public/battle-anims/freeze-shock-charging.json index 9dc03426c..bf568a417 100644 --- a/public/battle-anims/freeze-shock-charging.json +++ b/public/battle-anims/freeze-shock-charging.json @@ -1,5 +1,4 @@ { - "id": 1007, "graphic": "PRAS- Freeze Shock", "frames": [ [ diff --git a/public/battle-anims/ice-burn-charging.json b/public/battle-anims/ice-burn-charging.json index ce684fddc..1f8f022f2 100644 --- a/public/battle-anims/ice-burn-charging.json +++ b/public/battle-anims/ice-burn-charging.json @@ -1,5 +1,4 @@ { - "id": 1010, "graphic": "PRAS- Ice Burn", "frames": [ [ diff --git a/public/battle-anims/razor-wind-charging.json b/public/battle-anims/razor-wind-charging.json index 3058644af..5667315b0 100644 --- a/public/battle-anims/razor-wind-charging.json +++ b/public/battle-anims/razor-wind-charging.json @@ -1,5 +1,4 @@ { - "id": 1012, "graphic": "PRAS- Gust", "frames": [ [ diff --git a/public/battle-anims/shadow-force-charging.json b/public/battle-anims/shadow-force-charging.json index c60587f6a..f2aae4f78 100644 --- a/public/battle-anims/shadow-force-charging.json +++ b/public/battle-anims/shadow-force-charging.json @@ -1,5 +1,4 @@ { - "id": 1005, "graphic": "", "frames": [ [ diff --git a/public/battle-anims/skull-bash-charging.json b/public/battle-anims/skull-bash-charging.json index c62ef9e1e..5bd08781e 100644 --- a/public/battle-anims/skull-bash-charging.json +++ b/public/battle-anims/skull-bash-charging.json @@ -1,5 +1,4 @@ { - "id": 1006, "graphic": "", "frames": [ [ diff --git a/public/battle-anims/sky-attack-charging.json b/public/battle-anims/sky-attack-charging.json index c60e6494c..2de281787 100644 --- a/public/battle-anims/sky-attack-charging.json +++ b/public/battle-anims/sky-attack-charging.json @@ -1,5 +1,4 @@ { - "id": 1009, "graphic": "", "frames": [ [ diff --git a/public/battle-anims/sky-drop-charging.json b/public/battle-anims/sky-drop-charging.json index 564df8018..456f43ee3 100644 --- a/public/battle-anims/sky-drop-charging.json +++ b/public/battle-anims/sky-drop-charging.json @@ -1,5 +1,4 @@ { - "id": 1008, "graphic": "", "frames": [ [ diff --git a/public/battle-anims/solar-beam-charging.json b/public/battle-anims/solar-beam-charging.json index 3177bae0a..13dbee36f 100644 --- a/public/battle-anims/solar-beam-charging.json +++ b/public/battle-anims/solar-beam-charging.json @@ -1,5 +1,4 @@ { - "id": 1004, "graphic": "PRAS- Orbs", "frames": [ [ diff --git a/public/images/items.json b/public/images/items.json index fa8a251c0..23ce0ee71 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 238, - "h": 238 + "w": 243, + "h": 243 }, "scale": 1, "frames": [ @@ -262,7 +262,7 @@ } }, { - "filename": "mystic_water", + "filename": "berry_pouch", "rotated": false, "trimmed": true, "sourceSize": { @@ -270,15 +270,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 4, "y": 5, - "w": 20, + "w": 23, "h": 23 }, "frame": { "x": 218, "y": 0, - "w": 20, + "w": 23, "h": 23 } }, @@ -618,69 +618,6 @@ "h": 23 } }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 222, - "y": 23, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 33, - "y": 50, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 33, - "y": 74, - "w": 18, - "h": 24 - } - }, { "filename": "oval_charm", "rotated": false, @@ -696,12 +633,33 @@ "h": 24 }, "frame": { - "x": 51, - "y": 46, + "x": 222, + "y": 23, "w": 21, "h": 24 } }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 33, + "y": 50, + "w": 16, + "h": 24 + } + }, { "filename": "reaper_cloth", "rotated": false, @@ -717,33 +675,12 @@ "h": 23 }, "frame": { - "x": 72, + "x": 49, "y": 46, "w": 22, "h": 23 } }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 51, - "y": 70, - "w": 21, - "h": 24 - } - }, { "filename": "charcoal", "rotated": false, @@ -759,14 +696,14 @@ "h": 22 }, "frame": { - "x": 72, - "y": 69, + "x": 71, + "y": 46, "w": 22, "h": 22 } }, { - "filename": "hyper_potion", + "filename": "max_elixir", "rotated": false, "trimmed": true, "sourceSize": { @@ -774,16 +711,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 94, + "x": 93, "y": 46, - "w": 17, - "h": 23 + "w": 18, + "h": 24 } }, { @@ -842,27 +779,6 @@ "w": 22, "h": 22 }, - "frame": { - "x": 94, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, "frame": { "x": 154, "y": 46, @@ -871,28 +787,7 @@ } }, { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 116, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "magmarizer", + "filename": "guard_spec", "rotated": false, "trimmed": true, "sourceSize": { @@ -934,7 +829,7 @@ } }, { - "filename": "pp_max", + "filename": "shiny_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -942,15 +837,36 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, + "x": 6, "y": 4, - "w": 16, + "w": 21, "h": 24 }, "frame": { "x": 222, "y": 47, - "w": 16, + "w": 21, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 33, + "y": 74, + "w": 18, "h": 24 } }, @@ -969,14 +885,14 @@ "h": 23 }, "frame": { - "x": 138, + "x": 51, "y": 69, "w": 21, "h": 23 } }, { - "filename": "moon_stone", + "filename": "sharp_beak", "rotated": false, "trimmed": true, "sourceSize": { @@ -984,16 +900,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 + "x": 5, + "y": 5, + "w": 21, + "h": 23 }, "frame": { - "x": 159, + "x": 72, "y": 68, - "w": 23, - "h": 21 + "w": 21, + "h": 23 } }, { @@ -1011,14 +927,119 @@ "h": 21 }, "frame": { - "x": 182, - "y": 68, + "x": 93, + "y": 70, "w": 20, "h": 21 } }, { - "filename": "gb", + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 113, + "y": 69, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 135, + "y": 69, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 157, + "y": 68, + "w": 23, + "h": 21 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 180, + "y": 68, + "w": 22, + "h": 21 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 202, + "y": 66, + "w": 20, + "h": 23 + } + }, + { + "filename": "dusk_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -1028,77 +1049,14 @@ "spriteSourceSize": { "x": 6, "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 202, - "y": 66, - "w": 20, - "h": 20 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "w": 21, + "h": 21 }, "frame": { "x": 222, "y": 71, - "w": 16, - "h": 24 - } - }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 202, - "y": 86, - "w": 20, - "h": 17 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 222, - "y": 95, - "w": 16, - "h": 24 + "w": 21, + "h": 21 } }, { @@ -1122,27 +1080,6 @@ "h": 22 } }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 18, - "y": 120, - "w": 21, - "h": 23 - } - }, { "filename": "thunder_stone", "rotated": false, @@ -1159,13 +1096,13 @@ }, "frame": { "x": 18, - "y": 143, + "y": 120, "w": 22, "h": 22 } }, { - "filename": "dubious_disc", + "filename": "tm_bug", "rotated": false, "trimmed": true, "sourceSize": { @@ -1174,15 +1111,36 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 5, "w": 22, - "h": 19 + "h": 22 }, "frame": { "x": 18, - "y": 165, + "y": 142, "w": 22, - "h": 19 + "h": 22 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 18, + "y": 164, + "w": 23, + "h": 20 } }, { @@ -1228,7 +1186,7 @@ } }, { - "filename": "full_heal", + "filename": "pp_max", "rotated": false, "trimmed": true, "sourceSize": { @@ -1236,41 +1194,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 9, + "x": 8, "y": 4, - "w": 15, - "h": 23 + "w": 16, + "h": 24 }, "frame": { "x": 40, "y": 98, - "w": 15, - "h": 23 + "w": 16, + "h": 24 } }, { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 39, - "y": 121, - "w": 17, - "h": 22 - } - }, - { - "filename": "zinc", + "filename": "pp_up", "rotated": false, "trimmed": true, "sourceSize": { @@ -1285,13 +1222,97 @@ }, "frame": { "x": 40, - "y": 143, + "y": 122, "w": 16, "h": 24 } }, { - "filename": "potion", + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 40, + "y": 146, + "w": 24, + "h": 18 + } + }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 41, + "y": 164, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 41, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 41, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "protein", "rotated": false, "trimmed": true, "sourceSize": { @@ -1300,15 +1321,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 5, - "w": 17, - "h": 23 + "y": 4, + "w": 16, + "h": 24 }, "frame": { - "x": 55, - "y": 94, - "w": 17, - "h": 23 + "x": 56, + "y": 92, + "w": 16, + "h": 24 } }, { @@ -1333,7 +1354,7 @@ } }, { - "filename": "binding_band", + "filename": "shell_bell", "rotated": false, "trimmed": true, "sourceSize": { @@ -1342,7 +1363,7 @@ }, "spriteSourceSize": { "x": 5, - "y": 6, + "y": 7, "w": 23, "h": 20 }, @@ -1353,27 +1374,6 @@ "h": 20 } }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 119, - "y": 91, - "w": 19, - "h": 20 - } - }, { "filename": "deep_sea_scale", "rotated": false, @@ -1389,119 +1389,14 @@ "h": 20 }, "frame": { - "x": 138, - "y": 92, + "x": 119, + "y": 91, "w": 22, "h": 20 } }, { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 160, - "y": 89, - "w": 22, - "h": 22 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 182, - "y": 89, - "w": 20, - "h": 20 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 202, - "y": 103, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 182, - "y": 109, - "w": 20, - "h": 20 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 160, - "y": 111, - "w": 22, - "h": 21 - } - }, - { - "filename": "super_potion", + "filename": "zinc", "rotated": false, "trimmed": true, "sourceSize": { @@ -1510,99 +1405,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 5, - "w": 17, - "h": 23 + "y": 4, + "w": 16, + "h": 24 }, "frame": { "x": 56, - "y": 117, - "w": 17, - "h": 23 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 56, - "y": 140, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 73, - "y": 111, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 95, - "y": 111, - "w": 22, - "h": 22 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 117, - "y": 111, - "w": 21, - "h": 21 + "y": 116, + "w": 16, + "h": 24 } }, { @@ -1620,8 +1431,8 @@ "h": 22 }, "frame": { - "x": 138, - "y": 112, + "x": 72, + "y": 111, "w": 22, "h": 22 } @@ -1641,8 +1452,8 @@ "h": 22 }, "frame": { - "x": 78, - "y": 133, + "x": 94, + "y": 111, "w": 22, "h": 22 } @@ -1662,14 +1473,14 @@ "h": 22 }, "frame": { - "x": 100, - "y": 133, + "x": 116, + "y": 111, "w": 22, "h": 22 } }, { - "filename": "leftovers", + "filename": "gb", "rotated": false, "trimmed": true, "sourceSize": { @@ -1677,36 +1488,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 122, - "y": 132, - "w": 15, - "h": 22 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, + "x": 6, + "y": 6, + "w": 20, "h": 20 }, "frame": { - "x": 137, - "y": 134, - "w": 23, + "x": 141, + "y": 91, + "w": 20, "h": 20 } }, @@ -1725,8 +1515,8 @@ "h": 22 }, "frame": { - "x": 160, - "y": 132, + "x": 138, + "y": 111, "w": 22, "h": 22 } @@ -1746,33 +1536,12 @@ "h": 22 }, "frame": { - "x": 182, - "y": 129, + "x": 161, + "y": 89, "w": 22, "h": 22 } }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 40, - "y": 167, - "w": 23, - "h": 17 - } - }, { "filename": "tm_grass", "rotated": false, @@ -1788,8 +1557,8 @@ "h": 22 }, "frame": { - "x": 41, - "y": 184, + "x": 160, + "y": 111, "w": 22, "h": 22 } @@ -1809,8 +1578,8 @@ "h": 22 }, "frame": { - "x": 41, - "y": 206, + "x": 183, + "y": 89, "w": 22, "h": 22 } @@ -1830,14 +1599,14 @@ "h": 22 }, "frame": { - "x": 204, - "y": 123, + "x": 182, + "y": 111, "w": 22, "h": 22 } }, { - "filename": "revive", + "filename": "hyper_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -1845,18 +1614,165 @@ "h": 32 }, "spriteSourceSize": { - "x": 10, + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 205, + "y": 89, + "w": 17, + "h": 23 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 222, + "y": 92, + "w": 21, + "h": 21 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 204, + "y": 112, + "w": 18, + "h": 20 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 222, + "y": 113, + "w": 21, + "h": 21 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, "y": 8, - "w": 12, + "w": 24, + "h": 18 + }, + "frame": { + "x": 72, + "y": 133, + "w": 24, + "h": 18 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, "h": 17 }, "frame": { - "x": 226, - "y": 119, - "w": 12, + "x": 96, + "y": 133, + "w": 23, "h": 17 } }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 119, + "y": 133, + "w": 23, + "h": 17 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 142, + "y": 133, + "w": 22, + "h": 19 + } + }, { "filename": "tm_normal", "rotated": false, @@ -1872,12 +1788,54 @@ "h": 22 }, "frame": { - "x": 63, - "y": 162, + "x": 164, + "y": 133, "w": 22, "h": 22 } }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 186, + "y": 133, + "w": 20, + "h": 22 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 206, + "y": 132, + "w": 15, + "h": 23 + } + }, { "filename": "tm_poison", "rotated": false, @@ -1893,12 +1851,33 @@ "h": 22 }, "frame": { - "x": 63, - "y": 184, + "x": 221, + "y": 134, "w": 22, "h": 22 } }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 64, + "y": 151, + "w": 24, + "h": 15 + } + }, { "filename": "tm_psychic", "rotated": false, @@ -1915,7 +1894,7 @@ }, "frame": { "x": 63, - "y": 206, + "y": 166, "w": 22, "h": 22 } @@ -1935,8 +1914,8 @@ "h": 22 }, "frame": { - "x": 85, - "y": 155, + "x": 63, + "y": 188, "w": 22, "h": 22 } @@ -1956,12 +1935,96 @@ "h": 22 }, "frame": { - "x": 85, - "y": 177, + "x": 63, + "y": 210, "w": 22, "h": 22 } }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 85, + "y": 166, + "w": 17, + "h": 23 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 85, + "y": 189, + "w": 17, + "h": 23 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 85, + "y": 212, + "w": 17, + "h": 20 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 88, + "y": 151, + "w": 15, + "h": 15 + } + }, { "filename": "tm_water", "rotated": false, @@ -1977,33 +2040,12 @@ "h": 22 }, "frame": { - "x": 85, - "y": 199, + "x": 103, + "y": 150, "w": 22, "h": 22 } }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 85, - "y": 221, - "w": 23, - "h": 17 - } - }, { "filename": "water_stone", "rotated": false, @@ -2019,8 +2061,8 @@ "h": 22 }, "frame": { - "x": 107, - "y": 155, + "x": 102, + "y": 172, "w": 22, "h": 22 } @@ -2040,12 +2082,33 @@ "h": 22 }, "frame": { - "x": 107, - "y": 177, + "x": 102, + "y": 194, "w": 22, "h": 22 } }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 125, + "y": 150, + "w": 17, + "h": 22 + } + }, { "filename": "x_attack", "rotated": false, @@ -2061,12 +2124,33 @@ "h": 22 }, "frame": { - "x": 107, - "y": 199, + "x": 142, + "y": 152, "w": 22, "h": 22 } }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 164, + "y": 155, + "w": 22, + "h": 19 + } + }, { "filename": "x_defense", "rotated": false, @@ -2082,12 +2166,33 @@ "h": 22 }, "frame": { - "x": 129, - "y": 154, + "x": 186, + "y": 155, "w": 22, "h": 22 } }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 124, + "y": 172, + "w": 18, + "h": 19 + } + }, { "filename": "x_sp_atk", "rotated": false, @@ -2103,12 +2208,33 @@ "h": 22 }, "frame": { - "x": 129, - "y": 176, + "x": 124, + "y": 191, "w": 22, "h": 22 } }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 142, + "y": 174, + "w": 20, + "h": 17 + } + }, { "filename": "x_sp_def", "rotated": false, @@ -2124,8 +2250,8 @@ "h": 22 }, "frame": { - "x": 151, - "y": 154, + "x": 162, + "y": 174, "w": 22, "h": 22 } @@ -2145,14 +2271,14 @@ "h": 22 }, "frame": { - "x": 129, - "y": 198, + "x": 184, + "y": 177, "w": 22, "h": 22 } }, { - "filename": "choice_specs", + "filename": "leftovers", "rotated": false, "trimmed": true, "sourceSize": { @@ -2160,121 +2286,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 129, - "y": 220, - "w": 24, - "h": 18 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 151, - "y": 176, - "w": 21, - "h": 21 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 151, - "y": 197, - "w": 21, - "h": 21 - } - }, - { - "filename": "pb_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 153, - "y": 218, - "w": 20, - "h": 20 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, + "x": 8, + "y": 5, "w": 15, - "h": 15 + "h": 22 }, "frame": { - "x": 108, - "y": 221, + "x": 146, + "y": 191, "w": 15, - "h": 15 - } - }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 173, - "y": 154, - "w": 19, - "h": 21 + "h": 22 } }, { @@ -2292,77 +2313,14 @@ "h": 21 }, "frame": { - "x": 192, - "y": 151, + "x": 102, + "y": 216, "w": 21, "h": 21 } }, { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 213, - "y": 145, - "w": 17, - "h": 20 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 192, - "y": 172, - "w": 24, - "h": 18 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 216, - "y": 165, - "w": 22, - "h": 19 - } - }, - { - "filename": "miracle_seed", + "filename": "lum_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -2372,18 +2330,18 @@ "spriteSourceSize": { "x": 6, "y": 7, - "w": 19, + "w": 20, "h": 19 }, "frame": { - "x": 173, - "y": 175, - "w": 19, + "x": 161, + "y": 196, + "w": 20, "h": 19 } }, { - "filename": "ub", + "filename": "magnet", "rotated": false, "trimmed": true, "sourceSize": { @@ -2397,8 +2355,134 @@ "h": 20 }, "frame": { - "x": 172, - "y": 194, + "x": 181, + "y": 199, + "w": 20, + "h": 20 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 208, + "y": 155, + "w": 12, + "h": 17 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 220, + "y": 156, + "w": 20, + "h": 20 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 201, + "y": 199, + "w": 19, + "h": 20 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 124, + "y": 213, + "w": 20, + "h": 20 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 144, + "y": 213, + "w": 17, + "h": 20 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 161, + "y": 215, "w": 20, "h": 20 } @@ -2418,14 +2502,14 @@ "h": 19 }, "frame": { - "x": 192, - "y": 190, + "x": 181, + "y": 219, "w": 20, "h": 19 } }, { - "filename": "razor_fang", + "filename": "miracle_seed", "rotated": false, "trimmed": true, "sourceSize": { @@ -2433,62 +2517,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 173, - "y": 214, - "w": 18, - "h": 20 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 192, - "y": 209, - "w": 24, - "h": 15 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, + "x": 6, "y": 7, - "w": 18, + "w": 19, "h": 19 }, "frame": { - "x": 212, - "y": 190, - "w": 18, + "x": 201, + "y": 219, + "w": 19, "h": 19 } }, { - "filename": "lucky_egg", + "filename": "spell_tag", "rotated": false, "trimmed": true, "sourceSize": { @@ -2498,13 +2540,34 @@ "spriteSourceSize": { "x": 7, "y": 6, - "w": 17, + "w": 19, + "h": 21 + }, + "frame": { + "x": 206, + "y": 177, + "w": 19, + "h": 21 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, "h": 20 }, "frame": { - "x": 216, - "y": 209, - "w": 17, + "x": 220, + "y": 198, + "w": 20, "h": 20 } } @@ -2514,6 +2577,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:10a8d93fb8ec92f93ee3e4be5874c09d:240b93de032db305ae2062ef1c0868f5:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:cd6f7e7d7ca088a48736507750d678e7:2e6f80a76c6bb03e5060479cd463686a:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 9a79027220f0c0f9f7b6f64ee5c254685698c00c..56025517826ad8959d95b9f98edb72344d8a7c06 100644 GIT binary patch literal 18807 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®x8NM`?J25grOQGQqK@ZE%AC^DU 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

AjknEG+in;JHil6r4+`Nnx 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 BfO7x< literal 0 HcmV?d00001 diff --git a/src/arena.ts b/src/arena.ts index c4d298d7d..291c94afb 100644 --- a/src/arena.ts +++ b/src/arena.ts @@ -1,14 +1,14 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import BattleScene from "./battle-scene"; -import { Biome, BiomePoolTier, BiomeTierPools, biomePools } from "./biome"; +import { Biome, BiomePoolTier, BiomeTierPools, biomePools } from "./data/biome"; import * as Utils from "./utils"; -import PokemonSpecies, { getPokemonSpecies } from "./pokemon-species"; -import { Species } from "./species"; -import { Weather, WeatherType, getWeatherClearMessage, getWeatherStartMessage } from "./weather"; +import PokemonSpecies, { getPokemonSpecies } from "./data/pokemon-species"; +import { Species } from "./data/species"; +import { Weather, WeatherType, getWeatherClearMessage, getWeatherStartMessage } from "./data/weather"; import { CommonAnimPhase, MessagePhase } from "./battle-phases"; -import { CommonAnim } from "./battle-anims"; -import { Type } from "./type"; -import Move from "./move"; +import { CommonAnim } from "./data/battle-anims"; +import { Type } from "./data/type"; +import Move from "./data/move"; export class Arena { private scene: BattleScene; diff --git a/src/battle-phases.ts b/src/battle-phases.ts index 10c7bb5c9..5a25eb275 100644 --- a/src/battle-phases.ts +++ b/src/battle-phases.ts @@ -1,28 +1,29 @@ import BattleScene, { startingLevel, startingWave } from "./battle-scene"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult } from "./pokemon"; import * as Utils from './utils'; -import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, ConditionalMoveAttr, HitsTagAttr, MissEffectAttr, MoveCategory, MoveEffectAttr, MoveFlags, MoveHitEffectAttr, Moves, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr } from "./move"; +import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, ConditionalMoveAttr, HitsTagAttr, MissEffectAttr, MoveCategory, MoveEffectAttr, MoveFlags, MoveHitEffectAttr, Moves, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr } from "./data/move"; import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; -import { Stat } from "./pokemon-stat"; -import { ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, HitHealModifier, PokemonExpBoosterModifier, TempBattleStatBoosterModifier } from "./modifier"; +import { Stat } from "./data/pokemon-stat"; +import { BerryModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, HealingBoosterModifier, HitHealModifier, PokemonExpBoosterModifier, TempBattleStatBoosterModifier } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; -import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./pokeball"; -import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; -import { StatusEffect, getStatusEffectActivationText, getStatusEffectCatchRateMultiplier, getStatusEffectHealText, getStatusEffectObtainText, getStatusEffectOverlapText } from "./status-effect"; +import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; +import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; +import { StatusEffect, getStatusEffectActivationText, getStatusEffectCatchRateMultiplier, getStatusEffectHealText, getStatusEffectObtainText, getStatusEffectOverlapText } from "./data/status-effect"; import { SummaryUiMode } from "./ui/summary-ui-handler"; import EvolutionSceneHandler from "./ui/evolution-scene-handler"; import { EvolutionPhase } from "./evolution-phase"; import { BattlePhase } from "./battle-phase"; -import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } from "./battle-stat"; -import { Biome, biomeLinks } from "./biome"; -import { ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, TempBattleStat, getModifierTypeOptionsForWave, regenerateModifierPoolThresholds } from "./modifier-type"; +import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } from "./data/battle-stat"; +import { Biome, biomeLinks } from "./data/biome"; +import { ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, getModifierTypeOptionsForWave, regenerateModifierPoolThresholds } from "./modifier/modifier-type"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import { BattleTagLapseType, BattleTagType, HideSpriteTag as HiddenTag } from "./battle-tag"; +import { BattleTagLapseType, BattleTagType, HideSpriteTag as HiddenTag } from "./data/battle-tag"; import { getPokemonMessage } from "./messages"; import { Starter } from "./ui/starter-select-ui-handler"; -import { Gender } from "./gender"; -import { Weather, WeatherType, getRandomWeatherType, getWeatherDamageMessage, getWeatherLapseMessage } from "./weather"; +import { Gender } from "./data/gender"; +import { Weather, WeatherType, getRandomWeatherType, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather"; +import { TempBattleStat } from "./data/temp-battle-stat"; export class SelectStarterPhase extends BattlePhase { constructor(scene: BattleScene) { @@ -593,6 +594,10 @@ export class TurnEndPhase extends BattlePhase { this.scene.pushPhase(new MessagePhase(this.scene, `${dm.getName()} is disabled\nno more!`)); } + const hasUsableBerry = pokemon.isPlayer() && !!this.scene.findModifier(m => m instanceof BerryModifier && m.shouldApply([ pokemon ])); + if (hasUsableBerry) + this.scene.pushPhase(new BerryPhase(this.scene, pokemon.isPlayer())); + pokemon.battleSummonData.turnCount++; }; @@ -670,7 +675,7 @@ export class CommonAnimPhase extends PokemonPhase { } start() { - new CommonBattleAnim(this.anim, this.getPokemon()).play(this.scene, () => { + new CommonBattleAnim(this.anim, this.getPokemon(), this.getPokemon().isPlayer() ? this.scene.getEnemyPokemon() : this.scene.getPlayerPokemon()).play(this.scene, () => { this.end(); }); } @@ -775,7 +780,7 @@ export abstract class MovePhase extends BattlePhase { this.scene.unshiftPhase(new MessagePhase(this.scene, getPokemonMessage(this.pokemon, getStatusEffectHealText(this.pokemon.status.effect)))); this.pokemon.resetStatus(); - this.pokemon.updateInfo(true); + this.pokemon.updateInfo(); } doMove(); } @@ -1536,6 +1541,32 @@ export class LearnMovePhase extends PartyMemberPokemonPhase { } } +export class BerryPhase extends CommonAnimPhase { + constructor(scene: BattleScene, player: boolean) { + super(scene, player, CommonAnim.USE_ITEM); + } + + start() { + let berryModifier: BerryModifier; + + if (this.player) { + if ((berryModifier = this.scene.applyModifier(BerryModifier, this.getPokemon()) as BerryModifier)) { + if (berryModifier.consumed) { + if (!--berryModifier.stackCount) + this.scene.removeModifier(berryModifier); + else + berryModifier.consumed = false; + this.scene.updateModifiers(); + } + super.start(); + return; + } + } + + this.end(); + } +} + export class PokemonHealPhase extends CommonAnimPhase { private hpHealed: integer; private message: string; @@ -1564,7 +1595,10 @@ export class PokemonHealPhase extends CommonAnimPhase { const fullHp = pokemon.getHpRatio() >= 1; if (!fullHp) { - pokemon.hp = Math.min(pokemon.hp + this.hpHealed, pokemon.getMaxHp()); + const hpRestoreMultiplier = new Utils.IntegerHolder(1); + if (this.player) + this.scene.applyModifiers(HealingBoosterModifier, hpRestoreMultiplier); + pokemon.hp = Math.min(pokemon.hp + this.hpHealed * hpRestoreMultiplier.value, pokemon.getMaxHp()); pokemon.updateInfo().then(() => super.end()); } else if (this.showFullHpMessage) this.message = getPokemonMessage(pokemon, `'s\nHP is full!`); diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ec5fb73aa..4f425020f 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,24 +1,24 @@ import Phaser from 'phaser'; -import { Biome } from './biome'; +import { Biome } from './data/biome'; import UI from './ui/ui'; import { EncounterPhase, SummonPhase, CommandPhase, NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, SelectStarterPhase, MessagePhase } from './battle-phases'; import { PlayerPokemon, EnemyPokemon } from './pokemon'; -import PokemonSpecies, { allSpecies, getPokemonSpecies } from './pokemon-species'; +import PokemonSpecies, { allSpecies, getPokemonSpecies } from './data/pokemon-species'; import * as Utils from './utils'; -import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PartyShareModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ConsumablePokemonMoveModifier, ModifierPredicate } from './modifier'; -import { PokeballType } from './pokeball'; -import { Species } from './species'; -import { initAutoPlay } from './auto-play'; +import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PartyShareModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ConsumablePokemonMoveModifier, ModifierPredicate } from './modifier/modifier'; +import { PokeballType } from './data/pokeball'; +import { Species } from './data/species'; +import { initAutoPlay } from './system/auto-play'; import { Battle } from './battle'; -import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './battle-anims'; +import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims'; import { BattlePhase } from './battle-phase'; -import { initGameSpeed } from './game-speed'; +import { initGameSpeed } from './system/game-speed'; import { Arena } from './arena'; -import { GameData } from './game-data'; +import { GameData } from './system/game-data'; import StarterSelectUiHandler from './ui/starter-select-ui-handler'; -import { TextStyle, addTextObject } from './text'; -import { Moves } from './move'; -import { getDefaultModifierTypeForTier } from './modifier-type'; +import { TextStyle, addTextObject } from './ui/text'; +import { Moves } from './data/move'; +import { getDefaultModifierTypeForTier } from './modifier/modifier-type'; const enableAuto = true; export const startingLevel = 5; @@ -598,7 +598,7 @@ export default class BattleScene extends Phaser.Scene { if ((modifier as PersistentModifier).add(this.modifiers, !!virtual)) { if (!virtual && !this.sound.get(soundName)) this.sound.play(soundName); - } if (!virtual) { + } else if (!virtual) { const defaultModifierType = getDefaultModifierTypeForTier(modifier.type.tier); this.addModifier(defaultModifierType.newModifier()).then(() => resolve()); this.unshiftPhase(new MessagePhase(this, `The stack for this item is full.\n You will receive ${defaultModifierType.name} instead.`, null, true)); @@ -617,9 +617,12 @@ export default class BattleScene extends Phaser.Scene { const args: any[] = [ pokemon ]; if (modifier instanceof PokemonHpRestoreModifier) { - const hpRestoreMultiplier = new Utils.IntegerHolder(1); - this.applyModifiers(HealingBoosterModifier, hpRestoreMultiplier); - args.push(hpRestoreMultiplier.value); + if (!(modifier as PokemonHpRestoreModifier).fainted) { + const hpRestoreMultiplier = new Utils.IntegerHolder(1); + this.applyModifiers(HealingBoosterModifier, hpRestoreMultiplier); + args.push(hpRestoreMultiplier.value); + } else + args.push(1); } if (modifier.shouldApply(args)) @@ -704,4 +707,16 @@ export default class BattleScene extends Phaser.Scene { console.log('Applied', modifier.type.name); } } + + applyModifier(modifierType: { new(...args: any[]): Modifier }, ...args: any[]): PersistentModifier { + const modifiers = this.modifiers.filter(m => m instanceof modifierType && m.shouldApply(args)); + for (let modifier of modifiers) { + if (modifier.apply(args)) { + console.log('Applied', modifier.type.name); + return modifier; + } + } + + return null; + } } \ No newline at end of file diff --git a/src/abilities.ts b/src/data/ability.ts similarity index 100% rename from src/abilities.ts rename to src/data/ability.ts diff --git a/src/battle-anims.ts b/src/data/battle-anims.ts similarity index 94% rename from src/battle-anims.ts rename to src/data/battle-anims.ts index b5c86753e..a4b6aa213 100644 --- a/src/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,8 +1,8 @@ //import { battleAnimRawData } from "./battle-anim-raw-data"; -import BattleScene from "./battle-scene"; +import BattleScene from "../battle-scene"; import { ChargeAttr, Moves, allMoves } from "./move"; -import Pokemon from "./pokemon"; -import * as Utils from "./utils"; +import Pokemon from "../pokemon"; +import * as Utils from "../utils"; //import fs from 'vite-plugin-fs/browser'; export enum AnimFrameTarget { @@ -41,8 +41,9 @@ export enum ChargeAnim { } export enum CommonAnim { - HEALTH_UP = 2000, - POISON, + USE_ITEM = 2000, + HEALTH_UP, + POISON = 2010, TOXIC, PARALYSIS, SLEEP, @@ -79,7 +80,7 @@ export enum CommonAnim { PSYCHIC_TERRAIN } -export class Anim { +export class AnimConfig { public id: integer; public graphic: string; public frames: AnimFrame[][]; @@ -226,7 +227,7 @@ class AnimTimedSoundEvent extends AnimTimedEvent { public pitch: number; constructor(frameIndex: integer, resourceName: string, source?: any) { - super(frameIndex, resourceName + (resourceName && resourceName.indexOf('.') === -1 ? '.ogg' : '')); + super(frameIndex, resourceName + (resourceName && resourceName.indexOf('.') === -1 ? resourceName.startsWith('PRSFX-') ? '.wav' : '.ogg' : '')); if (source) { this.volume = source.volume; @@ -349,9 +350,9 @@ class AnimTimedAddBgEvent extends AnimTimedBgEvent { } } -export const moveAnims = new Map(); -export const chargeAnims = new Map(); -export const commonAnims = new Map(); +export const moveAnims = new Map(); +export const chargeAnims = new Map(); +export const commonAnims = new Map(); export function initCommonAnims(): Promise { return new Promise(resolve => { @@ -362,7 +363,7 @@ export function initCommonAnims(): Promise { const commonAnimId = commonAnimIds[ca]; commonAnimFetches.push(fetch(`./battle-anims/common-${commonAnimNames[ca].toLowerCase().replace(/\_/g, '-')}.json`) .then(response => response.json()) - .then(cas => commonAnims.set(commonAnimId, new Anim(cas)))); + .then(cas => commonAnims.set(commonAnimId, new AnimConfig(cas)))); } Promise.allSettled(commonAnimFetches).then(() => resolve()); }); @@ -430,22 +431,22 @@ export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { }); } -function populateMoveAnim(move: Moves, animSource: any) { - const moveAnim = new Anim(animSource); +function populateMoveAnim(move: Moves, animSource: any): void { + const moveAnim = new AnimConfig(animSource); if (moveAnims.get(move) === null) { moveAnims.set(move, moveAnim); return; } - moveAnims.set(move, [ moveAnims.get(move) as Anim, moveAnim ]); + moveAnims.set(move, [ moveAnims.get(move) as AnimConfig, moveAnim ]); } function populateMoveChargeAnim(chargeAnim: ChargeAnim, animSource: any) { - const moveChargeAnim = new Anim(animSource); + const moveChargeAnim = new AnimConfig(animSource); if (chargeAnims.get(chargeAnim) === null) { chargeAnims.set(chargeAnim, moveChargeAnim); return; } - chargeAnims.set(chargeAnim, [ chargeAnims.get(chargeAnim) as Anim, moveChargeAnim ]); + chargeAnims.set(chargeAnim, [ chargeAnims.get(chargeAnim) as AnimConfig, moveChargeAnim ]); } export function loadCommonAnimAssets(scene: BattleScene, startLoad?: boolean): Promise { @@ -456,12 +457,12 @@ export function loadCommonAnimAssets(scene: BattleScene, startLoad?: boolean): P export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLoad?: boolean): Promise { return new Promise(resolve => { - const moveAnimations = moveIds.map(m => moveAnims.get(m)).flat(); + const moveAnimations = moveIds.map(m => moveAnims.get(m) as AnimConfig).flat(); for (let moveId of moveIds) { const chargeAttr = allMoves[moveId - 1].getAttrs(ChargeAttr) as ChargeAttr[]; if (chargeAttr.length) { const moveChargeAnims = chargeAnims.get(chargeAttr[0].chargeAnim); - moveAnimations.push(moveChargeAnims instanceof Anim ? moveChargeAnims : moveChargeAnims[0]); + moveAnimations.push(moveChargeAnims instanceof AnimConfig ? moveChargeAnims : moveChargeAnims[0]); if (Array.isArray(moveChargeAnims)) moveAnimations.push(moveChargeAnims[1]); } @@ -470,7 +471,7 @@ export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLo }); } -function loadAnimAssets(scene: BattleScene, anims: Anim[], startLoad?: boolean): Promise { +function loadAnimAssets(scene: BattleScene, anims: AnimConfig[], startLoad?: boolean): Promise { return new Promise(resolve => { const backgrounds = new Set(); const sounds = new Set(); @@ -515,7 +516,7 @@ export abstract class BattleAnim { this.sprites = []; } - abstract getAnim(): Anim; + abstract getAnim(): AnimConfig; abstract isOppAnim(): boolean; @@ -738,7 +739,7 @@ export class CommonBattleAnim extends BattleAnim { this.commonAnim = commonAnim; } - getAnim(): Anim { + getAnim(): AnimConfig { return commonAnims.get(this.commonAnim); } @@ -760,10 +761,10 @@ export class MoveAnim extends BattleAnim { this.move = move; } - getAnim(): Anim { - return moveAnims.get(this.move) instanceof Anim - ? moveAnims.get(this.move) as Anim - : moveAnims.get(this.move)[this.user.isPlayer() ? 0 : 1] as Anim; + getAnim(): AnimConfig { + return moveAnims.get(this.move) instanceof AnimConfig + ? moveAnims.get(this.move) as AnimConfig + : moveAnims.get(this.move)[this.user.isPlayer() ? 0 : 1] as AnimConfig; } isOppAnim(): boolean { @@ -800,10 +801,10 @@ export class MoveChargeAnim extends MoveAnim { this.chargeAnim = chargeAnim; } - getAnim(): Anim { - return chargeAnims.get(this.chargeAnim) instanceof Anim - ? chargeAnims.get(this.chargeAnim) as Anim - : chargeAnims.get(this.chargeAnim)[this.user.isPlayer() ? 0 : 1] as Anim; + getAnim(): AnimConfig { + return chargeAnims.get(this.chargeAnim) instanceof AnimConfig + ? chargeAnims.get(this.chargeAnim) as AnimConfig + : chargeAnims.get(this.chargeAnim)[this.user.isPlayer() ? 0 : 1] as AnimConfig; } } @@ -840,14 +841,15 @@ export function populateAnims() { const animName = fields[1].slice(nameIndex, fields[1].indexOf('\n', nameIndex)); if (!moveNameToId.hasOwnProperty(animName) && !commonAnimId && !chargeAnimId) continue; - let anim = new Anim(); - anim.id = commonAnimId || chargeAnimId || moveNameToId[animName]; + let anim = commonAnimId || chargeAnimId ? new AnimConfig() : new AnimConfig(); + if (anim instanceof AnimConfig) + (anim as AnimConfig).id = moveNameToId[animName]; if (commonAnimId) commonAnims.set(commonAnimId, anim); else if (chargeAnimId) - chargeAnims.set(chargeAnimId, !isOppMove ? anim : [ chargeAnims.get(chargeAnimId) as Anim, anim ]); + chargeAnims.set(chargeAnimId, !isOppMove ? anim : [ chargeAnims.get(chargeAnimId) as AnimConfig, anim ]); else - moveAnims.set(moveNameToId[animName], !isOppMove ? anim : [ moveAnims.get(moveNameToId[animName]) as Anim, anim ]); + moveAnims.set(moveNameToId[animName], !isOppMove ? anim as AnimConfig : [ moveAnims.get(moveNameToId[animName]) as AnimConfig, anim as AnimConfig ]); for (let f = 0; f < fields.length; f++) { const field = fields[f]; const fieldName = field.slice(0, field.indexOf(':')); @@ -940,6 +942,8 @@ export function populateAnims() { } const animReplacer = (k, v) => { + if (k === 'id' && !v) + return undefined; if (v instanceof Map) return Object.fromEntries(v); if (v instanceof AnimTimedEvent) @@ -950,21 +954,21 @@ export function populateAnims() { /*for (let ma of moveAnims.keys()) { const data = moveAnims.get(ma); (async () => { - await fs.writeFile(`./public/battle-anims/${Moves[ma].toLowerCase().replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); + await fs.writeFile(`../public/battle-anims/${Moves[ma].toLowerCase().replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); })(); } for (let ca of chargeAnims.keys()) { const data = chargeAnims.get(ca); (async () => { - await fs.writeFile(`./public/battle-anims/${chargeAnimNames[chargeAnimIds.indexOf(ca)].replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); + await fs.writeFile(`../public/battle-anims/${chargeAnimNames[chargeAnimIds.indexOf(ca)].replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); })(); } for (let cma of commonAnims.keys()) { const data = commonAnims.get(cma); (async () => { - await fs.writeFile(`./public/battle-anims/common-${commonAnimNames[commonAnimIds.indexOf(cma)].replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); + await fs.writeFile(`../public/battle-anims/common-${commonAnimNames[commonAnimIds.indexOf(cma)].replace(/\_/g, '-')}.json`, JSON.stringify(data, animReplacer, ' ')); })(); }*/ } \ No newline at end of file diff --git a/src/battle-stat.ts b/src/data/battle-stat.ts similarity index 100% rename from src/battle-stat.ts rename to src/data/battle-stat.ts diff --git a/src/battle-tag.ts b/src/data/battle-tag.ts similarity index 97% rename from src/battle-tag.ts rename to src/data/battle-tag.ts index e64e9135e..10259c07e 100644 --- a/src/battle-tag.ts +++ b/src/data/battle-tag.ts @@ -1,10 +1,10 @@ import { CommonAnim, CommonBattleAnim } from "./battle-anims"; -import { CommonAnimPhase, DamagePhase, MessagePhase, MovePhase, ObtainStatusEffectPhase, PokemonHealPhase } from "./battle-phases"; -import { getPokemonMessage } from "./messages"; -import Pokemon from "./pokemon"; +import { CommonAnimPhase, DamagePhase, MessagePhase, MovePhase, ObtainStatusEffectPhase, PokemonHealPhase } from "../battle-phases"; +import { getPokemonMessage } from "../messages"; +import Pokemon from "../pokemon"; import { Stat } from "./pokemon-stat"; import { StatusEffect } from "./status-effect"; -import * as Utils from "./utils"; +import * as Utils from "../utils"; export enum BattleTagType { NONE, @@ -101,7 +101,7 @@ export class ConfusedTag extends PseudoStatusTag { } lapse(pokemon: Pokemon, lapseType: BattleTagLapseType): boolean { - const ret = super.lapse(pokemon, lapseType); + const ret = lapseType !== BattleTagLapseType.CUSTOM && super.lapse(pokemon, lapseType); if (ret) { pokemon.scene.unshiftPhase(new MessagePhase(pokemon.scene, getPokemonMessage(pokemon, ' is\nconfused!'))); diff --git a/src/data/berry.ts b/src/data/berry.ts new file mode 100644 index 000000000..c4408ff64 --- /dev/null +++ b/src/data/berry.ts @@ -0,0 +1,60 @@ +import { MessagePhase, PokemonHealPhase } from "../battle-phases"; +import { getPokemonMessage } from "../messages"; +import Pokemon from "../pokemon"; +import { BattleTagType } from "./battle-tag"; +import { getStatusEffectHealText } from "./status-effect"; + +export enum BerryType { + SITRUS, + LUM +} + +export function getBerryName(berryType: BerryType) { + switch (berryType) { + case BerryType.SITRUS: + return 'SITRUS BERRY'; + case BerryType.LUM: + return 'LUM BERRY'; + } +} + +export function getBerryEffectDescription(berryType: BerryType) { + switch (berryType) { + case BerryType.SITRUS: + return 'Restores 25% HP if HP is below 50%'; + case BerryType.LUM: + return 'Cures any non-volatile status condition and confusion'; + } +} + +export type BerryPredicate = (pokemon: Pokemon) => boolean; + +export function getBerryPredicate(berryType: BerryType): BerryPredicate { + switch (berryType) { + case BerryType.SITRUS: + return (pokemon: Pokemon) => pokemon.getHpRatio() < 0.5; + case BerryType.LUM: + return (pokemon: Pokemon) => !!pokemon.status || !!pokemon.getTag(BattleTagType.CONFUSED); + } +} + +export type BerryEffectFunc = (pokemon: Pokemon) => void; + +export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { + switch (berryType) { + case BerryType.SITRUS: + return (pokemon: Pokemon) => { + pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, true, Math.floor(pokemon.getMaxHp() / 4), getPokemonMessage(pokemon, `'s ${getBerryName(berryType)}\nrestored its HP!`), true)); + }; + case BerryType.LUM: + return (pokemon: Pokemon) => { + if (pokemon.status) { + pokemon.scene.unshiftPhase(new MessagePhase(pokemon.scene, + getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)))); + pokemon.resetStatus(); + pokemon.updateInfo(); + } else if (pokemon.getTag(BattleTagType.CONFUSED)) + pokemon.lapseTag(BattleTagType.CONFUSED); + }; + } +} \ No newline at end of file diff --git a/src/biome.ts b/src/data/biome.ts similarity index 99% rename from src/biome.ts rename to src/data/biome.ts index adcff1299..8ffaedb7d 100644 --- a/src/biome.ts +++ b/src/data/biome.ts @@ -1,7 +1,7 @@ import { pokemonEvolutions, SpeciesEvolution } from "./pokemon-evolutions"; import { Species } from "./species"; import { Type } from './type'; -import * as Utils from './utils'; +import * as Utils from '../utils'; import beautify from 'json-beautify'; diff --git a/src/exp.ts b/src/data/exp.ts similarity index 100% rename from src/exp.ts rename to src/data/exp.ts diff --git a/src/gender.ts b/src/data/gender.ts similarity index 100% rename from src/gender.ts rename to src/data/gender.ts diff --git a/src/move.ts b/src/data/move.ts similarity index 99% rename from src/move.ts rename to src/data/move.ts index 26e750b6e..e90864f67 100644 --- a/src/move.ts +++ b/src/data/move.ts @@ -1,12 +1,12 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; -import { DamagePhase, EnemyMovePhase, MessagePhase, ObtainStatusEffectPhase, PlayerMovePhase, PokemonHealPhase, StatChangePhase } from "./battle-phases"; +import { DamagePhase, EnemyMovePhase, MessagePhase, ObtainStatusEffectPhase, PlayerMovePhase, PokemonHealPhase, StatChangePhase } from "../battle-phases"; import { BattleStat } from "./battle-stat"; import { BattleTagType } from "./battle-tag"; -import { getPokemonMessage } from "./messages"; -import Pokemon, { EnemyPokemon, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "./pokemon"; +import { getPokemonMessage } from "../messages"; +import Pokemon, { EnemyPokemon, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../pokemon"; import { StatusEffect, getStatusEffectDescriptor } from "./status-effect"; import { Type } from "./type"; -import * as Utils from "./utils"; +import * as Utils from "../utils"; import { WeatherType } from "./weather"; export enum MoveCategory { diff --git a/src/pokeball.ts b/src/data/pokeball.ts similarity index 96% rename from src/pokeball.ts rename to src/data/pokeball.ts index 290525acc..e4551f6dc 100644 --- a/src/pokeball.ts +++ b/src/data/pokeball.ts @@ -1,5 +1,5 @@ -import BattleScene from "./battle-scene"; -import { toPokemonUpperCase } from "./utils"; +import BattleScene from "../battle-scene"; +import { toPokemonUpperCase } from "../utils"; export enum PokeballType { POKEBALL, diff --git a/src/pokemon-evolutions.ts b/src/data/pokemon-evolutions.ts similarity index 99% rename from src/pokemon-evolutions.ts rename to src/data/pokemon-evolutions.ts index f4f1e085a..816ca7ed8 100644 --- a/src/pokemon-evolutions.ts +++ b/src/data/pokemon-evolutions.ts @@ -1,13 +1,13 @@ import { Gender } from "./gender"; -import { AttackTypeBoosterModifier } from "./modifier"; -import { AttackTypeBoosterModifierType } from "./modifier-type"; +import { AttackTypeBoosterModifier } from "../modifier/modifier"; +import { AttackTypeBoosterModifierType } from "../modifier/modifier-type"; import { Moves } from "./move"; import { PokeballType } from "./pokeball"; -import Pokemon from "./pokemon"; +import Pokemon from "../pokemon"; import { Stat } from "./pokemon-stat"; import { Species } from "./species"; import { Type } from "./type"; -import * as Utils from "./utils"; +import * as Utils from "../utils"; export enum SpeciesWildEvolutionDelay { NONE, diff --git a/src/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts similarity index 100% rename from src/pokemon-level-moves.ts rename to src/data/pokemon-level-moves.ts diff --git a/src/pokemon-species.ts b/src/data/pokemon-species.ts similarity index 99% rename from src/pokemon-species.ts rename to src/data/pokemon-species.ts index 4a93ea3af..5bd93b799 100644 --- a/src/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,11 +1,10 @@ -import { Abilities } from './abilities'; -import BattleScene from './battle-scene'; +import { Abilities } from './ability'; +import BattleScene from '../battle-scene'; import { GrowthRate } from './exp'; -import { EnemyPokemon } from './pokemon'; import { pokemonEvolutions } from './pokemon-evolutions'; import { Species } from './species'; import { Type } from './type'; -import * as Utils from './utils'; +import * as Utils from '../utils'; export function getPokemonSpecies(species: Species): PokemonSpecies { if (species >= Species.XERNEAS) diff --git a/src/pokemon-stat.ts b/src/data/pokemon-stat.ts similarity index 91% rename from src/pokemon-stat.ts rename to src/data/pokemon-stat.ts index 8f74fb444..31f5bab3e 100644 --- a/src/pokemon-stat.ts +++ b/src/data/pokemon-stat.ts @@ -1,4 +1,4 @@ -import { toPokemonUpperCase } from "./utils"; +import { toPokemonUpperCase } from "../utils"; export enum Stat { HP = 0, diff --git a/src/species.ts b/src/data/species.ts similarity index 100% rename from src/species.ts rename to src/data/species.ts diff --git a/src/status-effect.ts b/src/data/status-effect.ts similarity index 98% rename from src/status-effect.ts rename to src/data/status-effect.ts index c8f3636bd..d8d4636bc 100644 --- a/src/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,4 +1,4 @@ -import * as Utils from "./utils"; +import * as Utils from "../utils"; export enum StatusEffect { NONE, diff --git a/src/data/temp-battle-stat.ts b/src/data/temp-battle-stat.ts new file mode 100644 index 000000000..72dff92fe --- /dev/null +++ b/src/data/temp-battle-stat.ts @@ -0,0 +1,36 @@ +import { BattleStat, getBattleStatName } from "./battle-stat"; + +export enum TempBattleStat { + ATK, + DEF, + SPATK, + SPDEF, + SPD, + ACC, + CRIT +} + +export function getTempBattleStatName(tempBattleStat: TempBattleStat) { + if (tempBattleStat === TempBattleStat.CRIT) + return 'critical-hit ratio'; + return getBattleStatName(tempBattleStat as integer as BattleStat); +} + +export function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) { + switch (tempBattleStat) { + case TempBattleStat.ATK: + return 'X Attack'; + case TempBattleStat.DEF: + return 'X Defense'; + case TempBattleStat.SPATK: + return 'X Sp. Atk'; + case TempBattleStat.SPDEF: + return 'X Sp. Def'; + case TempBattleStat.SPD: + return 'X Speed'; + case TempBattleStat.ACC: + return 'X Accuracy'; + case TempBattleStat.CRIT: + return 'Dire Hit'; + } +} \ No newline at end of file diff --git a/src/tms.ts b/src/data/tms.ts similarity index 100% rename from src/tms.ts rename to src/data/tms.ts diff --git a/src/type.ts b/src/data/type.ts similarity index 100% rename from src/type.ts rename to src/data/type.ts diff --git a/src/weather.ts b/src/data/weather.ts similarity index 98% rename from src/weather.ts rename to src/data/weather.ts index a0b4ab3ea..cd311e972 100644 --- a/src/weather.ts +++ b/src/data/weather.ts @@ -1,9 +1,9 @@ import { Biome } from "./biome"; -import { getPokemonMessage } from "./messages"; -import Pokemon from "./pokemon"; +import { getPokemonMessage } from "../messages"; +import Pokemon from "../pokemon"; import { Type } from "./type"; import Move, { AttackMove } from "./move"; -import * as Utils from "./utils"; +import * as Utils from "../utils"; export enum WeatherType { NONE, diff --git a/src/evolution-phase.ts b/src/evolution-phase.ts index 9b072f147..85fa85894 100644 --- a/src/evolution-phase.ts +++ b/src/evolution-phase.ts @@ -1,7 +1,7 @@ import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { BattlePhase } from "./battle-phase"; import BattleScene from "./battle-scene"; -import { SpeciesEvolution } from "./pokemon-evolutions"; +import { SpeciesEvolution } from "./data/pokemon-evolutions"; import EvolutionSceneHandler from "./ui/evolution-scene-handler"; import * as Utils from "./utils"; import { Mode } from "./ui/ui"; diff --git a/src/modifier-type.ts b/src/modifier/modifier-type.ts similarity index 91% rename from src/modifier-type.ts rename to src/modifier/modifier-type.ts index f94dce062..038c6f1db 100644 --- a/src/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,14 +1,16 @@ -import { BattleStat, getBattleStatName } from './battle-stat'; +import { BattleStat, getBattleStatName } from '../data/battle-stat'; import * as Modifiers from './modifier'; -import { AttackMove, Moves, allMoves } from './move'; -import { PokeballType, getPokeballName } from './pokeball'; -import { PlayerPokemon, PokemonMove } from './pokemon'; -import { EvolutionItem, pokemonEvolutions } from './pokemon-evolutions'; -import { Stat, getStatName } from './pokemon-stat'; -import { tmSpecies } from './tms'; -import { Type } from './type'; -import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from './ui/party-ui-handler'; -import * as Utils from './utils'; +import { AttackMove, Moves, allMoves } from '../data/move'; +import { PokeballType, getPokeballName } from '../data/pokeball'; +import { PlayerPokemon, PokemonMove } from '../pokemon'; +import { EvolutionItem, pokemonEvolutions } from '../data/pokemon-evolutions'; +import { Stat, getStatName } from '../data/pokemon-stat'; +import { tmSpecies } from '../data/tms'; +import { Type } from '../data/type'; +import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from '../ui/party-ui-handler'; +import * as Utils from '../utils'; +import { TempBattleStat, getTempBattleStatBoosterItemName, getTempBattleStatName } from '../data/temp-battle-stat'; +import { BerryType, getBerryEffectDescription, getBerryName } from '../data/berry'; type Modifier = Modifiers.Modifier; @@ -59,13 +61,19 @@ class AddPokeballModifierType extends ModifierType { export class PokemonModifierType extends ModifierType { public selectFilter: PokemonSelectFilter; - constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string) { - super(name, description, newModifierFunc, iconImage, group); + constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string, soundName?: string) { + super(name, description, newModifierFunc, iconImage, group, soundName); this.selectFilter = selectFilter; } } +export class PokemonHeldItemModifierType extends PokemonModifierType { + constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string, soundName?: string) { + super(name, description, newModifierFunc, selectFilter, iconImage, group, soundName); + } +} + export class PokemonHpRestoreModifierType extends PokemonModifierType { protected restorePoints: integer; protected percent: boolean; @@ -157,41 +165,6 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { } } -export enum TempBattleStat { - ATK, - DEF, - SPATK, - SPDEF, - SPD, - ACC, - CRIT -} - -function getTempBattleStatName(tempBattleStat: TempBattleStat) { - if (tempBattleStat === TempBattleStat.CRIT) - return 'critical-hit ratio'; - return getBattleStatName(tempBattleStat as integer as BattleStat); -} - -function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) { - switch (tempBattleStat) { - case TempBattleStat.ATK: - return 'X Attack'; - case TempBattleStat.DEF: - return 'X Defense'; - case TempBattleStat.SPATK: - return 'X Sp. Atk'; - case TempBattleStat.SPDEF: - return 'X Sp. Def'; - case TempBattleStat.SPD: - return 'X Speed'; - case TempBattleStat.ACC: - return 'X Accuracy'; - case TempBattleStat.CRIT: - return 'Dire Hit'; - } -} - export class TempBattleStatBoosterModifierType extends ModifierType { public tempBattleStat: TempBattleStat; @@ -246,7 +219,7 @@ function getAttackTypeBoosterItemName(type: Type) { } } -export class AttackTypeBoosterModifierType extends PokemonModifierType { +export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType { public moveType: Type; public boostPercent: integer; @@ -284,7 +257,7 @@ function getBaseStatBoosterItemName(stat: Stat) { } } -export class PokemonBaseStatBoosterModifierType extends PokemonModifierType { +export class PokemonBaseStatBoosterModifierType extends PokemonHeldItemModifierType { private stat: Stat; constructor(name: string, stat: Stat, _iconImage?: string) { @@ -312,7 +285,7 @@ export class ExpBoosterModifierType extends ModifierType { } } -export class PokemonExpBoosterModifierType extends PokemonModifierType { +export class PokemonExpBoosterModifierType extends PokemonHeldItemModifierType { constructor(name: string, boostPercent: integer, iconImage?: string) { super(name, `Increases the holder's gain of EXP. Points by ${boostPercent}%`, (_type, args) => new Modifiers.PokemonExpBoosterModifier(this, (args[0] as PlayerPokemon).id, boostPercent), (_pokemon: PlayerPokemon) => null, iconImage); @@ -486,7 +459,14 @@ const modifierPool = { new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { const randTempBattleStat = Utils.randInt(7) as TempBattleStat; return new TempBattleStatBoosterModifierType(randTempBattleStat); - }), 4) + }), 4), + new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { + const berryTypes = Utils.getEnumValues(BerryType); + const randBerryType = berryTypes[Utils.randInt(berryTypes.length)]; + return new PokemonHeldItemModifierType(getBerryName(randBerryType), getBerryEffectDescription(randBerryType), + (type, args) => new Modifiers.BerryModifier(type, (args[0] as PlayerPokemon).id, randBerryType), + () => null, null, 'berry'); + }), 2) ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ new WeightedModifierType(new AddPokeballModifierType(PokeballType.GREAT_BALL, 5, 'gb'), 12), @@ -524,6 +504,8 @@ const modifierPool = { new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { const partyMemberCompatibleTms = party.map(p => p.compatibleTms); const uniqueCompatibleTms = partyMemberCompatibleTms.flat().filter((tm, i, array) => array.indexOf(tm) === i); + if (!uniqueCompatibleTms.length) + return null; const randTmIndex = Utils.randInt(uniqueCompatibleTms.length); return new TmModifierType(uniqueCompatibleTms[randTmIndex]); }), 4), @@ -535,14 +517,16 @@ const modifierPool = { ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ new WeightedModifierType(new AddPokeballModifierType(PokeballType.ULTRA_BALL, 5, 'ub'), 8), - new WeightedModifierType(new EvolutionItemModifierTypeGenerator(), 5), - new WeightedModifierType(new AttackTypeBoosterModifierTypeGenerator(), 3), + new WeightedModifierType(new EvolutionItemModifierTypeGenerator(), 12), + new WeightedModifierType(new AttackTypeBoosterModifierTypeGenerator(), 5), new ModifierType('OVAL CHARM', 'For every X (no. of party members) items in a POKéMON\'s held item stack, give one to each other party member', (type, _args) => new Modifiers.PartyShareModifier(type), 'oval_charm'), new ModifierType('HEALING CHARM', 'Doubles the effectiveness of HP restoring moves and items (excludes revives)', (type, _args) => new Modifiers.HealingBoosterModifier(type, 2), 'healing_charm'), - new WeightedModifierType(new PokemonModifierType('SHELL BELL', 'Heals 1/8 of a POKéMON\'s dealt damage', (type, args) => new Modifiers.HitHealModifier(type, (args[0] as PlayerPokemon).id)), 2), + new WeightedModifierType(new PokemonHeldItemModifierType('SHELL BELL', 'Heals 1/8 of a POKéMON\'s dealt damage', (type, args) => new Modifiers.HitHealModifier(type, (args[0] as PlayerPokemon).id)), 2), new WeightedModifierType(new ExpBoosterModifierType('EXP CHARM', 25), 4), new WeightedModifierType(new PokemonExpBoosterModifierType('LUCKY EGG', 50), 3), + new WeightedModifierType(new ModifierType('BERRY POUCH', 'Adds a 25% chance that a used berry will not be consumed', + (type, _args) => new Modifiers.PreserveBerryModifier(type)), 3), new WeightedModifierType(new ModifierType('EXP. BALANCE', 'All EXP. Points received from battles is split among the lower leveled party members', (type, _args) => new Modifiers.ExpBalanceModifier(type), 'exp_balance'), 1) ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.MASTER]: [ diff --git a/src/modifier.ts b/src/modifier/modifier.ts similarity index 87% rename from src/modifier.ts rename to src/modifier/modifier.ts index f12023c63..61ec181e3 100644 --- a/src/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,16 +1,19 @@ import * as ModifierTypes from './modifier-type'; -import { LearnMovePhase, LevelUpPhase, PokemonHealPhase } from "./battle-phases"; -import BattleScene from "./battle-scene"; -import { getLevelTotalExp } from "./exp"; -import { PokeballType } from "./pokeball"; -import Pokemon, { PlayerPokemon } from "./pokemon"; -import { Stat } from "./pokemon-stat"; -import { addTextObject, TextStyle } from "./text"; -import { Type } from './type'; -import { EvolutionPhase } from './evolution-phase'; -import { pokemonEvolutions } from './pokemon-evolutions'; -import { getPokemonMessage } from './messages'; -import * as Utils from "./utils"; +import { CommonAnimPhase, LearnMovePhase, LevelUpPhase, PokemonHealPhase } from "../battle-phases"; +import BattleScene from "../battle-scene"; +import { getLevelTotalExp } from "../data/exp"; +import { PokeballType } from "../data/pokeball"; +import Pokemon, { PlayerPokemon } from "../pokemon"; +import { Stat } from "../data/pokemon-stat"; +import { addTextObject, TextStyle } from "../ui/text"; +import { Type } from '../data/type'; +import { EvolutionPhase } from '../evolution-phase'; +import { pokemonEvolutions } from '../data/pokemon-evolutions'; +import { getPokemonMessage } from '../messages'; +import * as Utils from "../utils"; +import { TempBattleStat } from '../data/temp-battle-stat'; +import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry'; +import { CommonAnim } from '../data/battle-anims'; type ModifierType = ModifierTypes.ModifierType; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -185,10 +188,10 @@ export class AddPokeballModifier extends ConsumableModifier { } export class TempBattleStatBoosterModifier extends PersistentModifier { - private tempBattleStat: ModifierTypes.TempBattleStat; + private tempBattleStat: TempBattleStat; private battlesLeft: integer; - constructor(type: ModifierTypes.TempBattleStatBoosterModifierType, tempBattleStat: ModifierTypes.TempBattleStat) { + constructor(type: ModifierTypes.TempBattleStatBoosterModifierType, tempBattleStat: TempBattleStat) { super(type); this.tempBattleStat = tempBattleStat; @@ -200,7 +203,7 @@ export class TempBattleStatBoosterModifier extends PersistentModifier { } apply(args: any[]): boolean { - const tempBattleStat = args[0] as ModifierTypes.TempBattleStat; + const tempBattleStat = args[0] as TempBattleStat; if (tempBattleStat === this.tempBattleStat) { const statLevel = args[1] as Utils.IntegerHolder; @@ -353,15 +356,79 @@ export class HitHealModifier extends PokemonHeldItemModifier { if (pokemon.turnData.damageDealt && pokemon.getHpRatio() < 1) { const scene = pokemon.scene; - const hpRestoreMultiplier = new Utils.IntegerHolder(1); - scene.applyModifiers(HealingBoosterModifier, hpRestoreMultiplier); - scene.unshiftPhase(new PokemonHealPhase(scene, true, Math.max(Math.floor(pokemon.turnData.damageDealt / 8) * this.stackCount * hpRestoreMultiplier.value, 1), getPokemonMessage(pokemon, `'s ${this.type.name}\nrestored its HP a little!`), true)); + scene.unshiftPhase(new PokemonHealPhase(scene, true, Math.max(Math.floor(pokemon.turnData.damageDealt / 8) * this.stackCount, 1), getPokemonMessage(pokemon, `'s ${this.type.name}\nrestored its HP a little!`), true)); } return true; } } +export class BerryModifier extends PokemonHeldItemModifier { + public berryType: BerryType; + public consumed: boolean; + + constructor(type: ModifierType, pokemonId: integer, berryType: BerryType) { + super(type, pokemonId); + + this.berryType = berryType; + this.consumed = false; + } + + match(modifier: Modifier) { + return modifier instanceof BerryModifier && (modifier as BerryModifier).berryType === this.berryType; + } + + clone() { + return new BerryModifier(this.type, this.pokemonId, this.berryType); + } + + shouldApply(args: any[]): boolean { + return !this.consumed && super.shouldApply(args) && getBerryPredicate(this.berryType)(args[0] as Pokemon); + } + + apply(args: any[]): boolean { + const pokemon = args[0] as Pokemon; + + const preserve = new Utils.BooleanHolder(false); + pokemon.scene.applyModifiers(PreserveBerryModifier, preserve); + + getBerryEffectFunc(this.berryType)(pokemon); + if (!preserve.value) + this.consumed = true; + + return true; + } +} + +export class PreserveBerryModifier extends PersistentModifier { + constructor(type: ModifierType) { + super(type); + } + + match(modifier: Modifier) { + return modifier instanceof PreserveBerryModifier; + } + + clone() { + return new PreserveBerryModifier(this.type); + } + + shouldApply(args: any[]): boolean { + return super.shouldApply(args) && args[0] instanceof Utils.BooleanHolder; + } + + apply(args: any[]): boolean { + if (!(args[0] as Utils.BooleanHolder).value) + (args[0] as Utils.BooleanHolder).value = this.getStackCount() === this.getMaxStackCount() || Utils.randInt(this.getMaxStackCount()) < this.getStackCount(); + + return true; + } + + getMaxStackCount(): number { + return 4; + } +} + export abstract class ConsumablePokemonModifier extends ConsumableModifier { public pokemonId: integer; @@ -383,7 +450,7 @@ export abstract class ConsumablePokemonModifier extends ConsumableModifier { export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { private restorePoints: integer; private percent: boolean; - private fainted: boolean; + public fainted: boolean; constructor(type: ModifierType, pokemonId: integer, restorePoints: integer, percent: boolean, fainted?: boolean) { super(type, pokemonId); diff --git a/src/pokemon.ts b/src/pokemon.ts index 9d19b02f1..13eefa6b7 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -1,26 +1,26 @@ import Phaser from 'phaser'; import BattleScene from './battle-scene'; -import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from './battle-info'; -import Move, { StatChangeAttr, HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariablePowerAttr, Moves, allMoves, MoveCategory } from "./move"; -import { pokemonLevelMoves } from './pokemon-level-moves'; -import { default as PokemonSpecies, PokemonSpeciesForm, getPokemonSpecies } from './pokemon-species'; +import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from './ui/battle-info'; +import Move, { StatChangeAttr, HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariablePowerAttr, Moves, allMoves, MoveCategory } from "./data/move"; +import { pokemonLevelMoves } from './data/pokemon-level-moves'; +import { default as PokemonSpecies, PokemonSpeciesForm, getPokemonSpecies } from './data/pokemon-species'; import * as Utils from './utils'; -import { Type, getTypeDamageMultiplier } from './type'; -import { getLevelTotalExp } from './exp'; -import { Stat } from './pokemon-stat'; -import { AttackTypeBoosterModifier, PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier, TempBattleStatBoosterModifier } from './modifier'; -import { PokeballType } from './pokeball'; -import { Gender } from './gender'; -import { initMoveAnim, loadMoveAnimAssets } from './battle-anims'; -import { Status, StatusEffect } from './status-effect'; -import { tmSpecies } from './tms'; -import { pokemonEvolutions, pokemonPrevolutions, SpeciesEvolution, SpeciesEvolutionCondition } from './pokemon-evolutions'; +import { Type, getTypeDamageMultiplier } from './data/type'; +import { getLevelTotalExp } from './data/exp'; +import { Stat } from './data/pokemon-stat'; +import { AttackTypeBoosterModifier, PokemonBaseStatModifier, ShinyRateBoosterModifier, TempBattleStatBoosterModifier } from './modifier/modifier'; +import { PokeballType } from './data/pokeball'; +import { Gender } from './data/gender'; +import { initMoveAnim, loadMoveAnimAssets } from './data/battle-anims'; +import { Status, StatusEffect } from './data/status-effect'; +import { tmSpecies } from './data/tms'; +import { pokemonEvolutions, pokemonPrevolutions, SpeciesEvolution, SpeciesEvolutionCondition } from './data/pokemon-evolutions'; import { DamagePhase, FaintPhase, MessagePhase } from './battle-phases'; -import { BattleStat } from './battle-stat'; -import { BattleTag, BattleTagLapseType, BattleTagType, getBattleTag } from './battle-tag'; -import { Species } from './species'; -import { WeatherType } from './weather'; -import { TempBattleStat } from './modifier-type'; +import { BattleStat } from './data/battle-stat'; +import { BattleTag, BattleTagLapseType, BattleTagType, getBattleTag } from './data/battle-tag'; +import { Species } from './data/species'; +import { WeatherType } from './data/weather'; +import { TempBattleStat } from './data/temp-battle-stat'; export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: integer; @@ -280,7 +280,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.stats) this.stats = [ 0, 0, 0, 0, 0, 0 ]; const baseStats = this.getSpeciesForm().baseStats.slice(0); - this.scene.applyModifiers(PokemonBaseStatBoosterModifier, this, baseStats); + this.scene.applyModifiers(PokemonBaseStatModifier, this, baseStats); const stats = Utils.getEnumValues(Stat); for (let s of stats) { const isHp = s === Stat.HP; diff --git a/src/auto-play.ts b/src/system/auto-play.ts similarity index 93% rename from src/auto-play.ts rename to src/system/auto-play.ts index 9ce777cc0..b55bf0928 100644 --- a/src/auto-play.ts +++ b/src/system/auto-play.ts @@ -1,17 +1,17 @@ -import { SelectModifierPhase } from "./battle-phases"; -import BattleScene, { Button } from "./battle-scene"; -import { ModifierTier, ModifierType, ModifierTypeOption, PokemonBaseStatBoosterModifierType, PokemonHpRestoreModifierType, PokemonReviveModifierType } from "./modifier-type"; -import Pokemon, { AiType, EnemyPokemon, PlayerPokemon, PokemonMove } from "./pokemon"; -import { Species } from "./species"; -import { getTypeDamageMultiplier } from "./type"; -import BattleMessageUiHandler from "./ui/battle-message-ui-handler"; -import CommandUiHandler from "./ui/command-ui-handler"; -import FightUiHandler from "./ui/fight-ui-handler"; -import MessageUiHandler from "./ui/message-ui-handler"; -import ModifierSelectUiHandler from "./ui/modifier-select-ui-handler"; -import PartyUiHandler, { PartyUiMode } from "./ui/party-ui-handler"; -import ConfirmUiHandler from "./ui/confirm-ui-handler"; -import { Mode } from "./ui/ui"; +import { SelectModifierPhase } from "../battle-phases"; +import BattleScene, { Button } from "../battle-scene"; +import { ModifierTier, ModifierType, ModifierTypeOption, PokemonBaseStatBoosterModifierType, PokemonHpRestoreModifierType, PokemonReviveModifierType } from "../modifier/modifier-type"; +import Pokemon, { AiType, EnemyPokemon, PlayerPokemon, PokemonMove } from "../pokemon"; +import { Species } from "../data/species"; +import { getTypeDamageMultiplier } from "../data/type"; +import BattleMessageUiHandler from "../ui/battle-message-ui-handler"; +import CommandUiHandler from "../ui/command-ui-handler"; +import FightUiHandler from "../ui/fight-ui-handler"; +import MessageUiHandler from "../ui/message-ui-handler"; +import ModifierSelectUiHandler from "../ui/modifier-select-ui-handler"; +import PartyUiHandler, { PartyUiMode } from "../ui/party-ui-handler"; +import ConfirmUiHandler from "../ui/confirm-ui-handler"; +import { Mode } from "../ui/ui"; export function initAutoPlay() { const thisArg = this as BattleScene; diff --git a/src/game-data.ts b/src/system/game-data.ts similarity index 96% rename from src/game-data.ts rename to src/system/game-data.ts index 37b8aa9af..e422ec380 100644 --- a/src/game-data.ts +++ b/src/system/game-data.ts @@ -1,10 +1,10 @@ -import BattleScene from "./battle-scene"; -import { Gender } from "./gender"; -import Pokemon from "./pokemon"; -import { pokemonPrevolutions } from "./pokemon-evolutions"; -import PokemonSpecies, { allSpecies } from "./pokemon-species"; -import { Species } from "./species"; -import * as Utils from "./utils"; +import BattleScene from "../battle-scene"; +import { Gender } from "../data/gender"; +import Pokemon from "../pokemon"; +import { pokemonPrevolutions } from "../data/pokemon-evolutions"; +import PokemonSpecies, { allSpecies } from "../data/pokemon-species"; +import { Species } from "../data/species"; +import * as Utils from "../utils"; interface SaveData { trainerId: integer; diff --git a/src/game-speed.ts b/src/system/game-speed.ts similarity index 94% rename from src/game-speed.ts rename to src/system/game-speed.ts index 3ff8c159b..eadfccc59 100644 --- a/src/game-speed.ts +++ b/src/system/game-speed.ts @@ -1,5 +1,5 @@ -import BattleScene from "./battle-scene"; -import * as Utils from "./utils"; +import BattleScene from "../battle-scene"; +import * as Utils from "../utils"; export function initGameSpeed() { const thisArg = this as BattleScene; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 3919d5326..fc50c2a6f 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,7 +1,7 @@ import { CommandPhase } from "../battle-phases"; import BattleScene, { Button } from "../battle-scene"; -import { getPokeballName, PokeballType } from "../pokeball"; -import { addTextObject, TextStyle } from "../text"; +import { getPokeballName, PokeballType } from "../data/pokeball"; +import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./uiHandler"; diff --git a/src/battle-info.ts b/src/ui/battle-info.ts similarity index 97% rename from src/battle-info.ts rename to src/ui/battle-info.ts index 327ec8d5a..febe3ca8a 100644 --- a/src/battle-info.ts +++ b/src/ui/battle-info.ts @@ -1,10 +1,10 @@ -import { default as Pokemon } from './pokemon'; -import { getLevelTotalExp, getLevelRelExp } from './exp'; -import * as Utils from './utils'; +import { default as Pokemon } from '../pokemon'; +import { getLevelTotalExp, getLevelRelExp } from '../data/exp'; +import * as Utils from '../utils'; import { addTextObject, TextStyle } from './text'; -import { getGenderSymbol, getGenderColor } from './gender'; -import { StatusEffect } from './status-effect'; -import BattleScene from './battle-scene'; +import { getGenderSymbol, getGenderColor } from '../data/gender'; +import { StatusEffect } from '../data/status-effect'; +import BattleScene from '../battle-scene'; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index e9caa9786..a9d32390f 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,9 +1,9 @@ import BattleScene, { Button } from "../battle-scene"; -import { addTextObject, TextStyle } from "../text"; +import { addTextObject, TextStyle } from "./text"; import UI, { Mode } from "./ui"; import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; -import { getStatName, Stat } from "../pokemon-stat"; +import { getStatName, Stat } from "../data/pokemon-stat"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/biome-select-ui-handler.ts b/src/ui/biome-select-ui-handler.ts index ff513a1bc..0ce72eeae 100644 --- a/src/ui/biome-select-ui-handler.ts +++ b/src/ui/biome-select-ui-handler.ts @@ -1,6 +1,6 @@ import BattleScene, { Button } from "../battle-scene"; -import { Biome, biomeLinks, getBiomeName } from "../biome"; -import { addTextObject, TextStyle } from "../text"; +import { Biome, biomeLinks, getBiomeName } from "../data/biome"; +import { addTextObject, TextStyle } from "./text"; import { Mode } from "./ui"; import UiHandler from "./uiHandler"; diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index d39c3cb0b..42e9c8299 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,6 +1,6 @@ import { CommandPhase } from "../battle-phases"; import BattleScene, { Button } from "../battle-scene"; -import { addTextObject, TextStyle } from "../text"; +import { addTextObject, TextStyle } from "./text"; import { toPokemonUpperCase } from "../utils"; import { PartyUiMode } from "./party-ui-handler"; import UI, { Mode } from "./ui"; diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 184bffea3..34c64596f 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,5 +1,5 @@ import BattleScene, { Button } from "../battle-scene"; -import { addTextObject, TextStyle } from "../text"; +import { addTextObject, TextStyle } from "./text"; import { Mode } from "./ui"; import UiHandler from "./uiHandler"; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 20d51f37c..94d7e1c82 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,6 +1,6 @@ import BattleScene, { Button } from "../battle-scene"; -import { addTextObject, TextStyle } from "../text"; -import { Type } from "../type"; +import { addTextObject, TextStyle } from "./text"; +import { Type } from "../data/type"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./uiHandler"; diff --git a/src/ui/modifier-bar.ts b/src/ui/modifier-bar.ts deleted file mode 100644 index e79bab5cd..000000000 --- a/src/ui/modifier-bar.ts +++ /dev/null @@ -1,3 +0,0 @@ -import BattleScene from "../battle-scene"; -import { Modifier } from "../modifier"; - diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index a45f2eb45..0d1435e29 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,7 +1,7 @@ import BattleScene, { Button } from "../battle-scene"; -import { ModifierTier, ModifierType, ModifierTypeOption } from "../modifier-type"; -import { getPokeballAtlasKey, PokeballType } from "../pokeball"; -import { addTextObject, TextStyle } from "../text"; +import { ModifierTier, ModifierType, ModifierTypeOption } from "../modifier/modifier-type"; +import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; +import { addTextObject, TextStyle } from "./text"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 3cd9087cf..47a6a8440 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,7 +1,7 @@ import { CommandPhase, SummonMissingPhase } from "../battle-phases"; import BattleScene, { Button } from "../battle-scene"; import { PlayerPokemon, PokemonMove } from "../pokemon"; -import { addTextObject, TextStyle } from "../text"; +import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import MessageUiHandler from "./message-ui-handler"; import { Mode } from "./ui"; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index fb8090ea3..fae7680e9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,13 +1,13 @@ import BattleScene, { Button } from "../battle-scene"; -import PokemonSpecies, { allSpecies } from "../pokemon-species"; -import { Species } from "../species"; -import { TextStyle, addTextObject } from "../text"; +import PokemonSpecies, { allSpecies } from "../data/pokemon-species"; +import { Species } from "../data/species"; +import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; -import { DexEntryDetails, StarterDexUnlockTree } from "../game-data"; -import { Gender, getGenderColor, getGenderSymbol } from "../gender"; -import { pokemonPrevolutions } from "../pokemon-evolutions"; +import { DexEntryDetails, StarterDexUnlockTree } from "../system/game-data"; +import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; +import { pokemonPrevolutions } from "../data/pokemon-evolutions"; export type StarterSelectCallback = (starters: Starter[]) => void; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 467c2dfe0..e7547149a 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -3,11 +3,11 @@ import { Mode } from "./ui"; import UiHandler from "./uiHandler"; import * as Utils from "../utils"; import { PlayerPokemon } from "../pokemon"; -import { Type } from "../type"; -import { TextStyle, addTextObject } from "../text"; -import Move, { MoveCategory } from "../move"; -import { getPokeballAtlasKey } from "../pokeball"; -import { getGenderColor, getGenderSymbol } from "../gender"; +import { Type } from "../data/type"; +import { TextStyle, addTextObject } from "./text"; +import Move, { MoveCategory } from "../data/move"; +import { getPokeballAtlasKey } from "../data/pokeball"; +import { getGenderColor, getGenderSymbol } from "../data/gender"; enum Page { PROFILE, diff --git a/src/text.ts b/src/ui/text.ts similarity index 100% rename from src/text.ts rename to src/ui/text.ts