rlm@222: (ns com.aurellem.gb.pokedex rlm@222: (:use (com.aurellem.gb gb-driver util species)) rlm@222: (:import [com.aurellem.gb.gb_driver SaveState])) rlm@222: rlm@222: (def pokedex-seen-start-address 0xD309) rlm@222: rlm@222: (def pokedex-captured-start-address 0xD2F6) rlm@222: rlm@222: (defn pokedex-offset [capture? species-num] rlm@222: (+ (if capture? rlm@222: pokedex-captured-start-address rlm@222: pokedex-seen-start-address) rlm@222: (int (/ species-num 8)))) rlm@222: rlm@222: (defn read-pokedex rlm@222: ([^SaveState state capture? species-num] rlm@222: (bit-test rlm@222: (aget (memory state) rlm@222: (pokedex-offset capture? species-num)) rlm@222: (rem species-num 8)))) rlm@222: rlm@222: (defn set-pokedex rlm@222: ([^SaveState state capture? set? species-num] rlm@222: (let [target (pokedex-offset capture? species-num) rlm@222: current-bits rlm@222: (aget (memory state) rlm@222: (pokedex-offset capture? species-num)) rlm@222: bit-offset (rem species-num 8)] rlm@222: (set-memory rlm@222: state target rlm@222: (if set? rlm@222: (bit-set current-bits bit-offset) rlm@222: (bit-clear current-bits bit-offset)))))) rlm@222: rlm@222: (defn read-pokedex-seen rlm@222: ([^SaveState state species-num] rlm@222: (read-pokedex state false species-num)) rlm@222: ([species-num] rlm@222: (read-pokedex-seen @current-state species-num))) rlm@222: rlm@222: (defn set-pokedex-seen rlm@222: ([^SaveState state species-num] rlm@222: (set-pokedex state false species-num)) rlm@222: ([species-num] rlm@222: (set-pokedex-seen @current-state species-num))) rlm@222: rlm@222: (defn read-pokedex-captured rlm@222: ([^SaveState state species-num] rlm@222: (read-pokedex state true species-num)) rlm@222: ([species-num] rlm@222: (read-pokedex-captured @current-state species-num))) rlm@222: rlm@222: (defn set-pokedex-captured rlm@222: ([^SaveState state species-num] rlm@222: (set-pokedex state true species-num)) rlm@222: ([species-num] rlm@222: (set-pokedex-captured @current-state species-num))) rlm@222: rlm@222: (defn print-pokedex rlm@222: ([^SaveState state] rlm@222: (println "+-----------+-------+-------+") rlm@222: (println "|Pokemon | Seen? | Capt? |") rlm@222: (println "+-----------+-------+-------+") rlm@222: (dorun rlm@222: (map rlm@222: #(printf "|%-11s|%s|%s|\n" %1 %2 %3) rlm@222: (map #(.toUpperCase (.substring (str %) 1)) rlm@222: (map pokedex-num->species-name (range 1 152))) rlm@222: (map #(if % " X " " ") rlm@222: (map read-pokedex-seen (range 152))) rlm@222: (map #(if % " X " " ") rlm@222: (map read-pokedex-captured (range 152))))) rlm@222: (println "+-----------+-------+-------+")) rlm@222: rlm@222: ([] (print-pokedex @current-state))) rlm@222: