From: Ian Jackson Date: Mon, 23 Nov 2020 02:12:15 +0000 (+0000) Subject: nice penultima X-Git-Tag: otter-0.2.0~381 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=adbeeb4436652cb4f34659b80487e45d6b839e5e;p=otter.git nice penultima Signed-off-by: Ian Jackson --- diff --git a/specs/penultima.game.toml b/specs/penultima.game.toml index e2f84043..c06f2b90 100644 --- a/specs/penultima.game.toml +++ b/specs/penultima.game.toml @@ -12,131 +12,166 @@ pos = [150,100] type = "Lib" lib = "edited" item = "chess-board" +pinned = true [[pieces]] -pos = [145, 135] -type = "Lib" +pos = [115, 135] +type = "LibList" lib = "wikimedia" -item = "chess-w-Q" -posd = [-80, 0] -count = 2 +prefix = "chess-w-" +items = ["R","N","B","Q","K","B","N","R"] +posd = [10, 0] [[pieces]] -pos = [145, 65] -type = "Lib" +pos = [115, 65] +type = "LibList" lib = "wikimedia" -item = "chess-b-Q" -posd = [-80, 0] -count = 2 +prefix = "chess-b-" +items = ["R","N","B","Q","K","B","N","R"] +posd = [10, 0] [[pieces]] -pos = [155, 135] +pos = [115, 125] type = "Lib" lib = "wikimedia" -item = "chess-w-K" -posd = [-80, 0] -count = 2 +item = "chess-w-P" +posd = [10, 0] +count = 8 [[pieces]] -pos = [155, 65] +pos = [115, 65] type = "Lib" lib = "wikimedia" -item = "chess-b-K" -posd = [-80, 0] -count = 2 +item = "chess-b-P" +posd = [10, 0] +count = 8 + [[pieces]] -pos = [165, 135] -type = "Lib" -lib = "wikimedia" -item = "chess-w-B" +pos = [20, 75] +type = "Disc" +faces = ["#f88","#88f"] +posd = [10, 0] +diam = 7 +count = 8 [[pieces]] -pos = [165, 65] -type = "Lib" -lib = "wikimedia" -item = "chess-b-B" +pos = [20, 85] +type = "Square" +faces = ["yellow","#f4f"] +posd = [10, 0] +size = [7,7] +count = 8 [[pieces]] -pos = [135, 135] -type = "Lib" -lib = "wikimedia" -item = "chess-w-B" +pos = [20, 95] +type = "Square" +faces = ["#ccc"] +posd = [10, 0] +size = [9,1] +count = 8 [[pieces]] -pos = [135, 65] -type = "Lib" -lib = "wikimedia" -item = "chess-b-B" -posd = [-80, 0] -count = 2 +pos = [20, 100] +type = "Square" +faces = ["#ccc"] +posd = [10, 0] +size = [9,1] +count = 8 [[pieces]] -pos = [125, 135] -type = "Lib" -lib = "wikimedia" -item = "chess-w-N" +pos = [17, 110] +type = "Square" +faces = ["#ccc"] +posd = [5, 0] +size = [1,9] +count = 16 [[pieces]] -pos = [175, 135] -type = "Lib" +pos = [20, 125] +type = "LibList" lib = "wikimedia" -item = "chess-w-N" +prefix = "chess-w-" +items = ["R","N","B","Q","K","B","N","R"] +posd = [10, 0] [[pieces]] -pos = [125, 65] -type = "Lib" +pos = [20, 135] +type = "LibList" lib = "wikimedia" -item = "chess-b-N" -posd = [-80, 0] -count = 2 +prefix = "chess-b-" +items = ["R","N","B","Q","K","B","N","R"] +posd = [10, 0] [[pieces]] -pos = [175, 65] +pos = [20, 145] type = "Lib" lib = "wikimedia" -item = "chess-b-N" +item = "chess-w-P" +posd = [10, 0] +count = 4 [[pieces]] -pos = [115, 135] +pos = [60, 145] type = "Lib" lib = "wikimedia" -item = "chess-w-R" -posd = [-80, 0] -count = 2 +item = "chess-b-P" +posd = [10, 0] +count = 4 [[pieces]] -pos = [185, 135] -type = "Lib" +pos = [210, 75] +type = "LibList" lib = "wikimedia" -item = "chess-w-R" +prefix = "chess-r-" +items = ["K","Q","R","R","B","B","ship","ship"] +posd = [10, 0] [[pieces]] -pos = [115, 65] -type = "Lib" +pos = [210, 85] +type = "LibList" lib = "wikimedia" -item = "chess-b-R" -posd = [-80, 0] -count = 2 +prefix = "chess-g-" +items = ["K","Q","R","R","B","B","ship","ship"] +posd = [10, 0] [[pieces]] -pos = [185, 65] -type = "Lib" +pos = [210, 95] +type = "LibList" lib = "wikimedia" -item = "chess-b-R" +prefix = "chess-y-" +items = ["K","Q","R","R","B","B","ship","ship"] +posd = [10, 0] [[pieces]] -pos = [115, 125] +pos = [210, 115] +type = "LibList" +lib = "wikimedia" +prefix = "chess-w-" +items = ["commoner","elephant","knight-king","mann","zebra"] posd = [10, 0] -count = 8 -type = "Lib" + +[[pieces]] +pos = [210, 125] +type = "LibList" lib = "wikimedia" -item = "chess-w-P" +prefix = "chess-w-" +items = ["commoner","elephant","knight-king","mann","zebra"] +posd = [10, 0] [[pieces]] -pos = [115, 75] +pos = [210, 135] +type = "LibList" +lib = "wikimedia" +prefix = "chess-b-" +items = ["commoner","elephant","knight-king","mann","zebra"] posd = [10, 0] -count = 8 -type = "Lib" + +[[pieces]] +pos = [210, 145] +type = "LibList" lib = "wikimedia" -item = "chess-b-P" +prefix = "chess-b-" +items = ["commoner","elephant","knight-king","mann","zebra"] +posd = [10, 0] + diff --git a/src/shapelib.rs b/src/shapelib.rs index d15ad41d..3cd0e66e 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -125,6 +125,8 @@ pub struct ItemSpec { #[derive(Debug,Clone,Serialize,Deserialize)] pub struct MultiSpec { pub lib: String, + #[serde(default)] pub prefix: String, + #[serde(default)] pub suffix: String, pub items: Vec, } @@ -288,7 +290,8 @@ impl PieceSpec for MultiSpec { fn load(&self, i: usize) -> Result,SpecError> { let item = self.items.get(i).ok_or_else( || SE::InternalError(format!("item {:?} from {:?}", i, &self)) - )?.clone(); + )?; + let item = format!("{}{}{}", &self.prefix, item, &self.suffix); let lib = self.lib.clone(); ItemSpec { lib, item }.load() }