diff --git a/resources/public/docs/mw-engine/uberdoc.html b/resources/public/docs/mw-engine/uberdoc.html index f4ba5b6..a2c9acf 100644 --- a/resources/public/docs/mw-engine/uberdoc.html +++ b/resources/public/docs/mw-engine/uberdoc.html @@ -3366,7 +3366,7 @@ important.
(defn get-int [map key] - (cond map + (cond (map? map) (let [v (map key)] (cond (and v (integer? v)) v true 0)) @@ -3415,14 +3415,19 @@ important. * `depth` an integer representing the distance from [x,y] that should be searched; * `property` a keyword representing a property of the neighbours; -* `value` a value of that property; +* `value` a value of that property (or, possibly, the name of another); * `op` a comparator function to use in place of `=`.
It gets messy.
(defn get-neighbours-with-property-value ([world x y depth property value op] - (filter #(eval (list op (get % property) value)) (get-neighbours world x y depth))) + (filter + #(eval + (list op + (or (get % property) (get-int % property)) + value)) + (get-neighbours world x y depth))) ([world x y depth property value] (get-neighbours-with-property-value world x y depth property value =)) ([world cell depth property value] diff --git a/resources/public/docs/mw-parser/uberdoc.html b/resources/public/docs/mw-parser/uberdoc.html index 9a00606..90e8d17 100644 --- a/resources/public/docs/mw-parser/uberdoc.html +++ b/resources/public/docs/mw-parser/uberdoc.html @@ -3053,18 +3053,11 @@ objective is to parse rules out of a block of text from a textarea function, and return the sequence of such functions.
(defn compile-string [string] - (map #(compile-rule % true) (remove comment? (split string #"\n"))))
Compile each non-comment line of the file indicated by this filename
into
+ (map #(compile-rule % true) (remove comment? (trim (split string #"\n")))))
Compile each non-comment line of the file indicated by this filename
into
an executable anonymous function, and return the sequence of such functions.
(defn compile-file [filename] - (compile-string (slurp filename)))
(let [lines - (doall (with-open [rdr (reader filename)] (line-seq rdr)))] - (map parse-line lines)))
-(defn parse-string
- "Parse rules from successive lines in this string
"
- [string]
- (parse-from-reader (BufferedReader. (StringReader. string))))
A very simple parser which parses production rules of the following forms:
+ (compile-string (slurp filename)))A very simple parser which parses production rules of the following forms:
Render this world row as a Hiccup table row.
+ [:img {:alt (:state cell) :src (format-image-path state)}]]]))Render this world row as a Hiccup table row.
(defn render-world-row [row] (apply vector (cons :tr (map render-cell row))))
Render the world implied by the session as a complete HTML page.
@@ -3151,8 +3151,8 @@ net.brehaut.ClojureTools = (function (SH) { (let [world (or (session/get :world) (engine/transform-world (heightmap/apply-heightmap - ;;"resources/public/img/20x20/hill.png" - "resources/public/img/heightmaps/great_britain_and_ireland_small.png") + "resources/public/img/20x20/hill.png" + ;; "resources/public/img/heightmaps/great_britain_and_ireland_small.png") rules/init-rules)) rules (or (session/get :rules) (do (session/put! :rules (compiler/compile-file "resources/rulesets/basic.txt")) diff --git a/resources/rulesets/settlement.txt b/resources/rulesets/settlement.txt index df21d8b..0bc8feb 100644 --- a/resources/rulesets/settlement.txt +++ b/resources/rulesets/settlement.txt @@ -9,7 +9,7 @@ if state is in grassland or heath and some neighbours are camp then state should ;; and more herds support more people if state is in grassland or heath and more than 2 neighbours are meadow then state should be camp -if state is meadow and more than 3 neighbours are meadow and +if state is meadow and more than 3 neighbours are meadow and fewer than 1 neighbours are camp and fewer than 1 neighbours within 2 are house then state should be camp ;; the idea of agriculture spreads if state is in grassland or heath and some neighbours are meadow and some neighbours within 3 are house then state should be meadow @@ -20,6 +20,9 @@ if state is camp then 1 chance in 5 state should be waste ;; meadow that's too far from a house or camp will be abandoned if state is meadow and fewer than 1 neighbours within 3 are house and fewer than 1 neighbours within 2 are camp then state should be heath +;; markets spring up near settlements +if state is in grassland or meadow and more than 1 neighbours are house then 1 chance in 10 state should be market + ;; good fertile pasture close to settlement will be ploughed for crops if state is meadow and fertility is more than 10 and altitude is less than 100 and some neighbours are camp or some neighbours are house then state should be ploughland @@ -30,12 +33,10 @@ if state is crop then state should be grassland ;; if there's reliable food available, nomads build permanent settlements if state is in camp or abandoned and some neighbours are crop then state should be house +if state is abandoned and some neighbours are meadow then state should be house ;; people camp near to markets if state is in waste or grassland and some neighbours are market then state should be camp -;; markets spring up near settlements -if state is meadow and more than 1 neighbours are house then 1 chance in 10 state should be market - ;; a market in a settlement survives if state is market and more than 3 neighbours are house then state should be market if state is market and some neighbours are inn then state should be market @@ -81,6 +82,9 @@ if state is climax then 1 chance in 500 state should be fire ;; Climax forest neighbouring fires is likely to catch fire. So are buildings. if state is in climax or camp or house or inn and some neighbours are fire then 1 chance in 3 state should be fire +;; Climax forest near to settlement may be cleared for timber +if state is in climax and more than 3 neighbours within 2 are house then state should be waste + ;; After fire we get waste if state is fire then state should be waste