                 {:type :water}))))
       [])))
 
+(def jungle
+  [0.0 0.4 0.1])
+
+(def heavy-forest
+  [0.0 0.5 0.0])
+
+(def meadow
+  [0.2 0.7 0.2])
+
+(def swamp
+  [0.4 0.2 0.1])
+
+(def bamboo-grove
+  [0.2 0.7 0.0])
+
+(def light-forest
+  [0.0 0.6 0.0])
+
+(def rocky
+  [0.5 0.5 0.5])
+
+(def dirt
+  [0.3 0.2 0.1])
+
+(def sand
+  [0.7 0.6 0.0])
+
+(def surf
+  [0.0 0.5 0.6])
+
+(def ocean
+  [0.0 0.4 0.5])
 
 (def island-node
   (cliskf/vectorize

  [x]
  `(cliskf/vif ~x [0 0 0] [1 1 1]))

(defn init-ocean
  []
  (let [max-x 80

                       :else
                       (let [s (mapv #(.calc ^clisk.IFunction % (double (/ x max-x)) (double (/ y max-y)) (double 0.0) (double 0.0))
                                         island-fns)]
                         (condp = s
                           ocean         {:type :water}
                           surf          {:type :surf}
                           sand          {:type :sand}
                           dirt          (case (uniform-int 3)
                                           0 {:type :dirt}
                                           1 {:type :gravel}
                                           2 {:type :tall-grass})
                           bamboo-grove  (case (uniform-int 5)
                                           0 {:type :dirt}
                                           1 {:type :tall-grass}
                                           2 {:type :tall-grass}
                                           3 {:type :short-grass}
                                           4 {:type :short-grass})
                           rocky         (case (uniform-int 5)
                                           0 {:type :dirt}
                                           1 {:type :mountain}
                                           2 {:type :tall-grass}
                                           3 {:type :short-grass}
                                           4 {:type :short-grass})
                           swamp         (case (uniform-int 5)
                                           0 {:type :dirt}
                                           1 {:type :surf}
                                           2 {:type :tree}
                                           3 {:type :tall-grass}
                                           4 {:type :short-grass})
                           meadow        (case (uniform-int 5)
                                           0 {:type :dirt}
                                           1 {:type :tall-grass}
                                           2 {:type :tall-grass}
                                           3 {:type :short-grass}
                                           4 {:type :short-grass})
                           jungle        (case (uniform-int 5)
                                           0 {:type :palm-tree}
                                           1 {:type :fruit-tree :fruit-type (dg/rand-nth [:red-fruit :orange-fruit :yellow-fruit
                                                                                          :green-fruit :blue-fruit :purple-fruit
                                                                                          :white-fruit :black-fruit])}
                                           2 {:type :tall-grass}
                                           3 {:type :short-grass}
                                           4 {:type :gravel})
                           heavy-forest  (case (uniform-int 5)
                                           0 {:type :tree}
                                           1 {:type :fruit-tree :fruit-type (dg/rand-nth [:red-fruit :orange-fruit :yellow-fruit
                                                                                          :green-fruit :blue-fruit :purple-fruit
                                                                                          :white-fruit :black-fruit])}
                                           2 {:type :tall-grass}
                                           3 {:type :short-grass}
                                           4 {:type :gravel})
                           light-forest  (case (uniform-int 7)
                                           0 {:type :tree}
                                           1 {:type :fruit-tree :fruit-type (dg/rand-nth [:red-fruit :orange-fruit :yellow-fruit
                                                                                          :green-fruit :blue-fruit :purple-fruit
                                                                                          :white-fruit :black-fruit])}
                                           2 {:type :tall-grass}
                                           3 {:type :tall-grass}
                                           4 {:type :short-grass}
                                           5 {:type :short-grass}
                                           6 {:type :gravel}))))]
              ;; drop initial harvestable items
              (if (and (contains? #{:gravel :tree :palm-tree :tall-grass} (get cell :type))
                       (= (uniform-int 0 200) 0))
