ClementSparrow / Pattern-Script

Open Source HTML5 Game Engine based on PuzzleScript
19 stars 2 forks source link

Add global visual effects #27

Open ClementSparrow opened 3 years ago

ClementSparrow commented 3 years ago

Things like screen shakes (even if I hate them), particle systems, color filters, blur (even focal blur, focusing on a specific collision layer) or other shader-based effects could be predefined in the engine in the same way we have a system to generate sound effects. And like for sound effects, these visual effects could be triggered by specific in-game events or UI events (notably, undo/restart, see #23).

ClementSparrow commented 3 years ago

Idea: try using the random sound generation functions and buttons to generate visual effects by controlling various rendering parameters like rotation, translation, scaling, colors, blur, etc. Using directly the sound functions will probably not work but maybe we can take something from them and factorize the code...

david-pfx commented 1 year ago

Good idea. Also smooth moves and rotations (perhaps with various kinds of easing); 'pop' effects on creating or destroying an object; particles or shake for mouse clicks; screen shake, pop or colour on game start/end/etc.

Actually the list of events is much the same as SOUNDS, it's the list of animations that is needed.

ClementSparrow commented 1 year ago

Yes, these are good ideas too. Some of them can be achieved by defining the sprites manually but procgen would help a lot.

The definition of events seems indeed separated from the definition of effects that can be triggered (visual or sound effects).

My idea was to reuse the wave-generation system from the sound effects because the value of a wave can be used to control in time any parameter of a visual transformation, so we could have a rich and complex system at low development cost, but this needs some experimentation. We could even have sound effects that share some parameters with some visual effects (for instance, the time of an echo in a sound matching the period of a screen shake).

david-pfx commented 1 year ago

Here's another idea.

LEGEND
quad = one + one:90 + one:180 + one:270   ( new object from 4 rotations )
ClementSparrow commented 1 year ago

@david-pfx, I think the LEGEND section is not the place to declare new objects, and there is already a more convenient syntax to do what you want in the OBJECTS section:

one:directions
(colors)
(sprite for upward direction)
rot:up:>

Then you can declare quad = one:directions in the LEGEND section if you need it.

Also, please create new issues rather than attach new ideas to an unrelated issue ;-)