Quick answer: GameMaker camera shake feeling repetitive even though you use random? Per-frame random calls produce uncorrelated jitter that the eye reads as “buzzy”. Smooth with Perlin or animated curves.
An explosion shake reads as TV-static jitter instead of a believable shake. Each frame is independently random.
Perlin Noise Smoothing
var t = current_time / 1000;
offset_x = perlin_noise(t * 10) * intensity;
offset_y = perlin_noise((t + 1000) * 10) * intensity;Perlin noise is continuous — adjacent frames have correlated values. Feels like real shake.
Decay Over Time
Multiply intensity by max(0, 1 - elapsed / duration). Shake starts hard, fades out smoothly. More natural than abrupt stop.
Rotational Shake Too
Add small rotation offset for a more cinematic feel. Combined with positional shake, evokes camera-strapped-to-explosion energy.
Trauma-Driven Intensity
Track a 0-1 ‘trauma’ value. Apply trauma^2 as intensity multiplier (sub-linear feels right). Hit events bump trauma; trauma decays.
Verifying
Shakes feel weighty, fade naturally, never read as random noise.
“Per-frame random is buzz. Perlin noise plus trauma decay gives cinematic shake.”
Sample any post-2014 Vlambeer talk on game feel — the trauma model is the industry standard for a reason.