Skip to content

Instantly share code, notes, and snippets.

@attic-stuff
Last active May 10, 2025 17:22
Show Gist options
  • Select an option

  • Save attic-stuff/85a8b2916727b0eb69894e883b74d55d to your computer and use it in GitHub Desktop.

Select an option

Save attic-stuff/85a8b2916727b0eb69894e883b74d55d to your computer and use it in GitHub Desktop.
remaps a noise texture to be cooler and better
/**
* remaps the values on a noise texture to fall between two new values
* @param {asset.GMSprite} noise_sprite the sprite that needs to be remapped
* @param {real} new_minimum the new minimum noise value
* @param {real} new_maximum the new maximum noise value
*/
function noise_remap(noise_sprite, new_minimum, new_maximum) {
var width = sprite_get_width(noise_sprite);
var height = sprite_get_height(noise_sprite);
var surface = surface_create(width, height);
surface_set_target(surface) {
draw_clear_alpha(#ffffff, 1);
gpu_set_blendenable(false);
draw_sprite(noise_sprite, 0, 0, 0);
gpu_set_blendenable(true);
surface_reset_target();
}
var area = width * height * 4;
var buffer = buffer_create(area, buffer_fixed, 1);
buffer_get_surface(buffer, surface, 0);
buffer_seek(buffer, buffer_seek_start, 0);
var old_minimum = infinity;
var old_maximum = 0;
while (buffer_tell(buffer) < area) {
var pixel_value = (buffer_read(buffer, buffer_u32) & 255) / 255;
if (pixel_value > old_maximum) {
old_maximum = pixel_value;
}
if (pixel_value < old_minimum) {
old_minimum = pixel_value;
}
}
buffer_seek(buffer, buffer_seek_start, 0);
var old_delta = old_maximum - old_minimum;
var buffer_offset = 0;
while (buffer_tell(buffer) < area) {
var pixel_value = (buffer_read(buffer, buffer_u32) & 255) / 255;
var new_value = lerp(new_minimum, new_maximum, (pixel_value - old_minimum) / old_delta) * 255;
var new_color = make_color_rgb(new_value, new_value, new_value) | (255 << 24);
buffer_poke(buffer, buffer_offset, buffer_u32, new_color);
buffer_offset = buffer_offset + 4;
}
buffer_seek(buffer, buffer_seek_start, 0);
buffer_set_surface(buffer, surface, 0);
surface_save(surface, $"{sprite_get_name(noise_sprite)}.png")
surface_free(surface);
buffer_delete(buffer);
return undefined;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment