From 83422529ee8d07a7de811dd2237cd8438ab736b7 Mon Sep 17 00:00:00 2001 From: Kamsted <94995445+Kamsted@users.noreply.github.com> Date: Fri, 24 Jul 2026 21:38:32 +0300 Subject: [PATCH 1/2] Palette Swapper Constructor --- Harmony Framework.yyp | 2 +- scripts/palette_swap/palette_swap.gml | 36 --- .../palette_swapper_util.gml | 217 ++++++++++++++++++ .../palette_swapper_util.yy} | 4 +- 4 files changed, 220 insertions(+), 39 deletions(-) delete mode 100644 scripts/palette_swap/palette_swap.gml create mode 100644 scripts/palette_swapper_util/palette_swapper_util.gml rename scripts/{palette_swap/palette_swap.yy => palette_swapper_util/palette_swapper_util.yy} (77%) diff --git a/Harmony Framework.yyp b/Harmony Framework.yyp index 4650f283..e01eb4b8 100644 --- a/Harmony Framework.yyp +++ b/Harmony Framework.yyp @@ -306,7 +306,7 @@ {"id":{"name":"level_util","path":"scripts/level_util/level_util.yy",},}, {"id":{"name":"math_util","path":"scripts/math_util/math_util.yy",},}, {"id":{"name":"music_util","path":"scripts/music_util/music_util.yy",},}, - {"id":{"name":"palette_swap","path":"scripts/palette_swap/palette_swap.yy",},}, + {"id":{"name":"palette_swapper_util","path":"scripts/palette_swapper_util/palette_swapper_util.yy",},}, {"id":{"name":"player_animation_list","path":"scripts/player_animation_list/player_animation_list.yy",},}, {"id":{"name":"player_collision","path":"scripts/player_collision/player_collision.yy",},}, {"id":{"name":"player_control","path":"scripts/player_control/player_control.yy",},}, diff --git a/scripts/palette_swap/palette_swap.gml b/scripts/palette_swap/palette_swap.gml deleted file mode 100644 index e955d55a..00000000 --- a/scripts/palette_swap/palette_swap.gml +++ /dev/null @@ -1,36 +0,0 @@ - function palette_swap(texture, index){ - - //Get the shader - var shader = shd_color_replacer; - - //Get shader uniforms - var sampled_id = shader_get_sampler_index(shader, "u_sPalette"); - var u_coords = shader_get_uniform(shader, "u_vPalcoords"); - var u_size = shader_get_uniform(shader, "u_vSize"); - var u_index = shader_get_uniform(shader, "u_fIndex"); - var u_tolerance = shader_get_uniform(shader, "u_fTolerance"); - - //Get values for shader - var tex = sprite_get_texture(texture, 0); - var coords = texture_get_uvs(tex); - var size_w = texture_get_texel_width(tex); - var size_h = texture_get_texel_height(tex); - var tolerance = 0.004; - - //Get sprite height - var height = sprite_get_height(texture) - - //Set the shader - shader_set(shader); - var ind - ind = index mod (height-1); - //ind = max(ind, 1); - - //Set the shader uniforms - texture_set_stage(sampled_id, tex); - shader_set_uniform_f(u_coords, coords[0], coords[1], coords[2], coords[3]); - shader_set_uniform_f(u_size, size_w, size_h); - shader_set_uniform_f(u_index, ind + 1); - shader_set_uniform_f(u_tolerance, tolerance); - -} \ No newline at end of file diff --git a/scripts/palette_swapper_util/palette_swapper_util.gml b/scripts/palette_swapper_util/palette_swapper_util.gml new file mode 100644 index 00000000..de9377af --- /dev/null +++ b/scripts/palette_swapper_util/palette_swapper_util.gml @@ -0,0 +1,217 @@ +//Basic Palette Swapper with the original functionality + function palette_swap(texture, index){ + //Get the shader + var shader = shd_color_replacer; + + //Get shader uniforms + var sampled_id = shader_get_sampler_index(shader, "u_sPalette"); + var u_coords = shader_get_uniform(shader, "u_vPalcoords"); + var u_size = shader_get_uniform(shader, "u_vSize"); + var u_index = shader_get_uniform(shader, "u_fIndex"); + var u_tolerance = shader_get_uniform(shader, "u_fTolerance"); + + //Get values for shader + var tex = sprite_get_texture(texture, 0); + var coords = texture_get_uvs(tex); + var size_w = texture_get_texel_width(tex); + var size_h = texture_get_texel_height(tex); + var tolerance = 0.004; + + //Get sprite height + var height = sprite_get_height(texture) + + //Set the shader + shader_set(shader); + var ind + ind = index mod (height-1); + //ind = max(ind, 1); + + //Set the shader uniforms + texture_set_stage(sampled_id, tex); + shader_set_uniform_f(u_coords, coords[0], coords[1], coords[2], coords[3]); + shader_set_uniform_f(u_size, size_w, size_h); + shader_set_uniform_f(u_index, ind + 1); + shader_set_uniform_f(u_tolerance, tolerance); + + } + +//Palette Swapper Construct + function palette_swapper_create() constructor + { + palettes = []; + current_palette_id = -1; + } + + function palette_add(swapper, palette_id, palette_sprite, palette_start_index=0, palette_speed=0, palette_loop_index=-1) + { + swapper.palettes[palette_id] = + { + palette_sprite: palette_sprite, + palette_index: palette_start_index, + palette_speed: palette_speed, + palette_loop: palette_loop_index, + + palette_amount: sprite_get_height(palette_sprite)-1, + palette_finished: false, + palette_reset_flag: false, + + palette_initial: { + palette_sprite: palette_sprite, + palette_index: palette_start_index, + palette_speed: palette_speed, + palette_loop: palette_loop_index, + } + } + } + + function palette_reset(swapper) + { + swapper.palette_reset_flag = true; + } + + function palette_swapper_update(swapper) + { + with (swapper.palettes[swapper.current_palette_id]) + { + if ((palette_loop > -1 && palette_index >= palette_amount) || (palette_finished && palette_reset_flag)) + { + palette_index %= palette_amount; + palette_reset_flag = false; + palette_finished = false; + } + else if (palette_loop == -1 && palette_index >= palette_amount) + { + palette_finished = true; + } + + palette_index += palette_speed; + + if (palette_index < palette_loop) + { + palette_index = (palette_index % 1) + palette_loop; + } + + palette_index = clamp(palette_index, 0, palette_amount); + } + } + + function palette_play(swapper, palette_id, reset_palette_start=true) + { + if(!global.process_objects) + exit; + + //If current palette is not matching the palette ID, then update it + if(swapper.current_palette_id != palette_id) + { + //If palette doesn't exist just don't update anything + if(palette_id > array_length(swapper.palettes)-1) + exit; + + //Update the current palette + swapper.current_palette_id = palette_id; + + with (swapper.palettes[swapper.current_palette_id]) { + //Reset palette's properties + if (reset_palette_start) { + palette_index = palette_initial.palette_index; + } + + palette_finished = false; + palette_reset_flag = false; + palette_speed = palette_initial.palette_speed; + palette_loop = palette_initial.palette_loop; + } + } + } + + function palette_swapper_start(swapper) + { + //Get the shader + var shader = shd_color_replacer; + + //Get shader uniforms + var sampled_id = shader_get_sampler_index(shader, "u_sPalette"); + var u_coords = shader_get_uniform(shader, "u_vPalcoords"); + var u_size = shader_get_uniform(shader, "u_vSize"); + var u_index = shader_get_uniform(shader, "u_fIndex"); + var u_tolerance = shader_get_uniform(shader, "u_fTolerance"); + + //Get values for shader + var tex = sprite_get_texture(swapper.palettes[swapper.current_palette_id].palette_sprite, 0); + var coords = texture_get_uvs(tex); + var size_w = texture_get_texel_width(tex); + var size_h = texture_get_texel_height(tex); + var tolerance = 0.004; + + //Get sprite height + var height = sprite_get_height(swapper.palettes[swapper.current_palette_id].palette_sprite) + + //Set the shader + shader_set(shader); + var ind + ind = swapper.palettes[swapper.current_palette_id].palette_index mod (height-1); + //ind = max(ind, 1); + + //Set the shader uniforms + texture_set_stage(sampled_id, tex); + shader_set_uniform_f(u_coords, coords[0], coords[1], coords[2], coords[3]); + shader_set_uniform_f(u_size, size_w, size_h); + shader_set_uniform_f(u_index, ind + 1); + shader_set_uniform_f(u_tolerance, tolerance); + } + + //Palette Swapper Check/Set Functions + function palette_has_finished(swapper) + { + return swapper.palettes[swapper.current_palette_id].palette_finished; + } + + function palette_is_playing(swapper, palette_id) + { + return swapper.current_palette_id == palette_id; + } + + function palette_swapper_get_current_palette(swapper) + { + return swapper.current_palette_id; + } + + function palette_get_sprite(swapper) + { + return swapper.palette_sprite; + } + + function palette_swapper_get_index(swapper) + { + return swapper.palettes[swapper.current_palette_id].palette_index; + } + + function palette_get_speed(swapper) + { + return swapper.palettes[swapper.current_palette_id].palette_speed; + } + + function palette_get_index_count(swapper) + { + return swapper.palettes[swapper.current_palette_id].palette_amount; + } + + function palette_get_loop_index(swapper) + { + return swapper.palettes[swapper.current_palette_id].palette_loop; + } + + function palette_set_speed(swapper, palette_speed) + { + swapper.palettes[swapper.current_palette_id].palette_speed = palette_speed; + } + + function palette_set_loop_index(swapper, palette_loop_index) + { + swapper.palettes[swapper.current_palette_id].palette_loop = palette_loop_index; + } + + function palette_set_index(swapper, palette_index) + { + swapper.palettes[swapper.current_palette_id].palette_index = palette_index; + } \ No newline at end of file diff --git a/scripts/palette_swap/palette_swap.yy b/scripts/palette_swapper_util/palette_swapper_util.yy similarity index 77% rename from scripts/palette_swap/palette_swap.yy rename to scripts/palette_swapper_util/palette_swapper_util.yy index 58307cd4..e2078e70 100644 --- a/scripts/palette_swap/palette_swap.yy +++ b/scripts/palette_swapper_util/palette_swapper_util.yy @@ -1,9 +1,9 @@ { "$GMScript":"v1", - "%Name":"palette_swap", + "%Name":"palette_swapper_util", "isCompatibility":false, "isDnD":false, - "name":"palette_swap", + "name":"palette_swapper_util", "parent":{ "name":"Visuals Scripts", "path":"folders/Scripts/Engine Scripts/Visuals Scripts.yy", From 071ab8bf3b987aaba50930c269f0f6d03cc7e56c Mon Sep 17 00:00:00 2001 From: Kamsted <94995445+Kamsted@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:02:18 +0300 Subject: [PATCH 2/2] Swapped few function names --- scripts/palette_swapper_util/palette_swapper_util.gml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/palette_swapper_util/palette_swapper_util.gml b/scripts/palette_swapper_util/palette_swapper_util.gml index de9377af..013b5c1e 100644 --- a/scripts/palette_swapper_util/palette_swapper_util.gml +++ b/scripts/palette_swapper_util/palette_swapper_util.gml @@ -95,7 +95,7 @@ } } - function palette_play(swapper, palette_id, reset_palette_start=true) + function palette_start(swapper, palette_id, reset_palette_start=true) { if(!global.process_objects) exit; @@ -124,7 +124,7 @@ } } - function palette_swapper_start(swapper) + function palette_swapper_draw(swapper) { //Get the shader var shader = shd_color_replacer;