From 9ee5fec41d2b84a24d30eae2e89a847c10b2edbd Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Sun, 12 May 2024 22:38:28 -0500 Subject: [PATCH] Added Passives to the Summary Screen (#703) * Added passives to the Summary Screen Adds the ability to view passives on the Summary screen. Just like in the starter select, you can only see the passive once it is unlocked. There is a small pixel button prompt which helps indicate you are able to press the button to view the passive. This buttons shows an A when gamepad support is enabled and a Z otherwise. * Update summary-ui-handler.ts * Updated for Legacy Support --- public/images/ui/legacy/summary_profile.png | Bin 1507 -> 1562 bytes .../ui/legacy/summary_profile_ability.png | Bin 0 -> 295 bytes .../ui/legacy/summary_profile_passive.png | Bin 0 -> 310 bytes .../ui/legacy/summary_profile_prompt_a.png | Bin 0 -> 182 bytes .../ui/legacy/summary_profile_prompt_z.png | Bin 0 -> 191 bytes public/images/ui/summary_profile.png | Bin 1820 -> 1673 bytes public/images/ui/summary_profile_ability.png | Bin 0 -> 295 bytes public/images/ui/summary_profile_passive.png | Bin 0 -> 310 bytes public/images/ui/summary_profile_prompt_a.png | Bin 0 -> 182 bytes public/images/ui/summary_profile_prompt_z.png | Bin 0 -> 191 bytes src/loading-scene.ts | 4 + src/ui/summary-ui-handler.ts | 127 +++++++++++++----- 12 files changed, 100 insertions(+), 31 deletions(-) create mode 100644 public/images/ui/legacy/summary_profile_ability.png create mode 100644 public/images/ui/legacy/summary_profile_passive.png create mode 100644 public/images/ui/legacy/summary_profile_prompt_a.png create mode 100644 public/images/ui/legacy/summary_profile_prompt_z.png create mode 100644 public/images/ui/summary_profile_ability.png create mode 100644 public/images/ui/summary_profile_passive.png create mode 100644 public/images/ui/summary_profile_prompt_a.png create mode 100644 public/images/ui/summary_profile_prompt_z.png diff --git a/public/images/ui/legacy/summary_profile.png b/public/images/ui/legacy/summary_profile.png index 25fc3ca70d01422ba4d2fa11b7764ff4b20b7cdb..1d184023ca8f77c937883b6ca5453140635bee2c 100644 GIT binary patch literal 1562 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 diff --git a/public/images/ui/legacy/summary_profile_ability.png b/public/images/ui/legacy/summary_profile_ability.png new file mode 100644 index 0000000000000000000000000000000000000000..84c41556ab0241d9a27f3f214b8dac684e344cf5 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf!3HGzm*=JdDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpx_=)7sn6_|D!>Ue1{cyyqDWfN$#&c)o1(Z zh-~%i6p_VOSk?Hh>bNExH&Hy=aDJbB&y-6GZ+WEmY1;_CTAIJ)`1=X=8!OkYKArYH z_i#{;?p&#gGv6^WJ??5C8IMRkDAt_M?YC)e53#2<|97SNZWut^@Ct zuE}j-QoX!WdzjtWY(73KSK@2=eJLZygE86WhxrFti?wrv(>|^Tl(U3l6e&e;v`^&DK-IqAC`tW|a&6YraFnGH9xvX literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_profile_passive.png b/public/images/ui/legacy/summary_profile_passive.png new file mode 100644 index 0000000000000000000000000000000000000000..8d70a54b2a4361ae2dc99a0cf6e817535de69be1 GIT binary patch literal 310 zcmV-60m=S}P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Lw{4K~y+Tt&*`0 z!ypVqX_XIU%-B!qn2}HHn2mDChc3jFsLDx}<9Eh^knq{}tPx|(!E^^#rXF)$SfsoU z@C8k;b*;_Nd)tsQ@*SM4_kYRlS2^#G_WJ!g%; zGlOizm8plB^x4bz^Z{>iKXXyfS@%~A$@O~tz*OpUhQFT>zKyceJ~lZ{LjV8(07*qo IM6N<$g4>FQ;s5{u literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_profile_prompt_a.png b/public/images/ui/legacy/summary_profile_prompt_a.png new file mode 100644 index 0000000000000000000000000000000000000000..146f1a862e5d5e38b1cee9699c1df7df31fa6d06 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL2pkN#}JL+(mqEn1_ch5wbQGe>|M-vUwg5=l{B)Lg7=H%9oCrYkM-7 YYLY^H%T7L=2Q-$!)78&qol`;+06^$Fwg3PC literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_profile_prompt_z.png b/public/images/ui/legacy/summary_profile_prompt_z.png new file mode 100644 index 0000000000000000000000000000000000000000..ed842718914c4719d2628329b61ce9ce546d0fa2 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!4OXu#}JL++%f22WQ%mvv4FO#tLsKgIw6 literal 0 HcmV?d00001 diff --git a/public/images/ui/summary_profile.png b/public/images/ui/summary_profile.png index 5fff26d5a9cfacb8228c739c90efe33e1c8d0e7a..38bb5e84dfda3cb13df2bc1cddd8a532e5a4bad2 100644 GIT binary patch delta 1303 zcmV+y1?c*m4v7trFn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pL z9!W$&RCr$P-Jx$ANfgI%`%q|M*}+rLfsjc43ydnO;G~!(Ah58ou&}@&Ac3KUDJ-#6 zVsP-_{Rg3DIX!3J=4G<8-i`f>?YZwq8hK|jevah*S&CU10uU~hq?+x}__RX8kW@|%b zrWY5h6W93(?~ktUdMfw4larHbIC+^G5<9b`2 zeI10VEYCVtpHAiMo`!)zwnN}U^HJ!?>>wg@!ZkJ=RBgJkO*K&1IwlCIj zZR`8kwFp(YhF!n=m$O(bR*%*hqI5mZ{n*8|T%Ap&b$89a`-gH3$K%Pv{r$^JGU%P3 zPpTu7rVbWwGO#^$uzvjHdLP)97eB`WusMPS2oNklfMB7wzdn4Z$G`vl{bDVyr_ztL z?LA}!3xB&!4{(8JMmJ7JB>rk3XxU=f}q8>00Xl5ITYd2oNm1x!k2< zmwU8BL9nnFEKDWcqY*6Zgoh{93xvR zJp^4s6T6mQ8uoeqKI6CB(OcR%EFewYr0H_c_Y(QX;=HM@iR(=@_YuJY1h^CglW+t# zf9iihe0==AT6%JNdRiUfE!iLaZhAj(IO<@f&d$cw5#ADi^t%j=!Q$@`?}l|Ml;K6N z=v2Ewrz*>{V9}{|gHBbRI#_h7-JnyIX%(!=gi!4QovK{J*=+Vu9peqrsmj*)T|vAJ z?rFCdY zQQpVtv^sk7>GE>$?dqzUJ+igYXtX+x&++xPI_Yzp>YJwZ_*~~T`qXUNpMKtP&n9ke zzBj%fI2?7bQfFu5>Zsjfu~(zOuKS$Ljjf%WoD8NH7mamXuAV*DSq*j9VzBu=j*h3uozPR6{^Y}TN zreL^O&uetq@8WCq8HB1FFM?&AYPnqY9&X*-t=pH*{lt!JZkJ*<=JR={dU35OByBaD z_M5b>&-)C!{6jgO1*=b|N{5ScJ4x-b%P-$te_VHMb&Pd{^u)Hg57YL#UN5Z~JB`WJ zG)?|ow;;{LR*iJd9kpT4d?Ki245Gu`j? zPJOS3+4rp*bgFU2u@jv>{Yw%YM5Z zdUmCNGS$K2O$N574%UyK+(ZN0()a^n0GlC`p#&?FU<79xfUO%0{sX@!Y9ZW;KAHdk N002ovPDHLkV1nFB!K?rP delta 1469 zcmV;u1w#6X4V(^;Fn9}rvTH!vcf8;U`ZtZ1x8U6P$_0H zSSiF(Nnl}Nfk8kGLj!a0NTd>jL(#!wg`s9SP|bEcJF~y+r(W-UKT_4~?Ck7X-pB9G z%E^wb!nbeVUaQudnO)9iTg!_)x5;FZY!A0d^>^#O-rXhJ{eLl2#}n@R7_3$g_Wk?g z=+MW3?oLuGmdoYqX0vHD$Rf{+pWO+6Ih#e>-T!s{!?DBdoY*lo?bk>5_mB4G&Df^X zi`ox0^j9=kO)6C=RT1{po?1U1k2{UiN2}F?nVG%39LI+M(n`TlEZZQ8W^mwk&o zw=BzQx9d7i-+$cSKOXuJut!_L>Qbr9$|rJNyIH)_H0cwzbseWqT&2Qr6v66Rsm#hJ zva1mO{K#)NOINbGK20iC(|z>;m1>wy%(_=9U)7w+ziF{vuUl0z|1O`~Zjt9Uo6k#k z46EAvIOn2L4cBP7T<#RA^?Ge)R+`6z?f$a++40*_7~I)ViV5G?$5sY}Hs zbF^cT{C^E%;CK3Xe!ewlyS@E6SF5|M>??wWgK$+VbgV%NaVdy{7)pRr2o??|yj`Di zjPouo1<~5a^K&yR&x8C+yC$LWt5$ev*fex~Rs25IpMUY&tY{{z9Pi$Lh*p!><(}*3 z*7?h^al`!`%Oxbi0tA?20RjXI5Fl890KozT2$TE+7Lzar6@SIwy!do;Q(Ad;cGhSR z|Dkp6LE7Pi>{9J+oqPCq_z>=@{!PZYoXvXsaPO4W>cLJ=-yZrfu!AC4&(A-$R$N_8 zZL_I=Ht}pew?&>8%kIQ>Cv@2U^z^i~918d8`h@*c?Wu8^yp}$25B(0`4;+{1Uuo*{ zJmOSE2;1wH$A9B-tNvlTU$y+uh2!?oYQ^6j8H!S{npUb%Y#aY_ZIS1eWm#<{soQsI zy=%|1tQ4x)e*4B%Dh$I`u)0(#GmFl5%q)5-SXZIyDobj;-|p|@80J<~s^KYu)wNQY zl>_9PS1MnuGK80cW}$ZGKX6=5VvX0=7mWu9KcVZEyKLtNayFlL8h<<TB%aPZBt{_^$V9{C$zsDR*ELa5vxvBW2UNE)7Mh-27U)Sneg-SI{CuaMpR8Cc;@#je4r@udUa)I#s$ErZ=#)Ch8 z?2ca5vDS^5ny2~8sc~bdRKqn|E|;(S7-+p-o7t~V`_!_NYERjanMpx_=)7sn6_|D!>Ue1{cyyqDWfN$#&c)o1(Z zh-~%i6p_VOSk?Hh>bNExH&Hy=aDJbB&y-6GZ+WEmY1;_CTAIJ)`1=X=8!OkYKArYH z_i#{;?p&#gGv6^WJ??5C8IMRkDAt_M?YC)e53#2<|97SNZWut^@Ct zuE}j-QoX!WdzjtWY(73KSK@2=eJLZygE86WhxrFti?wrv(>|^Tl(U3l6e&e;v`^&DK-IqAC`tW|a&6YraFnGH9xvX literal 0 HcmV?d00001 diff --git a/public/images/ui/summary_profile_passive.png b/public/images/ui/summary_profile_passive.png new file mode 100644 index 0000000000000000000000000000000000000000..8d70a54b2a4361ae2dc99a0cf6e817535de69be1 GIT binary patch literal 310 zcmV-60m=S}P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Lw{4K~y+Tt&*`0 z!ypVqX_XIU%-B!qn2}HHn2mDChc3jFsLDx}<9Eh^knq{}tPx|(!E^^#rXF)$SfsoU z@C8k;b*;_Nd)tsQ@*SM4_kYRlS2^#G_WJ!g%; zGlOizm8plB^x4bz^Z{>iKXXyfS@%~A$@O~tz*OpUhQFT>zKyceJ~lZ{LjV8(07*qo IM6N<$g4>FQ;s5{u literal 0 HcmV?d00001 diff --git a/public/images/ui/summary_profile_prompt_a.png b/public/images/ui/summary_profile_prompt_a.png new file mode 100644 index 0000000000000000000000000000000000000000..146f1a862e5d5e38b1cee9699c1df7df31fa6d06 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL2pkN#}JL+(mqEn1_ch5wbQGe>|M-vUwg5=l{B)Lg7=H%9oCrYkM-7 YYLY^H%T7L=2Q-$!)78&qol`;+06^$Fwg3PC literal 0 HcmV?d00001 diff --git a/public/images/ui/summary_profile_prompt_z.png b/public/images/ui/summary_profile_prompt_z.png new file mode 100644 index 0000000000000000000000000000000000000000..ed842718914c4719d2628329b61ce9ce546d0fa2 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!4OXu#}JL++%f22WQ%mvv4FO#tLsKgIw6 literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index a7d68ef98..a49fed480 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -100,6 +100,10 @@ export class LoadingScene extends SceneBase { this.loadImage('summary_bg', 'ui'); this.loadImage('summary_overlay_shiny', 'ui'); this.loadImage('summary_profile', 'ui'); + this.loadImage('summary_profile_prompt_z', 'ui') // The pixel Z button prompt + this.loadImage('summary_profile_prompt_a', 'ui'); // The pixel A button prompt + this.loadImage('summary_profile_ability', 'ui'); // Pixel text 'ABILITY' + this.loadImage('summary_profile_passive', 'ui'); // Pixel text 'PASSIVE' this.loadImage('summary_status', 'ui'); this.loadImage('summary_stats', 'ui'); this.loadImage('summary_stats_overlay_exp', 'ui'); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index e6c90887b..35f3e34ad 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -20,6 +20,7 @@ import { loggedInUser } from "../account"; import { PlayerGender } from "../system/game-data"; import { Variant, getVariantTint } from "#app/data/variant"; import {Button} from "../enums/buttons"; +import { Ability } from "../data/ability.js"; enum Page { PROFILE, @@ -32,6 +33,18 @@ export enum SummaryUiMode { LEARN_MOVE } +/** Holds all objects related to an ability for each iteration */ +interface abilityContainer { + /** An image displaying the summary label */ + labelImage: Phaser.GameObjects.Image, + /** The ability object */ + ability: Ability, + /** The text object displaying the name of the ability */ + nameText: Phaser.GameObjects.Text, + /** The text object displaying the description of the ability */ + descriptionText: Phaser.GameObjects.Text, +} + export default class SummaryUiHandler extends UiHandler { private summaryUiMode: SummaryUiMode; @@ -54,6 +67,12 @@ export default class SummaryUiHandler extends UiHandler { private championRibbon: Phaser.GameObjects.Image; private statusContainer: Phaser.GameObjects.Container; private status: Phaser.GameObjects.Image; + /** The pixel button prompt indicating a passive is unlocked */ + private abilityPrompt: Phaser.GameObjects.Image; + /** Object holding everything needed to display an ability */ + private abilityContainer: abilityContainer; + /** Object holding everything needed to display a passive */ + private passiveContainer: abilityContainer; private summaryPageContainer: Phaser.GameObjects.Container; private movesContainer: Phaser.GameObjects.Container; private moveDescriptionText: Phaser.GameObjects.Text; @@ -441,6 +460,17 @@ export default class SummaryUiHandler extends UiHandler { this.showMoveSelect(); success = true; } + // if we're on the PROFILE page and this pokemon has a passive unlocked.. + else if (this.cursor === Page.PROFILE && this.pokemon.hasPassive()) { + // Since abilities are displayed by default, all we need to do is toggle visibility on all elements to show passives + this.abilityContainer.nameText.setVisible(!this.abilityContainer.descriptionText.visible); + this.abilityContainer.descriptionText.setVisible(!this.abilityContainer.descriptionText.visible); + this.abilityContainer.labelImage.setVisible(!this.abilityContainer.labelImage.visible); + + this.passiveContainer.nameText.setVisible(!this.passiveContainer.descriptionText.visible); + this.passiveContainer.descriptionText.setVisible(!this.passiveContainer.descriptionText.visible); + this.passiveContainer.labelImage.setVisible(!this.passiveContainer.labelImage.visible); + } } else if (button === Button.CANCEL) { if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) this.hideMoveSelect(); @@ -686,40 +716,75 @@ export default class SummaryUiHandler extends UiHandler { profileContainer.add(luckText); } - const ability = this.pokemon.getAbility(true); + this.abilityContainer = { + labelImage: this.scene.add.image(0, 0, 'summary_profile_ability'), + ability: this.pokemon.getAbility(true), + nameText: null, + descriptionText: null}; + + const allAbilityInfo = [this.abilityContainer]; // Creates an array to iterate through + // Only add to the array and set up displaying a passive if it's unlocked + if (this.pokemon.hasPassive()) { + this.passiveContainer = { + labelImage: this.scene.add.image(0, 0, 'summary_profile_passive'), + ability: this.pokemon.getPassiveAbility(), + nameText: null, + descriptionText: null}; + allAbilityInfo.push(this.passiveContainer); - const abilityNameText = addTextObject(this.scene, 7, 66, ability.name, TextStyle.SUMMARY_ALT); - abilityNameText.setOrigin(0, 1); - profileContainer.add(abilityNameText); - - const abilityDescriptionText = addTextObject(this.scene, 7, 69, ability.description, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 } }); - abilityDescriptionText.setOrigin(0, 0); - profileContainer.add(abilityDescriptionText); - - const abilityDescriptionTextMaskRect = this.scene.make.graphics({}); - abilityDescriptionTextMaskRect.setScale(6); - abilityDescriptionTextMaskRect.fillStyle(0xFFFFFF); - abilityDescriptionTextMaskRect.beginPath(); - abilityDescriptionTextMaskRect.fillRect(110, 90.5, 206, 31); - - const abilityDescriptionTextMask = abilityDescriptionTextMaskRect.createGeometryMask(); - - abilityDescriptionText.setMask(abilityDescriptionTextMask); - - const abilityDescriptionLineCount = Math.floor(abilityDescriptionText.displayHeight / 14.83); - - if (abilityDescriptionLineCount > 2) { - abilityDescriptionText.setY(69); - this.descriptionScrollTween = this.scene.tweens.add({ - targets: abilityDescriptionText, - delay: Utils.fixedInt(2000), - loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), - y: `-=${14.83 * (abilityDescriptionLineCount - 2)}` - }); + // Sets up the pixel button prompt image + this.abilityPrompt = this.scene.add.image(0, 0, !this.scene.gamepadSupport ? 'summary_profile_prompt_z' : 'summary_profile_prompt_a'); + this.abilityPrompt.setPosition(8, 43); + this.abilityPrompt.setVisible(true); + this.abilityPrompt.setOrigin(0, 0); + profileContainer.add(this.abilityPrompt); } + allAbilityInfo.forEach(abilityInfo => { + abilityInfo.labelImage.setPosition(17, 43); + abilityInfo.labelImage.setVisible(true); + abilityInfo.labelImage.setOrigin(0, 0); + profileContainer.add(abilityInfo.labelImage); + + abilityInfo.nameText = addTextObject(this.scene, 7, 66, abilityInfo.ability.name, TextStyle.SUMMARY_ALT); + abilityInfo.nameText.setOrigin(0, 1); + profileContainer.add(abilityInfo.nameText); + + abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability.description, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 } }); + abilityInfo.descriptionText.setOrigin(0, 0); + profileContainer.add(abilityInfo.descriptionText); + + // Sets up the mask that hides the description text to give an illusion of scrolling + const descriptionTextMaskRect = this.scene.make.graphics({}); + descriptionTextMaskRect.setScale(6); + descriptionTextMaskRect.fillStyle(0xFFFFFF); + descriptionTextMaskRect.beginPath(); + descriptionTextMaskRect.fillRect(110, 90.5, 206, 31); + + const abilityDescriptionTextMask = descriptionTextMaskRect.createGeometryMask(); + + abilityInfo.descriptionText.setMask(abilityDescriptionTextMask); + + const abilityDescriptionLineCount = Math.floor(abilityInfo.descriptionText.displayHeight / 14.83); + + // Animates the description text moving upwards + if (abilityDescriptionLineCount > 2) { + abilityInfo.descriptionText.setY(69); + this.descriptionScrollTween = this.scene.tweens.add({ + targets: abilityInfo.descriptionText, + delay: Utils.fixedInt(2000), + loop: -1, + hold: Utils.fixedInt(2000), + duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), + y: `-=${14.83 * (abilityDescriptionLineCount - 2)}` + }); + } + }); + // Turn off visibility of passive info by default + this.passiveContainer?.labelImage.setVisible(false); + this.passiveContainer?.nameText.setVisible(false); + this.passiveContainer?.descriptionText.setVisible(false); + let memoString = `${getBBCodeFrag(Utils.toReadableString(Nature[this.pokemon.getNature()]), TextStyle.SUMMARY_RED)}${getBBCodeFrag(' nature,', TextStyle.WINDOW_ALT)}\n${getBBCodeFrag(`${this.pokemon.metBiome === -1 ? 'apparently ' : ''}met at Lv`, TextStyle.WINDOW_ALT)}${getBBCodeFrag(this.pokemon.metLevel.toString(), TextStyle.SUMMARY_RED)}${getBBCodeFrag(',', TextStyle.WINDOW_ALT)}\n${getBBCodeFrag(getBiomeName(this.pokemon.metBiome), TextStyle.SUMMARY_RED)}${getBBCodeFrag('.', TextStyle.WINDOW_ALT)}`; const memoText = addBBCodeTextObject(this.scene, 7, 113, memoString, TextStyle.WINDOW_ALT);