Campaign of 30 missions: six against the rival masters Mossgrim and Lady Nightwell, islands, mana springs, sealed caves with chained creatures
- missions interleaved into one story (EN/DE), new epilogue, map sizes grow to 176x176 - islands in water or lava with treasure and/or a mana spring; rivers at least four tiles wide - sealed caves with treasure and a chained creature that joins once the cave is claimed - new goals: rival cores, mana springs, freed creatures - rival messages name the masters; new progress key for the new mission order Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dd16c684e5
commit
ea0623fbe3
11 files changed
+413
-85
No files matched your search
@@ -97,10 +97,32 @@ pub fn draw_props_solid(g: &Game, cam: &Cam, t: f32) {
|
||||
Kind::Temple if (x + z) % 2 == 0 && h % 3 == 0 => candle_stand(c + vec3(((h >> 4) % 5) as f32 * 0.1 - 0.2, 0.0, ((h >> 8) % 5) as f32 * 0.1 - 0.2), l),
|
||||
Kind::Library if z % 2 == 0 => shelf(c, h, l),
|
||||
Kind::Library if h % 3 == 0 => lectern(c, l),
|
||||
Kind::ManaSpring => spring_basin(c, l),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
// creatures in chains: an iron post with chains to the creature
|
||||
for e in g.ents.iter().filter(|e| e.alive && e.chained) {
|
||||
if (e.x as i32) < x0 || (e.x as i32) > x1 || (e.y as i32) < z0 || (e.y as i32) > z1 {
|
||||
continue;
|
||||
}
|
||||
let post = vec3(e.x.floor() + 0.5, 0.0, e.y.floor() + 0.15);
|
||||
cube(post + vec3(0.0, 0.35, 0.0), vec3(0.08, 0.7, 0.08), rgb(70, 70, 78, 0.6));
|
||||
for n in 0..6 {
|
||||
let f = n as f32 / 6.0;
|
||||
let side = if n % 2 == 0 { 0.08 } else { -0.08 };
|
||||
let p = post.lerp(vec3(e.x + side, 0.25, e.y), f) + vec3(0.0, 0.3 * (1.0 - f) + 0.05 * (f * 3.14).sin(), 0.0);
|
||||
cube(p, vec3(0.05, 0.05, 0.05), rgb(120, 120, 130, 0.6));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// a stone basin around a mana spring
|
||||
fn spring_basin(c: Vec3, l: f32) {
|
||||
for (dx, dz, sx, sz) in [(0.0, -0.38, 0.8, 0.1), (0.0, 0.38, 0.8, 0.1), (-0.38, 0.0, 0.1, 0.8), (0.38, 0.0, 0.1, 0.8)] {
|
||||
cube(c + vec3(dx, 0.08, dz), vec3(sx, 0.16, sz), rgb(90, 95, 110, l));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn draw_props_glow(g: &Game, cam: &Cam, t: f32) {
|
||||
@@ -161,6 +183,17 @@ pub fn draw_props_glow(g: &Game, cam: &Cam, t: f32) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Kind::ManaSpring => {
|
||||
// rising mana: a pulsing pool and motes that drift up
|
||||
let f = 0.8 + 0.2 * (t * 2.0 + k).sin();
|
||||
draw_cube(c + vec3(0.0, 0.1, 0.0), vec3(0.66, 0.04, 0.66), None, Color::new(0.3, 0.8, 1.0, 0.85 * f));
|
||||
for n in 0..5 {
|
||||
let a = n as f32 * 1.26 + k;
|
||||
let y = ((t * 0.5 + n as f32 * 0.2) % 1.0) * 1.2;
|
||||
draw_sphere(c + vec3(a.cos() * 0.2, 0.15 + y, a.sin() * 0.2), 0.05 * (1.2 - y), None, Color::new(0.5, 0.9, 1.0, 0.9));
|
||||
}
|
||||
draw_sphere(c + vec3(0.0, 0.4, 0.0), 0.3 * f, None, Color::new(0.3, 0.7, 1.0, 0.15));
|
||||
}
|
||||
Kind::Lair if tile.bed != 0 => {
|
||||
// the flame priestess sleeps on embers
|
||||
if let Some(EK::Priestess) = u.beds.get(&tile.bed) {
|
||||
|
||||
Reference in new issue
Block a user