view clojure/com/aurellem/gb/money.clj @ 336:25b7bb7da3b1

Fixed two major bugs related to restart events which were causing desync. The entire video now syncs properly.
author Robert McIntyre <rlm@mit.edu>
date Sat, 07 Apr 2012 07:31:59 -0500
parents 10e26e7ceedb
children
line wrap: on
line source
1 (ns com.aurellem.gb.money
2 (:use (com.aurellem.gb gb-driver util))
3 (:import [com.aurellem.gb.gb_driver SaveState]))
5 (def money-address 0xD346)
7 (defn read-money
8 "lol money is stored in BCD."
9 ([^SaveState state]
10 (Integer/parseInt
11 (apply str
12 (map
13 #(Integer/toHexString %)
14 (subvec (vec (memory state)) money-address
15 (+ money-address 3)))) 10))
16 ([] (read-money @current-state)))
18 (defn set-money
19 ([^SaveState state new-money]
20 (let [str-money (str new-money)]
21 (assert (<= 0 (count str-money) 6))
22 (set-memory-range
23 state
24 money-address
25 (map #(Integer/parseInt % 16)
26 (map (partial apply str)
27 (partition
28 2
29 (concat (repeat (- 6 (count str-money)) "0")
30 (vec str-money))))))))
31 ([new-money] (set-money @current-state new-money)))