chiark / gitweb /
nice penultima
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 23 Nov 2020 02:12:15 +0000 (02:12 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 23 Nov 2020 02:12:15 +0000 (02:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
specs/penultima.game.toml
src/shapelib.rs

index e2f84043d8f3fe11de9c270f0f01b8f3a48ceefe..c06f2b90494c8cc09043295d05d12563db3bcca5 100644 (file)
@@ -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]
+
index d15ad41d119ee48d3504aff584610a252fd7b358..3cd0e66e0f5008c07a3cb3c75cc5107b15ba7a25 100644 (file)
@@ -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<String>,
 }
 
@@ -288,7 +290,8 @@ impl PieceSpec for MultiSpec {
   fn load(&self, i: usize) -> Result<Box<dyn Piece>,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()
   }