Eight new spells: seer's eye, cave-in, haste, stoneskin, gold rain, invisibility, plague, quake

- researched in the library (and unlocked in the campaign), in the spells menu with own icons and a radius under the pointer
- haste speeds up everything a creature does, stoneskin halves damage, invisible creatures are ignored by enemies and towers until they attack (drawn see-through), plague spreads among enemies, quake hurts and stuns enemies only, cave-in turns floor back into earth
- particles for every spell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard ZinkandClaude Opus 5.5 committed 2026-11-04 07:07:52 +01:00
1 parent a54316c86e
commit 7f4d5ca7b4
11 files changed
+532 -12

No files matched your search

+9 -1
View File
@@ -200,6 +200,8 @@ uniform float LightCount;
void main() {
vec4 tex = texture2D(Texture, uv);
if (tex.a < 0.5) discard;
// see-through units (invisibility): every other pixel left out
if (color.a < 0.99 && mod(floor(gl_FragCoord.x) + floor(gl_FragCoord.y), 2.0) < 1.0) discard;
vec3 n = normalize(wnorm);
vec3 light = color.rgb;
for (int i = 0; i < 24; i++) {
@@ -1200,12 +1202,18 @@ impl R3d {
std::mem::swap(&mut u0, &mut u1);
}
let a = amb(e.x, e.y) * if sleeping || e.captive == 1 { 0.6 } else { 1.0 };
// spell looks: stone grey, plague green, see-through when invisible
let alpha = if e.invis > 0.0 { 0.35 } else { 1.0 };
let c = if white {
[255, 255, 255, 255]
} else if e.captive == 3 {
col(vec3(a * 1.2, a * 0.55, a * 0.55), 1.0)
} else if e.shield > 0.0 {
col(vec3(a * 0.85, a * 0.85, a * 0.8), alpha)
} else if e.plague > 0.0 {
col(vec3(a * 0.75, a * 1.15, a * 0.6), alpha)
} else {
col(Vec3::splat(a), 1.0)
col(Vec3::splat(a), alpha)
};
// pulled towards the camera: unchanged on screen (orthographic), but walls behind
// the unit no longer cut into the sprite