From ec694593a64f6a3d810354dfa920dbb3268aa54b Mon Sep 17 00:00:00 2001 From: DevelopingTom Date: Wed, 31 Dec 2025 01:10:00 +0100 Subject: [PATCH] New Year's Eve FX (#2745) ## Description: Happy new year! - Atom and hydro: ![test_firework](https://github.com/user-attachments/assets/892004fe-372d-4718-9b44-a311049dab20) - Mirv: ![firework_mirv](https://github.com/user-attachments/assets/10ee4b64-7123-47e2-92d5-7d8fb6cbc992) ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: IngloriousTom --- resources/sprites/nyeve/conquest.png | Bin 0 -> 1243 bytes resources/sprites/nyeve/firework.png | Bin 0 -> 7742 bytes resources/sprites/nyeve/firework_cyan.png | Bin 0 -> 959 bytes resources/sprites/nyeve/firework_red.png | Bin 0 -> 937 bytes resources/sprites/nyeve/firework_yellow.png | Bin 0 -> 976 bytes src/client/graphics/AnimatedSpriteLoader.ts | 50 ++++++++++++++++++++ src/client/graphics/fx/ConquestFx.ts | 2 +- src/client/graphics/fx/Fx.ts | 5 ++ src/client/graphics/fx/NukeFx.ts | 13 ++--- 9 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 resources/sprites/nyeve/conquest.png create mode 100644 resources/sprites/nyeve/firework.png create mode 100644 resources/sprites/nyeve/firework_cyan.png create mode 100644 resources/sprites/nyeve/firework_red.png create mode 100644 resources/sprites/nyeve/firework_yellow.png diff --git a/resources/sprites/nyeve/conquest.png b/resources/sprites/nyeve/conquest.png new file mode 100644 index 0000000000000000000000000000000000000000..666e55ea2bffa6b590d902afa3eb9f1802f42089 GIT binary patch literal 1243 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 literal 0 HcmV?d00001 diff --git a/resources/sprites/nyeve/firework_cyan.png b/resources/sprites/nyeve/firework_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..c519902061e7bbdc1939d478f9a4bf90e4f804ec GIT binary patch literal 959 zcmV;w13>(VP)Px&c}YY;RCt{2oV$_RFc5|T2Ump)apd%Ba0BY$0>!T38c-KXh0 zR?Dv3AN8*k5s^n(LJM6Hkv*=MYqCc}B4dD;<5zh5)L>-;v98=(1m`p$k7WtpL;S3v zmm5QjG1@G_oZKxq!>qqT=kr}{KqYshRrCZk8_4iqZyAkMdn=#nqCD`%IUEN;f zCM7lck~uueRo0HXW?87D4G&}RGD3i-#FlW*GDu5vu;n8y-&jKm{|%$|>zui4A=Nm_ zRcxPX>MzB^kU~W>27t=+d^oj)qlO?NqV@h-!BNL^k=tD>Bw30zBfYL<4zw)|_F-nw zJj%6Ly994T@}~FZ^{dY}>Zo2 zOYd89ea=YNnCsGvajc(n`(JYbP-5mK*KVQww+1$^VYB3damx?RbT1>-)8o3|QL7I& zXgo59scd4cW=qmJsxfaJ%b537x|cE3`i2DHDXG0mpVA4Y%#xZ>i~l2JH2db#kSb(sE3%at>u9fQ^yX{8OXIy`@w`)0&O_ULw_Rxq`Ig z$&Il^wl-%DTPy@}MwlDx(sri|X{z1a`HqG}*$7~Y)DXsw)zBH!(%-3Zv3wW-Xkz>vNK_0m9(Q2@@(uHt;m0-kM>f2JD$(P(lI#aKhUF0000000000 h000000002o_y@IN3W{mA+28;G002ovPDHLkV1j{Jy3GIp literal 0 HcmV?d00001 diff --git a/resources/sprites/nyeve/firework_red.png b/resources/sprites/nyeve/firework_red.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b327756c14cae35e4af3b7098ebb85e8d4da0e GIT binary patch literal 937 zcmV;a16KTrP)Px&V@X6oRCt{2n>})zKoEt&w{Vrup>m|unQ~u%J1E%L+2+0gIS1GTRc(L|)eg+y zW@vtf>6r%fzDTuV=M9K?^SVJr0RR910000000000004l05D}T^)=g!h3&5o?Tfl8+ zqib}&R-Dx+zgSP;ESUX)KmM4=mai|RiEde%=n~Ppg)X=_b2}l`O{Hln{&;-nm*$|Q zy)+KB9a)wxS56^kH7q2K1xAaw-}(7xR5w-e^X<2~@VBq>m|ptOE+^=A|8G*vNXplj z(oX^!hAE99jmfpOje2#CY+A7=aNoMW%Lg9uZ zBI2b<@SJyQYm_%J-w)BrVH~-1KP4m6cswa(nJ{R!9S!A)XIMiSp*ROVw!fhLbfZzK znC#+0*%kDCEUNPpdlLj{xkdGO(!k?Msk;3`0^t1&2aoJ-4*fi$6F}Rorht)tZ!(q% z;OJOCwYd8A4T3MEEP8HH`6SqZCPpD?-tJ>lQP@Sfu6Ud)nQr&db@xlSAZ^xw-E_Q= zu=b=MBKjV3d@-{CkGv?Y4ePLEeIzC&jzrJ*Ckt6h99{{dp&4|1WXdQa5~KJo$X#%-c3Yx%hL^4;DMraC zeWO?#cQP+M!$SFz1K%v>K2z89j6u>(m3D@og;Ge}9OoLq7ynoOi7_NfcCkhweIMqt zlhilY7K2DpGECCOOl_@gB0RaR?ZQiQ3)0-PTOX`J3cx0E+(2t)kxDbAAuj4>?lln6 zd+0gBIKU~ferjW(nae11>7u*<;G!T|000000000000000z=`+^gs7t>E!jIR00000 LNkvXXu0mjf!CAiE literal 0 HcmV?d00001 diff --git a/resources/sprites/nyeve/firework_yellow.png b/resources/sprites/nyeve/firework_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..9f59e11e7c32cbfe42d34fef1c8d30b6806de4bf GIT binary patch literal 976 zcmV;>126oEP)Px&ib+I4RCt{2+|QMpFc8Oa*g8^3PPwLrG~gb5@HsVX1MXrkPF-elzz7M%UyU@F z{eCX-W4(;v#6{+X1mKYrCFb?e%su83SM>H@%_h}y>s4F7!jvbMvcMM=ULg4iNe0CS-Ab4J#S&lFo1<+I%C_g?`>P3#BuIt+G0{x#$ zb5pqq7}kw-f5UNUobTXR4i-FhUH`SHDH>HJBKM0l59uzzT}a9EOZ=bZsT&4P zJBGG9l;&2ndx{0pyVhOWN3KrW-)}5{b9VRuPO9XE!v$dXuQzq5-Vyp8=uG#eef-hR zw?N%3`?acDLTnuR|F`J;fYWdt+UvPe&Sz!r^YhCEU*DPa9ihKHt)|~Otm|IdaqNG_ zmU0f;?sVUAYff{f?871mt%4uG2?W!X&o9XthQV~`YdX>o;HsM@Rerr7IyE||ABa#nV?{=%KLHLHn>`M&ceKeztQSsZP(D}cgxs{O@3Pe&N5RrxDLhaKV0Aeye( zcZXYlZ`=3BHx7GlCbrH9OpSBx_%&~MQf^*SzI%k}>^)d)0~|y=fbzZI-am^B>$&aj z^$MLa1dC1&H@@Z^=9vPYe}`}X6zY5cFYPxzu3`bqG$?@3FaW2vY1Emj z)lZo|M%|f4?cq4ab-k{z;7Z{w+x6;}Tl^Jl3(oQG03L-{YOoQE00N~JI;;vs> = { originX: 10, originY: 16, }, + [FxType.ConquestChampagne]: { + url: conquestChampagne, + frameWidth: 28, + frameCount: 8, + frameDuration: 90, + looping: false, + originX: 14, + originY: 23, + }, + [FxType.FireworkAll]: { + url: nukeEve, + frameWidth: 60, + frameCount: 15, + frameDuration: 90, + looping: false, + originX: 30, + originY: 30, + }, + [FxType.FireworkRed]: { + url: nukeEveRed, + frameWidth: 30, + frameCount: 9, + frameDuration: 100, + looping: false, + originX: 15, + originY: 20, + }, + [FxType.FireworkCyan]: { + url: nukeEveCyan, + frameWidth: 30, + frameCount: 13, + frameDuration: 100, + looping: false, + originX: 15, + originY: 20, + }, + [FxType.FireworkYellow]: { + url: nukeEveYellow, + frameWidth: 30, + frameCount: 15, + frameDuration: 100, + looping: false, + originX: 15, + originY: 20, + }, }; export class AnimatedSpriteLoader { diff --git a/src/client/graphics/fx/ConquestFx.ts b/src/client/graphics/fx/ConquestFx.ts index 7fa8d0690..a55ca77c7 100644 --- a/src/client/graphics/fx/ConquestFx.ts +++ b/src/client/graphics/fx/ConquestFx.ts @@ -25,7 +25,7 @@ export function conquestFxFactory( animatedSpriteLoader, x, y, - FxType.Conquest, + FxType.ConquestChampagne, 2500, ); const fadeAnimation = new FadeFx(swordAnimation, 0.1, 0.6); diff --git a/src/client/graphics/fx/Fx.ts b/src/client/graphics/fx/Fx.ts index d4b206614..37fd4108f 100644 --- a/src/client/graphics/fx/Fx.ts +++ b/src/client/graphics/fx/Fx.ts @@ -16,4 +16,9 @@ export enum FxType { UnderConstruction = "UnderConstruction", Dust = "Dust", Conquest = "Conquest", + FireworkAll = "FireworkAll", + FireworkRed = "FireworkRed", + FireworkYellow = "FireworkYellow", + FireworkCyan = "FireworkCyan", + ConquestChampagne = "ConquestChampagne", } diff --git a/src/client/graphics/fx/NukeFx.ts b/src/client/graphics/fx/NukeFx.ts index 479d68e18..63d657011 100644 --- a/src/client/graphics/fx/NukeFx.ts +++ b/src/client/graphics/fx/NukeFx.ts @@ -55,7 +55,7 @@ function addSpriteInCircle( game.isLand(game.ref(spawnX, spawnY)) ) { const sprite = new FadeFx( - new SpriteFx(animatedSpriteLoader, spawnX, spawnY, type, 6000), + new SpriteFx(animatedSpriteLoader, spawnX, spawnY, type), 0.1, 0.8, ); @@ -79,19 +79,16 @@ export function nukeFxFactory( ): Fx[] { const nukeFx: Fx[] = []; // Explosion animation - nukeFx.push(new SpriteFx(animatedSpriteLoader, x, y, FxType.Nuke)); - // Shockwave animation - nukeFx.push(new ShockwaveFx(x, y, 1500, radius * 1.5)); + nukeFx.push(new SpriteFx(animatedSpriteLoader, x, y, FxType.FireworkAll)); // Ruins and desolation sprites const debrisPlan: Array<{ type: FxType; radiusFactor: number; density: number; }> = [ - { type: FxType.MiniFire, radiusFactor: 1.0, density: 1 / 25 }, - { type: FxType.MiniSmoke, radiusFactor: 1.0, density: 1 / 28 }, - { type: FxType.MiniBigSmoke, radiusFactor: 0.9, density: 1 / 70 }, - { type: FxType.MiniSmokeAndFire, radiusFactor: 0.9, density: 1 / 70 }, + { type: FxType.FireworkRed, radiusFactor: 1.0, density: 1 / 28 }, + { type: FxType.FireworkCyan, radiusFactor: 0.9, density: 1 / 70 }, + { type: FxType.FireworkYellow, radiusFactor: 0.9, density: 1 / 70 }, ]; for (const { type, radiusFactor, density } of debrisPlan) {