Drawbridges (down, up, automatic), frost spell and obsidian over cooled lava
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
76c23a06f0
commit
34b4640d85
32 files changed
+869
-31
No files matched your search
+22
-7
@@ -750,6 +750,8 @@ pub const ROOM_NAMES: [&str; N_ROOMS] = [
|
||||
|
||||
// bridge cost per tile: over water, over lava
|
||||
pub const BRIDGE_COST: [i32; 2] = [30, 75];
|
||||
// a drawbridge tile (over water or lava)
|
||||
pub const DRAWBRIDGE_COST: i32 = 150;
|
||||
// steel wall cost per tile: from earth, from a reinforced wall
|
||||
pub const STEEL_COST: [i32; 2] = [80, 40];
|
||||
pub const STEEL_HP: f32 = 40.0;
|
||||
@@ -2820,7 +2822,7 @@ impl Game {
|
||||
|
||||
// the ground of tile i turned into river (bridge removed): units on it fall in
|
||||
pub(crate) fn ground_lost(&mut self, i: usize) {
|
||||
let lava = self.map.t[i].kind == Kind::Lava;
|
||||
let lava = self.map.t[i].river() == Some(Kind::Lava);
|
||||
let (x, y) = xy(i);
|
||||
for j in 0..self.ents.len() {
|
||||
let e = &self.ents[j];
|
||||
@@ -2890,6 +2892,10 @@ impl Game {
|
||||
}
|
||||
|
||||
pub fn build_bridges(&mut self, x0: i32, y0: i32, x1: i32, y1: i32) {
|
||||
self.build_bridges_of(x0, y0, x1, y1, false);
|
||||
}
|
||||
|
||||
pub fn build_bridges_of(&mut self, x0: i32, y0: i32, x1: i32, y1: i32, draw: bool) {
|
||||
let (mut built, mut broke, mut any_river) = (0, false, false);
|
||||
loop {
|
||||
let mut add = Vec::new();
|
||||
@@ -2911,14 +2917,21 @@ impl Game {
|
||||
let mut progress = false;
|
||||
for i in add {
|
||||
let lava = self.map.t[i].kind == Kind::Lava;
|
||||
let cost = BRIDGE_COST[lava as usize] as f32;
|
||||
let cost = if draw { DRAWBRIDGE_COST } else { BRIDGE_COST[lava as usize] } as f32;
|
||||
if self.gold < cost {
|
||||
broke = true;
|
||||
continue;
|
||||
}
|
||||
self.gold -= cost;
|
||||
let t = &mut self.map.t[i];
|
||||
t.kind = if lava { Kind::LavaBridge } else { Kind::Bridge };
|
||||
t.kind = if draw {
|
||||
Kind::Drawbridge
|
||||
} else if lava {
|
||||
Kind::LavaBridge
|
||||
} else {
|
||||
Kind::Bridge
|
||||
};
|
||||
t.res = if draw && lava { DB_LAVA } else { 0 };
|
||||
t.owner = self.me;
|
||||
built += 1;
|
||||
progress = true;
|
||||
@@ -3060,7 +3073,7 @@ impl Game {
|
||||
continue;
|
||||
}
|
||||
if let Some(t) = self.map.get(cx + dx, cy + dy) {
|
||||
if t.bridge() && t.owner == self.me {
|
||||
if t.bridge() && !t.raised() && t.owner == self.me {
|
||||
return Some(idx(cx + dx, cy + dy));
|
||||
}
|
||||
}
|
||||
@@ -3073,7 +3086,7 @@ impl Game {
|
||||
// a knight walks next to the bridge tile and tears it down
|
||||
fn tear_bridge(&mut self, e: &mut Ent, i: usize, dt: f32) -> bool {
|
||||
let t = self.map.t[i];
|
||||
if !t.bridge() || t.owner != self.me {
|
||||
if !t.bridge() || t.raised() || t.owner != self.me {
|
||||
return false;
|
||||
}
|
||||
let (bx, by) = xy(i);
|
||||
@@ -4714,11 +4727,13 @@ impl Game {
|
||||
continue;
|
||||
}
|
||||
if t.owner == self.me && t.bridge() {
|
||||
let lava = t.kind == Kind::LavaBridge;
|
||||
let lava = t.river() == Some(Kind::Lava);
|
||||
let cost = if t.kind == Kind::Drawbridge { DRAWBRIDGE_COST } else { BRIDGE_COST[lava as usize] };
|
||||
t.kind = if lava { Kind::Lava } else { Kind::Water };
|
||||
t.owner = Owner::None;
|
||||
t.reserved = 0;
|
||||
refund += BRIDGE_COST[lava as usize] as f32 * 0.5;
|
||||
t.res = 0;
|
||||
refund += cost as f32 * 0.5;
|
||||
self.ground_lost(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user