From 6f32ea1a24e2d77eaaa0940fc05f1806da8ca9dc Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 2 Apr 2024 20:01:02 -0400 Subject: [PATCH] Merge main --- .../back/1017-cornerstone-mask-tera.json | 22 +++---- .../back/1017-cornerstone-mask-tera.png | Bin 3600 -> 1384 bytes .../back/1017-hearthflame-mask-tera.json | 20 +++--- .../back/1017-hearthflame-mask-tera.png | Bin 4097 -> 1486 bytes .../pokemon/back/1017-teal-mask-tera.json | 22 +++---- .../pokemon/back/1017-teal-mask-tera.png | Bin 4217 -> 1568 bytes .../back/1017-wellspring-mask-tera.json | 22 +++---- .../back/1017-wellspring-mask-tera.png | Bin 3473 -> 1245 bytes .../shiny/1017-cornerstone-mask-tera.json | 22 +++---- .../back/shiny/1017-cornerstone-mask-tera.png | Bin 3600 -> 1384 bytes .../shiny/1017-hearthflame-mask-tera.json | 20 +++--- .../back/shiny/1017-hearthflame-mask-tera.png | Bin 4097 -> 1486 bytes .../back/shiny/1017-teal-mask-tera.json | 22 +++---- .../back/shiny/1017-teal-mask-tera.png | Bin 4217 -> 1568 bytes .../back/shiny/1017-wellspring-mask-tera.json | 22 +++---- .../back/shiny/1017-wellspring-mask-tera.png | Bin 3473 -> 1245 bytes src/data/ability.ts | 60 ++++++++++++++++-- src/data/arena-tag.ts | 22 +++++-- src/data/battler-tags.ts | 36 ++++++++--- src/data/move.ts | 30 +++++++-- src/data/pokemon-forms.ts | 10 ++- src/data/trainer-config.ts | 3 +- src/field/pokemon.ts | 11 ++-- src/modifier/modifier-type.ts | 3 +- src/phases.ts | 50 +++++++++------ src/ui/starter-select-ui-handler.ts | 9 ++- 26 files changed, 263 insertions(+), 143 deletions(-) diff --git a/public/images/pokemon/back/1017-cornerstone-mask-tera.json b/public/images/pokemon/back/1017-cornerstone-mask-tera.json index 1aec2048cbb..1424d2555e9 100644 --- a/public/images/pokemon/back/1017-cornerstone-mask-tera.json +++ b/public/images/pokemon/back/1017-cornerstone-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-cornerstone-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 94, + "h": 94 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, + "x": 1, "y": 2, - "w": 144, - "h": 140 + "w": 94, + "h": 92 }, "frame": { "x": 0, "y": 0, - "w": 144, - "h": 140 + "w": 94, + "h": 92 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dcbefd71783ecd9e243d3426e927b845:1f7ab2bf8ba8848c6f73ec7bc9e81921:19983e2c44c76def68513841019a938a$" + "smartupdate": "$TexturePacker:SmartUpdate:7445fc98c3d4d220190fb1c24e70d3ab:1f7ab2bf8ba8848c6f73ec7bc9e81921:19983e2c44c76def68513841019a938a$" } } diff --git a/public/images/pokemon/back/1017-cornerstone-mask-tera.png b/public/images/pokemon/back/1017-cornerstone-mask-tera.png index 80f34d6b529166e7b3c4da16838b2c56ea43ed3e..9a612041335f42bc6891847af72ab7e65bfe6d2f 100644 GIT binary patch literal 1384 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 P1CW8Pu}-blt?>T?D~4zL diff --git a/public/images/pokemon/back/1017-hearthflame-mask-tera.json b/public/images/pokemon/back/1017-hearthflame-mask-tera.json index 06dc6aa0c2f..83bc9e280ba 100644 --- a/public/images/pokemon/back/1017-hearthflame-mask-tera.json +++ b/public/images/pokemon/back/1017-hearthflame-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-hearthflame-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { "x": 3, "y": 0, - "w": 136, - "h": 144 + "w": 89, + "h": 96 }, "frame": { "x": 0, "y": 0, - "w": 136, - "h": 144 + "w": 89, + "h": 96 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e85adb80edf2c01ef6f95faf83de58ce:c7ed7dc68c465d2334a81deca3c86664:a668acdf23dbfab4355fc0c90e8f5362$" + "smartupdate": "$TexturePacker:SmartUpdate:f9e0b5ff9ac2b57d131d6f27661d1aaa:c7ed7dc68c465d2334a81deca3c86664:a668acdf23dbfab4355fc0c90e8f5362$" } } diff --git a/public/images/pokemon/back/1017-hearthflame-mask-tera.png b/public/images/pokemon/back/1017-hearthflame-mask-tera.png index cce6529d2fd707a37631324ce616e593a70ef792..3a50be4b00be8e5c37aa1cfd5755b21a838090c7 100644 GIT binary patch literal 1486 zcmV;<1u^=GP)L-eK)0k;i3j1Q8a3!pg{5VKIdCTE1k-Y(g3X<}as_Km}y|Y7pgd^B2H_ zm7yeAz|yS%`6bX4z(WYZ6PyV`z)%S!!_RJ%-U}0QLnLd0A&3}ARFjwVNna8ZKutLF z6k?Vyo}xT#Xi-m}0Av$t{^YTff;lcZLIVVrE~=4MEKvOifHi71)vSCjW!`dBUBR%K%G-29Qzc{{G-#sC6mZNL5~1dA0Plx^JOLpL+XN7xbA)bNW+Ct-!hfY32*FqaJ6z?-l?pU>SJ0RuoaK%z95%WVzHgq%;Tp9pDGW+^@KkQy+`RG(GU zvOaCe3IIEiNBT8}qp8+KoorGn;JMn>dC;nX5JrH-?sH9MWmzSlom%p~*Z2N97A-v6 zs51ab2v`9!zI7$+9n^*AtZvcBLddDa`?8D`D}eRWOYFzr2Yk4yf$dj>5Tdk+zRM~A zJgpqT@DUi104)BKnnKnq{Wko;Hp8BQe74XhNa7hFkd<9{0YFVivI|;WqlwMSb#6ki zbPNsf6G!^T2`zKR2BKDbl&d#IuyE3UGyoH306;BWq}fQ+)kz-mYOeYoki3Lf!yf_K zRF;KSCWVHU0iG}coa^gWre|upl!0rf4z@mQyoD*jHnl(A+vj0_y0rv4IiSx0mCJUpQ49{_Aa z7?w*kmp?JU5Gs7zhRX&`<<9|?&^kvkI5QzyXSbPT0fk_CqbI;g&0^)f0T%#940g9e zmd4HzC;ElpHG9N}&=2z^K#1;uUT;Mv03*-={2a7^qzm>y?I-i8hh71c(lqN&04|1) z0bu}ust@kk^9pd#9|Ex6Wy!s2JzabZU{CDS6^IAGg@;B23n(|CdKmjC08Remq5O^a z0bQCo1J3uEF+gMY0syDm%uzq$ZwSBm0)SotV2rr`{-#6tJP6TU{$CLsfRFg8J#hwz z{__8d&;Vk9wCx^Xk-0{f+i?S|_)KNP{+t40SF=rT10!0%%GV$pH#}dlV_&mfTsNWt zu+1p|Q$ReHw^!GgCdkNFAiam&t{LC>zdvk%C7ofPeT;2ofy+C9VgehRY)IvyozJ#5 zdP~2UP;QPe0rp)fzCgt{^@U)5j9Ur>?#uQRL#q1Q@_i=oH3*_y+pQ~>L(uZMmejKF z%6~uKSeJ$6?>7j4251le0X;x2h?cJf0f{o$t-)c^nh literal 4097 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 Se97tn0000JS0G>kztT_81z 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 P00000NkvXXu0mjfb@Zv5 diff --git a/public/images/pokemon/back/1017-wellspring-mask-tera.json b/public/images/pokemon/back/1017-wellspring-mask-tera.json index bf277369098..25fd3a76487 100644 --- a/public/images/pokemon/back/1017-wellspring-mask-tera.json +++ b/public/images/pokemon/back/1017-wellspring-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-wellspring-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { "x": 0, - "y": 8, - "w": 144, - "h": 130 + "y": 6, + "w": 96, + "h": 85 }, "frame": { "x": 0, "y": 0, - "w": 144, - "h": 130 + "w": 96, + "h": 85 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5d527aed445f4210bf0f76a29b0718ef:b9a6688aea29bea33c6b1b518f1da693:f4f8b58743ad897a5774e4ca3d3eff03$" + "smartupdate": "$TexturePacker:SmartUpdate:689ff4514c071d220bf0457da26850d5:b9a6688aea29bea33c6b1b518f1da693:f4f8b58743ad897a5774e4ca3d3eff03$" } } diff --git a/public/images/pokemon/back/1017-wellspring-mask-tera.png b/public/images/pokemon/back/1017-wellspring-mask-tera.png index 12760861152310e878ffbfdb36f569a5b73ecd47..19d710549273af93fad67aeded6d1db41528c93e 100644 GIT binary patch literal 1245 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 literal 3600 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 PcK|Xou`q5lyb=9>^e$yU diff --git a/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.json b/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.json index 088c009733e..21d1d17f3d6 100644 --- a/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.json +++ b/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-hearthflame-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { "x": 3, "y": 0, - "w": 136, - "h": 144 + "w": 89, + "h": 96 }, "frame": { "x": 0, "y": 0, - "w": 136, - "h": 144 + "w": 89, + "h": 96 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8b38cc19c7295a495d9e91ae10718e62:75bb98cbf7a7074508abbada1dbfc94c:a668acdf23dbfab4355fc0c90e8f5362$" + "smartupdate": "$TexturePacker:SmartUpdate:84ef49fd74c1e18eea1fbf1ccbdf3667:75bb98cbf7a7074508abbada1dbfc94c:a668acdf23dbfab4355fc0c90e8f5362$" } } diff --git a/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.png b/public/images/pokemon/back/shiny/1017-hearthflame-mask-tera.png index 7c71afcf0eb6bbe34aeb3e8751db35718b2fc6c2..34c888466770177604aff26ddc13cce5eda2b8e6 100644 GIT binary patch literal 1486 zcmV;<1u^=GP)L-eK)0k;i3j1Q8a3!pg{5VKIdCTE1k-Y(g3X<}as_Km}y|Y7pgd^B2H_ zm7yeAz|yS%`6bX4z(WYZ6PyV`z)%S!!_RJ%-U}0QLnLd0A&3}ARFjwVNna8ZKutLF z6k?Vyo}xT#Xi-m}0Av$t{^YTff;lcZLIVVrE~=4MEKvOifHi71)vSCjW!`dBUBR%K%G-29Qzc{{G-#sC6mZNL5~1dA0Plx^JOLpL+XN7xbA)bNW+Ct-!hfY32*FqaJ6z?-l=pU=%30RuoaK%z95%WVzHgq%;Tp9pDGW+^@KkQy+`RG(GU zvOaCe3IIEiNBT8}qp8+KoorGn;JMn>dC;nX5JrH-?sH9MWmzSlom%p~*Z2N97A-v6 zs51ab2v`9!zI7$+9n^*AtZvcBLddDa`?8D`D}eRWOYFzr2Yk4yf$dj>5Tdk+zRM~A zJgpqT@DUi104)BKnnKnq{Wko;Hp8BQe74XhNa7hFkd<9{0YFVivI|;WqlwMSb#6ki zbPNsf6G!^T2`zKR2BKDbl&d#IuyE3UGyoH306;BWq}fQ+)kz-mYOeYoki3Lf!yf_K zRF;KSCWVHU0iG}coa^gWre|upl!0rf4z@mQyoD*jHnl(A+vj0_y0rv{<<9|?&^kvkI5QzyXSbPT0fk_CqbI;g&0^)f0T%#940g9e zmd4HzC;ElpHG9N}&=2z^K#1;uUT;Mv03*-={2a7^qzm>y?I-i8hh71c(lqN&04|1) z0bu}ust@kk^9pd#9|Ex6Wy!s2JzabZU{CDS6^IAGg@;B23n(|CdKmjC08Remq5O^a z0bQCo1J3uEF+gMY0syDm%uzq$ZwSBm0)SotV2rr^{-#6tJP6TU{$CLsfRFg8J#hwz z{__8d&;Vk9wEZ4nk-0{f+i?S|_)KNP_M8G@SF=rT10!0%%GV$}H#}dlV_&mfTsNWt zu+1p|Q$ReHw^!GgCdkNFAiam&t{LC>zdvk%C7ofPeT;2ofy+C9VgehRY)IvyozJ#5 zdP~2UP;QPe0k%ykzCgt{^@U)5jC%?MZp;1@L#q1Q@_i=oH3*_y+pQ~>L(uZMmejKF z%6~uKSeJ$6?>7j4251le0X;x2h?cJf0f{oPC$0RR91 literal 4097 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 diff --git a/public/images/pokemon/back/shiny/1017-teal-mask-tera.json b/public/images/pokemon/back/shiny/1017-teal-mask-tera.json index 1ee4ee8fb40..ffc0657b642 100644 --- a/public/images/pokemon/back/shiny/1017-teal-mask-tera.json +++ b/public/images/pokemon/back/shiny/1017-teal-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-teal-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, + "x": 1, "y": 0, - "w": 144, - "h": 144 + "w": 94, + "h": 96 }, "frame": { "x": 0, "y": 0, - "w": 144, - "h": 144 + "w": 94, + "h": 96 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5395c9c1661c7d728723b2c2a457aa66:b5288f0e4ffc7614f30c6b606d36647b:9f6debc3cc730be60b9cc5260e70873a$" + "smartupdate": "$TexturePacker:SmartUpdate:46c5307225fee0ace2c1e637ebc20c5b:b5288f0e4ffc7614f30c6b606d36647b:9f6debc3cc730be60b9cc5260e70873a$" } } diff --git a/public/images/pokemon/back/shiny/1017-teal-mask-tera.png b/public/images/pokemon/back/shiny/1017-teal-mask-tera.png index 81b8987e1f6ce93390e6c73bba3dc73a9d138032..d118d314c9a3b5c895414344b1d9012edeef9820 100644 GIT binary patch literal 1568 zcmV+*2H*LKP))=f8c1UW9|I)y!~ndf^dT4Y)XPcBD^QA{Udb;P zfE;Hg6LyXSK>5lY+4i!%5*ozjf|@2We;m}SX}jO=+y0__Fvchae_XfV_P6T}wCrNA zX&)%{$rd$jubh4#e8O7QQ4DT-}lm!%A zKvmKJNENVa3NB^Y+CfdP7y_k$30C~6zbjy8KlbYqwEz@TQ1mYW17Z%yFMZPCwwJ$M z2ULQ^h5(4PVS{350PM&w#r{>Lb_8wI01BY`3SH_+d+YW>B>;usd!I8^8ih<(7EIV) z5o(nXIiUf}4a-qgE4)+*UImGQTB!qoyW@cEg;r-}#S#jH4gi(!jbmXS7psMo8OdQ9 z+E~&dP6DXqwm<0l)1*RO2gMj83Pnul{RvJ}iHq?20z++?@fcBXz?F2eK*IuXlc3NP z_5PKD0>F9;UL}}kv%%rB=iijH9%I0I7xrf$y#Oanb14mpP86~boT&lv@m6JowTO?X zQW}Mn+vpIN_FJX~@gmv^&0NenA1JF=RkZFnuS+=G9)DqAZ2TcPG zHPPGw4_%2?0kCnN1{HFw&fk>k0BJGhB??wGY47~91CwJmN3gh2g5xR`) znWO2HP3Nrv_Pn$o3eLu)`Pv74P*DByD;qBM|7!pyOaO1xBr6l3YL*57#)Arh)P4k% zC`J1;tw|ymm>M7Ynoc?l;Z0M^fJoq}2-6fM=t^3z=VA_!C8^aWg^Zp30N8WFJC2NI zUqXc<8W>w=G0jd$FLL`cpnQAZm{FT5$;{Mgiq9QZI%Osoa*K}wMgm{OfGuHE=i=rA z#L}$|wf;bZ{Skn;mGK0YWgbJ_i2-$okc)&!dIGR5P zR6_f)CApNDBtQwg_}UdDj^@QqH4y+#=zh&jM!Jq^z3SZs?3S(^V|^9Ch!mULcoSkY z|HuI+^nlI_2obk+4PBb=1B#kdHY%Dn*iqBa0O$-1fLMe6AHKYmO)^mf)s4BQ5xNYJ zO$QTQ4yWo}J1_wT2}A(-Vl}m)d^JMP0X8^)7T^IQ6Y4|2lL)N{8PtU`5s7dXo%)vm z>7Klhdv(n#LB0+cWX2BYdX6#<()v<%4N!4k0@!6m5vY$2Cxl=>!_S{TKky6?F2T-j zFfRa*i~fFoO7b2jA@|pj=Z`D$0$}=1@CcB@bok&7c^&}bfNb}xfY`4W)5-uSb9xzm zC_Mz^>1zJL{hU{D%1iB=HUT>}J`)Kse z!;}WN@i05)xSuTEdU#V^@Uf;usH^9GHhS~nkh)-@EFGrkh?EisRCxR0Qz3K*!#(lb zcDpBWq+0*Yv#oG2$gIgF2gd|-`Fl2mi;#fe+|&y`~!>txj}UM zS`q-!2ww%@-vM~AKAhtkA}4)8L`MT0@I9G+3DE8$Ne;f!??SY`2)Mny68sO|;YS@1 Se97tn0000IbZG*~P&j6pSB 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 P00000NkvXXu0mjf(;1D5 diff --git a/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.json b/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.json index 56a854a2ab3..b0bf6414fb6 100644 --- a/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.json +++ b/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.json @@ -4,30 +4,30 @@ "image": "1017-wellspring-mask-tera.png", "format": "RGBA8888", "size": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, - "scale": 0.5, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 144, - "h": 144 + "w": 96, + "h": 96 }, "spriteSourceSize": { "x": 0, - "y": 8, - "w": 144, - "h": 130 + "y": 6, + "w": 96, + "h": 85 }, "frame": { "x": 0, "y": 0, - "w": 144, - "h": 130 + "w": 96, + "h": 85 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1bf5253f2d6ae6d8c33f2be9d591228:12d1e5242ab1c5174bbe31202f0e13e8:f4f8b58743ad897a5774e4ca3d3eff03$" + "smartupdate": "$TexturePacker:SmartUpdate:2cd8c5adc90abae707acf2863021a2ef:12d1e5242ab1c5174bbe31202f0e13e8:f4f8b58743ad897a5774e4ca3d3eff03$" } } diff --git a/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.png b/public/images/pokemon/back/shiny/1017-wellspring-mask-tera.png index c935b62f482115476b0a9b87e9e39748780b0c8a..00b0f7e7566cdde8fa2d9bb6c5f0bde327e08b4f 100644 GIT binary patch literal 1245 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 boolean; export class PreDefendAbAttr extends AbAttr { @@ -977,9 +1013,16 @@ export class BlockCritAbAttr extends AbAttr { } } +export class BlockNonDirectDamageAbAttr extends AbAttr { + apply(pokemon: Pokemon, cancelled: Utils.BooleanHolder, args: any[]): boolean { + cancelled.value = true; + return true; + } +} + export class BlockOneHitKOAbAttr extends AbAttr { apply(pokemon: Pokemon, cancelled: Utils.BooleanHolder, args: any[]): boolean { - cancelled.value = false; + cancelled.value = true; return true; } } @@ -2200,7 +2243,8 @@ export function initAbilities() { new Ability(Abilities.QUICK_FEET, "Quick Feet (N)", "Boosts the Speed stat if the Pokémon has a status condition.", 4), new Ability(Abilities.NORMALIZE, "Normalize (N)", "All the Pokémon's moves become Normal type. The power of those moves is boosted a little.", 4), new Ability(Abilities.SNIPER, "Sniper (N)", "Powers up moves if they become critical hits when attacking.", 4), - new Ability(Abilities.MAGIC_GUARD, "Magic Guard (N)", "The Pokémon only takes damage from attacks.", 4), + new Ability(Abilities.MAGIC_GUARD, "Magic Guard", "The Pokémon only takes damage from attacks.", 4) + .attr(BlockNonDirectDamageAbAttr), new Ability(Abilities.NO_GUARD, "No Guard (N)", "The Pokémon employs no-guard tactics to ensure incoming and outgoing attacks always land.", 4), new Ability(Abilities.STALL, "Stall (N)", "The Pokémon moves after all other Pokémon do.", 4), new Ability(Abilities.TECHNICIAN, "Technician", "Powers up the Pokémon's weaker moves.", 4) @@ -2597,10 +2641,14 @@ export function initAbilities() { new Ability(Abilities.SUPERSWEET_SYRUP, "Supersweet Syrup (N)", "A sickly sweet scent spreads across the field the first time the Pokémon enters a battle, lowering the evasiveness of opposing Pokémon.", 9), new Ability(Abilities.HOSPITALITY, "Hospitality (N)", "When the Pokémon enters a battle, it showers its ally with hospitality, restoring a small amount of the ally's HP.", 9), new Ability(Abilities.TOXIC_CHAIN, "Toxic Chain (N)", "The power of the Pokémon's toxic chain may badly poison any target the Pokémon hits with a move.", 9), - new Ability(Abilities.EMBODY_ASPECT_TEAL, "Embody Aspect (N)", "The Pokémon's heart fills with memories, causing the Teal Mask to shine and the Pokémon's Speed stat to be boosted.", 9), - new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, "Embody Aspect (N)", "The Pokémon's heart fills with memories, causing the Wellspring Mask to shine and the Pokémon's Sp. Def stat to be boosted.", 9), - new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, "Embody Aspect (N)", "The Pokémon's heart fills with memories, causing the Hearthflame Mask to shine and the Pokémon's Attack stat to be boosted.", 9), - new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, "Embody Aspect (N)", "The Pokémon's heart fills with memories, causing the Cornerstone Mask to shine and the Pokémon's Defense stat to be boosted.", 9), + new Ability(Abilities.EMBODY_ASPECT_TEAL, "Embody Aspect", "The Pokémon's heart fills with memories, causing the Teal Mask to shine and the Pokémon's Speed stat to be boosted.", 9) + .attr(PostBattleInitStatChangeAbAttr, BattleStat.SPD, 1, true), + new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, "Embody Aspect", "The Pokémon's heart fills with memories, causing the Wellspring Mask to shine and the Pokémon's Sp. Def stat to be boosted.", 9) + .attr(PostBattleInitStatChangeAbAttr, BattleStat.SPDEF, 1, true), + new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, "Embody Aspect", "The Pokémon's heart fills with memories, causing the Hearthflame Mask to shine and the Pokémon's Attack stat to be boosted.", 9) + .attr(PostBattleInitStatChangeAbAttr, BattleStat.ATK, 1, true), + new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, "Embody Aspect", "The Pokémon's heart fills with memories, causing the Cornerstone Mask to shine and the Pokémon's Defense stat to be boosted.", 9) + .attr(PostBattleInitStatChangeAbAttr, BattleStat.DEF, 1, true), new Ability(Abilities.TERA_SHIFT, "Tera Shift", "When the Pokémon enters a battle, it absorbs the energy around itself and transforms into its Terastal Form.", 9) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1), new Ability(Abilities.TERA_SHELL, "Tera Shell (N)", "The Pokémon's shell contains the powers of each type. All damage-dealing moves that hit the Pokémon when its HP is full will not be very effective.", 9) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index ac2b54cad86..b34205db3f1 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -9,6 +9,7 @@ import { StatusEffect } from "./status-effect"; import { BattlerIndex } from "../battle"; import { Moves } from "./enums/moves"; import { ArenaTagType } from "./enums/arena-tag-type"; +import { BlockNonDirectDamageAbAttr, applyAbAttrs } from "./ability"; export enum ArenaTagSide { BOTH, @@ -172,12 +173,17 @@ class SpikesTag extends ArenaTrapTag { activateTrap(pokemon: Pokemon): boolean { if (pokemon.isGrounded()) { - const damageHpRatio = 1 / (10 - 2 * this.layers); - const damage = Math.ceil(pokemon.getMaxHp() * damageHpRatio); + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' is hurt\nby the spikes!')); - pokemon.damageAndUpdate(damage, HitResult.OTHER); - return true; + if (!cancelled.value) { + const damageHpRatio = 1 / (10 - 2 * this.layers); + const damage = Math.ceil(pokemon.getMaxHp() * damageHpRatio); + + pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' is hurt\nby the spikes!')); + pokemon.damageAndUpdate(damage, HitResult.OTHER); + return true; + } } return false; @@ -293,6 +299,12 @@ class StealthRockTag extends ArenaTrapTag { } activateTrap(pokemon: Pokemon): boolean { + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + + if (cancelled.value) + return false; + const damageHpRatio = this.getDamageHpRatio(pokemon); if (damageHpRatio) { diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 6fff284d8b9..9a3ab9be3b8 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -8,7 +8,7 @@ import * as Utils from "../utils"; import { Moves } from "./enums/moves"; import { ChargeAttr, MoveFlags, allMoves } from "./move"; import { Type } from "./type"; -import { Abilities, FlinchEffectAbAttr, applyAbAttrs } from "./ability"; +import { Abilities, BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, applyAbAttrs } from "./ability"; import { BattlerTagType } from "./enums/battler-tag-type"; import { TerrainType } from "./terrain"; import { WeatherType } from "./weather"; @@ -280,10 +280,15 @@ export class SeedTag extends BattlerTag { if (ret) { const source = pokemon.getOpponents().find(o => o.getBattlerIndex() === this.sourceIndex); if (source) { - pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - const damage = pokemon.damageAndUpdate(Math.max(Math.floor(pokemon.getMaxHp() / 8), 1)); - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(), damage, getPokemonMessage(pokemon, '\'s health is\nsapped by Leech Seed!'), false, true)); + if (!cancelled.value) { + pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); + + const damage = pokemon.damageAndUpdate(Math.max(Math.floor(pokemon.getMaxHp() / 8), 1)); + pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(), damage, getPokemonMessage(pokemon, '\'s health is\nsapped by Leech Seed!'), false, true)); + } } } @@ -319,7 +324,11 @@ export class NightmareTag extends BattlerTag { pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' is locked\nin a Nightmare!')); pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type - pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 4)); + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + + if (!cancelled.value) + pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 4)); } return ret; @@ -506,7 +515,11 @@ export abstract class DamagingTrapTag extends TrappedTag { pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` is hurt\nby ${this.getMoveName()}!`)); pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, this.commonAnim)); - pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 8)) + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + + if (!cancelled.value) + pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 8)) } return ret; @@ -924,10 +937,15 @@ export class SaltCuredTag extends BattlerTag { if (ret) { pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); - const pokemonSteelOrWater = pokemon.isOfType(Type.STEEL) || pokemon.isOfType(Type.WATER); - pokemon.damageAndUpdate(Math.max(Math.floor(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), 1)); + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` is hurt by ${this.getMoveName()}!`)); + if (!cancelled.value) { + const pokemonSteelOrWater = pokemon.isOfType(Type.STEEL) || pokemon.isOfType(Type.WATER); + pokemon.damageAndUpdate(Math.max(Math.floor(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), 1)); + + pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` is hurt by ${this.getMoveName()}!`)); + } } return ret; diff --git a/src/data/move.ts b/src/data/move.ts index 637c04cba4b..f10513548ff 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -12,7 +12,7 @@ import * as Utils from "../utils"; import { WeatherType } from "./weather"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagType } from "./enums/arena-tag-type"; -import { Abilities, ProtectAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs } from "./ability"; +import { Abilities, ProtectAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr } from "./ability"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import { BattlerIndex } from "../battle"; import { Stat } from "./pokemon-stat"; @@ -441,6 +441,14 @@ export class StatusMoveTypeImmunityAttr extends MoveAttr { } } +export class IgnoreOpponentStatChangesAttr extends MoveAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + (args[0] as Utils.IntegerHolder).value = 0; + + return true; + } +} + export class HighCritAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { (args[0] as Utils.IntegerHolder).value++; @@ -626,6 +634,10 @@ export class RecoilAttr extends MoveEffectAttr { if (!recoilDamage) return false; + applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + if (cancelled.value) + return false; + user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true); user.scene.queueMessage(getPokemonMessage(user, ' is hit\nwith recoil!')); @@ -1817,6 +1829,11 @@ export class MissEffectAttr extends MoveAttr { } const halveHpMissEffectFunc = (user: Pokemon, move: Move) => { + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); + if (cancelled.value) + return false; + const damage = user.damage(Math.floor(user.getMaxHp() / 2)); if (damage) user.scene.damageNumberHandler.add(user, damage, HitResult.OTHER); @@ -3915,7 +3932,7 @@ export function initMoves() { .attr(StatChangeAttr, BattleStat.SPDEF, -2) .ballBombMove(), new AttackMove(Moves.FOUL_PLAY, "Foul Play", Type.DARK, MoveCategory.PHYSICAL, 95, 100, 15, "The user turns the target's power against it. The higher the target's Attack stat, the greater the damage it deals.", -1, 0, 5) - .attr(TargetAtkUserAtkAttr), + .attr(TargetAtkUserAtkAttr), new StatusMove(Moves.SIMPLE_BEAM, "Simple Beam (N)", Type.NORMAL, 100, 15, "The user's mysterious psychic wave changes the target's Ability to Simple.", -1, 0, 5), new StatusMove(Moves.ENTRAINMENT, "Entrainment (N)", Type.NORMAL, 100, 15, "The user dances with an odd rhythm that compels the target to mimic it, making the target's Ability the same as the user's.", -1, 0, 5), new StatusMove(Moves.AFTER_YOU, "After You (N)", Type.NORMAL, -1, 15, "The user helps the target and makes it use its move right after the user.", -1, 0, 5) @@ -3925,7 +3942,8 @@ export function initMoves() { new AttackMove(Moves.ECHOED_VOICE, "Echoed Voice", Type.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, "The user attacks the target with an echoing voice. If this move is used every turn, its power is increased.", -1, 0, 5) .attr(ConsecutiveUseMultiBasePowerAttr, 5, false) .soundBased(), - new AttackMove(Moves.CHIP_AWAY, "Chip Away (P)", Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, "Looking for an opening, the user strikes consistently. The target's stat changes don't affect this attack's damage.", -1, 0, 5), + new AttackMove(Moves.CHIP_AWAY, "Chip Away", Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, "Looking for an opening, the user strikes consistently. The target's stat changes don't affect this attack's damage.", -1, 0, 5) + .attr(IgnoreOpponentStatChangesAttr), new AttackMove(Moves.CLEAR_SMOG, "Clear Smog (P)", Type.POISON, MoveCategory.SPECIAL, 50, -1, 15, "The user attacks the target by throwing a clump of special mud. All stat changes are returned to normal.", -1, 0, 5), new AttackMove(Moves.STORED_POWER, "Stored Power (P)", Type.PSYCHIC, MoveCategory.SPECIAL, 20, 100, 10, "The user attacks the target with stored power. The more the user's stats are raised, the greater the move's power.", -1, 0, 5), new StatusMove(Moves.QUICK_GUARD, "Quick Guard (N)", Type.FIGHTING, -1, 15, "The user protects itself and its allies from priority moves.", -1, 3, 5) @@ -3998,7 +4016,8 @@ export function initMoves() { .attr(FlinchAttr), new AttackMove(Moves.HORN_LEECH, "Horn Leech", Type.GRASS, MoveCategory.PHYSICAL, 75, 100, 10, "The user drains the target's energy with its horns. The user's HP is restored by half the damage taken by the target.", -1, 0, 5) .attr(HitHealAttr), - new AttackMove(Moves.SACRED_SWORD, "Sacred Sword (P)", Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, "The user attacks by slicing with a long horn. The target's stat changes don't affect this attack's damage.", -1, 0, 5) + new AttackMove(Moves.SACRED_SWORD, "Sacred Sword", Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, "The user attacks by slicing with a long horn. The target's stat changes don't affect this attack's damage.", -1, 0, 5) + .attr(IgnoreOpponentStatChangesAttr) .slicingMove(), new AttackMove(Moves.RAZOR_SHELL, "Razor Shell", Type.WATER, MoveCategory.PHYSICAL, 75, 95, 10, "The user cuts its target with sharp shells. This may also lower the target's Defense stat.", 50, 0, 5) .attr(StatChangeAttr, BattleStat.DEF, -1) @@ -4262,7 +4281,8 @@ export function initMoves() { .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER), new AttackMove(Moves.SPIRIT_SHACKLE, "Spirit Shackle (P)", Type.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, "The user attacks while simultaneously stitching the target's shadow to the ground to prevent the target from escaping.", -1, 0, 7) .makesContact(false), - new AttackMove(Moves.DARKEST_LARIAT, "Darkest Lariat (P)", Type.DARK, MoveCategory.PHYSICAL, 85, 100, 10, "The user swings both arms and hits the target. The target's stat changes don't affect this attack's damage.", -1, 0, 7), + new AttackMove(Moves.DARKEST_LARIAT, "Darkest Lariat", Type.DARK, MoveCategory.PHYSICAL, 85, 100, 10, "The user swings both arms and hits the target. The target's stat changes don't affect this attack's damage.", -1, 0, 7) + .attr(IgnoreOpponentStatChangesAttr), new AttackMove(Moves.SPARKLING_ARIA, "Sparkling Aria", Type.WATER, MoveCategory.SPECIAL, 90, 100, 10, "The user bursts into song, emitting many bubbles. Any Pokémon suffering from a burn will be healed by the touch of these bubbles.", -1, 0, 7) .attr(HealStatusEffectAttr, false, StatusEffect.BURN) .soundBased() diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index f5664efc15b..1a76a3600d7 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -637,7 +637,15 @@ export const pokemonFormChanges: PokemonFormChanges = { [Species.OGERPON]: [ new SpeciesFormChange(Species.OGERPON, 'teal-mask', 'wellspring-mask', new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)), new SpeciesFormChange(Species.OGERPON, 'teal-mask', 'hearthflame-mask', new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)), - new SpeciesFormChange(Species.OGERPON, 'teal-mask', 'cornerstone-mask', new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)) + new SpeciesFormChange(Species.OGERPON, 'teal-mask', 'cornerstone-mask', new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)), + new SpeciesFormChange(Species.OGERPON, 'teal-mask', 'teal-mask-tera', new SpeciesFormChangeManualTrigger(), true), //When holding a Grass Tera Shard + new SpeciesFormChange(Species.OGERPON, 'teal-mask-tera', 'teal-mask', new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Grass Tera Shard + new SpeciesFormChange(Species.OGERPON, 'wellspring-mask', 'wellspring-mask-tera', new SpeciesFormChangeManualTrigger(), true), //When holding a Water Tera Shard + new SpeciesFormChange(Species.OGERPON, 'wellspring-mask-tera', 'wellspring-mask', new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Water Tera Shard + new SpeciesFormChange(Species.OGERPON, 'hearthflame-mask', 'hearthflame-mask-tera', new SpeciesFormChangeManualTrigger(), true), //When holding a Fire Tera Shard + new SpeciesFormChange(Species.OGERPON, 'hearthflame-mask-tera', 'hearthflame-mask', new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Fire Tera Shard + new SpeciesFormChange(Species.OGERPON, 'cornerstone-mask', 'cornerstone-mask-tera', new SpeciesFormChangeManualTrigger(), true), //When holding a Rock Tera Shard + new SpeciesFormChange(Species.OGERPON, 'cornerstone-mask-tera', 'cornerstone-mask', new SpeciesFormChangeManualTrigger(), true) //When no longer holding a Rock Tera Shard ], [Species.TERAPAGOS]: [ new SpeciesFormChange(Species.TERAPAGOS, '', 'terastal', new SpeciesFormChangeManualTrigger(), true) diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 467bfca98fd..4ab51f1aba1 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -555,7 +555,8 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ] }), [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders().setHasDouble('Breeders') - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)), + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) + .setSpeciesFilter(s => s.baseTotal < 450), [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders().setHasDouble('Colleagues').setEncounterBgm(TrainerType.CLERK) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) .setSpeciesPools({ diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index aef6cae01c5..839b54844a7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2,7 +2,7 @@ import Phaser from 'phaser'; import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE } from '../battle-scene'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import { Moves } from "../data/enums/moves"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr } from "../data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; @@ -481,13 +481,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.stats[stat]; } - getBattleStat(stat: Stat, opponent?: Pokemon): integer { + getBattleStat(stat: Stat, opponent?: Pokemon, move?: Move): integer { if (stat === Stat.HP) return this.getStat(Stat.HP); const battleStat = (stat - 1) as BattleStat; const statLevel = new Utils.IntegerHolder(this.summonData.battleStats[battleStat]); - if (opponent) + if (opponent) { applyAbAttrs(IgnoreOpponentStatChangesAbAttr, opponent, null, statLevel); + if (move) + applyMoveAttrs(IgnoreOpponentStatChangesAttr, this, opponent, move, statLevel); + } if (this.isPlayer()) this.scene.applyModifiers(TempBattleStatBoosterModifier, this.isPlayer(), battleStat as integer as TempBattleStat, statLevel); const statValue = new Utils.NumberHolder(this.getStat(stat)); @@ -1098,7 +1101,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } const sourceAtk = new Utils.IntegerHolder(source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK, this)); - const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source)); + const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source, move)); const criticalMultiplier = isCritical ? 2 : 1; const isTypeImmune = (typeMultiplier.value * arenaAttackTypeMultiplier) === 0; const sourceTypes = source.getTypes(); diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index ccc38f2aba0..6c9c4b093e4 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -525,7 +525,8 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G constructor(formChangeItem: FormChangeItem) { super(Utils.toReadableString(FormChangeItem[formChangeItem]), `Causes certain Pokémon to change form`, (_type, args) => new Modifiers.PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true), (pokemon: PlayerPokemon) => { - if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) && !!pokemonFormChanges[pokemon.species.speciesId].find(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger))) + if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) && !!pokemonFormChanges[pokemon.species.speciesId].find(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger) + && (fc.trigger as SpeciesFormChangeItemTrigger).item === this.formChangeItem)) return null; return PartyUiHandler.NoEffectMessage; diff --git a/src/phases.ts b/src/phases.ts index 8ab5990b2f1..82ec03c2929 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2,7 +2,7 @@ import BattleScene, { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE, bypassLog import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import * as Utils from './utils'; import { Moves } from "./data/enums/moves"; -import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr } from "./data/move"; +import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr } from "./data/move"; import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; @@ -30,7 +30,7 @@ import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, get import { TempBattleStat } from "./data/temp-battle-stat"; import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag"; import { ArenaTagType } from "./data/enums/arena-tag-type"; -import { Abilities, CheckTrappedAbAttr, MoveAbilityBypassAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr } from "./data/ability"; +import { Abilities, CheckTrappedAbAttr, MoveAbilityBypassAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr } from "./data/ability"; import { Unlockables, getUnlockableName } from "./system/unlockables"; import { getBiomeKey } from "./field/arena"; import { BattleType, BattlerIndex, TurnCommand } from "./battle"; @@ -2313,6 +2313,7 @@ export class MoveEffectPhase extends PokemonPhase { const targetEvasionLevel = new Utils.IntegerHolder(target.summonData.battleStats[BattleStat.EVA]); applyAbAttrs(IgnoreOpponentStatChangesAbAttr, target, null, userAccuracyLevel); applyAbAttrs(IgnoreOpponentStatChangesAbAttr, this.getUserPokemon(), null, targetEvasionLevel); + applyMoveAttrs(IgnoreOpponentStatChangesAttr, this.getUserPokemon(), target, this.move.getMove(), targetEvasionLevel); this.scene.applyModifiers(TempBattleStatBoosterModifier, this.player, TempBattleStat.ACC, userAccuracyLevel); const rand = this.getUserPokemon().randSeedInt(100, 1); @@ -2550,6 +2551,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { const cancelled = new Utils.BooleanHolder(false); applyPreWeatherEffectAbAttrs(PreWeatherDamageAbAttr, pokemon, this.weather, cancelled); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (cancelled.value) return; @@ -2619,24 +2621,32 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { const pokemon = this.getPokemon(); if (pokemon?.isActive(true) && pokemon.status && pokemon.status.isPostTurn()) { pokemon.status.incrementTurn(); - this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectActivationText(pokemon.status.effect))); - let damage: integer = 0; - switch (pokemon.status.effect) { - case StatusEffect.POISON: - damage = Math.max(pokemon.getMaxHp() >> 3, 1); - break; - case StatusEffect.TOXIC: - damage = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.turnCount), 1); - break; - case StatusEffect.BURN: - damage = Math.max(pokemon.getMaxHp() >> 4, 1); - break; - } - if (damage) { - this.scene.damageNumberHandler.add(this.getPokemon(), pokemon.damage(damage)); - pokemon.updateInfo(); - } - new CommonBattleAnim(CommonAnim.POISON + (pokemon.status.effect - 1), pokemon).play(this.scene, () => this.end()); + const cancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + + console.log(cancelled.value) + + if (!cancelled.value) { + this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectActivationText(pokemon.status.effect))); + let damage: integer = 0; + switch (pokemon.status.effect) { + case StatusEffect.POISON: + damage = Math.max(pokemon.getMaxHp() >> 3, 1); + break; + case StatusEffect.TOXIC: + damage = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.turnCount), 1); + break; + case StatusEffect.BURN: + damage = Math.max(pokemon.getMaxHp() >> 4, 1); + break; + } + if (damage) { + this.scene.damageNumberHandler.add(this.getPokemon(), pokemon.damage(damage)); + pokemon.updateInfo(); + } + new CommonBattleAnim(CommonAnim.POISON + (pokemon.status.effect - 1), pokemon).play(this.scene, () => this.end()); + } else + this.end(); } else this.end(); } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 570d35fad3e..ba71e91ef5c 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -72,7 +72,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private genMode: boolean; private statsMode: boolean; private dexAttrCursor: bigint = 0n; - private natureCursor: integer = 0; + private natureCursor: integer = -1; private genCursor: integer = 0; private genScrollCursor: integer = 0; private starterMoveset: StarterMoveset; @@ -1022,19 +1022,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { setSpeciesDetails(species: PokemonSpecies, shiny: boolean, formIndex: integer, female: boolean, abilityIndex: integer, natureIndex: integer, forSeen: boolean = false): void { const oldProps = species ? this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; + const oldNatureIndex = this.natureCursor > -1 ? this.natureCursor : this.scene.gameData.getSpeciesDefaultNature(species); this.dexAttrCursor = 0n; + this.natureCursor = -1; if (species) { this.dexAttrCursor |= (shiny !== undefined ? !shiny : !(shiny = oldProps.shiny)) ? DexAttr.NON_SHINY : DexAttr.SHINY; this.dexAttrCursor |= (female !== undefined ? !female : !(female = oldProps.female)) ? DexAttr.MALE : DexAttr.FEMALE; this.dexAttrCursor |= (abilityIndex !== undefined ? !abilityIndex : !(abilityIndex = oldProps.abilityIndex)) ? DexAttr.ABILITY_1 : species.ability2 && abilityIndex === 1 ? DexAttr.ABILITY_2 : DexAttr.ABILITY_HIDDEN; this.dexAttrCursor |= this.scene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps.formIndex)); - if (natureIndex === undefined) - natureIndex = this.scene.gameData.getSpeciesDefaultNature(species); + this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex); } - this.natureCursor = natureIndex; - this.pokemonSprite.setVisible(false); if (this.assetLoadCancelled) {