         ;; interior biomes
         (cliskf/v+ [-0.55 -0.55 -0.55]  c)
           (vcond
+            (vand c1 c2 (v> c1 c2))
+            ;; interior jungle
+            jungle
             (vand c1 c2)
-            ;; interior jungle
-            [0 0.4 0.1]
+            heavy-forest
+            (vand c1 (vnot c2) (v> c1 c2))
+            light-forest
             (vand c1 (vnot c2))
-            ;; interior trees/green
-            [0 0.5 0]
+            bamboo-grove
+            (vand (vnot c1) c2 (v> c1 c2))
+            meadow
             (vand (vnot c1) c2)
-            ;; interior meadows
-            [0.2 0.7 0.2]
+            rocky
+            (vand (vnot c1) (vnot c2) (v> c1 c2))
+            swamp
             (vnot (vand c1 c2))
-            ;; dirt
-            [0.3 0.2 0.1])
+            dirt)
         ;; shore/yellow
         (cliskf/v+ [-0.5 -0.5 -0.5]  c)
-          [0.7 0.6 0.0]
+            sand
         ;; surf/light blue
         (cliskf/v+ [-0.42 -0.42 -0.42]  c)
-          [0 0.5 0.6]
+          surf
         ;; else ocean
         [1 1 1]
-          [0 0.4 0.5]))))
+          ocean))))
 
 (def island-fns
   (vec (map cliskn/compile-fn (:nodes island-node))))

          (fn [[x y]]
            (let [s (mapv #(.calc ^clisk.IFunction % (double (/ x max-x)) (double (/ y max-y)) (double 0.0) (double 0.0))
                              island-fns)]
            (or (= s [0.0 0.4 0.5])
                (= s [0.0 0.5 0.6]))))
          samples)
        [sx sy] (first non-water-samples)]
    (xy->pos sx sy)))

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

(defmacro v>
  [x y]
  `(cliskf/vif (cliskf/v+ (invert ~x) ~y) [1 1 1] [0 0 0]))

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