diff --git a/.gitignore b/.gitignore
index 38b9d54..cf11b31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,13 @@
+/target
+/lib
+/classes
+/checkouts
+pom.xml
+*.jar
+*.class
+/.lein-*
+/.env
+*.log
# Links to other places:
resources/public/docs/mw-*/uberdoc.html
diff --git a/README.md b/README.md
index 681b778..2e99c39 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,18 @@
+## Part of the overall MicroWorld system
+
+*mw-ui* is not a stand-alone project. To use it you also need at least
+[mw-parser](https://github.com/simon-brooke/mw-parser) and
+[mw-engine](https://github.com/simon-brooke/mw-engine). There will be other
+modules in due course.
+
+You can see MicroWorld in action [here](http://www.journeyman.cc/microworld/) -
+but please don't be mean to my poor little server. If you want to run big maps
+or complex rule-sets, please run it on your own machines.
+
## What this is about
-
+
MicroWorld is a rule driven cellular automaton. What does that mean? Well, it's
a two dimensional world made up of squares called **cells**. The world develops
in steps, and at each step, each cell is modified by applying the rules.
diff --git a/project.clj b/project.clj
index 7138fac..e280238 100644
--- a/project.clj
+++ b/project.clj
@@ -1,4 +1,4 @@
-(defproject mw-ui "0.1.3"
+(defproject mw-ui "0.1.5-SNAPSHOT"
:description "Web-based user interface for MicroWorld"
:url "http://www.journeyman.cc/microworld"
:manifest {
@@ -9,8 +9,8 @@
"Implementation-Version" "unset"
}
:dependencies [[org.clojure/clojure "1.6.0"]
- [mw-engine "0.1.3"]
- [mw-parser "0.1.3"]
+ [mw-engine "0.1.5-SNAPSHOT"]
+ [mw-parser "0.1.5-SNAPSHOT"]
[lib-noir "0.8.4"]
[ring-server "0.3.1"]
[selmer "0.6.8"]
diff --git a/resources/public/img/heightmaps/test.heightmap.xcf b/resources/public/img/heightmaps/test.heightmap.xcf
new file mode 100644
index 0000000..0bfb048
Binary files /dev/null and b/resources/public/img/heightmaps/test.heightmap.xcf differ
diff --git a/resources/public/img/tiles/navigable.png b/resources/public/img/tiles/navigable.png
new file mode 120000
index 0000000..39fca49
--- /dev/null
+++ b/resources/public/img/tiles/navigable.png
@@ -0,0 +1 @@
+error.png
\ No newline at end of file
diff --git a/resources/public/img/tiles/river.png b/resources/public/img/tiles/river.png
new file mode 120000
index 0000000..f4e3be0
--- /dev/null
+++ b/resources/public/img/tiles/river.png
@@ -0,0 +1 @@
+water.png
\ No newline at end of file
diff --git a/resources/public/img/tiles/sea.png b/resources/public/img/tiles/sea.png
new file mode 120000
index 0000000..f4e3be0
--- /dev/null
+++ b/resources/public/img/tiles/sea.png
@@ -0,0 +1 @@
+water.png
\ No newline at end of file
diff --git a/resources/public/rulesets/with-drainage.txt b/resources/public/rulesets/with-drainage.txt
new file mode 100644
index 0000000..ea2db55
--- /dev/null
+++ b/resources/public/rulesets/with-drainage.txt
@@ -0,0 +1,150 @@
+# Human settlement
+
+;; This rule set adds ideas aboutv rainfall and river drainage to the human settlement ruleset.
+;; This depends on transforming the world with the drainage functions before starting running
+;; the rule set, and that isn't done by default because it is computationally expensive.
+
+;; hack to speed up processing on the 'great britain and ireland' map
+if state is sea then state should be sea
+
+;; nomads make their first significant camp near sea because of fish and
+;; shellfish (kitchen-midden people)
+if state is in grassland or heath and more than 3 neighbours are sea and generation is more than 20 then state should be camp
+
+;; sooner or later nomads learn to keep flocks
+if state is in grassland or heath and some neighbours are camp then 1 chance in 2 state should be pasture
+
+;; and more herds support more people
+if state is in grassland or heath and more than 2 neighbours are pasture then 1 chance in 3 state should be camp
+if state is pasture and more than 3 neighbours are pasture 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 within 2 are house then state should be pasture
+
+;; nomads don't move on while the have crops growing. That would be silly!
+if state is camp and some neighbours are ploughland then state should be camp
+
+;; Impoverished pasture can't be grazed permanently
+if state is pasture and fertility is less than 2 then 1 chance in 3 state should be heath
+
+;; nomads move on
+if state is camp then 1 chance in 5 state should be waste
+
+;; pasture that's too far from a house or camp will be abandoned
+if state is pasture 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 pasture 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 pasture 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
+
+if state is ploughland then state should be crop
+
+;; after the crop is harvested, the land is allowed to lie fallow. But cropping
+;; depletes fertility.
+if state is crop then state should be grassland and fertility should be fertility - 1
+
+;; 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 pasture 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
+
+;; a market in a settlement survives
+if state is market and some neighbours are inn then state should be market
+;; a market at a river mouth survives
+if state is market and some neighbours are navigable and some neighbours are sea then state should be market
+;; otherwise markets are transitory
+if state is market then state should be grassland
+
+;; a house near a market in a settlement will become an inn
+if state is house and some neighbours are market and more than 1 neighbours are house then 1 chance in 5 state should be inn
+;; but it will need some local custom to survive
+if state is inn and fewer than 3 neighbours are house then state should be house
+
+;; if there aren't enough resources houses should be abandoned
+;; resources from fishing
+if state is house and more than 2 neighbours are sea then state should be house
+;; from farming
+if state is house and some neighbours are pasture then state should be house
+if state is house and some neighbours are ploughland then state should be house
+if state is house and some neighbours are crop then state should be house
+;; from the market
+if state is house and some neighbours are market then state should be house
+if state is house then 1 chance in 2 state should be abandoned
+if state is abandoned then 1 chance in 5 state should be waste
+
+
+## Vegetation rules
+;; rules which populate the world with plants
+
+;; Occasionally, passing birds plant tree seeds into grassland
+
+if state is grassland then 1 chance in 10 state should be heath
+
+;; heath below the treeline grows gradually into forest
+
+if state is heath and altitude is less than 120 then state should be scrub
+if state is scrub then 1 chance in 5 state should be forest
+
+;; Forest on fertile land grows to climax
+
+if state is forest and fertility is more than 5 and altitude is less than 70 then state should be climax
+
+;; Climax forest occasionally catches fire (e.g. lightning strikes)
+
+if state is climax then 1 chance in 500 state should be fire
+
+;; Forest neighbouring fires is likely to catch fire. So are buildings.
+if state is in forest or 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 climax and more than 3 neighbours within 2 are house then state should be scrub
+
+;; After fire we get waste
+
+if state is fire then state should be waste
+
+;; waste near settlement that is fertile becomes ploughland
+if state is waste and fertility is more than 10 and some neighbours are house or some neighbours are camp then state should be ploughland
+
+;; And after waste we get pioneer species; if there's a woodland seed
+;; source, it's going to be heath, otherwise grassland.
+
+if state is waste and some neighbours are scrub then state should be heath
+if state is waste and some neighbours are forest then state should be heath
+if state is waste and some neighbours are climax then state should be heath
+if state is waste then state should be grassland
+
+
+## Rivers connected to the sea are navigable
+if state is river and some neighbours are sea then state should be navigable
+if state is river and some neighbours are navigable then state should be navigable
+
+## Where navigable water meets the sea, ports are probable
+if state is in grassland or heath or scrub and some neighbours are sea and some neighbours are navigable and some neighbours are house then state should be market
+
+## Potential blockers
+
+;; Forest increases soil fertility.
+if state is in forest or climax then fertility should be fertility + 1
+
+## Initialisation rules
+
+;; Rules which deal with state 'new' will waste less time if they're near the
+;; end of the file
+
+;; below the high-tide line we have sea.
+
+if state is new and altitude is less than 10 then state should be sea
+
+;; above the high-tide line, there's a threshold of water pressure above which we have rivers
+;; the actual threshold will need tuning, 30 is a guess.
+if state is new and flow is more than 30 then state should be river
+
+;; above the snowline we have snow.
+if state is new and altitude is more than 200 then state should be snow
+
+;; otherwise, we have grassland.
+if state is new then state should be grassland
diff --git a/resources/templates/base.html b/resources/templates/base.html
index 7e85c99..35c830b 100644
--- a/resources/templates/base.html
+++ b/resources/templates/base.html
@@ -1,5 +1,5 @@
-
+