From 76fdb7c6f66bad7da5c6f78c92aac33b49260c95 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sun, 26 May 2024 20:40:42 -0400 Subject: [PATCH] Add particle effects for pickups, e-switches, and warps. --- assets/images/cirkoban-onesheet.png | Bin 8355 -> 8436 bytes assets/images/cirkoban.ase | Bin 28690 -> 28901 bytes game.scm | 85 ++++++++++++++++++++++------ modules/game/actors.scm | 4 +- 4 files changed, 70 insertions(+), 19 deletions(-) diff --git a/assets/images/cirkoban-onesheet.png b/assets/images/cirkoban-onesheet.png index 6b1a206558deeba852d9cb158454042b59c4fe24..7efd0d183ec5e2468da21965fbd5c775f15f8699 100644 GIT binary patch delta 7788 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 delta 1431 zcmV;I1!(%^;Q^B10Ra+`0e=F0Cb5DLA%ANH000Fb1pvYTAprjZ0000000000YXDyW zc%1E+i*lnn3_vX?U`Qqo5bw@_{r|stC4-;gkx<(0ovEkYtwQR9Y)1!`u`d{a<16M} zAPvKyPhkPXcP-ks?fc+*R_UUsPGEuPr0jb)lMswa#vBVWUR7Fa&jP$Vc7P005PwTN z=HC^MwndhB%q$p6&Sj;gV}XXefcLYcoP;3Sl$T)gAw=6_Vy#709C!sjE#PHU9LcKh zg`~`ER``W+OFx+F*`N`{Jqn;a$`V~KdlByyu^dWO73aLPlf$4i=lPLif~>9&PoVq9 zqBL$7_j$lDDs}8Yf?GYu62aB1D1Vf~yc|j42MrE>(9&8UM06Edg(n?9?62HOmSw|t zRi+J6l15L+y8 zX1uF5B+c=Z6pT2CJm(0V5Ra}GmPKlmR0O>mHG0vj(V5ZA+{t!;fMjE7NJ<5D8SW?$ z99H?15~)!>tQr-ffWDls^2t`y)ZL?vP%btkEtM~6MvZ-18Pj~r89$}*nB-Zi7fAy?NH4RTC1f0zJb9OTDK{gLYT;wG@2lu;Y_P7zSyzrl4ymT@ zYSmZ4VQ|he0d^vN(ls*Xb)_d=c~)LdKX3Vpdy;n+sj*Ac$h;a2$~c5uhm7cuYTs9m zWSvDhnXb{Qkxgo3vws??lZ$nwM{OLk?JF6etg}dsU7|+j)d(fFS7tbe@Nx7GS@)IQ zslZv&UWsI{tQxWJolsU+=ny@3SKGdt5{;d;(>1EHpq=$Sqdn|BfBd00{rvkCQ3NLVrfx-0Z7){&BAAb$niS z0&1(jimEz&w-QI+!nFxe+Qx7(sD|RFom%l#$>OR$KXW1q zvuc9{RJef3o&`#(X=L+!Huik=+=&2X9XyMq9V}cLfM)SnZ2D@csvkYc#PSU;R+lCx3kPHmjo%6edNrKPXHM7N&D@ zLzI-nvgd5Xa;voS)wQ8=TR;2iO$;-Y9bw4wzQWp$EbA*|A*_D#)d7?sUv(nz6`_># z)!m>jPrf>U6O@$*7I4G`9G$O_bh*gO8D|5qNo;+41$iE~DR8}@v(7jc-*?!*&mzCR z`t{Yq_ca==%gTfF5tNi|&>rMiZb#*Ob-z%#ZBFr(KoGIKuducw z%lZmg2y4#p)s1}B-U43{YIMF526a8dS2xP)7A#;c<>-Bdr0Z2)Px005Cd4ghlCm5} la4dvCXZ`x>Uz7eXzWNWKrFXbq7ytnJ@dW_-0JGXB3rQn^${GLw diff --git a/game.scm b/game.scm index d284eff..86ae3c5 100644 --- a/game.scm +++ b/game.scm @@ -275,6 +275,67 @@ (show-effect! (make-fade-out+in-effect 2.0 k)))) (load-level! 0)))) +(define (emit-pickup-particles x y) + (run-script + (lambda () + (do ((i 0 (1+ i))) + ((= i 24)) + (let ((angle (* (random) 2.0 pi)) + (r (/ tile-width 2.0))) + (particle-pool-add! particles 140 2 + (+ (* x tile-width) + (/ tile-width 2.0) + (* (cos angle) r)) + (+ (* y tile-height) + (/ tile-height 2.0) + (* (sin angle) r)) + 0.0 0.0)) + (wait 1))))) + +(define (emit-electric-switch-particles x y) + (run-script + (lambda () + (do ((i 0 (1+ i))) + ((= i 4)) + (let ((angle (+ (* (random) pi) pi)) + (speed (+ (random) 3.0))) + (particle-pool-add! particles 141 6 + (+ (* x tile-width) + (/ tile-width 2.0)) + (+ (* y tile-height) 3.0) + (* (cos angle) speed) + (* (sin angle) speed))) + (wait 1))))) + +(define (emit-warp-particles x y) + (run-script + (lambda () + (do ((i 0 (1+ i))) + ((= i 4)) + (particle-pool-add! particles 142 6 + (+ (* x tile-width) + (/ tile-width 2.0) + (- (* (random) 6.0) 3.0)) + (+ (* y tile-height) tile-height) + 0.0 + (- (* (random) -2.0) 3.0)) + (wait 2))))) + +(define (emit-explosion-particles x y) + (run-script + (lambda () + (do ((i 0 (1+ i))) + ((= i 16)) + (do ((j 0 (1+ j))) + ((= j 2)) + (let ((dx (- (* (random) tile-width 3.0) tile-width)) + (dy (- (* (random) tile-height 3.0) tile-height))) + (particle-pool-add! particles 51 8 + (+ (* x tile-width) dx) + (+ (* y tile-height) dy) + 0.0 0.0))) + (wait 1))))) + ;; Update loop (define (move-player dir) (define level-complete? #f) @@ -301,7 +362,8 @@ (('player-death x y) (play-sound-effect audio:die)) (('pickup x y) - (play-sound-effect audio:pickup)) + (play-sound-effect audio:pickup) + (emit-pickup-particles x y)) (('emit x y) (play-sound-effect audio:emit)) (('emitter-on x y) @@ -316,28 +378,17 @@ ((or ('floor-switch-on x y) ('floor-switch-off x y)) (play-sound-effect audio:floor-switch)) (('electric-switch-on x y) - (play-sound-effect audio:electric-switch-on)) + (play-sound-effect audio:electric-switch-on) + (emit-electric-switch-particles x y)) (('electric-switch-off x y) (play-sound-effect audio:electric-switch-off)) (('receive-electron x y) - (play-sound-effect audio:warp 0.25)) + (play-sound-effect audio:warp 0.25) + (emit-warp-particles x y)) (('explosion x y) (play-sound-effect audio:explosion) (show-effect! (make-screen-shake-effect 0.2)) - (run-script - (lambda () - (do ((i 0 (1+ i))) - ((= i 16)) - (do ((j 0 (1+ j))) - ((= j 2)) - (let ((angle (* (random) 2.0 pi)) - (dx (- (* (random) tile-width 3.0) tile-width)) - (dy (- (* (random) tile-height 3.0) tile-height))) - (particle-pool-add! particles 51 8 - (+ (* x tile-width) dx) - (+ (* y tile-height) dy) - 0.0 0.0))) - (wait 1))))) + (emit-explosion-particles x y)) (_ (values))) (lp rest)))) (update-objects!) diff --git a/modules/game/actors.scm b/modules/game/actors.scm index 2289a6e..c0b69e1 100644 --- a/modules/game/actors.scm +++ b/modules/game/actors.scm @@ -300,15 +300,15 @@ ($ timer t) (when (= t 0) ($ on? #f) + ($ grid-info 'append-event `(electric-switch-off ,x ,y)) (for-each (lambda (obj) - ($ grid-info 'append-event `(electic-switch-off ,x ,y)) ($ obj 'deactivate grid-info)) (non-player-occupants grid-info target-x target-y)))) (when (>= (electron-head-count neighbor-grid) 1) ($ on? #t) ($ timer 2) + ($ grid-info 'append-event `(electric-switch-on ,x ,y)) (for-each (lambda (obj) - ($ grid-info 'append-event `(electic-switch-on ,x ,y)) ($ obj 'activate grid-info)) (non-player-occupants grid-info target-x target-y))))) (('alive?) #t)