From abf5d238c2a5fe020123544a72fe432c27191153 Mon Sep 17 00:00:00 2001 From: TheXaman Date: Sat, 31 Oct 2020 14:34:37 +0100 Subject: [PATCH] PokedexPlus with HGSS styled UI by TheXaman more ui, BROKEN atm type icons in info screen working topbar dpad for switching and white mon name initial working stats screen additional stats, proper move list array Working stats screen, all infos in, all icons in, buggy when switching Fixed sprite bug, proper sprite destruction, works with old compiler new navigation: info>area>stats power+accuracy text, change of positions layout for stats screen, other screen visually broken new stats layout properly working plus toggle infos show lvl of LevelUpMove and TM/HM of TMHM_Move 3 dashes for EggMoves and CORRECT icon for TM/HMs pog improved layout and contest move data! TutorMoves now available hold dpad to scroll, pure relieve search by move code working 6evs, 16 character move names, tripple digit moves, new eduardo layout working tileset, info screen no correct xy layout for elements yet new list menu start new layout working, only missing stats bars new list, new search fixed area screen change and fixed "new caught" bug (type icons) --- graphics/pokedex/bg_hoenn.pal | 30 +- graphics/pokedex/bg_national.pal | 30 +- graphics/pokedex/caught_screen.pal | 30 +- graphics/pokedex/cry_screen.bin | Bin 1280 -> 1280 bytes graphics/pokedex/hgss_pokedex_tileset.pal | 19 + graphics/pokedex/info_screen.bin | Bin 1280 -> 1280 bytes graphics/pokedex/interface.png | Bin 1044 -> 1126 bytes graphics/pokedex/list.bin | Bin 1280 -> 1280 bytes graphics/pokedex/list_underlay.bin | Bin 1280 -> 1280 bytes graphics/pokedex/menu.png | Bin 2045 -> 1542 bytes graphics/pokedex/menuOLD.png | Bin 0 -> 2045 bytes graphics/pokedex/menu_list.png | Bin 0 -> 1576 bytes graphics/pokedex/menu_rest.png | Bin 0 -> 1075 bytes graphics/pokedex/screen_select_bar_main.bin | Bin 192 -> 192 bytes .../pokedex/screen_select_bar_submenu.bin | Bin 192 -> 192 bytes .../screen_select_bar_submenu_clear.bin | Bin 0 -> 192 bytes graphics/pokedex/search_menu.png | Bin 1116 -> 1745 bytes graphics/pokedex/search_menu_hoenn.bin | Bin 1280 -> 1280 bytes graphics/pokedex/search_menu_national.bin | Bin 1280 -> 1280 bytes graphics/pokedex/search_results_bg.pal | 30 +- graphics/pokedex/size_screen.bin | Bin 1280 -> 1280 bytes graphics/pokedex/start_menu_main.bin | Bin 768 -> 768 bytes .../pokedex/start_menu_search_results.bin | Bin 768 -> 768 bytes graphics/pokedex/stats_screen.bin | Bin 0 -> 1280 bytes include/daycare.h | 3 + include/graphics.h | 4 + include/party_menu.h | 2 + include/pokemon_summary_screen.h | 2 + include/strings.h | 63 + src/daycare.c | 55 + src/graphics.c | 7 + src/party_menu.c | 4 +- src/pokedex.c | 1648 ++++++++++++++--- src/pokedex_area_screen.c | 13 +- src/pokemon_summary_screen.c | 6 +- src/strings.c | 63 + 36 files changed, 1729 insertions(+), 280 deletions(-) create mode 100644 graphics/pokedex/hgss_pokedex_tileset.pal create mode 100644 graphics/pokedex/menuOLD.png create mode 100644 graphics/pokedex/menu_list.png create mode 100644 graphics/pokedex/menu_rest.png create mode 100644 graphics/pokedex/screen_select_bar_submenu_clear.bin create mode 100644 graphics/pokedex/stats_screen.bin diff --git a/graphics/pokedex/bg_hoenn.pal b/graphics/pokedex/bg_hoenn.pal index 569c7821a9..5889ede7ac 100644 --- a/graphics/pokedex/bg_hoenn.pal +++ b/graphics/pokedex/bg_hoenn.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -49 213 74 -24 131 32 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/bg_national.pal b/graphics/pokedex/bg_national.pal index ea8f2bc64c..10dc02e885 100644 --- a/graphics/pokedex/bg_national.pal +++ b/graphics/pokedex/bg_national.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 96 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -164 164 164 -41 57 65 -255 255 255 -238 246 57 -255 0 189 -123 164 115 -74 115 65 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/caught_screen.pal b/graphics/pokedex/caught_screen.pal index 26da98a84c..7b855bfc66 100644 --- a/graphics/pokedex/caught_screen.pal +++ b/graphics/pokedex/caught_screen.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -123 131 0 -255 255 255 -255 238 0 -255 189 0 -255 115 0 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -49 213 74 -24 131 32 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/cry_screen.bin b/graphics/pokedex/cry_screen.bin index 6a72a88bc4bf21b1913ec74f3b1c54f16fc476de..411311b5313139a87af1c53a3a1e5a6bb8660dc6 100644 GIT binary patch literal 1280 zcmeH@S5v}J6ofzVDzSpSU;*sC#TL{cK@r6g3;zFq;<+~u2_(KSyg1|CnVp^4vvc;` z9#Zt8=%b%B76S}2Br44?BaD(ED|(D^CYTg8#WXX_l2UW%H&2cQ7FlAMJOzrZuqrCg z8tZJZ$(HDCcGzW4)IJ9sazsuYoBRnjr-HKx+nftRZgqo6n+ub_#G%v%M_myj?(2C+ zU7P$3ZdVefv$j+0jmPY3BO8#DuI~-vjTPo>;mgY ejXe+#5r6V591NsGd8qqAXZljjKqE~w(?Tn$)kcVR!gSC{gf6=2p;uglKKdD8 zkRkEIj4;ZWxN#w@MT7I6fVE)jPjq4^}sBn6YMu*pzM7Eo*+89d_Bv^E$`ce_tnakmq&jym@lzi5_bHh+|F+oLc*zan1#oTybsS z#@avgFSptw)hU}h&ENCDqu{1bJo6&t>Z|78a?Z>?-{#*v=07~syfW-H=D```Is`Aj23qMs9AvtnSaWsh`1UL(;ZN`9aIKUZs6#a93T diff --git a/graphics/pokedex/interface.png b/graphics/pokedex/interface.png index 529914813499a91842f1832feda77864a89c0f4a..8b4e944417a75af8c2212ae3953af20e4cd3b25d 100644 GIT binary patch delta 1105 zcmV-X1g`s(2<8ZoB!35VNliruH4I}Ui%tMC8-02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMZqDl`T65>LGCKlK_UNIGQfNjDLW^>H9n%Gavv2Ol0F=gW1cJ zjiQ$+8(oe$_p!%Dfdb-S$DiBZRwrNDALUQ?2WEBS1k3&qK=%iYZS8irYHSx9v@lnLu`K{G z_4R|-r$Y6^yjVWo0gU1?a(KIFxQ;FXUpZmqf(i%u<*?aaf5!o%q$rA#9)6~H*)WhA?1 zAmunXbj>_65b|u|;X>+`r5+qK@o?h*A!-tr3V5S=VRFo?#DUkrfVU+t_-1|Mzb;Jt zw}0^{Jglr*-PQn!CCLi`ZC;2+mlxupd6D^QCx@*yJmkNXco8&ZFRG2DGj)8dtWx>h^3cLqcqkuREZYEeAyU+= zXo*{05LWC^24tF*DR(?f_TPM#@}769UJgOkXj#_JiRr&f8V9YyV$j~xxbP7F^-4=x zGk3#7`II;)AK}sF#dmyed3=$VYOrpQx-Fjpb)Skn$;X9<8VunN9)=7VGGxe*A#a!8 X8nu#o8tc|X00000NkvXXu0mjf=c@XX delta 1022 zcmV7ib_A^C3QPdiON-SKyzrVNlfXL-<{C{H#=TRmAZ#Nu)c;0TT z;s7a#iUF)3Dh{AXakr~f052^bWZ;yEht3*tTXI|f&kEf@0R?d{hFHgFGkC~chE zXm2xv3G&Q<$9W!9;thEa$J=?xj|#-w1dxrB0j)9s$EtBGHrNaQ2of(Jczk5~5`hdU zb5W=$IfPs*B7YZ|3ISp*Ap<@069Kh=0YR!nu5LggAW-#^QcXwzG5~C&ib3@PYLvWy z8qGE7Gd+n>S?wEq&4+LzCjlL30T;S-wMpcE`hoN(+m<* zuJbsg4SxaKfOY7`dFVo2qCy*uY4V~CN|`m%+PJy`G<(Il%AP;Ad|JTMEI$RLtN>&M zXa*=WP-qKj0DqPIV*sD=Fug<@7+^W<+GPNk2R1$oFb^7+#rd!o8kfcS#O5~kfz>QR z?gIvv?_dw&;aDqK=;CD zdVf9*l(wXQ8{u0JV4_g;LL^nb456ZCJ=rF?$AAt{T#^Dcrv_95RKu%a13&=eyABFk z=3^{hb;$3ZZXfurrnT%2Kr;(YK=Av8OBz1?nn7$6YFa(uxW0gSF|-{YT^rhI(fLG+ z!}WcK@$iYU@o+w|S&o=`Lu^uurUm_w>US#-whvYN$yiFrw-#c&Cb4=$>y2eY}TRy zOPH57(nK>Yw9-a99mXBR>ZFTqVW#%bOCS9V;KR=#Lku&*C}YB<1|&|9akZN=L5NAF zm?q2&5u(fzQ?<%^E#?#wByOVWB*DBZvY_#cD!TL~zs!n@U)A_E75y&%x{FV0yp#X8 z{C}!H#Rh3Mg-hM4yZ_r-|99%#1CKoM%nPr)@h)8IhkD&7%VjJ4 literal 1280 zcmbW0iERQg5JjJ*#rg@Xl>1I9qyw%3xEkQ70O$ZZpcE<~C~MA{%?GbIlv-%4Q09WdmHp^$l$Yo^v{`6c3S=w8?lR-YJO`w Tq8BsO{Mt5zOZ0R9|2OpyGW|KH literal 1280 zcmdUvK?=Yi3YNmYH6a=hhzusd27R#|COco)Y3Psp z1&n?Bb$$io^&1$kAHn?J*QuhjKHb*+=jvmhAC>uR>~+8E+Z|lZ-<)OJ@8maOy!lla QuU~}m`uux*|Ng!C2cR)2X#fBK diff --git a/graphics/pokedex/menu.png b/graphics/pokedex/menu.png index fea195312c06171e1717ec26aca2933805ea317f..7896d7f09efe5c280b2dbbba29c093bd714f6b09 100644 GIT binary patch delta 1537 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 b#HjEOB!6_L#;B%&00000NkvXXu0mjfTJeaY literal 0 HcmV?d00001 diff --git a/graphics/pokedex/menu_list.png b/graphics/pokedex/menu_list.png new file mode 100644 index 0000000000000000000000000000000000000000..12faa82764f50319d5961c00d6eeeeb50d579b80 GIT binary patch literal 1576 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 literal 0 HcmV?d00001 diff --git a/graphics/pokedex/screen_select_bar_main.bin b/graphics/pokedex/screen_select_bar_main.bin index 154ed7196270686efe1e9b4e047c9fa21f5fb832..16bff536188aa2efc40405909c383d0c8252fcd2 100644 GIT binary patch literal 192 zcmbu$hYi9|6hqN76*ZxgKm$n3|beWLjET+t?BS`=N diff --git a/graphics/pokedex/screen_select_bar_submenu_clear.bin b/graphics/pokedex/screen_select_bar_submenu_clear.bin new file mode 100644 index 0000000000000000000000000000000000000000..85cab7327e8ec5105ae2586975042df8f9948b50 GIT binary patch literal 192 LcmZQz7}@{;0KfnN literal 0 HcmV?d00001 diff --git a/graphics/pokedex/search_menu.png b/graphics/pokedex/search_menu.png index 755c2d35d1ec9c59b153a6c10f587692a5e36556..9410eef337cbb2aa52ced0e5413c6ae54f4e955e 100644 GIT binary patch delta 1683 zcmV;E25kA<2+<9Y7i4$@0{{R3$kFGF00007bV*G`2jmL}76mV53+zGw000+sMObuG zZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*fL^A*Y002sWDIWj;00d`2 zO+f$vv5yPc@D`q>ch+qZpy+DOP*T5?M5UAXF}5=!%b!V# zWF$oh5NTxrkwm&@yuO+*f7#Q^lfH`g0KVP_c&Z9|1&C0`R@996r5y8#Q!*1Ij1!3$F43pViN&cl2oi z;G+P*6CZ=q_ax7l$Kd8ePzy(?063TrmKNGHRPq4q;GcQWR_Hbluo@i78c0b^aJoh& z7;YIrop_K=gMZ*e<65r*1$;;>fMlPQd)qKd0njax=+1Yx9Wf3b|A}w>2RH6*lNzuj zf}QVdbAWbfFLIN3w6?Q^7IVlI8V$hogRAT30CH_xWe#Nk7qzbTP;lK003L=;y0?lo z09njo)xB(&)gB9cwgB6&_5D0RSpZm(0>Fv@Sam<;`+pH1*h3M3Y!RRoc)|g$Xnp91 zl_~*H6I6RKCMe=Wr>r$WdJR^oBp!AYuK4;Dm4H#$oD=-xEA#<9W6JV$`- z>JxwUsSAM*xR5vinC7NO!g-vA7_eMe0DKEI0s#X6K#if7QxV{E9{|@D9H4COYk-vF zgn&5#gxa;MCr06^JbI*$xsq$c!?3A&avjZq^3jF9Z-hMF*% zQ3wF22c{y8v&?;fi9XE4g!w#~w1<1ngntRY;~lID0q`r1k9SAn?p)ZPjXUcB%6r~O z#RE9o?(qQ+_`&qnZTTqhfTGKXA#L*jF3;I|kj)PsI}PCSoUaGz{GdB&0GH={JxJ#V zPv5Kwd7kI>fSVsY`9CbRbsd}Yd2I-D1qv8SInUPyGglyh??Wl)+1g;|3Iu>w@qanb z*9J3JAbBtp>cHDkDg3S#j58a6f5;1;&ghtO-j#&_&hBGP(!Ksuo1k+(erDoI6+FPK z9R;29v2&wmyO(x+t+}jl7LNB__0HDcnS0MKeXGo;bT1EP39ElL35+{ccN28{>w!z3MmbT~si;Mjiv d5XS=r{01G$TpO1|UFrY;002ovPDHLkV1jTN{>A_R delta 1050 zcmV+#1m*kD4crKj7YaZG0{{R3AoyZTk$XOW1LsLZK~z|Ut(L!T+b|Hu{Z2y1Gz%9( zW0Af=grYz@HZLF)($Yx-xf>nmRg<`960!vFrYv1DBwq3W?svz3k|G;w(laH?|Qu;n4;W|rzKUwxMN%(g_aexg2ozDVh5+a}< z*-5~CcE*k`=SD9m!cA}`dvRYlXP0y@-#;JWBh66)&_TE1h@PW++-(@VOkvR~od6u& zg{P%HhGxqEa)|d_vI_2t03X5ebOc#{HkJ@#ok(!p(}3|L9Q zsO8>SpvN`QqSFDKAI{#70mI%H(dM~z&CAPHG6nqffVH_l4}d}l0BkEt8RLq82e?h2Y6Jj6m9kV4Cn047#N4M%-=^HR*!5;q zBZ{KbQZ|jGlhzYJw~LA2#@xro2QDQJ07}b}2z8?>Ig+sTweeN?rh(-}WJAiw=iRH_Z$)pp&O8`LVGzT>#AYK4}gbaY1qW6Hx%bEbB z98Dr5XpTYa0H{a;fI?C_HwzM)v4nC#0@o5LT^KV!gJiE|1l05xUWEieJ#ZDN(c<+S zP@-3QBth58r9H-i1Vz7TgsMUUJWlt=F9Iy>x~0DVk_*GbG#j58u-e{L56J!kb3A{r UuyFM600000NkvWtM6N<$g4*cl2LJ#7 diff --git a/graphics/pokedex/search_menu_hoenn.bin b/graphics/pokedex/search_menu_hoenn.bin index 838007715d86a7e7121c6e2c95346143d38d5351..ec2f179065001de656642d1759be6af8ffa6896a 100644 GIT binary patch literal 1280 zcmc(dIZMP)6op@gFh&?A=O0YvzHkZ!5k%Z~V=1DAiu*F6h$4!ALJ&a&TTukH5tl+m z8~p>pVqhQ^`Xjv2!c3S+AdTA!@fEMqw68GnTxgc`a zb6nsOSGdLvj&O_91r!b8f%wi5jQ3(;9cYNRzU--rkp74wpyy7jYH?WB9kgmF&e>FAD5t4}00i466+&OMZZZ9O5uX9R2fL;3Ai}?C2lm7{@um zNzI?lmuF$?e}$`D<2p;4Ka(%d!q$HcbF5_@>ovc=2b;f*?d)JDyEMPP2b+Hvd)UVT z4pAk{B=7$gceuv`9v$;$r+%C4*I%0J)2xag;@+wp*2SPva Pi#gq$KaRYba4B-mfB&$e&PBQl=t>i97~~2`S`V z)UEqF?8CshC+F-s6MOZozQJCtz4rHwVhrP$z$B(HfI$pl7$d50MH|}DflkDQ7lb+s zSivHeu!?2OVhwYc$GYl!uz_CmVN;_oWD$#5!cxXq{Rg(_NXhTq0^R)k@rWlp;{_oR z60fS^AVTo`6SknB_i+|P|mJtpB VD{4mV{L)Am5e0v?Z@3}9^-#-YwmkXHQdnfb`qW9iAzmCl&vv3$`R=l%$o2#Q&&Tx(k zT;dAXIK&Z-ae~vZpTH!hFpU{xL@q>FZ+OQCKJkTbJmLw@c)@GfuVVw7*uu6UU&U(H zu$Fa9vp0r%=CWrZz35;kyV%VhrkEdtGUWT%&jAi{$kIQ{InHx|i!i$|L+N3BrNcy_doK=R|yMz R*K?!!rE*l#0>_oV`5(znjZOdn diff --git a/graphics/pokedex/search_results_bg.pal b/graphics/pokedex/search_results_bg.pal index 41196a2698..a5df732edf 100644 --- a/graphics/pokedex/search_results_bg.pal +++ b/graphics/pokedex/search_results_bg.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 96 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -98 98 115 -49 49 65 -255 255 255 -238 246 57 -255 0 189 -123 148 32 -41 82 0 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/size_screen.bin b/graphics/pokedex/size_screen.bin index 283aa518c50e371e53fe27d97b6effc19aa89977..cbcfbf34120d694ba6eb3915bc97e4c7c05e22f6 100644 GIT binary patch literal 1280 zcmds$OHTqZ7)6g#9TicxiXtk$wg@VWf`YL2fkfmXz6C|_|8M--vNU8e!^)ntxr=+! zrk$B!k`Rh1rg4~ImN~+b9Oj9zz#>bM@2GK4T~dQ4EgopIj2%`e$lPwaG z;%u|SE_>`te&mT~UL?Kp#ycN$NE*M(0V$3QX%0yXqgLBYaZK0vE*VY?SzHffm2IC& zSC1+=&J1}Ewo6{w_PLmPxDiM`X8)k~7u5d+I##aa literal 1280 zcmeH_K@No=395oHvS$7!E-mSA)A@;4{w_WG3>X^E zulys%Oqen==I1O}vSQ7KEj#ucWDouQA31U6!j&6$9z1zz^CD<_gb3-}&%bNl(SkdX literal 768 zcmcK2H&#Mn5C%||atjL!7lqkU6wuOuN(rcF3FZ>BdteDP=F~jQN&}u_4d?xZ^K~mw6^sY#~OQOEs@^9MEmNaO{uo0uijGOrFwKZbhSlj^An z2{RU~*s$Zki3_(flQ3!KJ$UiqCqR%8ix(}zhlvnX{7Y7ER?HtGPD1e~N&UsE{xlh~ zv=}e1$4C>NIH5qD_acvV->b@6l(# WkP%}hOqns)%*%S?mzE9BANl~f&rAUT literal 768 zcmb8tr&0q@5Cu>^

