rlm@224: (ns com.aurellem.gb.money rlm@224: (:use (com.aurellem.gb gb-driver util)) rlm@224: (:import [com.aurellem.gb.gb_driver SaveState])) rlm@224: rlm@224: (def money-address 0xD346) rlm@224: rlm@224: (defn read-money rlm@224: "lol money is stored in BCD." rlm@224: ([^SaveState state] rlm@224: (Integer/parseInt rlm@224: (apply str rlm@224: (map rlm@224: #(Integer/toHexString %) rlm@224: (subvec (vec (memory state)) money-address rlm@224: (+ money-address 3)))) 10)) rlm@224: ([] (read-money @current-state))) rlm@224: rlm@224: (defn set-money rlm@224: ([^SaveState state new-money] rlm@224: (let [str-money (str new-money)] rlm@224: (assert (<= 0 (count str-money) 6)) rlm@224: (set-memory-range rlm@224: state rlm@224: money-address rlm@224: (map #(Integer/parseInt % 16) rlm@224: (map (partial apply str) rlm@224: (partition rlm@224: 2 rlm@224: (concat (repeat (- 6 (count str-money)) "0") rlm@224: (vec str-money)))))))) rlm@224: ([new-money] (set-money @current-state new-money)))