Extensive work on VFX for the guild, assets for the world, and portrait variance. Work on quests. Extra work on User Flow completion and file saving.

This commit is contained in:
2025-09-04 07:46:55 -04:00
parent 149ee993dc
commit 48e335f56a
134 changed files with 2232 additions and 288 deletions

View File

@@ -0,0 +1,86 @@
shader_type canvas_item;
uniform float offset = 0;
uniform bool allow_out_of_bounds = true;
uniform float outline_thickness: hint_range(0.0, 16.0, 1.0) = 1.0;
uniform vec4 outline_color: source_color = vec4(1.0);
bool is_inside_usquare(vec2 x) {
return x == clamp(x, vec2(0.0), vec2(1.0));
}
vec4 blend(vec4 bottom, vec4 top) {
float alpha = top.a + bottom.a * (1.0 - top.a);
if (alpha < 0.0001) return vec4(0.0);
vec3 color = mix(bottom.rgb * bottom.a, top.rgb, top.a) / alpha;
return vec4(color, alpha);
}
void vertex() {
float i;
float r = modf(TIME * .5 + offset, i);
float output_min = 1.0;
float output_max = 1.05;
r = output_min + r * (output_max - output_min);
VERTEX = vec2(980, 540) + VERTEX * r - vec2(980.0 * r,540.0 * r);
float ot = modf(outline_thickness, i);
if (allow_out_of_bounds) VERTEX += (UV * 2.0 - 1.0) * ot;
}
void fragment() {
float i;
float ot = outline_thickness * (1.0 - modf(TIME * .5 + offset, i));
if (ot > 0.0 && outline_color.a > 0.0) {
vec2 uv = UV;
vec4 texture_color = texture(TEXTURE, UV);
if (allow_out_of_bounds) {
vec2 texture_pixel_size = vec2(1.0) / (vec2(1.0) / TEXTURE_PIXEL_SIZE + vec2(ot * 2.0));
uv = (uv - texture_pixel_size * ot) * TEXTURE_PIXEL_SIZE / texture_pixel_size;
if (is_inside_usquare(uv)) {
texture_color = texture(TEXTURE, uv);
} else {
texture_color = vec4(0.0);
}
}
float alpha = 0.0;
for (float y = 1.0; y <= ot; y++) {
for (float x = 0.0; x <= y; x++) {
if (length(vec2(x, y - 0.5)) > ot) break;
float look_at_alpha;
vec2 look_at_uv[8] = {
uv + vec2(x, y) * TEXTURE_PIXEL_SIZE,
uv + vec2(-x, y) * TEXTURE_PIXEL_SIZE,
uv + vec2(x, -y) * TEXTURE_PIXEL_SIZE,
uv + vec2(-x, -y) * TEXTURE_PIXEL_SIZE,
uv + vec2(y, x) * TEXTURE_PIXEL_SIZE,
uv + vec2(-y, x) * TEXTURE_PIXEL_SIZE,
uv + vec2(y, -x) * TEXTURE_PIXEL_SIZE,
uv + vec2(-y, -x) * TEXTURE_PIXEL_SIZE
};
for (int i = 0; i < 8; i++) {
if (is_inside_usquare(look_at_uv[i])) {
look_at_alpha = texture(TEXTURE, look_at_uv[i]).a;
if (look_at_alpha > alpha) alpha = look_at_alpha;
if (1.0 - alpha < 0.0001) break;
}
}
if (1.0 - alpha < 0.0001) break;
}
if (1.0 - alpha < 0.0001) break;
}
vec4 oc = outline_color;
float i;
float r = modf(TIME * .5 + offset, i);
oc.a = outline_color.a * (1.0-r);
COLOR = vec4(oc.rgb, (alpha * oc.a) - texture_color.a);
}
}