     ;(log/debug "current-state" current-state)
     (if (or (contains? table keyin) (contains? table :else))
       (let [[transition-fn new-state advance-time] (if (contains? table keyin) (get table keyin) (get table :else))
+            ;; some states conditionally advance time by calling (advance-time state)
+            ;; check to see if this has occurred if advance-time was not set in the state transition entry
+            advance-time (if-not advance-time
+                           (inc-time? state)
+                           advance-time)
+            ;; clear inc-time flag if set
+            state        (if (inc-time? state)
+                           (clear-inc-time state)
+                           state)
             ;; if the table contains keyin, then pass through transition-fn assuming arity-1 [state]
             ;; else the transition-fn takes [state keyin]. Bind keying so that it becomes arity-1 [state]
             _ (log/debug "current-state" (get-in state [:world :current-state]))

    (log/info "not mounted-on-raft?" (not (rw/player-mounted-on-raft? state)))
    (cond
      (rp/player-paralyzed? state)
        (rc/append-log "You can not move (paralyzed).")
      (and (not (rw/collide? state target-x target-y {:include-npcs? false}))
           (not (rw/player-mounted-on-raft? state)))
        (as-> state state

                    items (get cell :items)]
                (if (seq items)
                  (rdesc/search state)
                  state))))
          (inc-time state))
      (= (get (rw/npc-at-xy state target-x target-y) :in-party?) true)
        (-> state
          (assoc-in [:world :player :pos :x] target-x)
          (assoc-in [:world :player :pos :y] target-y)
          pick-up-gold
          inc-time
          (rc/map-in [:world :npcs]
                     (fn [npc] (if (and (= (-> npc :pos :x) target-x)
                                        (= (-> npc :pos :y) target-y))
