ocsenave@227: (ns com.aurellem.gb.badges ocsenave@227: (:use (com.aurellem.gb gb-driver util constants)) ocsenave@227: (:import [com.aurellem.gb.gb_driver SaveState])) ocsenave@227: rlm@228: (def badges rlm@228: '(:boulder :cascade :thunder :rainbow rlm@228: :soul :marsh :volcano :earth)) ocsenave@227: ocsenave@227: (defn get-badges ocsenave@227: "Returns a list of the current badges held by the player." ocsenave@227: ([state] ocsenave@227: ((fn this [coll n] ocsenave@227: (cond (zero? n) '() ocsenave@227: (zero? (rem n 2)) (recur (pop coll) (int (/ n 2))) rlm@228: :else (cons rlm@228: (peek coll) rlm@228: (this (pop coll) (int (/ n 2)))))) ocsenave@227: badges rlm@228: (aget (memory state) 0xD355))) ocsenave@227: ([] (get-badges @current-state))) ocsenave@227: ocsenave@227: (defn set-badges rlm@228: "Sets the badges held by the player. badge-list may contain rlm@228: :boulder :cascade :thunder :marsh :rainbow :soul :volcano." ocsenave@227: ([state badge-list] ocsenave@227: (let [has-badge (set badge-list)] ocsenave@227: (->> ocsenave@227: ((fn [n coll] ocsenave@227: (cond ocsenave@227: (empty? coll) n ocsenave@227: (has-badge (peek coll)) (recur (inc(* 2 n)) (pop coll)) ocsenave@227: :else (recur (* 2 n) (pop coll)))) ocsenave@227: 0 ocsenave@227: (vec badges)) ocsenave@227: (set-memory state 0xD355)))) ocsenave@227: ([badge-list] (set-badges @current-state badge-list))) ocsenave@227: rlm@228: (defn give-all-badges rlm@228: ([^SaveState state] rlm@228: (set-badges state badges)) rlm@228: ([] (give-all-badges @current-state))) rlm@228: