From fbbc6048488295f26779280b11dc74875e86c637 Mon Sep 17 00:00:00 2001 From: TheXaman Date: Thu, 4 Feb 2021 13:48:32 +0100 Subject: [PATCH] Added evolution screen! Improved BE compatibility --- graphics/pokedex/cry_screen.bin | Bin 1280 -> 1344 bytes graphics/pokedex/evo_tileset.bin | Bin 0 -> 1344 bytes graphics/pokedex/evo_tileset.png | Bin 0 -> 762 bytes graphics/pokedex/info_screen.bin | Bin 1280 -> 1344 bytes graphics/pokedex/menu.png | Bin 1714 -> 1741 bytes graphics/pokedex/menu_rest.png | Bin 1075 -> 1119 bytes .../pokedex/screen_select_bar_submenu.bin | Bin 192 -> 192 bytes graphics/pokedex/size_screen.bin | Bin 1280 -> 1344 bytes graphics/pokedex/stats_screen.bin | Bin 1280 -> 1344 bytes include/graphics.h | 2 + include/strings.h | 35 ++ src/graphics.c | 2 + src/pokedex.c | 486 +++++++++++++++++- src/strings.c | 35 ++ 14 files changed, 554 insertions(+), 6 deletions(-) create mode 100644 graphics/pokedex/evo_tileset.bin create mode 100644 graphics/pokedex/evo_tileset.png diff --git a/graphics/pokedex/cry_screen.bin b/graphics/pokedex/cry_screen.bin index 411311b5313139a87af1c53a3a1e5a6bb8660dc6..5e5087ae0d98e733bd966a56f0812553de05762a 100644 GIT binary patch literal 1344 zcmeH@$5O*U5JVql0Fh1325fT9K?KWyzygfH1QE>t{|2koL9!(-E?uZ%yQ&Y<(>2}O zM2cpF7Fub;pq&mn>7tt+dP%EUAN>q4$PmMfFv=L?OpuaEyf;OLX=a!uOO83_SzwVR zmRVtyH8opjgH5*BW`|w&*yn&lGIFH-$C#WboQBxsOd;S})!#HZ*Zw>fg*sSrL4c_4 z?OSrG{a4s^?gF-46CkR4ep_y|zlam@I}%P5)jidb+eG|#4d1^{afNNEM)8$L||EItG1697MDm21LH2(o; Cv0@hh 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$3ZdZ%1xfGDw8#z~C@&ErGvstY&Pn!bYBwf`>&!j7psU(0w z5R(vL4u}xtkRxKmIVQo0h$TspCPS7}a-5OpoC^%IfIEs@TN`qi9{^7{AFe;tRqNA16w(^32S-3RdB`@hCvBk-GD?FWZX I`G0n$FW)1LRsaA1 literal 0 HcmV?d00001 diff --git a/graphics/pokedex/evo_tileset.png b/graphics/pokedex/evo_tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6df6b2833f6c05bbd79388da628aaca4734772 GIT binary patch literal 762 zcmVf?;X&Wy!IV&{8@G zifY+BThh0kVhM`l3u0E95KLmNUM{>5^Vuk9e8 zcFd8WE(1=J0fGSV9{|AXklnb7WI*%+;Qaw0!a)Rp0};oF*o_+D@9HvO5&&j}+%5q) zumOnrFk*t;;shH29j1(}1^{prfSdbvM(uOWhCc(WYYzR6*}kN6l@gZHFhJ4`12`iT z&`1995Mw`R%9K+s+h_n$Zch#~3eZOM)?_N$z5z()Q0=LS*neuK1fZbJv$l&0ppFbU zn>oz!)-^y>qRPbr{tVL1RK!@A)nExo((kke&|FK~0GzdwuIY%fa7ZMl!odhBvkYWI z7X&bN`SN7xmPMGQD>dV41AwBtRIjnK>$?F+TN^;T#yLydoe8AZ2c&u}$b`_-h#?%0 zkozfqoglnlNZHU^Bi6zBPIK{2yC0y^<n-)~=lW2J)zZCXPhW7XSbN07*qoM6N<$f?xGbeEYLoRvb%eMjwDWaGXN-3k93M#3hni|4SEp^n>KqE~w(?Tn4w9`Q+U3AkU z-+Jkzp8*CLVwe#|8DpFYCe;rxML;m+G&2NcnR8Zsk2yTSl=Ce3u&92BB|?HJms#;) z)q4IK>uks}=cd))Vw)Xy{u4z=^g0DQBE>!6jD) zuC4ul|I3Z`2zQF+R{cBfc@X^aktd#o*nCm{HD=G~{cZ1Wj{du&?|Qzg|3CVF@X43( K_x#rRyT%WU8lltx literal 1280 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 QrT_o{07*qoM6N<$f{YZy0ssI2 diff --git a/graphics/pokedex/menu_rest.png b/graphics/pokedex/menu_rest.png index 724ef5201030e0ec5d3ba73bd8e9b45b06c34f68..e4b649c87051684f3c0b372317dd4b26fa61f9b2 100644 GIT binary patch delta 948 zcmV;l155m~2;T^hDhlNR926iD(BQv7ku;NkgGod|RCt`#m$7o&FbszI3cPEFPI`u( zuW#TC8GEe;Pu_H=siRJl#%AphshIMN9vqDdet@7TT8$lRDiWCzMSdoMpCs%Y8`0n2 z&7J0Ez%*?Gbf=pR5!VrMF@zev4@Cr=1c0|fu5$neYyhIR8t{UP zYy>NS@TfC39{|9$0DL%ZPw;*8S${XcqUI3qEc8>fF%SDN15`H*;2Ft0$wH68u}dfZ z8)Mk#Fd9IV+mh>pO4QTvTj#w;OaefEyRHD#Trd8XAP2{H-1AhNBET9z9TD(k=I|~A zc?L`X@Jz-KcD{OvraEy-%zTgoJp2G*h!3E-n$`gj+CsXfBZ|Tykz5dtw#2AaYpxQ& z(8R?PrCTT3pQS4<(WNO}oG#y?vE{o0(62T?h#JpXx;PU^8&tH|Eu>1cuWCbo!B62< zy4)aTL$5ut4xToen>N~ZK#(pk9$r072sYsVeznZJCVM|ak+S| z0kC`%z~$;gr+nx?XMk-Wo$Mct1v=S4xa~0y?l}Rx7j^;ccDpfe)^Vi(u1ER`;FeIK z;U(a!|1iLw6TmBcfH-=qWZ%4hvipBk_$bR#H%MO;`tDS4-RGr{mH_L3n<9C(dz8m= zwz~jl?s%Z*O@IT719 zqff--gBHY0k4FJs(xq~-3c%-p>dM*Jh9s5r=(f}aX9#b>$iDvx2&sLg>3b^&eIu!pW?{ZATa7+Nlc~!m(z{flQ{Z;`Vly?Di-U?8=26zLH W8#9A>289m*0000YM?#avX3Y?}H{}^MI2zUa-;or_$ni%y^^$@jL;iGMI$o=ah3L<3 zcc)YfV4gn)=*QZ*juJWQ7RuKsmjy5z0IVI_p|#c$|H}Dpu^i`xc;UJf)*@WGFOP1&Fd_ z)oA!YPFevB)m5>2gukPoM4w>NO@Jg)3^+Py#OlkIIm+bTrb7T|uJ}-MO0Z=WTf`@z z9J_Jm9{@;f_R&fJlC50?^V6}C4X!tT#vl$Jphs5#E2&H#Fq^R+BS3;cB(92p$2F-m zsDn~j9ZT1`E1XUIL^=gZCcFXq_$r;!Xx^Hk+vg^t|{kV2S9RfYe^Uu>i>C+W=vnY?hGW z!Qvs00xvX86BcTX@mTZP=k?rw`TjCb^gvID@V)}7PKe1;CzQ?{ffvz<|`LHv+a_0LbcrKWLIwX2rZ!k^k@cn^UeGy0HIM-fZT8FZEhyK35ILNw~dM) z3xHn4dc)x`{~Mt}?al#A3DEA?c^@#q)Y@74nkZ^oxg)fqXuE=5fYrpikrOblNo97{ zw|QN>*rBD^nK)`-EC5Y%DF6&&n1m_;6$(u0~~TdyIy>AK};6~CKPiUHMkw%tjqxjlY8a=0H{ar2OJhJ-v?+u d3{bfj@E0!&)PBSf7)1a8002ovPDHLkV1k->pIZO` diff --git a/graphics/pokedex/screen_select_bar_submenu.bin b/graphics/pokedex/screen_select_bar_submenu.bin index 5b94416834b46c2014a531fb26868ee3808d983d..390bcbd3f041647b5a1e2fc7a6084907100b6d6f 100644 GIT binary patch literal 192 zcmbu$H4Z`n0Km{k@)H)^ePY2~Z-u)Yoex)_Lx(1fs0ABaJ9|+FM<-`7aS2JOu%%^W y<>VC^`u=NcLjf_o9&CD$mHn$?@aC$ymfi0e<*_b@baR|OYFMMXU;j1;&lD2gKZ_w6JcEoy3pll>|=q`p^4 zb&?Q0^rGmapD+Uq5@Cp8Mi?bZOxDI2Cr*hnH{5c^Jr6wc#00t~nPQq5W|?E21r}K% z!7@o!SY=Jt*4bc_XI`jK<&`&Tyz{}9@#}1pV%LynhqTaXw#gKG)Q#`3&w(L>mCNFUvJ>Ne*gdg 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 diff --git a/graphics/pokedex/stats_screen.bin b/graphics/pokedex/stats_screen.bin index 0156472a3a2416cbffd944f1c5b907bdb2976b5e..a6eb2fd1626def8f8c422588414b94b5bc0a9b57 100644 GIT binary patch literal 1344 zcmbu7-7{5D7>A!`_KXu(Azz(bC9ZrVp}R8^O*3-crSTu2o8m@9g-}vQNFALN`HGUy zRFVpn{ytde-}{ch(WyS`o#RaFq~T93_-6%DF)WmE07u zV}uhyB*%#&niyh<;{1NC;x>0gESVHiN#hLZoF#*E zWRgWT=Otf5EpS>^ndqS$;r-?e(1M%zLEcu6cq#o^!#>z{JsQjQF)2i%h zlYF}k|AdYpJ*7}H&e#2!WBvkVr^$HnDfv4k{~SLrgu0{~b3ZS6wHG%d`krojculYP zb?=jWzjC6P$AdSZ(*3wP8<6~<4R2MyN_!}9wiYr({4D*(ELiRr5 znE$=yz0BPDIO@ocG0ue0q^(a$-md>2f?nUj*VrQOZ`c26J|3cJNB)y#U)4^3cC3Gf zFU$(r`&Y@&S?2jhj&=cOr9-qL`CKlt${Oozu*nwN T{1cH}cDPKQkiF+i{(o&3Se*5_ literal 1280 zcmaiyNlz3(7=|B`PG-Q9psc3>JgFdzw@GA(iE`#h{09OT(F=>Rjtj^#Z__$9BIa7N-3ip4_@L);D{s-l~hqp4c8?f zC6OeKNjgq4DWsA{I_8ss-?%~rSGk6dOtQ%4gd`s~sHKj28YG|O6sO6Nl*<|N$j8rF z#W&JKNOV)Vm7BQ5ZSK%4(!GVdguJctn%<`Pb^=Nrdtd7>OhoO$+(%URxUY?Rp!kOl z{39M8P$!oRYkt$aT>F=3BW)&3x7NQ$@xAoXFM6Wf%6&X#V6Sdh%rS#JV~FSSnm(-f z7ut+=p8(-~D~;Cm^iuI74t%Wj>vVt;S6<)ge$M{uHp~fLQS3da*NpOpw<2dBbM5~w z=DzIS=6BqcpJ0+H(X^w_DBkJ(-)r|SdIR+oQTul~|5-j9qFGn|W6X2aPx_PV`set} zyvW%X6u%g=&ld`ebGWNO@k=c8m2Z6K2P^z!m0wa><2UCI(YoS;6tcl4f7s$L+x+9d PRD$eqkqaVcFH-z26B_7v diff --git a/include/graphics.h b/include/graphics.h index 6c78508593..1ffc6e9828 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3286,6 +3286,7 @@ extern const u32 gBattleTerrainPalette_StadiumWallace[]; extern const u32 gPokedexInterface_Gfx[]; extern const u16 gPokedexBgHoenn_Pal[]; extern const u32 gPokedexMenuRest_Gfx[]; +extern const u32 gPokedexEvo_Gfx[]; extern const u32 gPokedexMenuList_Gfx[]; extern const u32 gPokedexMenu_Gfx[]; extern const u8 gPokedexList_Tilemap[]; @@ -3296,6 +3297,7 @@ extern const u16 gPokedexSearchResults_Pal[]; extern const u16 gPokedexBgNational_Pal[]; extern const u8 gPokedexInfoScreen_Tilemap[]; extern const u8 gPokedexStatsScreen_Tilemap[]; +extern const u8 gPokedexEvolutionScreen_Tilemap[]; extern const u8 gPokedexCryScreen_Tilemap[]; extern const u8 gPokedexSizeScreen_Tilemap[]; extern const u8 gPokedexScreenSelectBarMain_Tilemap[]; diff --git a/include/strings.h b/include/strings.h index 5f224e2459..fd773e7f52 100644 --- a/include/strings.h +++ b/include/strings.h @@ -595,6 +595,41 @@ extern const u8 gText_Stats_eggGroup_UNDISCOVERED[]; extern const u8 gText_Dex_SEEN[]; extern const u8 gText_Dex_OWN[]; +extern const u8 gText_EVO_Name[]; +extern const u8 gText_EVO_FRIENDSHIP[]; +extern const u8 gText_EVO_FRIENDSHIP_DAY[]; +extern const u8 gText_EVO_FRIENDSHIP_NIGHT[]; +extern const u8 gText_EVO_LEVEL[]; +extern const u8 gText_EVO_TRADE[]; +extern const u8 gText_EVO_TRADE_ITEM[]; +extern const u8 gText_EVO_ITEM[]; +extern const u8 gText_EVO_LEVEL_ATK_GT_DEF[]; +extern const u8 gText_EVO_LEVEL_ATK_EQ_DEF[]; +extern const u8 gText_EVO_LEVEL_ATK_LT_DEF[]; +extern const u8 gText_EVO_LEVEL_SILCOON[]; +extern const u8 gText_EVO_LEVEL_CASCOON[]; +extern const u8 gText_EVO_LEVEL_NINJASK[]; +extern const u8 gText_EVO_LEVEL_SHEDINJA[]; +extern const u8 gText_EVO_BEAUTY[]; +extern const u8 gText_EVO_LEVEL_FEMALE[]; +extern const u8 gText_EVO_LEVEL_MALE[]; +extern const u8 gText_EVO_LEVEL_NIGHT[]; +extern const u8 gText_EVO_LEVEL_DAY[]; +extern const u8 gText_EVO_LEVEL_DUSK[]; +extern const u8 gText_EVO_ITEM_HOLD_DAY[]; +extern const u8 gText_EVO_ITEM_HOLD_NIGHT[]; +extern const u8 gText_EVO_MOVE[]; +extern const u8 gText_EVO_MOVE_TYPE[]; +extern const u8 gText_EVO_MAPSEC[]; +extern const u8 gText_EVO_ITEM_MALE[]; +extern const u8 gText_EVO_ITEM_FEMALE[]; +extern const u8 gText_EVO_LEVEL_RAIN[]; +extern const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[]; +extern const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[]; +extern const u8 gText_EVO_TRADE_SPECIFIC_MON[]; +extern const u8 gText_EVO_SPECIFIC_MAP[]; +extern const u8 gText_EVO_NONE[]; + // birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; diff --git a/src/graphics.c b/src/graphics.c index 6ee521d1c5..8abc6d76fb 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1258,6 +1258,7 @@ const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_scree 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 gPokedexEvo_Gfx[] = INCBIN_U32("graphics/pokedex/evo_tileset.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"); @@ -1275,6 +1276,7 @@ const u32 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/ // 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 gPokedexEvolutionScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/evo_tileset.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/pokedex.c b/src/pokedex.c index b6bbba63d1..b426da226c 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -60,6 +60,7 @@ enum { INFO_SCREEN, STATS_SCREEN, + EVO_SCREEN, AREA_SCREEN, CRY_SCREEN, SIZE_SCREEN, @@ -348,6 +349,11 @@ 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 void Task_LoadEvolutionScreen(u8 taskId); +static void Task_HandleEvolutionScreenInput(u8 taskId); +static void Task_SwitchScreensFromEvolutionScreen(u8 taskId); +static void Task_ExitEvolutionScreen(u8 taskId); +static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species); #ifdef BATTLE_ENGINE static u8 ShowSplitIcon(u32 split); //Physical/Special Split from BE @@ -3910,7 +3916,7 @@ static void Task_SwitchScreensFromCryScreen(u8 taskId) gTasks[taskId].func = Task_LoadInfoScreen; break; case 2: - gTasks[taskId].func = Task_LoadStatsScreen; + gTasks[taskId].func = Task_LoadEvolutionScreen; break; case 3: gTasks[taskId].func = Task_LoadSizeScreen; @@ -6114,7 +6120,12 @@ static void Task_LoadStatsScreen(u8 taskId) //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 + #ifndef POKEMON_EXPANSION + gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0, TRUE); //Create pokemon sprite + #endif + #ifdef POKEMON_EXPANSION + gTasks[taskId].data[6] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0); //Create pokemon sprite + #endif gSprites[gTasks[taskId].data[4]].oam.priority = 0; } gMain.state++; @@ -6239,14 +6250,13 @@ static void Task_HandleStatsScreenInput(u8 taskId) PlaySE(SE_FAILURE); else { - sPokedexView->selectedScreen = AREA_SCREEN; + sPokedexView->selectedScreen = EVO_SCREEN; BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); - sPokedexView->screenSwitchState = 2; + sPokedexView->screenSwitchState = 3; gTasks[taskId].func = Task_SwitchScreensFromStatsScreen; PlaySE(SE_PIN); } } - } #define ITEM_TAG 0xFDF3 static void DestroyMoveIcon(u8 taskId) @@ -6848,6 +6858,9 @@ static void Task_SwitchScreensFromStatsScreen(u8 taskId) case 2: gTasks[taskId].func = Task_LoadCryScreen; break; + case 3: + gTasks[taskId].func = Task_LoadEvolutionScreen; + break; default: gTasks[taskId].func = Task_LoadInfoScreen; break; @@ -6882,7 +6895,6 @@ static u8 ShowSplitIcon(u32 split) StartSpriteAnim(&gSprites[sPokedexView->splitIconSpriteId], split); return sPokedexView->splitIconSpriteId; } - static void DestroySplitIcon(void) { if (sPokedexView->splitIconSpriteId != 0xFF) @@ -6890,3 +6902,465 @@ static void DestroySplitIcon(void) sPokedexView->splitIconSpriteId = 0xFF; } #endif + +//PokedexPlus HGSS_Ui Evolution Page +static void Task_LoadEvolutionScreen(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + u16 r2; + + sPokedexView->currentPage = EVO_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, gPokedexEvo_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, gPokedexEvolutionScreen_Tilemap, 0, 0); + FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); + PutWindowTilemap(WIN_INFO); + CopyWindowToVram(WIN_INFO, 3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 2: + LoadScreenSelectBarMain(0xD); + LoadPokedexBgPalette(sPokedexView->isSearchResults); + gMain.state++; + break; + case 3: + if (gTasks[taskId].data[1] == 0) + { + //Icon + FreeMonIconPalettes(); //Free space for new pallete + LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon + #ifndef POKEMON_EXPANSION + gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0, TRUE); //Create pokemon sprite + #endif + #ifdef POKEMON_EXPANSION + gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0); //Create pokemon sprite + #endif + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + } + gMain.state++; + break; + case 4: + //Print evo info and icons + gTasks[taskId].data[3] = 0; + PrintEvolutionTargetSpeciesAndMethod(taskId, NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); + gMain.state++; + break; + case 5: + { + 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 6: + 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 7: + if (!gPaletteFade.active) + gMain.state++; + break; + case 8: + gMain.state++; + break; + case 9: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 1; + gTasks[taskId].func = Task_HandleEvolutionScreenInput; + gMain.state = 0; + break; + } +} +static void Task_HandleEvolutionScreenInput(u8 taskId) +{ + //Exit to overview + if (JOY_NEW(B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_ExitEvolutionScreen; + PlaySE(SE_PC_OFF); + return; + } + + //Switch screens + if ((JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) + { + sPokedexView->selectedScreen = STATS_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromEvolutionScreen; + 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 = CRY_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromEvolutionScreen; + PlaySE(SE_PIN); + } + } +} +static void handleTargetSpeciesPrint(u8 taskId, u16 targetSpecies, u8 base_x, u8 base_y, u8 base_offset, u8 base_i) +{ + StringCopy(gStringVar3, gSpeciesNames[targetSpecies]); //evolution mon name + StringExpandPlaceholders(gStringVar3, gText_EVO_Name); //evolution mon name + PrintInfoScreenTextSmall(gStringVar3, base_x, base_y + base_offset*base_i); //evolution mon name + + if(base_i < 6) + { + LoadMonIconPalette(targetSpecies); //Loads pallete for current mon + #ifndef POKEMON_EXPANSION + gTasks[taskId].data[4+base_i] = CreateMonIcon(targetSpecies, SpriteCB_MonIcon, 50 + 32*base_i, 31, 4, 0, TRUE); //Create pokemon sprite + #endif + #ifdef POKEMON_EXPANSION + gTasks[taskId].data[4+base_i] = CreateMonIcon(targetSpecies, SpriteCB_MonIcon, 50 + 32*base_i, 31, 4, 0); //Create pokemon sprite + #endif + gSprites[gTasks[taskId].data[4+base_i]].oam.priority = 0; + } +} +#define EVO_SCREEN_LVL_DIGITS 2 +static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species) +{ + int i; + #ifdef POKEMON_EXPANSION + int j; + u16 currentMap; + #endif + u16 targetSpecies = 0; + + u16 item; + + bool8 left = TRUE; + u8 base_x = 5; + u8 base_x_offset = 54; + u8 base_y = 52; + u8 base_offset = 9; + u8 base_i = 0; + u8 times = 0; + + StringCopy(gStringVar1, gSpeciesNames[species]); + + //Calculate number of possible direct evolutions (e.g. Eevee has 5 but torchic has 1) + for (i = 0; i < EVOS_PER_MON; i++) + { + if(gEvolutionTable[species][i].method != 0) + times += 1; + gTasks[taskId].data[3] = times; + } + + //If there are no evolutions print text + if (times == 0) + { + StringExpandPlaceholders(gStringVar4, gText_EVO_NONE); + PrintInfoScreenTextSmall(gStringVar4, base_x, base_y + base_offset*base_i); + } + + //If there are evolutions find out which and print them 1 by 1 + for (i = 0; i < times; i++) + { + base_i = i; + left = !left; + switch (gEvolutionTable[species][i].method) + { + case EVO_FRIENDSHIP: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + ConvertIntToDecimalStringN(gStringVar2, 220, STR_CONV_MODE_LEADING_ZEROS, 3); //friendship value + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_FRIENDSHIP_DAY: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_DAY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_FRIENDSHIP_NIGHT: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_NIGHT ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_TRADE: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_TRADE_ITEM: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_ITEM ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_ITEM: + item = gEvolutionTable[species][i].param; + CopyItemName(item, gStringVar2); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_ATK_GT_DEF: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_GT_DEF ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_ATK_EQ_DEF: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_EQ_DEF ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_ATK_LT_DEF: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon namee + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_LT_DEF ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_SILCOON: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_SILCOON ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_CASCOON: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_CASCOON ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_NINJASK: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NINJASK ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_BEAUTY: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, 3); //beauty + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_BEAUTY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + #ifdef POKEMON_EXPANSION + case EVO_LEVEL_FEMALE: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_FEMALE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_MALE: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_MALE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_NIGHT: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NIGHT ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_DAY: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DAY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_DUSK: + ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DUSK ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_ITEM_HOLD_DAY: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_DAY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_ITEM_HOLD_NIGHT: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_NIGHT ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_MOVE: + StringCopy(gStringVar2, gMoveNames[gEvolutionTable[species][i].param]); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_MOVE_TYPE: + StringCopy(gStringVar2, gTypeNames[gEvolutionTable[species][i].param]); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE_TYPE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_MAPSEC: + StringCopy(gStringVar2, gRegionMapEntries[gEvolutionTable[species][i].param].name); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_MAPSEC ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_ITEM_MALE: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_MALE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_ITEM_FEMALE: + item = gEvolutionTable[species][i].param; //item + CopyItemName(item, gStringVar2); //item + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_FEMALE ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_RAIN: + //if (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR) + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_RAIN ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_SPECIFIC_MON_IN_PARTY: + StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MON_IN_PARTY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_LEVEL_DARK_TYPE_MON_IN_PARTY: + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_TRADE_SPECIFIC_MON: + StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_SPECIFIC_MON ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + case EVO_SPECIFIC_MAP: + //currentMap = ((gSaveBlock1Ptr->location.mapGroup) << 8 | gSaveBlock1Ptr->location.mapNum); + GetMapName(gStringVar2, gEvolutionTable[species][i].param, 0); + targetSpecies = gEvolutionTable[species][i].targetSpecies; + handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name + StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MAP ); + PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i); + break; + #endif + }//Switch end + }//For loop end +} +static void Task_SwitchScreensFromEvolutionScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + 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_LoadStatsScreen; + break; + case 2: + gTasks[taskId].func = Task_LoadCryScreen; + break; + default: + gTasks[taskId].func = Task_LoadInfoScreen; + break; + } + } +} +static void Task_ExitEvolutionScreen(u8 taskId) +{ + u8 i; + if (!gPaletteFade.active) + { + FreeMonIconPalettes(); //Destroy pokemon icon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite + for (i = 1; i <= gTasks[taskId].data[3]; i++) + { + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4+i]]); //Destroy pokemon icon sprite + } + + FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); + FreeInfoScreenWindowAndBgBuffers(); + DestroyTask(taskId); + } +} diff --git a/src/strings.c b/src/strings.c index f8b3ede6de..f36626461a 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1880,3 +1880,38 @@ 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"); + +const u8 gText_EVO_Name[] = _("{STR_VAR_3}:"); +const u8 gText_EVO_FRIENDSHIP[] = _("Lvl up with friendship >= 220"); +const u8 gText_EVO_FRIENDSHIP_DAY[] = _("Lvl up at day with friendship >= 220"); +const u8 gText_EVO_FRIENDSHIP_NIGHT[] = _("Lvl up at night with friendship >= 220"); +const u8 gText_EVO_LEVEL[] = _("Lvl up to {STR_VAR_2}"); +const u8 gText_EVO_TRADE[] = _("via trading"); +const u8 gText_EVO_TRADE_ITEM[] = _("via trading while holding {STR_VAR_2}"); +const u8 gText_EVO_ITEM[] = _("{STR_VAR_2} is used on Pokémon"); +const u8 gText_EVO_LEVEL_ATK_GT_DEF[] = _("Lvl up to {STR_VAR_2} with attack > defense"); +const u8 gText_EVO_LEVEL_ATK_EQ_DEF[] = _("Lvl up to {STR_VAR_2} with attack = defense"); +const u8 gText_EVO_LEVEL_ATK_LT_DEF[] = _("Lvl up to {STR_VAR_2} with attack < defense"); +const u8 gText_EVO_LEVEL_SILCOON[] = _("Lvl up to {STR_VAR_2} with Silcoon persona"); +const u8 gText_EVO_LEVEL_CASCOON[] = _("Lvl up to {STR_VAR_2} with Cascoon persona"); +const u8 gText_EVO_LEVEL_NINJASK[] = _("Lvl up to {STR_VAR_2} (special value for Ninjask)"); +const u8 gText_EVO_LEVEL_SHEDINJA[] = _("Lvl up to {STR_VAR_2} (special value for Shedinja)"); +const u8 gText_EVO_BEAUTY[] = _("Lvl up with beauty >= {STR_VAR_2}"); +const u8 gText_EVO_LEVEL_FEMALE[] = _("Lvl up to {STR_VAR_2}, is female"); +const u8 gText_EVO_LEVEL_MALE[] = _("Lvl up to {STR_VAR_2}, is male"); +const u8 gText_EVO_LEVEL_NIGHT[] = _("Lvl up to {STR_VAR_2} at night"); +const u8 gText_EVO_LEVEL_DAY[] = _("Lvl up to {STR_VAR_2} at day"); +const u8 gText_EVO_LEVEL_DUSK[] = _("Lvl up to {STR_VAR_2} at dusk (5-6 P.M)"); +const u8 gText_EVO_ITEM_HOLD_DAY[] = _("Lvl up, holds {STR_VAR_2} at day"); +const u8 gText_EVO_ITEM_HOLD_NIGHT[] = _("Lvl up, holds{STR_VAR_2} at night"); +const u8 gText_EVO_MOVE[] = _("Lvl up, knows {STR_VAR_2}"); +const u8 gText_EVO_MOVE_TYPE[] = _("Lvl up, knows {STR_VAR_2} type move"); +const u8 gText_EVO_MAPSEC[] = _("Lvl up on {STR_VAR_2}"); +const u8 gText_EVO_ITEM_MALE[] = _("{STR_VAR_2} used on male"); +const u8 gText_EVO_ITEM_FEMALE[] = _("{STR_VAR_2} used on female"); +const u8 gText_EVO_LEVEL_RAIN[] = _("Lvl up to {STR_VAR_2} while raining"); +const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[] = _("Lvl up with a {STR_VAR_2} in party"); +const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[] = _("Lvl up with with dark type in party"); +const u8 gText_EVO_TRADE_SPECIFIC_MON[] = _("is traded for a {STR_VAR_2}"); +const u8 gText_EVO_SPECIFIC_MAP[] = _("Lvl up on {STR_VAR_2}"); +const u8 gText_EVO_NONE[] = _("There is no evolution for {STR_VAR_1}.");