From 1344d8e9ddf47f9061cc155328f6f6c29a0cb04d Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Fri, 11 Apr 2025 19:03:45 -0400 Subject: [PATCH] Type Effectiveness Indicators when selecting moves (#6559) --- charmap.txt | 1 + graphics/fonts/latin_narrow.png | Bin 4553 -> 4580 bytes graphics/fonts/latin_narrower.png | Bin 4617 -> 4258 bytes graphics/fonts/latin_normal.png | Bin 4661 -> 4686 bytes graphics/fonts/latin_short.png | Bin 4678 -> 4692 bytes graphics/fonts/latin_short_narrow.png | Bin 4993 -> 4621 bytes graphics/fonts/latin_short_narrower.png | Bin 4399 -> 4428 bytes graphics/fonts/latin_small.png | Bin 4587 -> 4621 bytes graphics/fonts/latin_small_narrow.png | Bin 4518 -> 4543 bytes graphics/fonts/latin_small_narrower.png | Bin 4349 -> 4371 bytes include/config/battle.h | 6 ++ src/battle_controller_player.c | 134 +++++++++++++++++++++++- src/battle_message.c | 8 +- src/fonts.c | 18 ++-- 14 files changed, 151 insertions(+), 16 deletions(-) diff --git a/charmap.txt b/charmap.txt index a35709d652..34fb683d0c 100644 --- a/charmap.txt +++ b/charmap.txt @@ -1064,6 +1064,7 @@ ROUND_RIGHT_PAREN = F9 14 CIRCLE_DOT = F9 15 TRIANGLE = F9 16 BIG_MULT_X = F9 17 +CIRCLE_HOLLOW = F9 18 EMOJI_UNDERSCORE = F9 D0 EMOJI_PIPE = F9 D1 diff --git a/graphics/fonts/latin_narrow.png b/graphics/fonts/latin_narrow.png index 434638ed17692ef98bf2c8cee733168c77144e99..bb9d0670d31b7c2e1fb82587ef85b958fcac4701 100644 GIT binary patch literal 4580 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 BK(7D* literal 4553 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 XTA6~m{)Yek)Bu+ZOmQXp_~`!t#W_z& diff --git a/graphics/fonts/latin_narrower.png b/graphics/fonts/latin_narrower.png index 19a6a98fb664f1084cb901ff4cb3fd550b9234dd..ab4ce4322ef2784ff24b5addda1a2edeab0a54c3 100644 GIT binary patch delta 1199 zcmeBFS)@2YdGcmP2_XiSk|4j}|3Hwd;a17OAmF(9EaN5a`iAX-MbX|M73fjoA&qg{N%&du_w~<+t|DUvr}Bz&=l^nu+{$9$T{tU9et*Q`#;ftC z_mV%aZJjqOd81|Uo zvvAClJT7>)_=Yc|Puw4YWs;9lqMyAvt!c7-S)af0Iz!eP*3T>qJ(H5zf7`vz(>!}8 z@lyX9#;}G3$IPzZ{}NUDMs@k0<3-PT7QNyV)8}YX;5amKz9d-@?Ae_R2SBROhj*cNFD0bJ>J(v(|g9o}ZRX z&z_YmyD;ZIul1eND^pvmSES}T{hhn_zQm_zhhK9o{9S)wnr3LPgn_)YYy*o$)AT*} z3ms|5ytQ?Jvr6Vn;D zG8pL|I()R4Ifr#y{k#h|UM2he_B=Le)t}y8){uE8!xkuBwDpOd@^`wShKy9hHis(? zHh-3U=@m)fcIYl-S&+r~&DN|V)&Iks>GnLOPZ#SN{MR=VDE)h@tl`VrZ@;+H28Nw&h^}0#8>zmvv4FO#ruj3Y7o= delta 1557 zcmb`G`9ISQ0LQnv=A6lW&XG__g(T*S$4y&J(lc^JThz!g=Qfk0hqaN)l`9Xgn&c+t zD2#GM3K3b8<54Oe=Eyw$gMN8FulG-%*ZZf>>-8zsysg8~CWCL`ZEev`wzi1Sn}i^I zNFWHLmzj`h>DUFR_V|oC+Zh-{Nr&~JAAT*>`s~g`-x4eFz`cJl_x2d>Eu*a2Osq;s z#7dqiWjNGg-YiC)6-ld0x?7r_z1dMVtTmRzC9zt0&2b{o^%J9&fW&ablK>z(S}zk;N9-3 z)MIupbaQpR8Jn5QfAtay#0|wQPKK0Y*1G-tYlhj*Ds`og;V8I+yIV!PCb#BwOnRM1 zRqedxmbmTdguvWoV+Tg3)_sKaEvkXDUYC8g$3wELxc(%a_yg8Ty6q+Q+}U@|6A)6q zG7jU5bhI|C-aT;nyq;7eAqtxa~WWQPr+VbO*p=B)WdD z;}`nCkPCqGiQ7620_0X`iWQDWZ32pW>!?ra&v_Pyi@**0H=vQ@e?eSst>cHM-Mf_8gM_o*D|{O8!0 z)C9*7IqguA>fZ|O_3Wl<2SDGL8o$LGi{k&d%K`)y>2Pr2o;`^sYYACV$`%CESYBH^ zI4C&n5Jiz%Tbx*bMH9UHtD5h%6}Ou%37^f(rL=XDfr|OB(Dc7f7C=X+)T!OqxWt zfxc;uQZKrY%j$@H&YprwS_|p= z8DQIECm}g#sUdRQ-Fw%soH?r+RAo~|bz}@?PU9COd$wU~dz_Jrs36FVs&tKtUSBoV zSq&NpVgh~o06HQg$kw{VRGePiG`?7LGoM%COFuQ1cFN0Lt|UiiGPzWL@FyXZUubf# zZ_ le@2|Ee))(mY27T#2k#7|##NrX5e3?hlik@rs%(6z{{fsc!Jq&D diff --git a/graphics/fonts/latin_normal.png b/graphics/fonts/latin_normal.png index d1de69d136c6fff2a296f42ee6e46c003f6c0493..b3fa87b0e08b678e002fd62104a3c5994ad83151 100644 GIT binary patch delta 1035 zcmV+m1oZp0B+ev|B#|)}5rQchF<|NsAOC`Nez01@r6N`ws!-8Jy`8hN+EMdnp!{^B)}X2*O10vdhcsMmv}ise;Zmv&;3xfMHv#|s zHLoZb4RgIX3vuHJS$R&jJunpoo(1^O*kS z81|5QAco*spdbxdNI*Y-KP*2N{#^cIQv|r%kEY&rKY-~)zDviqU`v<-0NobRnDVZ`n4cqHQK!>|mi$gw z;a(mZR=9>DZxhPz{QaQGo4?+F76`)!wsxte#en-5Q~(m-2wwBr-ULvgsL5f8+vH)F zamme%LWYCD5-lKqztxZ3;ZvtTVH52E?q46#JfE_o@CFgmyMCddEkO`Zy071rai3v7 zK9GP?b9@IQ1ikx%>^LBBKR+%!KYmO9$COu)%i@n!XY7`%h~_h&7DKnkJvk|7&{z*!`36_Xn+pN^I1innC5P}Ze6{R!6JM_ncIwlJcG%h|Xi##536P{Q<`{L1>*As}fX<49tPXU2Pj zY9>>}gmxf}#W(i%j;%Z9oN&+z{q>HV7I-$kAqYQ(f3AGB2=>AbbC&=B002ovPDHLk FV1krq{n7vc delta 1008 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 diff --git a/graphics/fonts/latin_short_narrow.png b/graphics/fonts/latin_short_narrow.png index 6bf1bae0cf26b424f8669cf50fab73e3c5a45c1d..b551f3215c7f38f00dc430a9d8e76392089f7a33 100644 GIT binary patch delta 4300 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 diff --git a/graphics/fonts/latin_short_narrower.png b/graphics/fonts/latin_short_narrower.png index 5c4f4c1d4d87a4dcbd5b58a6da7b03a920ad78bf..920a88aa01d0e6a144b615289b8ef6e9ae8609c5 100644 GIT binary patch delta 4187 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 delta 4151 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 B;sXEx diff --git a/graphics/fonts/latin_small.png b/graphics/fonts/latin_small.png index 41bb38cff8c3803e29a8ba0fda854f8182a94cbe..31c4444dc4694fad3f6f0ea7d1edaeb3e3f822fa 100644 GIT binary patch delta 3682 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 NbFxjk delta 3669 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 RytE~c){|^_0;~xM3 diff --git a/graphics/fonts/latin_small_narrow.png b/graphics/fonts/latin_small_narrow.png index ff07b857d7e91ea619ab5bfed1be35f517a3ce9f..4fbb13aad40a70f9dab4f364bf496ef04dd849a0 100644 GIT binary patch delta 1139 zcmZ3cykB{O%0xqPAqJL`Aiv=MK#;59R>{C17`M@D7I*#aCCpU}Y1g9skV2g5n$U<{r%adtWQ*?%VoGyWj+& z2b}+<{-pP@2Nq*<+P~M-?z(I#J^3B0Hp}c?!a0G^G5Hm%J`IKS>Ngo} zxb{m-=bC)_e>-pPgvtN+MJ;3bn|J=1e8QQ&oto8$-6!m-ODU}VW*qQp1w%;dwn?}C ztmWt0VR@8Y~Sb2P;B*Tr_epF1Cn#Z zjxpWfs?e@^E?jii;#x-D;boi;UY-q0%u;0gzV)nKj+1xhwx27H^3G~dogvP!=JLxQ z4R4K$<24Vjc3yn{GW!=cCf>N>f8O~=E?UoBxBvaCn#PWI=Wb7*3I=m;^7Y$qdBC^P zdH&w|g|8D98~1*3`_BH|=nTKQxebG}{-;=(`%UhLWEcuG5B)qHAZOH^@Feb$!>y{t z%^Rx@Z(O$2y7c*<-Jib&G$eNLI?Kqiy0G4Q7NTRI-M7-Mad&mj9o0OR{$38YcbQQQ zsT%nlkH7XXco)u5+Y*z1h&``xRrEu3lTT)i`#*kXuMgdK`-`q3kNlUdp1D~(JNld1 z8<->-uV>rFvuHGGl$>kMA9K5Snq!;|F>OTAT zWs%4|1;;&KcC$pYHCJ4E{OND-owy7A{48!eE%!AGGQIzE@TrBuhaXiw^YZ6w$43Ie z&1+ISmFrK=i>Oy=UCdCVd+6j*<7gd*A6##27jAxfyXc*|D0kZ@W=1w;_j$f8JP+!u zj%L43_@Bt<)y}j)UqDnq-Tq^ZSVIk?hT$~^nW(1ve%7QM*0^=4>dt5XUKEe`ca-T- zMEz^)13y(5{L0sVk*h90ym0m0GbSw4x8!k1HfaRJ8_m9Xj`Lytw*#N#{c0^M6b_`w zeXRW^v8VavMpn~?95J delta 1513 zcmdn5yi9q53KwH>kh>GZx^prwCn`!Y33_bwoyA>$`o`|&d4lt<{M#JYApR%)eEEr4 zF%17s%UMH!^Ir&t>KKll;p}wC$Yv7Rw?g#%oUh9<5;e!DPa>XBV zD_eR6(;dAFLQFjCQs33DX1vfI!RVp5LtJFSE*+5r`{h2Re=`5K_Px-7Iek^@TDCJ4 zuq|)h$gqv+9@qV!EivYOrn7Eu$YiRh+8jC~s^eg7?q>ek7lLNx)@2not0izgV`X?< zVr7@``^=s2Qy*Skc=7!UkV5=n;z+}#-i8@E}Ca-Zo+UKRM@ot$)eXT9{nWaXyD z>RDn5lBc8(RoE&Y2$EUOse66)hsNkRufl$C_U`e0kpJhe^EdbB4cU1zPKUK#NzU1S zFR8eGmrSddRmFR$W17Z0ug8nTl%$go) zUX0erxb#@6!T-<4r|fR`#N4hFSV@N;iSTSz Jmvv4FO#oI9=PLjJ diff --git a/graphics/fonts/latin_small_narrower.png b/graphics/fonts/latin_small_narrower.png index c20fa4ae4898071d6652f477576f14a9742faa88..69bca4645ac66404905d8275a827ffea46f6c93b 100644 GIT binary patch delta 1535 zcmeyXI9X|e%0xqPAqJL`Aiv=MK#;59R>{C1uxX>$XRdl9###Rf{hy%txvei z+sg1lk55@Ikuh(nE340^q^uUVhK2ikr!>sfzv|Myvcu(3M!;@-V~yDj4)9O4`7f1D3F^3+0@qd;%>9)`@! z%=cT%%dOH67cph&s4qB1fSNOHT3KOmxf3yJ>p|uLEf6;^RbN8LV5r@sm`}*~dMv)7 zrul@7uO|?egxpWad_u<8lNJ2arm=;2-EF%1>hqiX>4}UvpPsKy^$L*RW?s*pTz1Cy zCbwPFg|D`sUw^h>Uiyv8Av8mK<=ObGNKov*nTM7PVriAa_=*;&Mcni6s^6 z-F|bqZ-(w!GyAPO{De2KJZ5SLwUU*u-%y)&INa;|s|zpEe>FroEI5~)_vg~>>F_OioR*f5A3;HcSu?VnZy>#I=9ls#wfX*!I;80jATI6nbvP@^vp+JV6V(*?jnt4{7p@#L_ zybCv_Zdbjt7A^{%8h37#XUsw3M=D*7=HDtLO_BDh%%=vTVb0otj)&)l* zm!_=LaW+#Sh(*S=?XKAFMdZte2#cXq$#i+!82OmWAu zQ0Ef@E{(5d-8@sK$FZIL+W&%A*$viAI?n{{)A|ouN6ecY%zR>n!;8HY&q^I1=rnD= zDcm6QZN~b9$C^KmSl1ru6S(RYU~{yZ+tPPeJoAT6`~5Y?<4)W@)FI`U{_ZWF(ud}-kh>GZx^prwCn`!Y3C!Q<`Afn+Aqd52KucGG^7$ewq&bQB5e(%Ez z2i?-8UVeSY|8D7Qc|W}hhPJpTyLoE3uU}eo;v$cwnw1n-20e5W~TG&k3aeOZR00!Ampx{ zVExH+Tk=GaKBf~}3)IEW=j>y6puORH%eiYet`*;3Im39$dyWf|mY;HzQW(A$2ka@5 ze`9~v@nrzR7uG#YkDjQ{JI^#hpF#DQRD-kkhxZ#Dde$Czz4cAXik}OmKA1Ak2LQ^pUAxQ zSE|AP&(EjUZui98t`t~FhaZXXoWtN{{{KOh_tSso0t}BOFF!jXlHb*D70Mrcq$Ny& z_p!9ffsgkJW81DD_FMgWJ^u#p3Yq&m{uKQ@%{^gS+FSeUQPLY{?wmBA0SG)@{an^L HB{Ts5+D3eP diff --git a/include/config/battle.h b/include/config/battle.h index b61494ee44..59c90aacb0 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -323,6 +323,12 @@ #define SHOW_TYPES_SEEN 3 // Only show types if you've seen a species of the mon. #define B_SHOW_TYPES SHOW_TYPES_NEVER // When to show type indicators next to Pokémon health bars in battle, while choosing a move after selecting a target Pokémon. +#define SHOW_EFFECTIVENESS_NEVER 0 // Never show effectiveness when selecting moves. +#define SHOW_EFFECTIVENESS_ALWAYS 1 // Always show effectiveness when selecting moves. +#define SHOW_EFFECTIVENESS_CAUGHT 2 // Only show effectiveness if you've caught a species of the mon. +#define SHOW_EFFECTIVENESS_SEEN 3 // Only show effectiveness if you've seen a species of the mon. +#define B_SHOW_EFFECTIVENESS SHOW_EFFECTIVENESS_SEEN // If not SHOW_EFFECTIVENESS_NEVER, the PP string is replaced by a type effectiveness indicator based off the moves and the opposing side. + // Pokémon battle sprite settings #define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them. diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 96f3e6b67d..dbbfeb40db 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -46,6 +46,7 @@ #include "menu.h" #include "pokemon_summary_screen.h" #include "type_icons.h" +#include "pokedex.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -99,6 +100,9 @@ static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); static void ReloadMoveNames(u32 battler); +static u32 CheckTypeEffectiveness(u32 targetId, u32 battler); +static u32 CheckTargetTypeEffectiveness(u32 battler); +static void MoveSelectionDisplayMoveEffectiveness(u32 foeEffectiveness, u32 battler); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -502,6 +506,8 @@ void HandleInputChooseTarget(u32 battler) i++; break; } + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move) @@ -551,6 +557,8 @@ void HandleInputChooseTarget(u32 battler) i++; break; } + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move) @@ -749,6 +757,8 @@ void HandleInputChooseMove(u32 battler) gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; break; @@ -785,6 +795,8 @@ void HandleInputChooseMove(u32 battler) gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); TryMoveSelectionDisplayMoveDescription(battler); @@ -800,6 +812,8 @@ void HandleInputChooseMove(u32 battler) gMoveSelectionCursor[battler] ^= 1; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); TryMoveSelectionDisplayMoveDescription(battler); @@ -814,6 +828,8 @@ void HandleInputChooseMove(u32 battler) gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); TryMoveSelectionDisplayMoveDescription(battler); @@ -829,6 +845,8 @@ void HandleInputChooseMove(u32 battler) gMoveSelectionCursor[battler] ^= 2; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); TryMoveSelectionDisplayMoveDescription(battler); @@ -866,6 +884,8 @@ void HandleInputChooseMove(u32 battler) ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE); CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX); PlaySE(SE_SELECT); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); } @@ -900,6 +920,8 @@ static void ReloadMoveNames(u32 battler) MoveSelectionDestroyCursorAt(battler); MoveSelectionDisplayMoveNames(battler); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); } @@ -1052,7 +1074,10 @@ void HandleMoveSwitching(u32 battler) gBattlerControllerFuncs[battler] = HandleInputChooseMove; gMoveSelectionCursor[battler] = gMultiUsePlayerCursor; MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); - MoveSelectionDisplayPpString(battler); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); + else + MoveSelectionDisplayPpString(battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); AssignUsableZMoves(battler, moveInfo->moves); @@ -1063,7 +1088,10 @@ void HandleMoveSwitching(u32 battler) MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); gBattlerControllerFuncs[battler] = HandleInputChooseMove; - MoveSelectionDisplayPpString(battler); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); + else + MoveSelectionDisplayPpString(battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); } @@ -2152,7 +2180,10 @@ void InitMoveSelectionsVarsAndStrings(u32 battler) MoveSelectionDisplayMoveNames(battler); gMultiUsePlayerCursor = 0xFF; MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); - MoveSelectionDisplayPpString(battler); + if (B_SHOW_EFFECTIVENESS) + MoveSelectionDisplayMoveEffectiveness(CheckTargetTypeEffectiveness(battler), battler); + else + MoveSelectionDisplayPpString(battler); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); } @@ -2386,3 +2417,100 @@ static void PlayerHandleBattleDebug(u32 battler) SetMainCallback2(CB2_BattleDebugMenu); gBattlerControllerFuncs[battler] = Controller_WaitForDebug; } + +// Order based numerically, with EFFECTIVENESS_CANNOT_VIEW at 0 to always prioritize any other effectiveness during comparison +enum +{ + EFFECTIVENESS_CANNOT_VIEW, + EFFECTIVENESS_NO_EFFECT, + EFFECTIVENESS_NOT_VERY_EFFECTIVE, + EFFECTIVENESS_NORMAL, + EFFECTIVENESS_SUPER_EFFECTIVE, +}; + +static bool32 ShouldShowTypeEffectiveness(u32 targetId) +{ + if (B_SHOW_EFFECTIVENESS == SHOW_EFFECTIVENESS_CAUGHT) + return GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[targetId].species), FLAG_GET_CAUGHT); + + if (B_SHOW_EFFECTIVENESS == SHOW_EFFECTIVENESS_SEEN) + return GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[targetId].species), FLAG_GET_SEEN); + + return TRUE; +} + +static u32 CheckTypeEffectiveness(u32 targetId, u32 battler) +{ + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); + struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + u32 move = moveInfo->moves[gMoveSelectionCursor[battler]]; + u32 moveType = CheckDynamicMoveType(mon, move, battler); + uq4_12_t modifier = CalcTypeEffectivenessMultiplier(move, moveType, battler, targetId, GetBattlerAbility(targetId), FALSE); + + if (!ShouldShowTypeEffectiveness(targetId)) + return EFFECTIVENESS_CANNOT_VIEW; + + if (modifier == UQ_4_12(0.0)) + return EFFECTIVENESS_NO_EFFECT; // No effect + else if (modifier <= UQ_4_12(0.5)) + return EFFECTIVENESS_NOT_VERY_EFFECTIVE; // Not very effective + else if (modifier >= UQ_4_12(2.0)) + return EFFECTIVENESS_SUPER_EFFECTIVE; // Super effective + return EFFECTIVENESS_NORMAL; // Normal effectiveness +} + +static u32 CheckTargetTypeEffectiveness(u32 battler) +{ + u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler)); + u32 foeEffectiveness = CheckTypeEffectiveness(battlerFoe, battler); + + if (IsDoubleBattle()) + { + u32 partnerFoe = BATTLE_PARTNER(battlerFoe); + u32 partnerFoeEffectiveness = CheckTypeEffectiveness(partnerFoe, battler); + if (!IsBattlerAlive(battlerFoe)) + return partnerFoeEffectiveness; + if (IsBattlerAlive(battlerFoe) && IsBattlerAlive(partnerFoe) + && partnerFoeEffectiveness > foeEffectiveness) + return partnerFoeEffectiveness; + } + return foeEffectiveness; // fallthrough for any other circumstance +} + +static void MoveSelectionDisplayMoveEffectiveness(u32 foeEffectiveness, u32 battler) +{ + static const u8 noIcon[] = _(""); + static const u8 effectiveIcon[] = _("{CIRCLE_HOLLOW}"); + static const u8 superEffectiveIcon[] = _("{CIRCLE_DOT}"); + static const u8 notVeryEffectiveIcon[] = _("{TRIANGLE}"); + static const u8 immuneIcon[] = _("{BIG_MULT_X}"); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); + u8 *txtPtr; + + txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP); + + if (!IsBattleMoveStatus(moveInfo->moves[gMoveSelectionCursor[battler]])) + { + switch (foeEffectiveness) + { + case EFFECTIVENESS_SUPER_EFFECTIVE: + StringCopy(txtPtr, superEffectiveIcon); + break; + case EFFECTIVENESS_NOT_VERY_EFFECTIVE: + StringCopy(txtPtr, notVeryEffectiveIcon); + break; + case EFFECTIVENESS_NO_EFFECT: + StringCopy(txtPtr, immuneIcon); + break; + case EFFECTIVENESS_NORMAL: + StringCopy(txtPtr, effectiveIcon); + break; + default: + case EFFECTIVENESS_CANNOT_VIEW: + StringCopy(txtPtr, noIcon); + break; + } + } + + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP); +} diff --git a/src/battle_message.c b/src/battle_message.c index cf25e7c221..2887e1512e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1635,9 +1635,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = .x = 0, .y = 1, .speed = 0, - .fgColor = 12, + .fgColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 13 : 12, .bgColor = 14, - .shadowColor = 11, + .shadowColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 15 : 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), @@ -1887,9 +1887,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = .x = 0, .y = 1, .speed = 0, - .fgColor = 12, + .fgColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 13 : 12, .bgColor = 14, - .shadowColor = 11, + .shadowColor = B_SHOW_EFFECTIVENESS != SHOW_EFFECTIVENESS_NEVER ? 15 : 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), diff --git a/src/fonts.c b/src/fonts.c index 853f6fbde2..46f3a335c4 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -19,7 +19,7 @@ ALIGNED(4) const u8 gFontSmallNarrowLatinGlyphWidths[] = { 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -55,7 +55,7 @@ ALIGNED(4) const u8 gFontSmallLatinGlyphWidths[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 7, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -91,7 +91,7 @@ ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = { 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 3, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -127,7 +127,7 @@ ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = { 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8, 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3, 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -163,7 +163,7 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = { 4, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6, 8, 3, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 10, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -199,7 +199,7 @@ ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = { 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -235,7 +235,7 @@ ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = { 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -271,7 +271,7 @@ ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = { 4, 6, 5, 5, 5, 5, 5, 5, 4, 5, 5, 6, 4, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 8, 3, 3, 3, 3, 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -307,7 +307,7 @@ ALIGNED(4) const u8 gFontShortNarrowerLatinGlyphWidths[] = { 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,