From 691b32c6e4aac554d4a6d8b862a5e02594feb8d8 Mon Sep 17 00:00:00 2001 From: Emil Kosz Date: Wed, 2 Oct 2024 16:49:54 +0200 Subject: [PATCH] Particle system --- TODO.md | 4 ++ game.js | 14 ++++++ index.html | 2 + particles.js | 66 ++++++++++++++++++++++++++++ res/gravedigger/bomb.png | Bin 2501 -> 2447 bytes res/gravedigger/coffin_occupied.xcf | Bin 21264 -> 23835 bytes res/gravedigger/explosion.png | Bin 2731 -> 2543 bytes res/gravedigger/vampyre.xcf | Bin 9876 -> 10094 bytes style.css | 7 ++- 9 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..4cd187f --- /dev/null +++ b/TODO.md @@ -0,0 +1,4 @@ +* Saving the game data to a file, so high scores, unlocked levels + etc. can be shared across updates. Or, someone unfair can cheat. +* Randomly rotate, tint, etc., cells to add variety +* Refractor the code diff --git a/game.js b/game.js index 93335f5..c3f85e7 100644 --- a/game.js +++ b/game.js @@ -32,6 +32,7 @@ function restart_game() { mines_placed = false; field_height = 8 + Math.floor(current_level / 2); minefield_initialize(); + update_particle_canvas_size(); // The amount of mines, meanwhile, increases by one I // think. Just a quick thought. This makes it so the amount of // mines is around four times less than the amount of cells. @@ -191,7 +192,20 @@ function reveal_mines(cell) { cell.innerText = "" + n_mines; cell.classList.add("n" + n_mines); } + + reveal_cell_cosmetic(cell); +} + +function reveal_cell_cosmetic(cell) { sound_reveal.play(); + + let r = cell.getBoundingClientRect(); + let w = r.right - r.left; + let h = r.bottom - r.top; + let x = cell.offsetLeft - cell.scrollLeft; + let y = cell.offsetTop - cell.scrollTop; + + spawn_particle(x, y, (Math.random() * 2 - 1) / 16, -0.3, 0, 1, dummy_image, w, h); } // Shows the game won/over popup. diff --git a/index.html b/index.html index 394a8aa..f4e8156 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@ + + diff --git a/particles.js b/particles.js index e69de29..ecfb104 100644 --- a/particles.js +++ b/particles.js @@ -0,0 +1,66 @@ +const particle_canvas = $("#particle-canvas"); +const particle_ctx = particle_canvas.getContext("2d"); + +let last_time; +let particles = new Set; + +let dummy_image = new Image; +dummy_image.src = "res/gravedigger/unknown-1.png"; + +update_particle_canvas_size(); +window.requestAnimationFrame(particle_loop); + +function update_particle_canvas_size() { + particle_canvas.width = document.body.clientWidth; + // Whatever's bigger, we use. + particle_canvas.height = Math.max(document.body.clientHeight, window.innerHeight); +} + +function spawn_particle(x, y, vel_x, vel_y, rot, vel_rot, img, w, h) { + particles.add({ + x: x, + y: y, + vel_x: vel_x, + vel_y: vel_y, + rot: rot, + vel_rot: vel_rot, + img: img, + w: w, + h: h + }); +} + +function update_particles(delta_time) { + particle_ctx.clearRect(0, 0, particle_canvas.width, particle_canvas.height); + for (particle of particles) { + // Delete off-screen particles, more or less. For now, it's + // designed so that particles go down with the force of + // gravity, so we just check if the particle goes below the + // screen. + if (particle.y > particle_canvas.height) { + particles.delete(particle); + continue; + } + + // Update the position and rotation of the particle. + particle.x += particle.vel_x * delta_time; + particle.y += particle.vel_y * delta_time; + particle.rot += particle.vel_rot * delta_time; + // Update the velocity to take into account "gravity" and "air + // resistance". + particle.vel_y += 0.001 * delta_time; + // Render particle. + particle_ctx.save(); + // particle_ctx.translate(-particle.width / 2, -particle.height / 2); + // particle_ctx.rotate(particle.rot * Math.PI / 180); + particle_ctx.drawImage(particle.img, particle.x, particle.y, particle.w, particle.h) + particle_ctx.restore(); + } +} + +function particle_loop(timestamp) { + // Calculate the times needed for updating. + update_particles(timestamp - last_time); + last_time = timestamp; + window.requestAnimationFrame(particle_loop); +} diff --git a/res/gravedigger/bomb.png b/res/gravedigger/bomb.png index fb42d08ce6219c7d65b587e19ca9546a906415aa..137cfe41d254cf63ada81002405eccb3b47d69fb 100644 GIT binary patch delta 1173 zcmX>q+%LT0EX(9uEOP8TvN9&TT0xWlvuM;Oc)B=-L>z9N?wj}6il;%@Az(VAZFi;X z#%PoKX1`n9WGne+Uq89$a^ousi=%X!oN|DQJ9pRMra_a%!nllBEoRj5>48Tlf( zhvg}gV|9Hk+m(v??*;Rfbt(k!oo|q;x5+V+X6xZxG3DGU@0C3-813i3o3}kuz2%Z+ z)1;s-mJi>L_b-22^)^SsaRP_d@_1E-!XFj&QRNMai)P(gz>(m>wBqRJ&t-cB4JDP8 zubgNJTJ}q>VaMZT{N7mcdY!=TO3uRcya_>IMG)eJ%G;Z9{9-oIs-} zRYspLdl^gr^E_&~;AiBOA9{cJ$IpU4COtW0DDW_-pD9u+v*-GBryiXG{cnO6oQ2tZ z?b{?6W_Wjf`t79^8D{BF(%`83&oYt8A;m$}l8?n8tcPRk_rI^~S+=arxNXPr;z(E< z<79ynhW9KCO%@FYj@2_8Fs(`D_L|--*>K(7qBwv5!!UIQ@1zix6O|0=2N>_o{^r3@ zS8yw*p>E1*Nrodr4c{E}I<%7tRT~!HWC-|mvBhd0^M;-5HllxS-eXdbNbp{p%5p(yRZUyer&%!ln5-h@#Wcrrbt%K8z6N*O zoK>M_+#=hwcRDbvTKw3XAw=cy%}G65^ER{`bDnyDL8FEF27|$T#($eURVUch@-r-z zJIgwkt&!oq*{lPO1@Sx^_#9X)S*CcM&f++*PV?gLxnB$yq?ygjz4G|rm{MX*yXn`NxAz4Yk~5YzYhzea$n^l&_s~^1I2wUtenN+PqSfL(=R$Y9xHv zKCpEZZ#dAqRmUN;nBn^E$0<(R)mGl=n*5!STVuh}b7G7gp?T*|F(3GDoN?hThaz`s zntM{iEWYhCm^Uq8kC@54#)#qnf4#OV(##6Glj~az(ioO+?pC~giMd2@>$8bQvA=QTYMYf@=Z$O8k!}&L_gKlOjI+~{| zH!S=0W>@|u=|chscxz458;|HP{J1W_SoH6l(qw7(M@$K`jul;NIMOZ`P@rT`>Zltt z>xqa%Bu`*%NA$cnh8Geod;vU@9_U8w*{XVdn_buSE6lq~-oE}774hTnHXgkxj0s{% zFVa-Ll~3EUl(EDxMwj`GMgNJy7wfpc89P`6e0+D?bI+$4PfwfsuXuOMc;fk@2aF|G oRy=>Ty*|!e=_mhXqkr-%%C8%VoeA5`z`(%Z>FVdQ&MBb@0J5bRqyPW_ delta 1226 zcmeAdJ}SK7EDIN7lDE4HLkFv@$K+EiitHSs=HZDSk4^r>qEX-J>Eaj?akzCxblwsR zkv8s=MHSkaIjXWt4_EJ5&WU9iZdV3)f1%Kq>D+n?3w-Bw`H zee2IUr*4n^zImq`vTodZz@)#q+iw2-bI;pCtK*)iZAsa?zv=$joj;SNMK;{tc;nsr z8CmDPbsHwkirlQ4V&t*OS7FA#p9vWZn{TbUmB)}_;>&VJO`-VoE^}tK9k*iY8_JjN zKlLj#)K*eVyur04XwSVH4xLjH?Qh<@Z}3iMLs+TUmRDQOF^bnbbo=z$MI-YxUj#ox zUW4L+B^!6d$RsHEv9p}0V-K)q@JX1;w085~9lso{96Xyi3|`oIF&xWEcF^C}{&(-@ z1z!y{7!ELBV1FS}C%yHV73-HBDsvfG1?y{B3U`-2OV)WOzlE#%0&)gvEvVR~Uy8vsvN>L*9$5 z0aEoBcC9WxaDmI~o0g`4#N!z*Z29@3SH8#nekCOOMpe-7kb}l?L0$u{_ynt?@Bd!2 zWEZG!@^qM%bnnTct&9nYZx)1=-aXr3$EOKjjC>yf5&8~xKv%=fXw@U+fek?U$iKypO)(HNo@Xh#v>l5G78%zb7 zsn$MDA7;wjDd&1{D&5=eT8)40m#qepTO3~&KDl$mii@F=yWsomqiv@QCLFlf#&eF z&0ssjJVSD3vEnzAKaFDN*tO*!B@`udu6cOvL$>aN2yLcMjNP;MI|Uc@%1&83eP)TK z?3QbH?`~&KZ#*Ork?OP8XX?U|b6QM2v$-Xh7rP&xw(^SDIS)PuZ>a_KAK9`eNmsLe zS;As5mC>vB#skYVmEB$jZ{~jXYT$c)vC?QMLm-QYuES&Nl7ra{nS%dbtBX4tMAX7pQ|H9_hocpe8TOtQ}Z6VDV&yXBOUZ+a@PklBsdrEkaYMqKk^cD_8L~14=bFr9Cv3symKy@ zvpbDtCEJ$=3pL-KExY)ky2L8R|0X-b#0~+MHSQdJIt*1mu1xC?@R<=~X0)5(*W%;* z_N+hqyi|reqj9I)rIQCItDifeGQr#Xu*a>{ZOfA#=1WZ2vSsO{JcbsVx=&M&^WV>N uQkP|Z;ma^hsx-f8&GZldMI)I1v9}jL)4Rx?RL;P_z~JfX=d#Wzp$P!ufHyM$ diff --git a/res/gravedigger/coffin_occupied.xcf b/res/gravedigger/coffin_occupied.xcf index 5d8a188046d80fd185567029928499dc88a224bf..680ebd9b1922ebb55c92d2c5983f7f51b24e11bb 100644 GIT binary patch delta 2545 zcmbQRjB)lZ#tBZ0DjS`}7$ut+z(Ar3OfhJrLujL{%~^~*jI!+zE|_#+U|;}Y7BG*2 zY4PMfNiim--J4f49TSs<8U&UDsRCiBO38VX`y|B~w{2b~d4f-o!@sm7Co?Y_z+ zfdQmwCIbV5B8Y7-Idj(JK8@|V5+G>=)`YqXECMnbgh4tP7#K90K@O?coDG&_U|^_c zn#I7f%8KFtDyILet4taGuKLfw`k!f)5d-6@|NmJTnEo@aGGJg_#rU6{f$=}%Dt(ZO z|C|hr|NpPjXZW}3KR3faEUdr(SFO^6NP|>@nLHqsdLaGv|GB^h=z%Q(83r==->Uzd z3?PjLAdQ?L)rO?8kTipA1)IYKG6#)Sk4+Fm?C+}o|G};R`5($8(Lw+IufnFI9-APU zVjSR*1Z(C1hn^uQg#WXHybX#(#{X;}rZEHKDvtmESD7$yt*WnQjAW>1n8CmzV9CHH zV9vlUV9vlHV8*~HU<$^(0)`Cy0{RTh0xS&d0(uP00-Ovi0@@5L0^AJD0-6jg0=!_F zNr0b$NkEeUH!Z-xB%r~-B!EiSqY8iw;A3DC&|+W`;ALPE&?bV0sV9rBXJ8UQ)<}$n z#5#-^b@kXR; z2F6uvg^a5}G0RxU;>cL|f0Z%A-&KW$Y>s~mSFJK)__wN%-I1}75u64KIlwAF38k=} z)A4^H%PL)v3Qk9sLZ(&PASSOPQz7FjEfAC6k+G0zl{y3Cs{e(|jw}r9U@27w##M}k z%#NH4AnO=cser9xapY!T1{}!J!FNi{wkNBpu|y z{wLRZ9&ptChs6$v3yK|ea9U(?YnET>p(3xc?h7@ccJo;Qen1#)AKK8HE39Gl=}xVi5bU&cODc zg@Nb4Dg*m}9tPI`DsY`OnW#4^jwXKxhH50+#>yY1aRI zPy=}x*#3hI0$HHO!1AA$f#ttCm}dPC;X`OX1{N?MgRaLVfmfUrY>^rRgoaoMvzRnG z6X9agG=hQ{WHE$h{m;$7@?V32?LQX-%YRJs7$vJ1z(Ar1OfhK0Ludwu$%)3olY1FIGS*K{G?rpwnhg?Q zWnf@n+Prx)(=jo|DzLcZG?=*Ly3Ok(Pw-8yGa=_EYF(l&f-0;XrkF^B0?0eAfAfUte z;?<`)FYX?iRMRy*wDnd||Mf(xq+Pk8lcsKcRZ>-Q$Kuw*3cvd@@9*e;&R1yq_HW|f zbOA+{zcLSW-MkEi8j8P39`NRv%BiqtTYcYx?j#mpzCBD8O#<1vt_L|aK3w`E>6G0v z!MMqQum13Njx;7F2B8>06s8ox+oo8?qD{ylxdrb|gNpO1}5>p@ys!Umf$IkkB)nmM(wiM6R1{ zEm3~A?1A*jjjJsKW$RbRBq>Q8D|r1vW96M6%DZ=zINzu&u-5X_*pXX2TRHmABUN41 zjS=DMDr-`X_cEr0m`+n#>2myYq0Pb;CZ&s>oa&q(&pG%OFl_8-X;^G~UVKjOl7dP9 z`vi|VG8I%``j!*6^uVuG+Y5JZ+B;|O{>bfo%)z%U0}^(z9h5lLDsxD*-v0s9`me8A zPP$F!Xa2>qaLuEeC${9Q-!=K8r0l}9b*wSQ-?TkFsx?yfUD>!LX49lA3Ie*OQ#e=F zgddmj{wUP-ll$MjJ;kxN=bc~Vz!QGi=iU?L&&&#r5t;?7Z&$^zEGUvaj^DgBb$6}{v0SXH1EGD+?f5SgXpxRVvVwaDY$yDE(8&PeFGumC|w&k%oDDm9g zx**}6FI&kouiCT146{V0ZjXB?yjFH&umFRSgU`EY>#x^1z1{j|`$}A$bb11>xq733 zdVK_QbcuJ8sSkRBV)D z-N-TVy1@j_+%@l^5MO6Cp1-|xvYWOa3_^?1$Zow*}jtiR7f zu$-%(kz-*<#4W>Z&zL1yI2DUj-iu_k*hg)C^`(A!YQPE2{w*6!D(3|SB+XD2XqYZ<1*77CI*=N(?;-jK`g5l8@ oe)S>+fuo=NpEZ4)_w&E#;WweHR`vX0U|?YIboFyt=akR{0Bz4kZ2$lO delta 1459 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