Surface world: grass in daylight, forests, cliffs with cave mouths; free-game and editor option
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ef10b5c432
commit
8a35a903de
32 files changed
+343
-24
No files matched your search
@@ -91,7 +91,7 @@ pub fn coop_campaign() -> CampaignDoc {
|
||||
waves: sp.waves.0,
|
||||
wave_limit: sp.waves.1,
|
||||
first_wave: if sp.waves.0 { sp.waves.2 } else { 300.0 },
|
||||
gen: GenDoc { rivers: sp.gen.0, lava: sp.gen.1, forts: sp.gen.2, rivals: 0, difficulty: sp.gen.3 },
|
||||
gen: GenDoc { rivers: sp.gen.0, lava: sp.gen.1, forts: sp.gen.2, rivals: 0, difficulty: sp.gen.3, surface: false },
|
||||
next: (i + 1 < specs.len()).then(|| format!("c{:02}", i + 2)),
|
||||
pos: (40.0 + (i % 5) as f32 * 220.0, 40.0 + (i / 5) as f32 * 140.0),
|
||||
..MissionDoc::default()
|
||||
|
||||
+8
-3
@@ -35,7 +35,7 @@ enum Cat {
|
||||
|
||||
const CATS: [Cat; 9] = [Cat::Terrain, Cat::Rooms, Cat::Places, Cat::Units, Cat::Towers, Cat::Traps, Cat::Forts, Cat::Zones, Cat::Erase];
|
||||
|
||||
const TERRAIN: [&str; 14] = ["floor", "earth", "reinforced", "rock", "water", "lava", "bridge", "lavabridge", "gold", "silver", "ruby", "diamond", "steel", "mushroom"];
|
||||
const TERRAIN: [&str; 16] = ["floor", "earth", "reinforced", "rock", "water", "lava", "bridge", "lavabridge", "gold", "silver", "ruby", "diamond", "steel", "mushroom", "grass", "tree"];
|
||||
const PLACES: [&str; 7] = ["core", "portal", "gate", "spring", "shard", "chest", "chained"];
|
||||
const OWNERS: [Owner; 6] = [Owner::Player, Owner::Hero, Owner::Rival1, Owner::Rival2, Owner::Rival3, Owner::None];
|
||||
const ZONE_SHAPES: [&str; 4] = ["rect", "circle", "tiles", "line"];
|
||||
@@ -76,6 +76,8 @@ fn kind_of_terrain(t: &str) -> (Kind, bool) {
|
||||
"bridge" => (Kind::Bridge, false),
|
||||
"lavabridge" => (Kind::LavaBridge, false),
|
||||
"mushroom" => (Kind::Mushroom, false),
|
||||
"grass" => (Kind::Floor, false),
|
||||
"tree" => (Kind::Tree, false),
|
||||
"gold" => (Kind::Gold, false),
|
||||
"silver" => (Kind::Silver, false),
|
||||
"ruby" => (Kind::Ruby, false),
|
||||
@@ -209,7 +211,10 @@ impl MapEdit {
|
||||
}
|
||||
match self.cat {
|
||||
Cat::Terrain => {
|
||||
let (k, reinforced) = kind_of_terrain(TERRAIN[self.item.min(TERRAIN.len() - 1)]);
|
||||
let name = TERRAIN[self.item.min(TERRAIN.len() - 1)];
|
||||
let (k, reinforced) = kind_of_terrain(name);
|
||||
// grass and trees lie above ground; anything else is painted underground
|
||||
self.game.map.set_sky(i, matches!(name, "grass" | "tree"));
|
||||
self.game.torches.retain(|tr| tr.wall != i);
|
||||
let owner = if k == Kind::Floor || reinforced || matches!(k, Kind::Bridge | Kind::LavaBridge) { OWNERS[self.owner] } else { Owner::None };
|
||||
let tl = &mut self.game.map.t[i];
|
||||
@@ -218,7 +223,7 @@ impl MapEdit {
|
||||
tl.owner = if reinforced && owner == Owner::None { Owner::Player } else { owner };
|
||||
tl.marked = false;
|
||||
if tl.plant() {
|
||||
tl.hp = crate::wood::MUSHROOM_HP;
|
||||
tl.hp = if k == Kind::Tree { crate::wood::TREE_HP } else { crate::wood::MUSHROOM_HP };
|
||||
}
|
||||
tl.gold = match k {
|
||||
Kind::Gold => 1200,
|
||||
|
||||
@@ -777,6 +777,7 @@ impl Editor {
|
||||
(tr("ed.rivals"), m.gen.rivals.to_string(), 6),
|
||||
(tr("ed.difficulty"), tr(["diff.0", "diff.1", "diff.2"][m.gen.difficulty.min(2) as usize]), 7),
|
||||
(tr("ed.portals"), m.portals.to_string(), 8),
|
||||
(tr("ed.surface"), tr(if m.gen.surface { "val.on" } else { "val.off" }), 9),
|
||||
];
|
||||
if fixed {
|
||||
rows.truncate(0);
|
||||
@@ -794,6 +795,7 @@ impl Editor {
|
||||
5 => m.gen.forts = (m.gen.forts as i32 + d.signum()).clamp(0, 3) as u8,
|
||||
6 => m.gen.rivals = (m.gen.rivals as i32 + d.signum()).clamp(0, 2) as u8,
|
||||
7 => m.gen.difficulty = (m.gen.difficulty as i32 + d.signum()).clamp(0, 2) as u8,
|
||||
9 => m.gen.surface = !m.gen.surface,
|
||||
_ => m.portals = (m.portals as i32 + d.signum()).clamp(0, 6) as usize,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ pub fn demo_campaign() -> CampaignDoc {
|
||||
seed: 4242,
|
||||
gold: 4000.0,
|
||||
goals: vec!["Towers".into()],
|
||||
gen: GenDoc { rivers: 1, lava: 0, forts: 1, rivals: 0, difficulty: 0 },
|
||||
gen: GenDoc { rivers: 1, lava: 0, forts: 1, rivals: 0, difficulty: 0, surface: false },
|
||||
next: Some("demo2".into()),
|
||||
branches: vec![BranchDoc { id: "rich".into(), goal: "Loot(2000)".into(), title: tr("demo.branch"), next: "demo2".into(), priority: Some(1) }],
|
||||
pos: (40.0, 60.0),
|
||||
@@ -226,7 +226,7 @@ pub fn demo_campaign() -> CampaignDoc {
|
||||
seed: 77,
|
||||
gold: 3000.0,
|
||||
goals: vec!["KillAll".into()],
|
||||
gen: GenDoc { rivers: 1, lava: 1, forts: 1, rivals: 0, difficulty: 0 },
|
||||
gen: GenDoc { rivers: 1, lava: 1, forts: 1, rivals: 0, difficulty: 0, surface: false },
|
||||
pos: (300.0, 60.0),
|
||||
..MissionDoc::default()
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user