                   [max-x min-y {:type (if alternate-corners? :upper-right-2 :upper-right-1)}]
                   [min-x max-y {:type (if alternate-corners? :bottom-left-2 :bottom-left-1)}]
                   [max-x max-y {:type (if alternate-corners? :bottom-right-2 :bottom-right-1)}]]]
-        top    [(map (fn [x] [x min-y {:type :horizontal-wall}]) (range (inc min-x) max-x))]
-        bottom [(map (fn [x] [x max-y {:type :horizontal-wall}]) (range (inc min-x) max-x))]
+        wall-greeble? (< 0.7 (rand))
+        [direction
+         location] (if wall-greeble?
+                     (if (> 0.5 (rand))
+                       [:horizontal (set (take (inc (rand-int 2)) (shuffle (range (inc min-x) max-x))))]
+                       [:vertical   (set (take (inc (rand-int 2)) (shuffle (range (inc min-y) max-y))))])
+                     [nil nil])
+        top    [(map (fn [x]
+                       [x min-y {:type :horizontal-wall}])
+                     (range (inc min-x) max-x))]
+        bottom [(map (fn [x]
+                       [x max-y {:type :horizontal-wall}])
+                     (range (inc min-x) max-x))]
+       ;; make one middle line template
         middle-line (concat [[min-x {:type :vertical-wall}]]
                             (vec (map (fn [x] [x {:type :floor}]) (range (inc min-x) max-x)))
                             [[max-x {:type :vertical-wall}]])
-        middle-lines (vec (map (fn [y] (map (fn [[x cell]] [x y cell]) middle-line)) (range (inc min-y) max-y)))
-        lines (concat corners top middle-lines bottom)]
-    (apply concat lines)))
+        ;; duplicate it
+        middle-lines (vec (map (fn [y]
+                                 (map (fn [[x cell]]
+                                        [x y cell])
+                                      middle-line))
+                               (range (inc min-y) max-y)))
+        cellsxy (apply concat (concat corners top middle-lines bottom))
+        ;; add greeble
+        cellsxy (map (fn [[x y cell]]
+                       (if wall-greeble?
+                         (cond
+                           (and (= direction :horizontal)
+                                (= (get cell :type) :horizontal-wall)
+                                (contains? location x))
+                             [x y (assoc cell :type :horizontal-wall-alt)]
+                           (and (= direction :vertical)
+                                (= (get cell :type) :vertical-wall)
+                                (contains? location y))
+                             [x y (assoc cell :type :vertical-wall-alt)]
+                           :else
+                           [x y cell])
+                         [x y cell]))
+                      cellsxy)
+        cellsxy (add-room-features cellsxy)]
+   cellsxy))
 
 (defn points-to-fully-connected-graph
   [points]

(defn points-to-corridor
  "Convert a sequence of points `[x y]` into `[x y {:type :corridor}]`."
  [points]
  (map (fn [[x y]] [x y {:type :corridor}]) points))

(defn room-to-cellsxy
  "Convert the bounds of a room into a list of points that represent the room."

                                            \ 
                                            (case (cell :type)
                                              :floor \·
                                              :corridor "\033[38;2;191;171;143m#\033[0m"
                                              ;:vertical-wall \║
                                              :vertical-wall "\033[38;2;191;171;143m║\033[0m"
                                              :horizontal-wall "\033[38;2;191;171;143m═\033[0m"
                                              :vertical-wall-alt \°
                                              :horizontal-wall-alt \°
                                              :upper-left-1 "\033[38;2;191;171;143m╔\033[0m"
                                              :upper-right-1 "\033[38;2;191;171;143m╗\033[0m"
                                              :bottom-left-1 "\033[38;2;191;171;143m╚\033[0m"
                                              :bottom-right-1 "\033[38;2;191;171;143m╝\033[0m"
                                              :upper-left-2 "\033[38;2;191;171;143m◙\033[0m"
                                              :upper-right-2 "\033[38;2;191;171;143m◙\033[0m"
                                              :bottom-left-2 "\033[38;2;191;171;143m◙\033[0m"
                                              :bottom-right-2 "\033[38;2;191;171;143m◙\033[0m"
                                              :close-door \+
                                              ;:shallow-water \~
                                              :shallow-water "\033[38;2;1;217;163m~\033[0m"
                                              :grass "\033[38;2;1;140;1m\"\033[0m"
                                              ;:vine \⌠
                                              :vine "\033[38;2;1;140;1m⌠\033[0m"
                                              :up-stairs \<
                                              :down-stairs \>
                                              :moss-corridor "\033[38;2;1;140;1m#\033[0m"
                                              :moss-vertical-wall "\033[38;2;1;140;1m║\033[0m"
                                              :moss-horizontal-wall  "\033[38;2;1;140;1m═\033[0m"
                                              :moss-vertical-wall-alt  "\033[38;2;1;140;1m°\033[0m"
                                              :moss-horizontal-wall-alt  "\033[38;2;1;140;1m°\033[0m"
                                              :moss-upper-left-1  "\033[38;2;1;140;1m╔\033[0m"
                                              :moss-upper-right-1  "\033[38;2;1;140;1m╗\033[0m"
                                              :moss-bottom-left-1  "\033[38;2;1;140;1m╚\033[0m"
                                              :moss-bottom-right-1  "\033[38;2;1;140;1m╝\033[0m"
                                              :moss-upper-left-2  "\033[38;2;1;140;1m◙\033[0m"
                                              :moss-upper-right-2  "\033[38;2;1;140;1m◙\033[0m"
                                              :moss-bottom-left-2  "\033[38;2;1;140;1m◙\033[0m"
                                              :moss-bottom-right-2 "\033[38;2;1;140;1m◙\033[0m"
                                              :white-corridor "#"
                                              :white-vertical-wall "║"
                                              :white-horizontal-wall  "═"
                                              :white-vertical-wall-alt  "°"
                                              :white-horizontal-wall-alt  "°"
                                              :white-upper-left-1  "╔"
                                              :white-upper-right-1  "╗"
                                              :white-bottom-left-1  "╚"
                                              :white-bottom-right-1  "╝"
                                              :white-upper-left-2  "◙"
                                              :white-upper-right-2  "◙"
                                              :white-bottom-left-2  "◙"
                                              :white-bottom-right-2 "◙"
                                              (str (cell :type)))))
                                       line))) place)]
    contents))
