 
 (defn update-traps
   [state]
-  (reduce update-trap state (current-place-traps state))) 
+  (as-> state state
+    (reduce update-trap state (map-indexed vector (current-place-traps state)))
+    (if-let [place-id (rw/current-place-id state)]
+      (update-in state
+                 [:world :places place-id :traps]
+                 (fn [traps]
+                   (reduce (fn [traps trap]
+                             ;; remove expended crusing wall traps
+                             (if (and (= (get trap :type) :crushing-wall)
+                                      (empty? (get trap :locations)))
+                               traps
+                               (vec (conj traps trap))))
+                           []
+                           traps)))
+      state)))
 

      state)))

(defn update-crushing-wall-trap
  [state trap]
  state)

(defn update-trap
  [state trap]
  (case (get trap :type)
    :crushing-wall
      (update-crushing-wall-trap state trap)
    state))

(defn current-place-traps

  [state x y cell]
  ;; determine trap advancement mechanics
  (log/info "x" x "y" y "cell" cell)
  ;; TODO: only trigger once
  (let [{{min-x :min-x
          min-y :min-y
          max-x :max-x