0VkD`O5gQSC`gQSC`gQT|@dW)eq6M8cN2AxdaUblCS+1a$T z{3NSQ3bADru+w>8y_1$5j7FzrHQ;W8bt98 zqCC_9f{G}AirYPzN++3_%&9qZrmMfceY^S)HC7M3T;>V^4s(Q~R7eWYM?VAH)aqnJq7hl%;}W~YUm^Ov^N0-v}TDAgiMd}dkX?O%NBe|7E4 zsja>%zWgd{tc$*R`ghHHo&OKx-sNwgnNqrcuk+8cQASx`e$(|_&6D2p-TzOv*%5jB sFU|jUt@DS7)sDX+n&0Iwd!l0hM`s!R*L;)?qM~Bor<*R3w_niw0p{N2-~a#s literal 0 HcmV?d00001 diff --git a/include/daycare.h b/include/daycare.h index 7d6f2fb193..b95cd834d5 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -24,4 +24,7 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio); void ShowDaycareLevelMenu(void); void ChooseSendDaycareMon(void); +u8 GetEggMovesSpecies(u16 species, u16 *eggMoves); +bool8 SpeciesCanLearnEggMove(u16 species, u16 move); + #endif // GUARD_DAYCARE_H diff --git a/include/graphics.h b/include/graphics.h index 32268d6dbd..6c78508593 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3285,6 +3285,8 @@ extern const u32 gBattleTerrainPalette_StadiumWallace[]; // pokedex extern const u32 gPokedexInterface_Gfx[]; extern const u16 gPokedexBgHoenn_Pal[]; +extern const u32 gPokedexMenuRest_Gfx[]; +extern const u32 gPokedexMenuList_Gfx[]; extern const u32 gPokedexMenu_Gfx[]; extern const u8 gPokedexList_Tilemap[]; extern const u8 gPokedexListUnderlay_Tilemap[]; @@ -3293,10 +3295,12 @@ extern const u8 gPokedexStartMenuSearchResults_Tilemap[]; extern const u16 gPokedexSearchResults_Pal[]; extern const u16 gPokedexBgNational_Pal[]; extern const u8 gPokedexInfoScreen_Tilemap[]; +extern const u8 gPokedexStatsScreen_Tilemap[]; extern const u8 gPokedexCryScreen_Tilemap[]; extern const u8 gPokedexSizeScreen_Tilemap[]; extern const u8 gPokedexScreenSelectBarMain_Tilemap[]; extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap[]; +extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[]; extern const u16 gPokedexCaughtScreen_Pal[]; extern const u32 gPokedexSearchMenu_Gfx[]; extern const u32 gPokedexSearchMenuHoenn_Tilemap[]; diff --git a/include/party_menu.h b/include/party_menu.h index 7f51d08c9f..4457646731 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -90,4 +90,6 @@ void BufferMoveDeleterNicknameAndMove(void); void GetNumMovesSelectedMonHas(void); void MoveDeleterChooseMoveToForget(void); +bool8 CanLearnTutorMove(u16, u8); + #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 6413dcdeca..53f3bf71a2 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -7,6 +7,8 @@ extern u8 gLastViewedMonIndex; extern const u8 *const gMoveDescriptionPointers[]; extern const u8 *const gNatureNamePointers[]; +extern const struct SpriteTemplate sSpriteTemplate_MoveTypes; +extern const struct CompressedSpriteSheet sSpriteSheet_MoveTypes; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); diff --git a/include/strings.h b/include/strings.h index 7018f9e0d3..5f224e2459 100644 --- a/include/strings.h +++ b/include/strings.h @@ -532,6 +532,69 @@ extern const u8 gText_SearchingPleaseWait[]; extern const u8 gText_SearchCompleted[]; extern const u8 gText_NoMatchingPkmnWereFound[]; extern const u8 gText_SelectorArrow[]; +//PokedexPlus HGSS_Ui +extern const u8 gText_Stats_EV[]; +extern const u8 gText_Stats_EV_HP[]; +extern const u8 gText_Stats_EV_Attack[]; +extern const u8 gText_Stats_EV_Defense[]; +extern const u8 gText_Stats_EV_Speed[]; +extern const u8 gText_Stats_EV_SpAtk[]; +extern const u8 gText_Stats_EV_SpDef[]; +extern const u8 gText_Stats_HP[]; +extern const u8 gText_Stats_Attack[]; +extern const u8 gText_Stats_Defense[]; +extern const u8 gText_Stats_Speed[]; +extern const u8 gText_Stats_SpAtk[]; +extern const u8 gText_Stats_SpDef[]; +extern const u8 gText_Stats_EVHP[]; +extern const u8 gText_Stats_EVAttack[]; +extern const u8 gText_Stats_EVDefense[]; +extern const u8 gText_Stats_EVSpeed[]; +extern const u8 gText_Stats_EVSpAtk[]; +extern const u8 gText_Stats_EVSpDef[]; +extern const u8 gText_Stats_MoveSelectedMax[]; +extern const u8 gText_Stats_MoveLevel[]; +extern const u8 gText_Stats_Gender_0[]; +extern const u8 gText_Stats_Gender_12_5[]; +extern const u8 gText_Stats_Gender_25[]; +extern const u8 gText_Stats_Gender_50[]; +extern const u8 gText_Stats_Gender_75[]; +extern const u8 gText_Stats_Gender_87_5[]; +extern const u8 gText_Stats_Gender_100[]; +extern const u8 gText_Stats_Catch[]; +extern const u8 gText_Stats_Exp[]; +extern const u8 gText_Stats_EggCycles[]; +extern const u8 gText_Stats_Growthrate[]; +extern const u8 gText_Stats_Friendship[]; +extern const u8 gText_Stats_MEDIUM_FAST[]; +extern const u8 gText_Stats_ERRATIC[]; +extern const u8 gText_Stats_FLUCTUATING[]; +extern const u8 gText_Stats_MEDIUM_SLOW[]; +extern const u8 gText_Stats_FAST[]; +extern const u8 gText_Stats_SLOW[]; +extern const u8 gText_Stats_ContestHeart[]; +extern const u8 gText_PlusSymbol[]; +extern const u8 gText_Stats_Minus[]; +extern const u8 gText_Stats_eggGroup_g1[]; +extern const u8 gText_Stats_eggGroup_g2[]; +extern const u8 gText_Stats_eggGroup_MONSTER[]; +extern const u8 gText_Stats_eggGroup_WATER_1[]; +extern const u8 gText_Stats_eggGroup_BUG[]; +extern const u8 gText_Stats_eggGroup_FLYING[]; +extern const u8 gText_Stats_eggGroup_FIELD[]; +extern const u8 gText_Stats_eggGroup_FAIRY[]; +extern const u8 gText_Stats_eggGroup_GRASS[]; +extern const u8 gText_Stats_eggGroup_HUMAN_LIKE[]; +extern const u8 gText_Stats_eggGroup_WATER_3[]; +extern const u8 gText_Stats_eggGroup_MINERAL[]; +extern const u8 gText_Stats_eggGroup_AMORPHOUS[]; +extern const u8 gText_Stats_eggGroup_WATER_2[]; +extern const u8 gText_Stats_eggGroup_DITTO[]; +extern const u8 gText_Stats_eggGroup_DRAGON[]; +extern const u8 gText_Stats_eggGroup_UNDISCOVERED[]; +extern const u8 gText_Dex_SEEN[]; +extern const u8 gText_Dex_OWN[]; + // birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; diff --git a/src/daycare.c b/src/daycare.c index 31014bf7f4..882859eac4 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -625,6 +625,61 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) return numEggMoves; } +u8 GetEggMovesSpecies(u16 species, u16 *eggMoves) +{ + u16 eggMoveIdx; + u16 numEggMoves; + u16 i; + + numEggMoves = 0; + eggMoveIdx = 0; + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) + { + if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) + { + eggMoveIdx = i + 1; + break; + } + } + + for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) + { + if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) + { + // TODO: the curly braces around this if statement are required for a matching build. + break; + } + + eggMoves[i] = gEggMoves[eggMoveIdx + i]; + numEggMoves++; + } + + return numEggMoves; +} +bool8 SpeciesCanLearnEggMove(u16 species, u16 move) //Move search PokedexPlus HGSS_Ui +{ + u16 eggMoveIdx; + u16 i; + eggMoveIdx = 0; + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) + { + if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) + { + eggMoveIdx = i + 1; + break; + } + } + + for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) + { + if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) + return FALSE; + + if (move == gEggMoves[eggMoveIdx + i]) + return TRUE; + } + return FALSE; +} static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { diff --git a/src/graphics.c b/src/graphics.c index 3973c15076..6ee521d1c5 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1257,6 +1257,8 @@ const u16 gPokedexBgHoenn_Pal[] = INCBIN_U16("graphics/pokedex/bg_hoenn.gbapal") const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_screen.gbapal"); const u16 gPokedexSearchResults_Pal[] = INCBIN_U16("graphics/pokedex/search_results_bg.gbapal"); const u16 gPokedexBgNational_Pal[] = INCBIN_U16("graphics/pokedex/bg_national.gbapal"); +const u32 gPokedexMenuRest_Gfx[] = INCBIN_U32("graphics/pokedex/menu_rest.4bpp.lz"); +const u32 gPokedexMenuList_Gfx[] = INCBIN_U32("graphics/pokedex/menu_list.4bpp.lz"); const u32 gPokedexMenu_Gfx[] = INCBIN_U32("graphics/pokedex/menu.4bpp.lz"); const u32 gPokedexInterface_Gfx[] = INCBIN_U32("graphics/pokedex/interface.4bpp.lz"); const u32 gUnused_PokedexNoBall[] = INCBIN_U32("graphics/pokedex/noball_unused.4bpp.lz"); @@ -1267,7 +1269,12 @@ const u32 gPokedexListUnderlay_Tilemap[] = INCBIN_U32("graphics/pokedex/list_und const u32 gPokedexSizeScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/size_screen.bin.lz"); const u32 gPokedexScreenSelectBarMain_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_main.bin.lz"); const u32 gPokedexScreenSelectBarSubmenu_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu.bin.lz"); +const u32 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_clear.bin.lz"); +// const u32 gPokedexScreenSelectBarSubmenu_Area_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_area.bin.lz"); +// const u32 gPokedexScreenSelectBarSubmenu_Cry_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_cry.bin.lz"); +// const u32 gPokedexScreenSelectBarSubmenu_Size_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_size.bin.lz"); const u32 gPokedexInfoScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/info_screen.bin.lz"); +const u32 gPokedexStatsScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/stats_screen.bin.lz"); const u32 gPokedexCryScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/cry_screen.bin.lz"); const u16 gPokedexSearchMenu_Pal[] = INCBIN_U16("graphics/pokedex/search_menu.gbapal"); const u32 gPokedexSearchMenu_Gfx[] = INCBIN_U32("graphics/pokedex/search_menu.4bpp.lz"); diff --git a/src/party_menu.c b/src/party_menu.c index 1d49523756..2eda56b6c7 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -254,7 +254,7 @@ static bool16 IsMonAllowedInPokemonJump(struct Pokemon*); static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*); static void Task_CancelParticipationYesNo(u8); static void Task_HandleCancelParticipationYesNoInput(u8); -static bool8 CanLearnTutorMove(u16, u8); +// static bool8 CanLearnTutorMove(u16, u8); static u16 GetTutorMove(u8); static bool8 ShouldUseChooseMonText(void); static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8); @@ -1989,7 +1989,7 @@ static u16 GetTutorMove(u8 tutor) return gTutorMoves[tutor]; } -static bool8 CanLearnTutorMove(u16 species, u8 tutor) +bool8 CanLearnTutorMove(u16 species, u8 tutor) { if (sTutorLearnsets[species] & (1 << tutor)) return TRUE; diff --git a/src/pokedex.c b/src/pokedex.c index 803b6019c3..fbc925d753 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1,22 +1,30 @@ #include "global.h" #include "battle_main.h" #include "bg.h" +#include "contest_effect.h" #include "data.h" +#include "daycare.h" #include "decompress.h" #include "event_data.h" #include "gpu_regs.h" #include "graphics.h" #include "international_string_util.h" +#include "item.h" +#include "item_icon.h" #include "main.h" #include "malloc.h" #include "menu.h" #include "m4a.h" #include "overworld.h" #include "palette.h" +#include "party_menu.h" #include "pokedex.h" #include "pokedex_area_screen.h" #include "pokedex_cry_screen.h" +#include "pokemon_icon.h" +#include "pokemon_summary_screen.h" #include "scanline_effect.h" +#include "shop.h" #include "sound.h" #include "sprite.h" #include "string_util.h" @@ -26,6 +34,10 @@ #include "trainer_pokemon_sprites.h" #include "trig.h" #include "window.h" +#include "constants/abilities.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -43,6 +55,8 @@ enum enum { + INFO_SCREEN, + STATS_SCREEN, AREA_SCREEN, CRY_SCREEN, SIZE_SCREEN, @@ -109,6 +123,12 @@ static EWRAM_DATA struct PokedexView *sPokedexView = NULL; static EWRAM_DATA u16 sLastSelectedPokemon = 0; static EWRAM_DATA u8 sPokeBallRotation = 0; static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; +//Pokedex Plus HGSS_Ui +EWRAM_DATA static u16 sStatsMovesLevelUp[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; +EWRAM_DATA static u16 sStatsMovesEgg[EGG_MOVES_ARRAY_COUNT] = {0}; +EWRAM_DATA static u16 sStatsMovesTMHM[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0}; +EWRAM_DATA static u16 sStatsMovesTMHM_ID[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0}; +EWRAM_DATA static u16 sStatsMovesTutor[TUTOR_MOVE_COUNT] = {0}; // IWRAM common // This is written to, but never read. @@ -170,6 +190,14 @@ struct PokedexView u16 seenCount; u16 ownCount; u16 monSpriteIds[MAX_MONS_ON_SCREEN]; + u8 typeIconSpriteIds[2]; //HGSS_Ui + u16 moveSelected; //HGSS_Ui + u8 moveMax; //HGSS_Ui + // u8 splitIconSpriteId; //HGSS_Ui Physical/Special Split from BE + u8 numEggMoves; + u8 numLevelUpMoves; + u8 numTMHMMoves; + u8 numTutorMoves; u16 selectedMonSpriteId; s16 pokeBallRotationStep; s16 pokeBallRotationBackup; @@ -299,6 +327,78 @@ static void EraseSelectorArrow(u32); static void PrintSelectorArrow(u32); static void PrintSearchParameterTitle(u32, const u8*); static void ClearSearchParameterBoxText(void); +static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible); +static void CreateTypeIconSprites(void); +//Stats screen HGSS_Ui +#define SCROLLING_MON_X 146 +static void Task_HandleStatsScreenInput(u8 taskId); +static void PrintMonStats(u8 taskId, u32 num, u32 value, u32 owned, u32 newEntry); +static void Task_LoadStatsScreen(u8 taskId); +static void Task_SwitchScreensFromStatsScreen(u8 taskId); +static void Task_ExitStatsScreen(u8 taskId); +static bool8 CalculateMoves(void); +static void DestroyMoveIcon(u8 taskId); +static void PrintMoveNameAndInfo(u8 taskId, bool8 toogle); +static void PrintMonStatsToggle(u8 taskId); +static void PrintInfoScreenTextWhite(const u8* str, u8 left, u8 top); +static void PrintInfoScreenTextSmall(const u8* str, u8 left, u8 top); +static void PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top); +// static u8 ShowSplitIcon(u32 split); //Physical/Special Split from BE +// static void DestroySplitIcon(void); //Physical/Special Split from BE + +//Physical/Special Split from BE +// #define TAG_SPLIT_ICONS 30004 +// static const u16 sSplitIcons_Pal[] = INCBIN_U16("graphics/interface/split_icons.gbapal"); +// static const u32 sSplitIcons_Gfx[] = INCBIN_U32("graphics/interface/split_icons.4bpp.lz"); +// static const struct OamData sOamData_SplitIcons = +// { +// .size = SPRITE_SIZE(16x16), +// .shape = SPRITE_SHAPE(16x16), +// .priority = 0, +// }; +// static const struct CompressedSpriteSheet sSpriteSheet_SplitIcons = +// { +// .data = sSplitIcons_Gfx, +// .size = 16*16*3/2, +// .tag = TAG_SPLIT_ICONS, +// }; +// static const struct SpritePalette sSpritePal_SplitIcons = +// { +// .data = sSplitIcons_Pal, +// .tag = TAG_SPLIT_ICONS +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon0[] = +// { +// ANIMCMD_FRAME(0, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon1[] = +// { +// ANIMCMD_FRAME(4, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon2[] = +// { +// ANIMCMD_FRAME(8, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd *const sSpriteAnimTable_SplitIcons[] = +// { +// sSpriteAnim_SplitIcon0, +// sSpriteAnim_SplitIcon1, +// sSpriteAnim_SplitIcon2, +// }; +// static const struct SpriteTemplate sSpriteTemplate_SplitIcons = +// { +// .tileTag = TAG_SPLIT_ICONS, +// .paletteTag = TAG_SPLIT_ICONS, +// .oam = &sOamData_SplitIcons, +// .anims = sSpriteAnimTable_SplitIcons, +// .images = NULL, +// .affineAnims = gDummySpriteAffineAnimTable, +// .callback = SpriteCallbackDummy +// }; + // const rom data #include "data/pokemon/pokedex_orders.h" @@ -907,8 +1007,8 @@ static const struct WindowTemplate sInfoScreen_WindowTemplates[] = [WIN_FOOTPRINT] = { .bg = 2, - .tilemapLeft = 25, - .tilemapTop = 8, + .tilemapLeft = 15, //HGSSS_Ui + .tilemapTop = 7, //HGSSS_Ui .width = 2, .height = 2, .paletteNum = 15, @@ -974,8 +1074,8 @@ static const struct WindowTemplate sNewEntryInfoScreen_WindowTemplates[] = [WIN_FOOTPRINT] = { .bg = 2, - .tilemapLeft = 25, - .tilemapTop = 8, + .tilemapLeft = 15, //HGSSS_Ui + .tilemapTop = 7, //HGSSS_Ui .width = 2, .height = 2, .paletteNum = 15, @@ -2063,7 +2163,7 @@ static bool8 LoadPokedexListPage(u8 page) SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenuList_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(1, gPokedexList_Tilemap, 0, 0); CopyToBgTilemapBuffer(3, gPokedexListUnderlay_Tilemap, 0, 0); if (page == PAGE_MAIN) @@ -2326,6 +2426,7 @@ static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8* str, u8 left } // u16 ignored is passed but never used +#define MON_LIST_X 2 static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { s16 entryNum; @@ -2341,22 +2442,22 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - ClearMonListEntry(17, i * 2, ignored); + ClearMonListEntry(MON_LIST_X, i * 2, ignored); } else { - ClearMonListEntry(17, i * 2, ignored); + ClearMonListEntry(MON_LIST_X, i * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 0x12, i * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, i * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, i * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, i * 2); } else { - CreateMonDexNum(entryNum, 0x12, i * 2, ignored); - CreateCaughtBall(FALSE, 0x11, i * 2, ignored); - CreateMonName(0, 0x16, i * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, i * 2, ignored); + CreateMonName(0, MON_LIST_X+5, i * 2); } } entryNum++; @@ -2366,22 +2467,22 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) entryNum = b - 5; if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, sPokedexView->listVOffset * 2, ignored); } else { - ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, sPokedexView->listVOffset * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, sPokedexView->listVOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, sPokedexView->listVOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, sPokedexView->listVOffset * 2); } else { - CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored); - CreateCaughtBall(FALSE, 17, sPokedexView->listVOffset * 2, ignored); - CreateMonName(0, 0x16, sPokedexView->listVOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); + CreateMonName(0, MON_LIST_X+5, sPokedexView->listVOffset * 2); } } break; @@ -2391,21 +2492,21 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) if (vOffset >= LIST_SCROLL_STEP) vOffset -= LIST_SCROLL_STEP; if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) - ClearMonListEntry(17, vOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, vOffset * 2, ignored); else { - ClearMonListEntry(17, vOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, vOffset * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 18, vOffset * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, vOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, vOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, vOffset * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, vOffset * 2); } else { - CreateMonDexNum(entryNum, 18, vOffset * 2, ignored); - CreateCaughtBall(FALSE, 0x11, vOffset * 2, ignored); - CreateMonName(0, 0x16, vOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, vOffset * 2, ignored); + CreateMonName(0, MON_LIST_X+5, vOffset * 2); } } break; @@ -2471,7 +2572,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -32; } @@ -2480,7 +2581,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0; } @@ -2489,7 +2590,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 32; } @@ -2555,7 +2656,7 @@ static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -64; } @@ -2568,7 +2669,7 @@ static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 64; } @@ -2763,43 +2864,47 @@ static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) #define sIsDownArrow data[1] +#define LIST_RIGHT_SIDE_TEXT_X 204 +#define LIST_RIGHT_SIDE_TEXT_X_OFFSET 12 +#define LIST_RIGHT_SIDE_TEXT_Y_OFFSET 13 static void CreateInterfaceSprites(u8 page) { u8 spriteId; u16 digitNum; + u8 color[3]; // Scroll arrows - spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 10, 4, 0); gSprites[spriteId].sIsDownArrow = FALSE; - spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 156, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 10, 156, 0); gSprites[spriteId].sIsDownArrow = TRUE; gSprites[spriteId].vFlip = TRUE; - CreateSprite(&sScrollBarSpriteTemplate, 230, 20, 0); + CreateSprite(&sScrollBarSpriteTemplate, 8, 20, 0); // Start button - CreateSprite(&sInterfaceTextSpriteTemplate, 16, 120, 0); + // CreateSprite(&sInterfaceTextSpriteTemplate, 16, 120, 0); // Menu text - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 120, 0); - StartSpriteAnim(&gSprites[spriteId], 3); + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 120, 0); + // StartSpriteAnim(&gSprites[spriteId], 3); // Select button - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 16, 144, 0); - StartSpriteAnim(&gSprites[spriteId], 2); - gSprites[spriteId].data[2] = 0x80; + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 16, 144, 0); + // StartSpriteAnim(&gSprites[spriteId], 2); + // gSprites[spriteId].data[2] = 0x80; // Search text - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 144, 0); - StartSpriteAnim(&gSprites[spriteId], 1); + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 144, 0); + // StartSpriteAnim(&gSprites[spriteId], 1); - spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 30; - gSprites[spriteId].data[0] = 30; - gSprites[spriteId].data[1] = 0; + // spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); + // gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + // gSprites[spriteId].oam.matrixNum = 30; + // gSprites[spriteId].data[0] = 30; + // gSprites[spriteId].data[1] = 0; - spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].data[0] = 31; - gSprites[spriteId].data[1] = 128; + // spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); + // gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + // gSprites[spriteId].oam.matrixNum = 31; + // gSprites[spriteId].data[0] = 31; + // gSprites[spriteId].data[1] = 128; if (page == PAGE_MAIN) { @@ -2807,15 +2912,70 @@ static void CreateInterfaceSprites(u8 page) if (!IsNationalPokedexEnabled()) { - // Seen text - CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); - // Own text - spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 72, 1); + + // // Seen text + // CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); + // // Own text + // spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 72, 1); + // StartSpriteAnim(&gSprites[spriteId], 1); + + // // Seen value - 100s + // drawNextDigit = FALSE; + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 48, 1); + // digitNum = sPokedexView->seenCount / 100; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // if (digitNum != 0) + // drawNextDigit = TRUE; + // else + // gSprites[spriteId].invisible = TRUE; + + // // Seen value - 10s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 48, 1); + // digitNum = (sPokedexView->seenCount % 100) / 10; + // if (digitNum != 0 || drawNextDigit) + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // else + // gSprites[spriteId].invisible = TRUE; + + // // Seen value - 1s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 48, 1); + // digitNum = (sPokedexView->seenCount % 100) % 10; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + + // // Owned value - 100s + // drawNextDigit = FALSE; + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 80, 1); + // digitNum = sPokedexView->ownCount / 100; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // if (digitNum != 0) + // drawNextDigit = TRUE; + // else + // gSprites[spriteId].invisible = TRUE; + + // // Owned value - 10s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 80, 1); + // digitNum = (sPokedexView->ownCount % 100) / 10; + // if (digitNum != 0 || drawNextDigit) + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // else + // gSprites[spriteId].invisible = TRUE; + + // // Owned value - 1s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 80, 1); + // digitNum = (sPokedexView->ownCount % 100) % 10; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + + // Hoenn text + CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 40 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); + // Hoenn seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // Hoenn own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 7, 1); StartSpriteAnim(&gSprites[spriteId], 1); - // Seen value - 100s + // Hoenn seen value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 48, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->seenCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2823,22 +2983,23 @@ static void CreateInterfaceSprites(u8 page) else gSprites[spriteId].invisible = TRUE; - // Seen value - 10s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 48, 1); + // Hoenn seen value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->seenCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; - // Seen value - 1s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 48, 1); + // Hoenn seen value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->seenCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // Owned value - 100s + + // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 80, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2846,16 +3007,16 @@ static void CreateInterfaceSprites(u8 page) else gSprites[spriteId].invisible = TRUE; - // Owned value - 10s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 80, 1); + // Hoenn owned value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; - // Owned value - 1s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 80, 1); + // Hoenn owned value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } @@ -2863,30 +3024,28 @@ static void CreateInterfaceSprites(u8 page) { u16 seenOwnedCount; - // Seen text - CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); - // Own text - spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 76, 1); + + // Hoenn text + CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 40 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); + // Hoenn seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // Hoenn own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 7, 1); StartSpriteAnim(&gSprites[spriteId], 1); - // Hoenn text (seen) - CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 45, 1); - - // National text (seen) - spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 55, 1); + // National text + spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 73 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); StartSpriteAnim(&gSprites[spriteId], 1); - - // Hoenn text (own) - CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 81, 1); - - // National text (own) - spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 91, 1); + // National seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // National own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); StartSpriteAnim(&gSprites[spriteId], 1); // Hoenn seen value - 100s seenOwnedCount = GetHoennPokedexCount(FLAG_GET_SEEN); drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2895,7 +3054,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2903,38 +3062,14 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // National seen value - 100s - drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 55, 1); - digitNum = sPokedexView->seenCount / 100; - StartSpriteAnim(&gSprites[spriteId], digitNum); - if (digitNum != 0) - drawNextDigit = TRUE; - else - gSprites[spriteId].invisible = TRUE; - - // National seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 55, 1); - digitNum = (sPokedexView->seenCount % 100) / 10; - if (digitNum != 0 || drawNextDigit) - StartSpriteAnim(&gSprites[spriteId], digitNum); - else - gSprites[spriteId].invisible = TRUE; - - // National seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 55, 1); - digitNum = (sPokedexView->seenCount % 100) % 10; - StartSpriteAnim(&gSprites[spriteId], digitNum); - seenOwnedCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); - // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2943,7 +3078,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2951,13 +3086,39 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); + + + //**************************** + // National seen value - 100s + drawNextDigit = FALSE; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = sPokedexView->seenCount / 100; + StartSpriteAnim(&gSprites[spriteId], digitNum); + if (digitNum != 0) + drawNextDigit = TRUE; + else + gSprites[spriteId].invisible = TRUE; + + // National seen value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->seenCount % 100) / 10; + if (digitNum != 0 || drawNextDigit) + StartSpriteAnim(&gSprites[spriteId], digitNum); + else + gSprites[spriteId].invisible = TRUE; + + // National seen value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->seenCount % 100) % 10; + StartSpriteAnim(&gSprites[spriteId], digitNum); + // National owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2966,7 +3127,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // National owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2974,7 +3135,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // National owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } @@ -3008,14 +3169,14 @@ void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) if (sprite->pos1.x != 48 || sprite->pos1.y != 56) { if (sprite->pos1.x > 48) - sprite->pos1.x--; + sprite->pos1.x -= 4; if (sprite->pos1.x < 48) - sprite->pos1.x++; + sprite->pos1.x = 48; if (sprite->pos1.y > 56) - sprite->pos1.y--; + sprite->pos1.y -= 4; if (sprite->pos1.y < 56) - sprite->pos1.y++; + sprite->pos1.y = 56; } else { @@ -3168,6 +3329,34 @@ static void PrintInfoScreenText(const u8* str, u8 left, u8 top) AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); } +static void PrintInfoScreenTextWhite(const u8* str, u8 left, u8 top) //HGSS_Ui +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_COLOR_WHITE; + color[2] = TEXT_DYNAMIC_COLOR_6; + + AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); +} +static void PrintInfoScreenTextSmall(const u8* str, u8 left, u8 top) +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_DYNAMIC_COLOR_6; + color[2] = TEXT_COLOR_LIGHT_GREY; + + AddTextPrinterParameterized4(0, 0, left, top, 0, 0, color, 0, str); +} +static void PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top) +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_COLOR_WHITE; + color[2] = TEXT_DYNAMIC_COLOR_6; + + AddTextPrinterParameterized4(0, 0, left, top, 0, 0, color, 0, str); +} + #define tMonSpriteId data[4] @@ -3247,11 +3436,14 @@ static void Task_LoadInfoScreen(u8 taskId) break; case 2: LoadScreenSelectBarMain(0xD); - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; case 3: + sPokedexView->typeIconSpriteIds[0] = 0xFF; + sPokedexView->typeIconSpriteIds[1] = 0xFF; + CreateTypeIconSprites(); gMain.state++; break; case 4: @@ -3300,20 +3492,20 @@ static void Task_LoadInfoScreen(u8 taskId) if (!gPaletteFade.active) { gMain.state++; - if (gTasks[taskId].data[3] == 0) - { - StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); - } - else - { - gMain.state++; - } + // if (gTasks[taskId].data[3] == 0) + // { + // StopCryAndClearCrySongs(); + // PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); + // } + // else + // { + // gMain.state++; + // } } break; case 9: - if (!IsCryPlayingOrClearCrySongs()) - gMain.state++; + // if (!IsCryPlayingOrClearCrySongs()) + gMain.state++; break; case 10: gTasks[taskId].data[0] = 0; @@ -3362,61 +3554,71 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if (JOY_NEW(A_BUTTON)) + // if (JOY_NEW(A_BUTTON)) + // { + // switch (sPokedexView->selectedScreen) + // { + // case AREA_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB_BLACK); + // sPokedexView->screenSwitchState = 1; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // break; + // case CRY_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + // sPokedexView->screenSwitchState = 2; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // break; + // case SIZE_SCREEN: + // if (!sPokedexListItem->owned) + // { + // PlaySE(SE_FAILURE); + // } + // else + // { + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + // sPokedexView->screenSwitchState = 3; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // } + // break; + // case CANCEL_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + // gTasks[taskId].func = Task_ExitInfoScreen; + // PlaySE(SE_PC_OFF); + // break; + // } + // return; + // } + // if ((JOY_NEW(DPAD_LEFT) + // || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + // && sPokedexView->selectedScreen > 0) + // { + // sPokedexView->selectedScreen--; + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // PlaySE(SE_DEX_PAGE); + // return; + // } + // if ((JOY_NEW(DPAD_RIGHT) + // || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + // && sPokedexView->selectedScreen < CANCEL_SCREEN) + // { + // sPokedexView->selectedScreen++; + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // PlaySE(SE_DEX_PAGE); + // return; + // } + + if ((JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) { - switch (sPokedexView->selectedScreen) - { - case AREA_SCREEN: - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB_BLACK); - sPokedexView->screenSwitchState = 1; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - break; - case CRY_SCREEN: - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); - sPokedexView->screenSwitchState = 2; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - break; - case SIZE_SCREEN: - if (!sPokedexListItem->owned) - { - PlaySE(SE_FAILURE); - } - else - { - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); - sPokedexView->screenSwitchState = 3; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - } - break; - case CANCEL_SCREEN: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].func = Task_ExitInfoScreen; - PlaySE(SE_PC_OFF); - break; - } - return; - } - if ((JOY_NEW(DPAD_LEFT) - || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && sPokedexView->selectedScreen > 0) - { - sPokedexView->selectedScreen--; - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); - PlaySE(SE_DEX_PAGE); - return; - } - if ((JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && sPokedexView->selectedScreen < CANCEL_SCREEN) - { - sPokedexView->selectedScreen++; - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); - PlaySE(SE_DEX_PAGE); - return; + sPokedexView->selectedScreen = AREA_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + PlaySE(SE_PIN); } + } static void Task_SwitchScreensFromInfoScreen(u8 taskId) @@ -3476,8 +3678,8 @@ static void Task_LoadAreaScreen(u8 taskId) } break; case 1: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(0, 0xD); + LoadScreenSelectBarSubmenu(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(0, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256); gMain.state++; @@ -3510,7 +3712,10 @@ static void Task_SwitchScreensFromAreaScreen(u8 taskId) gTasks[taskId].func = Task_LoadInfoScreen; break; case 2: - gTasks[taskId].func = Task_LoadCryScreen; + if (!sPokedexListItem->owned) + PlaySE(SE_FAILURE); + else + gTasks[taskId].func = Task_LoadStatsScreen; break; } } @@ -3534,7 +3739,7 @@ static void Task_LoadCryScreen(u8 taskId) } break; case 1: - DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenuRest_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, &gPokedexCryScreen_Tilemap, 0, 0); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); @@ -3543,8 +3748,8 @@ static void Task_LoadCryScreen(u8 taskId) gMain.state++; break; case 2: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(1, 0xD); + LoadScreenSelectBarMain(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(1, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; @@ -3689,7 +3894,7 @@ static void Task_SwitchScreensFromCryScreen(u8 taskId) gTasks[taskId].func = Task_LoadInfoScreen; break; case 2: - gTasks[taskId].func = Task_LoadAreaScreen; + gTasks[taskId].func = Task_LoadStatsScreen; break; case 3: gTasks[taskId].func = Task_LoadSizeScreen; @@ -3728,15 +3933,15 @@ static void Task_LoadSizeScreen(u8 taskId) } break; case 1: - DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenuRest_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, gPokedexSizeScreen_Tilemap, 0, 0); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); gMain.state++; break; case 2: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(2, 0xD); + LoadScreenSelectBarMain(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(2, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; @@ -3849,15 +4054,18 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) static void LoadScreenSelectBarMain(u16 unused) { - CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarMain_Tilemap, 0, 0); + //CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarMain_Tilemap, 0, 0); + CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarSubmenu_Tilemap_Clear, 0, 0); + CopyBgTilemapBufferToVram(1); } static void LoadScreenSelectBarSubmenu(u16 unused) { CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarSubmenu_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(1); } -static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) +static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) //HGSS_Ui { u8 i; u8 j; @@ -4078,6 +4286,96 @@ static void SpriteCB_SlideCaughtMonToCenter(struct Sprite *sprite) #undef tPersonalityLo #undef tPersonalityHi +//Type Icon +static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible) +{ + gSprites[sPokedexView->typeIconSpriteIds[spriteArrayId]].invisible = invisible; +} +// different from pokemon_summary_screen +#define TYPE_ICON_PAL_NUM_0 13 +#define TYPE_ICON_PAL_NUM_1 14 +#define TYPE_ICON_PAL_NUM_2 15 +static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = +{ + [TYPE_NORMAL] = TYPE_ICON_PAL_NUM_0, + [TYPE_FIGHTING] = TYPE_ICON_PAL_NUM_0, + [TYPE_FLYING] = TYPE_ICON_PAL_NUM_1, + [TYPE_POISON] = TYPE_ICON_PAL_NUM_1, + [TYPE_GROUND] = TYPE_ICON_PAL_NUM_0, + [TYPE_ROCK] = TYPE_ICON_PAL_NUM_0, + [TYPE_BUG] = TYPE_ICON_PAL_NUM_2, + [TYPE_GHOST] = TYPE_ICON_PAL_NUM_1, + [TYPE_STEEL] = TYPE_ICON_PAL_NUM_0, + [TYPE_MYSTERY] = TYPE_ICON_PAL_NUM_2, + [TYPE_FIRE] = TYPE_ICON_PAL_NUM_0, + [TYPE_WATER] = TYPE_ICON_PAL_NUM_1, + [TYPE_GRASS] = TYPE_ICON_PAL_NUM_2, + [TYPE_ELECTRIC] = TYPE_ICON_PAL_NUM_0, + [TYPE_PSYCHIC] = TYPE_ICON_PAL_NUM_1, + [TYPE_ICE] = TYPE_ICON_PAL_NUM_1, + [TYPE_DRAGON] = TYPE_ICON_PAL_NUM_2, + [TYPE_DARK] = TYPE_ICON_PAL_NUM_0, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = TYPE_ICON_PAL_NUM_0, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = TYPE_ICON_PAL_NUM_1, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = TYPE_ICON_PAL_NUM_1, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = TYPE_ICON_PAL_NUM_2, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = TYPE_ICON_PAL_NUM_0, + #ifdef TYPE_FAIRY + [TYPE_FAIRY] = TYPE_ICON_PAL_NUM_1, //based on battle_engine + #endif +}; +static void SetTypeIconPosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) +{ + struct Sprite *sprite; + + sprite = &gSprites[sPokedexView->typeIconSpriteIds[spriteArrayId]]; + StartSpriteAnim(sprite, typeId); + sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId]; + sprite->pos1.x = x + 16; + sprite->pos1.y = y + 8; + SetSpriteInvisibility(spriteArrayId, FALSE); +} +static void PrintCurrentSpeciesTypeInfo(void) +{ + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u32 i; + u16 dexNum = SpeciesToNationalPokedexNum(species); + u8 type1, type2; + + //type icon(s) + type1 = gBaseStats[species].type1; + type2 = gBaseStats[species].type2; + if (species == SPECIES_NONE) + type1 = type2 = TYPE_MYSTERY; + + if (type1 == type2) + { + SetTypeIconPosAndPal(type1, 147, 48, 0); + SetSpriteInvisibility(1, TRUE); + } + else + { + SetTypeIconPosAndPal(type1, 147, 48, 0); + SetTypeIconPosAndPal(type2, 147 + 33, 48, 1); + } + +} +static void CreateTypeIconSprites(void) +{ + u8 i; + + LoadCompressedSpriteSheet(&sSpriteSheet_MoveTypes); + LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); + for (i = 0; i < 2; i++) + { + if (sPokedexView->typeIconSpriteIds[i] == 0xFF) + sPokedexView->typeIconSpriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 10, 10, 2); + + SetSpriteInvisibility(i, TRUE); + } +} + + // u32 value is re-used, but passed as a bool that's TRUE if national dex is enabled static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) { @@ -4088,20 +4386,20 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *category; const u8 *description; - if (newEntry) - PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); + // if (newEntry) + // PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); if (value == 0) value = NationalToHoennOrder(num); else value = num; ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); - PrintInfoScreenText(str, 0x60, 0x19); + PrintInfoScreenTextWhite(str, 123, 17); //HGSS_Ui natNum = NationalPokedexNumToSpecies(num); if (natNum) name = gSpeciesNames[natNum]; else name = sText_TenDashes2; - PrintInfoScreenText(name, 0x84, 0x19); + PrintInfoScreenTextWhite(name, 157, 17); //HGSS_Ui if (owned) { CopyMonCategoryText(num, str2); @@ -4111,24 +4409,33 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) { category = gText_5MarksPokemon; } - PrintInfoScreenText(category, 0x64, 0x29); - PrintInfoScreenText(gText_HTHeight, 0x60, 0x39); - PrintInfoScreenText(gText_WTWeight, 0x60, 0x49); + PrintInfoScreenText(category, 123, 31); //HGSS_Ui + PrintInfoScreenText(gText_HTHeight, 155, 64); //HGSS_Ui + PrintInfoScreenText(gText_WTWeight, 155, 77); //HGSS_Ui if (owned) { - PrintMonHeight(gPokedexEntries[num].height, 0x81, 0x39); - PrintMonWeight(gPokedexEntries[num].weight, 0x81, 0x49); + PrintMonHeight(gPokedexEntries[num].height, 180, 64); //HGSS_Ui + PrintMonWeight(gPokedexEntries[num].weight, 180, 77); //HGSS_Ui } else { - PrintInfoScreenText(gText_UnkHeight, 0x81, 0x39); - PrintInfoScreenText(gText_UnkWeight, 0x81, 0x49); + PrintInfoScreenText(gText_UnkHeight, 180, 64); //HGSS_Ui + PrintInfoScreenText(gText_UnkWeight, 180, 77); //HGSS_Ui } if (owned) + { description = gPokedexEntries[num].description; + } else description = gExpandedPlaceholder_PokedexDescription; - PrintInfoScreenText(description, GetStringCenterAlignXOffset(1, description, 0xF0), 0x5F); + PrintInfoScreenText(description, GetStringCenterAlignXOffset(1, description, 0xF0), 93); //HGSS_Ui + + //Type Icon(s) //HGSS_Ui + if (owned && !newEntry) + { + description = gPokedexEntries[num].description; + PrintCurrentSpeciesTypeInfo(); //HGSS_Ui + } } static void PrintMonHeight(u16 height, u8 left, u8 top) @@ -4652,13 +4959,31 @@ static u16 CreateSizeScreenTrainerPic(u16 species, s16 x, s16 y, s8 paletteSlot) return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, 0xFFFF); } -static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) + +bool8 SpeciesCanLearnLvlUpMove(u16 species, u16 move) //Move search PokedexPlus HGSS_Ui +{ + u16 j; + for (j = 0; j < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][j] != LEVEL_UP_END; j++) + { + if (move == (gLevelUpLearnsets[species][j] & LEVEL_UP_MOVE_ID)) + { + return TRUE; + } + } + return FALSE; +} + + +static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) // ,u16 move) { u16 species; - u16 i; + u16 i,j; u16 resultsCount; u8 types[2]; + u8 tutorMoveId, tmMoveId; //PokedexPlus HGSS_Ui + u16 move = 0xFFFF; + CreatePokedexList(dexMode, order); for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) @@ -4753,6 +5078,66 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t sPokedexView->pokemonListCount = resultsCount; } + // Search by move + if (move != 0xFFFF) + { + //Calc tutor move ID + tutorMoveId = 0xFF; + for (i = 0; i < TUTOR_MOVE_COUNT; i++) + { + if(move == gTutorMoves[i]) + { + tutorMoveId = i; + break; + } + } + //Calc tm move ID + tmMoveId = 0xFF; + for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++) + { + if(move == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + i)) + { + tmMoveId = (ITEM_TM01_FOCUS_PUNCH + i); + break; + } + } + + for (i = 0, resultsCount = 0; i < sPokedexView->pokemonListCount; i++) + { + species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum); + + //LevelUp + if (SpeciesCanLearnLvlUpMove(species, move)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //TMHM + if(CanSpeciesLearnTMHM(species, tmMoveId)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //Tutor + if(CanLearnTutorMove(species, tutorMoveId)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //EGGs + if(SpeciesCanLearnEggMove(species, move)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + } + sPokedexView->pokemonListCount = resultsCount; + } + if (sPokedexView->pokemonListCount != 0) { for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) @@ -5631,3 +6016,838 @@ static void ClearSearchParameterBoxText(void) { ClearSearchMenuRect(144, 8, 96, 96); } + + + + + +//PokedexPlus HGSS_Ui Stats Page +#define tMonSpriteId data[4] +static void Task_LoadStatsScreen(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + u16 r2; + + sPokedexView->currentPage = STATS_SCREEN; + gPokedexVBlankCB = gMain.vblankCallback; + SetVBlankCallback(NULL); + r2 = 0; + if (gTasks[taskId].data[1] != 0) + r2 += DISPCNT_OBJ_ON; + if (gTasks[taskId].data[2] != 0) + r2 |= DISPCNT_BG1_ON; + ResetOtherVideoRegisters(r2); + gMain.state = 1; + } + break; + case 1: + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, gPokedexStatsScreen_Tilemap, 0, 0); + FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); + PutWindowTilemap(WIN_INFO); + // PutWindowTilemap(WIN_FOOTPRINT); + // PrintFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); + // CopyWindowToVram(WIN_FOOTPRINT, 2); + gMain.state++; + break; + case 2: + LoadScreenSelectBarMain(0xD); + LoadPokedexBgPalette(sPokedexView->isSearchResults); + gMain.state++; + break; + case 3: + sPokedexView->typeIconSpriteIds[0] = 0xFF; + sPokedexView->typeIconSpriteIds[1] = 0xFF; + CreateTypeIconSprites(); + // sMonSummaryScreen->splitIconSpriteId = 0xFF; //Physical/Special Split from BE + // LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); //Physical/Special Split from BE + // LoadCompressedSpriteSheet(&sSpriteSheet_SplitIcons); //Physical/Special Split from BE + // LoadSpritePalette(&sSpritePal_SplitIcons); //Physical/Special Split from BE + gMain.state++; + break; + case 4: + sPokedexView->moveSelected = 0; + sPokedexView->moveMax = 0; + sPokedexView->numEggMoves = 0; + sPokedexView->numLevelUpMoves = 0; + sPokedexView->numTMHMMoves = 0; + if(CalculateMoves()) + gMain.state++; + break; + case 5: + if (gTasks[taskId].data[1] == 0) + { + //Icon + FreeMonIconPalettes(); //Free space for new pallete + LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon + gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0, TRUE); //Create pokemon sprite + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + } + gMain.state++; + break; + case 6: + gTasks[taskId].data[5] = 0; + PrintMonStats(taskId, sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); + PrintMonStatsToggle(taskId); + if (!sPokedexListItem->owned) + LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); + CopyWindowToVram(WIN_INFO, 3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 7: + { + u32 preservedPalettes = 0; + + if (gTasks[taskId].data[2] != 0) + preservedPalettes = 0x14; // each bit represents a palette index + if (gTasks[taskId].data[1] != 0) + preservedPalettes |= (1 << (gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum + 16)); + BeginNormalPaletteFade(~preservedPalettes, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(gPokedexVBlankCB); + gMain.state++; + } + break; + case 8: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + HideBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + gMain.state++; + break; + case 9: + if (!gPaletteFade.active) + gMain.state++; + break; + case 10: + gMain.state++; + break; + case 11: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 1; + gTasks[taskId].func = Task_HandleStatsScreenInput; + gMain.state = 0; + break; + } +} +static void FreeStatsScreenWindowAndBgBuffers(void) +{ + void *tilemapBuffer; + + FreeAllWindowBuffers(); + tilemapBuffer = GetBgTilemapBuffer(0); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(1); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(2); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(3); + if (tilemapBuffer) + Free(tilemapBuffer); +} +static void Task_HandleStatsScreenInput(u8 taskId) +{ + // gTasks[taskId].data[5] = 0; + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_DEX_PAGE); + if (gTasks[taskId].data[5] == 0) + gTasks[taskId].data[5] = 1; + else + gTasks[taskId].data[5] = 0; + PrintMonStatsToggle(taskId); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, TRUE); + } + if (JOY_NEW(B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_ExitStatsScreen; + PlaySE(SE_PC_OFF); + return; + } + + //Change moves + if (JOY_REPEAT(DPAD_UP) && sPokedexView->moveSelected > 0) + { + sPokedexView->moveSelected -= 1; + PlaySE(SE_SELECT); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, FALSE); + } + if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->moveSelected < sPokedexView->moveMax -1 ) + { + sPokedexView->moveSelected = sPokedexView->moveSelected + 1; + PlaySE(SE_SELECT); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, FALSE); + } + + //Switch screens + if ((JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) + { + sPokedexView->selectedScreen = INFO_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromStatsScreen; + PlaySE(SE_PIN); + } + + if ((JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) + { + if (!sPokedexListItem->owned) + PlaySE(SE_FAILURE); + else + { + sPokedexView->selectedScreen = AREA_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromStatsScreen; + PlaySE(SE_PIN); + } + } + +} +#define ITEM_TAG 0xFDF3 +static void DestroyMoveIcon(u8 taskId) +{ + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon +} +static bool8 CalculateMoves(void) +{ + //Moves + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u8 numEggMoves = GetEggMovesSpecies(species, sStatsMovesEgg); + u8 numLevelUpMoves = GetLevelUpMovesBySpecies(species, sStatsMovesLevelUp); + u8 numTMHMMoves; + u8 numTutorMoves = 0; + u16 movestotal; + u8 i,j; + + // sTutorLearnsets + for (i=0; imoveMax = movestotal; + + sPokedexView->numEggMoves = numEggMoves; + sPokedexView->numLevelUpMoves = numLevelUpMoves; + sPokedexView->numTMHMMoves = numTMHMMoves; + sPokedexView->numTutorMoves = numTutorMoves; + + return TRUE; +} +static void PrintMoveNameAndInfo(u8 taskId, bool8 toggle) +{ + u8 numEggMoves = sPokedexView->numEggMoves; + u8 numLevelUpMoves = sPokedexView->numLevelUpMoves; + u8 numTMHMMoves = sPokedexView->numTMHMMoves; + u8 numTutorMoves = sPokedexView->numTutorMoves; + + u8 selected = sPokedexView->moveSelected; + u8 total = sPokedexView->moveMax; + + u16 move; + u16 item; + + u8 moves_x = 101; + u8 moves_y = 19; + + u8 level = 0; + + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + + //Contest + u8 contest_i, contest_effectValue, contest_appeal, contest_jam; + + //Clear space + if (!toggle) + FillWindowPixelRect(0, PIXEL_FILL(0), moves_x-1, moves_y, 139, 78); + else + FillWindowPixelRect(0, PIXEL_FILL(0), moves_x-1, moves_y+29, 139, 55); + + //Calculate and retrieve correct move from the arrays + if (selected < numEggMoves) + { + move = sStatsMovesEgg[sPokedexView->moveSelected]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + PrintInfoScreenTextSmall(gText_ThreeDashes, moves_x + 113, moves_y + 9); + item = ITEM_LUCKY_EGG; + } + else if (selected < (numEggMoves + numLevelUpMoves)) + { + move = sStatsMovesLevelUp[sPokedexView->moveSelected - numEggMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + //Calculate level of the move + while (((gLevelUpLearnsets[species][(selected-numEggMoves)] & LEVEL_UP_MOVE_LV) != (level << 9)) && level < 0xFF) + { + level++; + if (gLevelUpLearnsets[species][(selected-numEggMoves)] == LEVEL_UP_END) + level = 0xFF; + } + ConvertIntToDecimalStringN(gStringVar1, level, STR_CONV_MODE_LEFT_ALIGN, 3); //Move learn lvl + PrintInfoScreenTextSmall(gText_Stats_MoveLevel, moves_x + 113, moves_y + 3); //Level text + PrintInfoScreenTextSmall(gStringVar1, moves_x + 113, moves_y + 14); //Print level + item = ITEM_EXP_SHARE; + } + else if (selected < (numEggMoves + numLevelUpMoves + numTMHMMoves)) + { + move = sStatsMovesTMHM[sPokedexView->moveSelected - numEggMoves - numLevelUpMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + CopyItemName(sStatsMovesTMHM_ID[(selected-numEggMoves-numLevelUpMoves)], gStringVar1); //TM name + PrintInfoScreenTextSmall(gStringVar1, moves_x + 113, moves_y + 9); + item = sStatsMovesTMHM_ID[(selected-numEggMoves-numLevelUpMoves)]; + } + else if (selected < (numEggMoves + numLevelUpMoves + numTMHMMoves + numTutorMoves)) + { + move = sStatsMovesTutor[sPokedexView->moveSelected - numEggMoves - numLevelUpMoves - numTMHMMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + PrintInfoScreenTextSmall(gText_ThreeDashes, moves_x + 113, moves_y + 9); + item = ITEM_TEACHY_TV; + } + else + { + StringCopy(gStringVar4, gText_CommunicationError); + item = ITEM_MASTER_BALL; + } + + + //Move name and description + StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 20); + PrintInfoScreenTextSmall(gStringVar3, moves_x, moves_y + 17); //Name + if (gTasks[taskId].data[5] == 0) + PrintInfoScreenTextSmall(gStringVar4, moves_x, moves_y + 34); + else + PrintInfoScreenTextSmall(gContestEffectDescriptionPointers[gContestMoves[move].effect], moves_x, moves_y + 34); + + + //Egg/TM/Level/Tutor Item Icon + gTasks[taskId].data[3] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + gSprites[gTasks[taskId].data[3]].pos2.x = 203; + gSprites[gTasks[taskId].data[3]].pos2.y = 39; + gSprites[gTasks[taskId].data[3]].oam.priority = 0; + + //Moves selected from move max + ConvertIntToDecimalStringN(gStringVar1, (selected+1), STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, total, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar1, gText_Stats_MoveSelectedMax); + PrintInfoScreenTextSmallWhite(gStringVar1, moves_x-1, moves_y+1); + + if (gTasks[taskId].data[5] == 0) + { + //Power + PrintInfoScreenTextSmall(gText_Power, moves_x + 3, moves_y + 64); + if (gBattleMoves[move].power < 2) + StringCopy(gStringVar1, gText_ThreeDashes); + else + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, moves_x + 48, moves_y + 64); + //Accuracy + PrintInfoScreenTextSmall(gText_Accuracy2, moves_x + 69, moves_y + 64); + if (gBattleMoves[move].accuracy == 0) + StringCopy(gStringVar1, gText_ThreeDashes); + else + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, moves_x + 117, moves_y + 64); + } + else + { + //Appeal + PrintInfoScreenTextSmall(gText_Appeal, moves_x + 3, moves_y + 64); + contest_appeal = 0; + contest_effectValue = gContestEffects[gContestMoves[move].effect].appeal; + if (contest_effectValue != 0xFF) + contest_effectValue /= 10; + for (contest_i = 0; contest_i < 8; contest_i++) + { + if (contest_effectValue != 0xFF && contest_i < contest_effectValue) + contest_appeal += 1; + } + ConvertIntToDecimalStringN(gStringVar1, contest_appeal, STR_CONV_MODE_RIGHT_ALIGN, 1); + StringCopy(gStringVar2, gText_PlusSymbol); + StringAppend(gStringVar2, gStringVar1); + PrintInfoScreenTextSmall(gStringVar2, moves_x + 48, moves_y + 64); + + //Jam + PrintInfoScreenTextSmall(gText_Jam, moves_x + 69, moves_y + 64); + contest_jam = 0; + contest_effectValue = gContestEffects[gContestMoves[move].effect].jam; + if (contest_effectValue != 0xFF) + contest_effectValue /= 10; + for (contest_i = 0; contest_i < 8; contest_i++) + { + if (contest_effectValue != 0xFF && contest_i < contest_effectValue) + contest_jam += 1; + } + ConvertIntToDecimalStringN(gStringVar1, contest_jam, STR_CONV_MODE_RIGHT_ALIGN, 1); + StringCopy(gStringVar2, gText_Stats_Minus); + StringAppend(gStringVar2, gStringVar1); + PrintInfoScreenTextSmall(gStringVar2, moves_x + 122, moves_y + 64); + } + + //Draw move type icon + if (gTasks[taskId].data[5] == 0) + { + SetTypeIconPosAndPal(gBattleMoves[move].type, moves_x + 50, moves_y+1, 0); + SetSpriteInvisibility(1, TRUE); + } + else + { + SetTypeIconPosAndPal(NUMBER_OF_MON_TYPES + gContestMoves[move].contestCategory, moves_x + 50, moves_y+1, 1); + SetSpriteInvisibility(0, TRUE); + } + + + //Physical/Special Split from BE + // DestroySplitIcon(); + // ShowSplitIcon(GetBattleMoveSplit(move)); +} +// u32 value is re-used, but passed as a bool that's TRUE if national dex is enabled +static void PrintMonStats(u8 taskId, u32 num, u32 value, u32 owned, u32 newEntry) //HGSS_Ui +{ + u8 str[16]; + u8 str2[32]; + u8 strEV[25]; + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u16 natNum; + u8 evVal; + const u8 *category; + const u8 *description; + const u8 *strEVtype; + + u8 gender_x, gender_y; + + u8 base_i = 0; + u8 base_offset = 11; + u8 base_x = 8; + u8 base_y = 52; + + //Name + PrintInfoScreenTextSmall(gSpeciesNames[species], 38, 16); + + //Number + if (value == 0) + value = NationalToHoennOrder(num); + else + value = num; + ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); + PrintInfoScreenTextSmall(str, 38, 26); + + //Gender ratio //MON_GENDERLESS == 0xFF + gender_x = 38; + gender_y = 36; + switch (gBaseStats[species].genderRatio) + { + case 0: + PrintInfoScreenTextSmall(gText_Stats_Gender_0, gender_x, gender_y); + break; + case 31: + PrintInfoScreenTextSmall(gText_Stats_Gender_12_5, gender_x, gender_y); + break; + case 63: + PrintInfoScreenTextSmall(gText_Stats_Gender_25, gender_x, gender_y); + break; + case 127: + PrintInfoScreenTextSmall(gText_Stats_Gender_50, gender_x, gender_y); + break; + case 191: + PrintInfoScreenTextSmall(gText_Stats_Gender_75, gender_x, gender_y); + break; + case 223: + PrintInfoScreenTextSmall(gText_Stats_Gender_87_5, gender_x, gender_y); + break; + case 254: + PrintInfoScreenTextSmall(gText_Stats_Gender_100, gender_x, gender_y); + break; + default: + PrintInfoScreenTextSmall(gText_ThreeDashes, gender_x, gender_y); + break; + } + + + //Moves + PrintMoveNameAndInfo(taskId, FALSE); + +} +static void PrintMonStatsToggle(u8 taskId) +{ + u8 base_x = 8; + u8 base_x_offset = 70; + u8 base_offset = 11; + u8 base_x_first_row = 23; + u8 base_x_second_row = 43; + u8 base_i = 0; + u8 base_y = 52; + u32 align_x; + u8 total_x = 93; + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u8 strEV[25]; + u8 strBase[14]; + u8 abilities_x = 101; + u8 abilities_y = 99; + u8 ability0; + + //Clear old text + FillWindowPixelRect(0, PIXEL_FILL(0), base_x, base_y, 90, 100); //bottom stats + FillWindowPixelRect(0, PIXEL_FILL(0), abilities_x, 99, 130, 58); //abilities + + + //Base stats + if (gTasks[taskId].data[5] == 0) + { + PrintInfoScreenTextSmall(gText_Stats_HP, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseHP, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_Speed, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpeed, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_Attack, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_SpAtk, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_Defense, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_SpDef, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + base_i++; + } + else //EV increses + { + PrintInfoScreenTextSmall(gText_Stats_EVHP, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_HP, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpeed, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Speed, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_EVAttack, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Attack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpAtk, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_SpAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_EVDefense, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Defense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpDef, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_SpDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + base_i++; + } + + + base_y = 86; + base_i = 0; + + if (gTasks[taskId].data[5] == 0) + { + //Exp + PrintInfoScreenTextSmall(gText_Stats_Exp, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(gStringVar1, gBaseStats[species].expYield, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, base_x + base_x_offset, base_y + base_offset*base_i); + base_i++; + + //friendship + PrintInfoScreenTextSmall(gText_Stats_Friendship, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strEV, gBaseStats[species].friendship, STR_CONV_MODE_RIGHT_ALIGN, 3); + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + base_i++; + + //Egg cycles + if (gBaseStats[species].eggGroup1 == EGG_GROUP_UNDISCOVERED || gBaseStats[species].eggGroup2 == EGG_GROUP_UNDISCOVERED) + { + PrintInfoScreenTextSmall(gText_Stats_EggCycles, base_x, base_y + base_offset*base_i); + PrintInfoScreenTextSmall(gText_ThreeDashes, 78, base_y + base_offset*base_i); + } + else + { + PrintInfoScreenTextSmall(gText_Stats_EggCycles, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strEV, gBaseStats[species].eggCycles, STR_CONV_MODE_RIGHT_ALIGN, 2); + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + } + base_i++; + + //Catch rate + PrintInfoScreenTextSmall(gText_Stats_Catch, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(gStringVar1, gBaseStats[species].catchRate, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, base_x + base_x_offset, base_y + base_offset*base_i); + base_i++; + + //Growth rate + PrintInfoScreenTextSmall(gText_Stats_Growthrate, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].growthRate) + { + case GROWTH_MEDIUM_FAST: + StringCopy(strEV, gText_Stats_MEDIUM_FAST); + break; + case GROWTH_ERRATIC: + StringCopy(strEV, gText_Stats_ERRATIC); + break; + case GROWTH_FLUCTUATING: + StringCopy(strEV, gText_Stats_FLUCTUATING); + break; + case GROWTH_MEDIUM_SLOW: + StringCopy(strEV, gText_Stats_MEDIUM_SLOW); + break; + case GROWTH_FAST: + StringCopy(strEV, gText_Stats_FAST); + break; + case GROWTH_SLOW: + StringCopy(strEV, gText_Stats_SLOW); + break; + default: + break; + } + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + } + else + { + base_i = 0; + //Egg group 1 + PrintInfoScreenTextSmall(gText_Stats_eggGroup_g1, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].eggGroup1) + { + case EGG_GROUP_MONSTER : + StringCopy(gStringVar1, gText_Stats_eggGroup_MONSTER); + break; + case EGG_GROUP_WATER_1 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_1); + break; + case EGG_GROUP_BUG : + StringCopy(gStringVar1, gText_Stats_eggGroup_BUG); + break; + case EGG_GROUP_FLYING : + StringCopy(gStringVar1, gText_Stats_eggGroup_FLYING); + break; + case EGG_GROUP_FIELD : + StringCopy(gStringVar1, gText_Stats_eggGroup_FIELD); + break; + case EGG_GROUP_FAIRY : + StringCopy(gStringVar1, gText_Stats_eggGroup_FAIRY); + break; + case EGG_GROUP_GRASS : + StringCopy(gStringVar1, gText_Stats_eggGroup_GRASS); + break; + case EGG_GROUP_HUMAN_LIKE : + StringCopy(gStringVar1, gText_Stats_eggGroup_HUMAN_LIKE); + break; + case EGG_GROUP_WATER_3 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_3); + break; + case EGG_GROUP_MINERAL : + StringCopy(gStringVar1, gText_Stats_eggGroup_MINERAL); + break; + case EGG_GROUP_AMORPHOUS : + StringCopy(gStringVar1, gText_Stats_eggGroup_AMORPHOUS); + break; + case EGG_GROUP_WATER_2 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_2); + break; + case EGG_GROUP_DITTO : + StringCopy(gStringVar1, gText_Stats_eggGroup_DITTO); + break; + case EGG_GROUP_DRAGON : + StringCopy(gStringVar1, gText_Stats_eggGroup_DRAGON); + break; + case EGG_GROUP_UNDISCOVERED: + StringCopy(gStringVar1, gText_Stats_eggGroup_UNDISCOVERED); + break; + } + PrintInfoScreenTextSmall(gStringVar1, base_x + 37, base_y + base_offset*base_i); + base_i++; + + //Egg group 2 + PrintInfoScreenTextSmall(gText_Stats_eggGroup_g2, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].eggGroup2) + { + case EGG_GROUP_MONSTER : + StringCopy(gStringVar1, gText_Stats_eggGroup_MONSTER); + break; + case EGG_GROUP_WATER_1 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_1); + break; + case EGG_GROUP_BUG : + StringCopy(gStringVar1, gText_Stats_eggGroup_BUG); + break; + case EGG_GROUP_FLYING : + StringCopy(gStringVar1, gText_Stats_eggGroup_FLYING); + break; + case EGG_GROUP_FIELD : + StringCopy(gStringVar1, gText_Stats_eggGroup_FIELD); + break; + case EGG_GROUP_FAIRY : + StringCopy(gStringVar1, gText_Stats_eggGroup_FAIRY); + break; + case EGG_GROUP_GRASS : + StringCopy(gStringVar1, gText_Stats_eggGroup_GRASS); + break; + case EGG_GROUP_HUMAN_LIKE : + StringCopy(gStringVar1, gText_Stats_eggGroup_HUMAN_LIKE); + break; + case EGG_GROUP_WATER_3 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_3); + break; + case EGG_GROUP_MINERAL : + StringCopy(gStringVar1, gText_Stats_eggGroup_MINERAL); + break; + case EGG_GROUP_AMORPHOUS : + StringCopy(gStringVar1, gText_Stats_eggGroup_AMORPHOUS); + break; + case EGG_GROUP_WATER_2 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_2); + break; + case EGG_GROUP_DITTO : + StringCopy(gStringVar1, gText_Stats_eggGroup_DITTO); + break; + case EGG_GROUP_DRAGON : + StringCopy(gStringVar1, gText_Stats_eggGroup_DRAGON); + break; + case EGG_GROUP_UNDISCOVERED: + StringCopy(gStringVar1, gText_Stats_eggGroup_UNDISCOVERED); + break; + } + PrintInfoScreenTextSmall(gStringVar1, base_x + 37, base_y + base_offset*base_i); + } + + + + //Abilitie(s) + if (gTasks[taskId].data[5] == 0) + { + ability0 = gBaseStats[species].abilities[0]; + PrintInfoScreenTextSmallWhite(gAbilityNames[ability0], abilities_x, abilities_y); + PrintInfoScreenTextSmall(gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14); + + if (gBaseStats[species].abilities[1] != ABILITY_NONE) + { + PrintInfoScreenTextSmallWhite(gAbilityNames[gBaseStats[species].abilities[1]], abilities_x, abilities_y + 30); + PrintInfoScreenTextSmall(gAbilityDescriptionPointers[gBaseStats[species].abilities[1]], abilities_x, abilities_y + 44); + } + // }else{ //For PokemonExpansion + // ability0 = gBaseStats[species].abilityHidden; + // PrintInfoScreenTextSmallWhite(gAbilityNames[ability0], abilities_x, abilities_y); + // PrintInfoScreenTextSmall(gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14); + } + +} +static void Task_SwitchScreensFromStatsScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + FreeMonIconPalettes(); //Destroy pokemon icon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite + + FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); + switch (sPokedexView->screenSwitchState) + { + case 1: + gTasks[taskId].func = Task_LoadAreaScreen; + break; + case 2: + gTasks[taskId].func = Task_LoadCryScreen; + break; + default: + gTasks[taskId].func = Task_LoadInfoScreen; + break; + } + } +} +static void Task_ExitStatsScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + FreeMonIconPalettes(); //Destroy pokemon icon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite + + FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); + FreeInfoScreenWindowAndBgBuffers(); + DestroyTask(taskId); + } +} + +//Physical/Special Split from BE +// static u8 ShowSplitIcon(u32 split) +// { +// if (sPokedexListItem->splitIconSpriteId == 0xFF) +// sPokedexListItem->splitIconSpriteId = CreateSprite(&sSpriteTemplate_SplitIcons, 48, 129, 0); + +// gSprites[sPokedexListItem->splitIconSpriteId].invisible = FALSE; +// StartSpriteAnim(&gSprites[sPokedexListItem->splitIconSpriteId], split); +// return sPokedexListItem->splitIconSpriteId; +// } + +// static void DestroySplitIcon(void) +// { +// if (sPokedexListItem->splitIconSpriteId != 0xFF) +// DestroySprite(&gSprites[sPokedexListItem->splitIconSpriteId]); +// sPokedexListItem->splitIconSpriteId = 0xFF; +// } + diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 7a3b38dc2a..656c952208 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -8,6 +8,7 @@ #include "menu.h" #include "overworld.h" #include "palette.h" +#include "pokedex.h" #include "pokedex_area_screen.h" #include "region_map.h" #include "roamer.h" @@ -726,10 +727,20 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) if (JOY_NEW(B_BUTTON)) { gTasks[taskId].data[1] = 1; - PlaySE(SE_PC_OFF); + PlaySE(SE_DEX_PAGE); + } + else if (JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + gTasks[taskId].data[1] = 1; + PlaySE(SE_DEX_PAGE); } else if (JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(sPokedexAreaScreen->species), FLAG_GET_CAUGHT)) + { + PlaySE(SE_FAILURE); + return; + } gTasks[taskId].data[1] = 2; PlaySE(SE_DEX_PAGE); } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 012e133e66..3d97e77c00 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -851,13 +851,13 @@ static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES sSpriteAnim_CategoryTough, }; -static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes = +const struct CompressedSpriteSheet sSpriteSheet_MoveTypes = { .data = gMoveTypes_Gfx, .size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100, .tag = TAG_MOVE_TYPES }; -static const struct SpriteTemplate sSpriteTemplate_MoveTypes = +const struct SpriteTemplate sSpriteTemplate_MoveTypes = { .tileTag = TAG_MOVE_TYPES, .paletteTag = TAG_MOVE_TYPES, @@ -3752,7 +3752,7 @@ static void CreateMoveTypeIcons(void) } } -static void SetTypeSpritePosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) +void SetTypeSpritePosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) //HGSS_Ui { struct Sprite *sprite = &gSprites[sMonSummaryScreen->spriteIds[spriteArrayId]]; StartSpriteAnim(sprite, typeId); diff --git a/src/strings.c b/src/strings.c index fe5051d711..f8b3ede6de 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1817,3 +1817,66 @@ const u8 gText_Answer[] = _("ANSWER"); const u8 gText_PokeBalls[] = _("POKé BALLS"); const u8 gText_Berry[] = _("BERRY"); const u8 gText_Berries[] = _("BERRIES"); + + +//HGSS_Ui PokedexPlus +const u8 gText_Stats_EV[] = _("EV: "); +const u8 gText_Stats_EV_HP[] = _("HP {PLUS} "); +const u8 gText_Stats_EV_Attack[] = _("ATTACK {PLUS} "); +const u8 gText_Stats_EV_Defense[] = _("DEFENSE {PLUS} "); +const u8 gText_Stats_EV_Speed[] = _("SPEED {PLUS} "); +const u8 gText_Stats_EV_SpAtk[] = _("SP. ATK {PLUS} "); +const u8 gText_Stats_EV_SpDef[] = _("SP. DEF {PLUS}"); +const u8 gText_Stats_HP[] = _("HP "); +const u8 gText_Stats_Attack[] = _("ATK "); +const u8 gText_Stats_Defense[] = _("DEF "); +const u8 gText_Stats_Speed[] = _("SPE "); +const u8 gText_Stats_SpAtk[] = _("SP.A "); +const u8 gText_Stats_SpDef[] = _("SP.D "); +const u8 gText_Stats_EVHP[] = _("EV HP"); +const u8 gText_Stats_EVAttack[] = _("EV ATK"); +const u8 gText_Stats_EVDefense[] = _("EV DEF"); +const u8 gText_Stats_EVSpeed[] = _("EV SPE"); +const u8 gText_Stats_EVSpAtk[] = _("EV SP.A"); +const u8 gText_Stats_EVSpDef[] = _("EV SP.D"); +const u8 gText_Stats_MoveSelectedMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); +const u8 gText_Stats_MoveLevel[] = _("LVL"); +const u8 gText_Stats_Gender_0[] = _("♂"); +const u8 gText_Stats_Gender_12_5[] = _("♀ 1/7 ♂"); //_("♀ 12.5 / 87.5 ♂"); +const u8 gText_Stats_Gender_25[] = _("♀ 1/3 ♂"); //_("♀ 25 / 75 ♂"); +const u8 gText_Stats_Gender_50[] = _("♀ 1/1 ♂"); //_("♀ 50 / 50 ♂"); +const u8 gText_Stats_Gender_75[] = _("♀ 3/1 ♂"); //_("♀ 75 / 25 ♂"); +const u8 gText_Stats_Gender_87_5[] = _("♀ 7/1 ♂"); +const u8 gText_Stats_Gender_100[] = _("♀"); +const u8 gText_Stats_Catch[] = _("CATCH RATE: "); +const u8 gText_Stats_Exp[] = _("EXPERIENCE: "); +const u8 gText_Stats_EggCycles[] = _("EGG CYCLES: "); +const u8 gText_Stats_Growthrate[] = _("GROW: "); +const u8 gText_Stats_Friendship[] = _("FRIENDSHIP:" ); +const u8 gText_Stats_MEDIUM_FAST[] = _("MED. FAST"); +const u8 gText_Stats_ERRATIC[] = _("ERRATIC"); +const u8 gText_Stats_FLUCTUATING[] = _("FLUCTUATING"); +const u8 gText_Stats_MEDIUM_SLOW[] = _("MED. SLOW"); +const u8 gText_Stats_FAST[] = _("FAST"); +const u8 gText_Stats_SLOW[] = _("SLOW"); +const u8 gText_Stats_ContestHeart[] = _("H"); +const u8 gText_Stats_Minus[] = _("-"); +const u8 gText_Stats_eggGroup_g1[] = _("EGG G1:"); +const u8 gText_Stats_eggGroup_g2[] = _("EGG G2:"); +const u8 gText_Stats_eggGroup_MONSTER[] = _("MONSTER"); +const u8 gText_Stats_eggGroup_WATER_1[] = _("WATER 1"); +const u8 gText_Stats_eggGroup_BUG[] = _("BUG"); +const u8 gText_Stats_eggGroup_FLYING[] = _("FLYING"); +const u8 gText_Stats_eggGroup_FIELD[] = _("FIELD"); +const u8 gText_Stats_eggGroup_FAIRY[] = _("FAIR"); +const u8 gText_Stats_eggGroup_GRASS[] = _("GRASS"); +const u8 gText_Stats_eggGroup_HUMAN_LIKE[] = _("HUMAN LIKE"); +const u8 gText_Stats_eggGroup_WATER_3[] = _("WATER 3"); +const u8 gText_Stats_eggGroup_MINERAL[] = _("MINERAL"); +const u8 gText_Stats_eggGroup_AMORPHOUS[] = _("AMORPHOUS"); +const u8 gText_Stats_eggGroup_WATER_2[] = _("WATER 2"); +const u8 gText_Stats_eggGroup_DITTO[] = _("DITTO"); +const u8 gText_Stats_eggGroup_DRAGON[] = _("DRAGON"); +const u8 gText_Stats_eggGroup_UNDISCOVERED[]= _("---"); +const u8 gText_Dex_SEEN[] = _("SEEN"); +const u8 gText_Dex_OWN[] = _("OWN");