From 3172c51266a1be9d95a24abe045e157532112bfd Mon Sep 17 00:00:00 2001 From: James Diefenbach Date: Sat, 24 Aug 2024 21:31:07 +1000 Subject: [PATCH] updated egg hatch bg, added candy tracker, icon anims for new shiny or new form unlock --- public/images/ui/egg_summary_bg.aseprite | Bin 2185 -> 0 bytes public/images/ui/egg_summary_bg.png | Bin 1797 -> 2160 bytes public/images/ui/legacy/egg_summary_bg.png | Bin 0 -> 2160 bytes public/images/ui/legacy/icon_egg_move.png | Bin 0 -> 237 bytes src/phases/egg-summary-phase.ts | 1 + src/ui/egg-summary-ui-handler.ts | 20 ++++++++++++---- src/ui/pokemon-hatch-info-container.ts | 26 +++++++++++++++++++++ 7 files changed, 42 insertions(+), 5 deletions(-) delete mode 100644 public/images/ui/egg_summary_bg.aseprite create mode 100644 public/images/ui/legacy/egg_summary_bg.png create mode 100644 public/images/ui/legacy/icon_egg_move.png diff --git a/public/images/ui/egg_summary_bg.aseprite b/public/images/ui/egg_summary_bg.aseprite deleted file mode 100644 index 9befa1bfe64b5b853c9364f760cd302ee9e260c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 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 literal 1797 zcmeH|eKga19LIm#u$hO{5hBd3WV?B|xI*M1T@PsBY-wDNn`vod+*P-8?&*(v&i()X^L;p<_c`y^=iz+6zXYRw zb>PNu004CS{d__J0OYAUKZa?jR?%D8M%4y7AL{E3Jbb=&8UQp{{ytt|IO;sV{hYDC zp@!hS0mz~&_~{PM%CPbRTB!6g+;rxf3{AKxYSbqj4?!2!Q|z|HSy6jp1hEE^JLY+( zoT*baBT}y-QBmc)vn)qrqGDCPLQX%?@!)8e_g4Z3xXyV zKXBsgk%oqb?zRc6*QdivD*er~m*j0!#Ye@Boy5eor|)>5uSJyw8?q$@7itE*&mfvaNzR z`)NF~9YfSX%P}1_yq!HV|y@ z9&T=K7EMprXy59Pmbv_ zL6gfy zWDZLOBvvJiLRlqf-8xFefyC z&S1>oO_T0`A-Rq?9L}m@bv53ITX<&q+V55N9v-dR9Fv_$!RijZvka z)j52hJ&{B#Tx@13Fk0*ox~ajZ{z|*o6&NV{@3|P)bhB_c(Nc}1uNn~ALP{2eLOHp&?4kpk&SRJs2_W_%q|ZKwNt}tF%Vq`YXi>TD zp05~SkD_f>J~I3RP?V{1U4X*wRe&K0baO<0(Ta+`hW!cU0PuApMS$8D&cB1Sg;TJJ z#g@Jl33xgFlIz^(gum$c7JrH#3l!?jYbh;5 zZPlh@m0Ij4u_31#B9Rr>Pilcroe5wx>VTv}SB>J{G&p*HY%y!k0WJtnYI zSSQ}$>4zrem|XpVU<>kQFqsBfAv(GHpk@-?)`KL??&qT8}a+X zgiuzz^VU?0p(d={(Tq$Cv@FOx{NzDNrONgVrh}uJ8_R-ctUc_!yu7{KPOXRsuLnL$7YKn0IQ%r3!+cZrAZ9A0)R-zP0SW{yV3(EE!?`+RAd-t_+{oGP=b#ZlJd*uMGw+m3z2H7H?3iM=#aKx4ySq z<|boL+7i{0bE`dp;m?=%D3ygno=<7z?WDHk93mpBcte&^oL;IRtmY+-Nn7>A?tY^y z29uPO)H+tduDQw7_chQ=2NjhxlTmK!FqE(<(|fgyy?e{{>BVw3sjjgxL;ih^?$r+B zXkT+a-rrwCd z=$u|JG^r4)qpzs|m6oYqvGW?s<_?Q;`*9-QTV6@TGstZf;v;MB(xFeu6%`B+}SUtLEo5jW%>rL}GO4fTpIi$6zotcmxdJG%%bn7(GW(nW%@=geC*w zZrqWPku4mKM7K?febv0ZTrKAlE5+Fq9|9q}O-N}lnbKl6o5o0--}QpS^s3l99FuOK zf$h#Ea5?V@0Z(333y4!`)dog8@ide*&euH}o)eUr+??*na3BG#VT9-q1j#tCr-jD4ZU!Ia?RJ0%!E#l1e$U=nWu2WK!2ywI;OOL;y zy)7yqaDND!&E=lM($nX2FW^w;H>z1Bnpgjpnis<2>_5YW@;uRx4)rA0y>^x1bKjJE zg6O56>O-6R?QRG-pyF&unvK8)>_KY#FJpEov-*6`i0U0G^;9k9O?L2W3D00q`HTxV+Vy>*S3> zCx0M!O z&Ws4Zo=kYmcuP*5?s#?{>ii*Sx?ZnTLIIdA(7Ec-_#C%-4<5LcT_2ChtiMRKg7L}- zTn~5q%wQ7fdgR;_@DLI_hzxNwI0!=iEpZY~tSZ$y7aq1fYbTrlMLY7b)ElHSVeynZ zjm5)Y7J=I|SDGc?RdGrhaq<(G(HJVV3`>VY>{XwUQY2}KOn<|qiIES4Tjccqd>@tS zvFJhXhL8Q%hr@+!yJ^*vykwQK?`^lH8bv_Ws^XxM>QJBEs zS2~n4#+ZL0s`yL@#Qu0~R%)ta@xyDKSyAJ*=j$F{75kci>{nV`u7gTJeW=Z6!}I5L zGcPRMHQsj!DV9uTdMpB0MMXu4T_P>TF7^*}Z=Vhfb=PMOAeAfvjqPs;Y)i&qy2R-X z>S|n{_T32;U~6MzZnG59=$;y(GO1dib)E&1Z33ue?;V!LP^h4 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/icon_egg_move.png b/public/images/ui/legacy/icon_egg_move.png new file mode 100644 index 0000000000000000000000000000000000000000..6af186e9b0c21a3952b80fc00ed2a7494cee18eb GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>S?=lL7@`rJ zoZ`TI?bx;dj!y39C`Mb@JW4}PIASEAB=}Dhx;GQI>6#Fao1Y;h(-l_ z{uy=uKXT8ww=+j5!Z2dtmKk5_zpt>_(6YIgamKysCrqoHCS)4C?kNeCI2XH*IjrGK zoZ;TyM#0ELe`hgg&%-7goKnmp6n9BK|2Dl*R873>VYzbL`2#jAimdKI;Vst04~^DCIA2c literal 0 HcmV?d00001 diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index 6a1ec3a630c..4b5491abeb8 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -29,6 +29,7 @@ export class EggSummaryPhase extends Phase { }); } else { + this.eggHatchData[i].setDex(); this.eggHatchData[i].updatePokemon().then(() => { console.log("updating next pokemon"); if (i < this.eggHatchData.length) { diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index c034e6d3a86..6ff3cfb644a 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -10,6 +10,7 @@ import { EggTier } from "#app/enums/egg-type.js"; import PokemonHatchInfoContainer from "./pokemon-hatch-info-container"; import { EggHatchData } from "#app/phases/egg-hatch-phase.js"; import { EggSummaryPhase } from "#app/phases/egg-summary-phase.js"; +import { DexAttr } from "#app/system/game-data.js"; export default class EggSummaryUiHandler extends MessageUiHandler { private pokemonListContainer: Phaser.GameObjects.Container; @@ -51,6 +52,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.eggHatchContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); this.eggHatchContainer.setVisible(false); ui.add(this.eggHatchContainer); + // this.scene.fieldUI.add(this.eggHatchContainer); // const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); @@ -62,6 +64,8 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.eggHatchBg = this.scene.add.image(0, 0, "egg_summary_bg"); this.eggHatchBg.setOrigin(0, 0); this.eggHatchContainer.add(this.eggHatchBg); + // this.eggHatchContainer.add(addWindow(this.scene, 107, 1, 212, 178)); + this.pokemonIconsContainer = this.scene.add.container(115, 9); this.pokemonIconSpritesContainer = this.scene.add.container(115, 9); @@ -159,7 +163,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { // set tint for passive bg switch (getEggTierForSpecies(displayPokemon.species)) { case EggTier.COMMON: - bg.setTint(0xabddab); + bg.setVisible(false); break; case EggTier.GREAT: bg.setTint(0xabafff); @@ -181,8 +185,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.pokemonIconSpritesContainer.add(icon); this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); - // add shiny - const shiny = this.scene.add.image(x + 12, y + 2, "shiny_star_small"); + const shiny = this.scene.add.image(x + 12, y + 4, "shiny_star_small"); shiny.setScale(0.5); shiny.setVisible(displayPokemon.shiny); shiny.setTint(getVariantTint(displayPokemon.variant)); @@ -196,10 +199,17 @@ export default class EggSummaryUiHandler extends MessageUiHandler { const pb = this.scene.add.image(x + 12, y + 14, "icon_owned"); pb.setOrigin(0, 0); pb.setScale(0.5); + + // add animation for new unlocks (new catch or new shiny or new form) const dexEntry = value.prevDexEntry; const caughtAttr = dexEntry.caughtAttr; - pb.setVisible(!caughtAttr); - if (!caughtAttr) { + const newShiny = BigInt(1 << (displayPokemon.shiny ? 1 : 0)); + const newVariant = BigInt(1 << (displayPokemon.variant + 4)); + const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); + const newForm = (BigInt(1 << displayPokemon.formIndex) * DexAttr.DEFAULT_FORM & caughtAttr) === BigInt(0); + + pb.setVisible(!caughtAttr || newForm); + if (!caughtAttr || newShinyOrVariant || newForm) { this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); } this.pokemonIconsContainer.add(pb); diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 5784b38d519..14025513868 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -11,6 +11,8 @@ import { allMoves } from "#app/data/move.js"; import { Species } from "#app/enums/species.js"; import { getEggTierForSpecies } from "#app/data/egg.js"; import { EggHatchData } from "#app/phases/egg-hatch-phase.js"; +import { starterColors } from "../battle-scene"; +import { argbFromRgba } from "@material/material-color-utilities"; export default class PokemonHatchInfoContainer extends PokemonInfoContainer { private currentPokemonSprite: Phaser.GameObjects.Sprite; @@ -22,6 +24,9 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { private pokemonEggMoveLabels: Phaser.GameObjects.Text[]; private pokemonHatchedIcon : Phaser.GameObjects.Sprite; private pokemonListContainer: Phaser.GameObjects.Container; + private pokemonCandyIcon: Phaser.GameObjects.Sprite; + private pokemonCandyOverlayIcon: Phaser.GameObjects.Sprite; + private pokemonCandyCountText: Phaser.GameObjects.Text; constructor(scene: BattleScene, listContainer : Phaser.GameObjects.Container, x: number = 115, y: number = 9,) { super(scene, x, y); @@ -50,6 +55,20 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { this.pokemonHatchedIcon.setScale(0.8); this.pokemonListContainer.add(this.pokemonHatchedIcon); + this.pokemonCandyIcon = this.scene.add.sprite(4.5, 40, "candy"); + this.pokemonCandyIcon.setScale(0.5); + this.pokemonCandyIcon.setOrigin(0, 0); + this.pokemonListContainer.add(this.pokemonCandyIcon); + + this.pokemonCandyOverlayIcon = this.scene.add.sprite(4.5, 40, "candy_overlay"); + this.pokemonCandyOverlayIcon.setScale(0.5); + this.pokemonCandyOverlayIcon.setOrigin(0, 0); + this.pokemonListContainer.add(this.pokemonCandyOverlayIcon); + + this.pokemonCandyCountText = addTextObject(this.scene, 14, 40, "x0", TextStyle.WINDOW_ALT, { fontSize: "56px" }); + this.pokemonCandyCountText.setOrigin(0, 0); + this.pokemonListContainer.add(this.pokemonCandyCountText); + this.pokemonEggMoveContainers = []; this.pokemonEggMoveBgs = []; this.pokemonEggMoveLabels = []; @@ -99,7 +118,14 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { const shiny = displayPokemon.shiny; const variant = displayPokemon.variant; super.show(displayPokemon, false, 1, hatchInfo.getDex(), hatchInfo.prevStarterEntry, true); + const colorScheme = starterColors[species.speciesId]; + this.pokemonCandyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); + this.pokemonCandyIcon.setVisible(true); + this.pokemonCandyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.pokemonCandyOverlayIcon.setVisible(true); + this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); + this.pokemonCandyCountText.setVisible(true); species.loadAssets(this.scene, female, formIndex, shiny, variant, true).then(() => { // if (assetLoadCancelled.value) { // return;