ocsenave@227: (ns com.aurellem.gb.badges ocsenave@227: (:use (com.aurellem.gb gb-driver util constants)) ocsenave@227: (:use (com.aurellem.world practice)) ocsenave@227: (:import [com.aurellem.gb.gb_driver SaveState])) ocsenave@227: ocsenave@227: (def badges '(:boulder :cascade :thunder :marsh :rainbow :soul :volcano ocsenave@227: :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))) ocsenave@227: :else (cons (peek coll) (this (pop coll) (int (/ n ocsenave@227: 2)))))) ocsenave@227: badges ocsenave@227: (aget (memory state) 0xD355) ocsenave@227: )) ocsenave@227: ([] (get-badges @current-state))) ocsenave@227: ocsenave@227: (defn set-badges ocsenave@227: "Sets the badges held by the player. badge-list may contain :boulder ocsenave@227: :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: ocsenave@227: 0 ocsenave@227: (vec badges)) ocsenave@227: (set-memory state 0xD355)))) ocsenave@227: ocsenave@227: ocsenave@227: ([badge-list] (set-badges @current-state badge-list))) ocsenave@227: ocsenave@227: ocsenave@227: ocsenave@227: ocsenave@227: ocsenave@227: ocsenave@227: ocsenave@227: ;; (let [mem (aget (memory state) 0xD354)] ocsenave@227: ;; ((fn this [coll n] ocsenave@227: ;; (cond (zero? n) '() ocsenave@227: ;; (zero? (rem n 2)) (recur (pop coll) (int (/ n 2))) ocsenave@227: ;; :else (cons (peek coll) (this (pop coll) (int (/ n ocsenave@227: ;; 2)))))) ocsenave@227: ;; badges ocsenave@227: ;; (aget (memory state) 0xD354) ocsenave@227: ;; ))) ocsenave@227: