# HG changeset patch # User Robert McIntyre # Date 1332581377 18000 # Node ID 10e26e7ceedb21bb027cbc6f56833b2bc5442b25 # Parent 3dfb9dd3db9d3b644af001b2bea697e0e85bb81d added functions for setting current money. diff -r 3dfb9dd3db9d -r 10e26e7ceedb clojure/com/aurellem/exp/cartography --- a/clojure/com/aurellem/exp/cartography Sat Mar 24 03:35:21 2012 -0500 +++ b/clojure/com/aurellem/exp/cartography Sat Mar 24 04:29:37 2012 -0500 @@ -481,10 +481,10 @@ D342 Item 19 Quantity D343 Item 20 Type D344 Item 20 Quantity -D345 -D346 -D347 -D348 +D345 Item End-of-List Sentinel +D346 /h (bcd) money +D347 |m (bcd) money +D348 \l (bcd) money D349 D34A D34B diff -r 3dfb9dd3db9d -r 10e26e7ceedb clojure/com/aurellem/gb/money.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clojure/com/aurellem/gb/money.clj Sat Mar 24 04:29:37 2012 -0500 @@ -0,0 +1,31 @@ +(ns com.aurellem.gb.money + (:use (com.aurellem.gb gb-driver util)) + (:import [com.aurellem.gb.gb_driver SaveState])) + +(def money-address 0xD346) + +(defn read-money + "lol money is stored in BCD." + ([^SaveState state] + (Integer/parseInt + (apply str + (map + #(Integer/toHexString %) + (subvec (vec (memory state)) money-address + (+ money-address 3)))) 10)) + ([] (read-money @current-state))) + +(defn set-money + ([^SaveState state new-money] + (let [str-money (str new-money)] + (assert (<= 0 (count str-money) 6)) + (set-memory-range + state + money-address + (map #(Integer/parseInt % 16) + (map (partial apply str) + (partition + 2 + (concat (repeat (- 6 (count str-money)) "0") + (vec str-money)))))))) + ([new-money] (set-money @current-state new-money)))