Mercurial > vba-clojure
changeset 133:424510993296
saving progress
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 18 Mar 2012 00:33:00 -0500 |
parents | d16cf9d829dd |
children | 718abf3bec8a |
files | clojure/com/aurellem/item_bridge.clj clojure/com/aurellem/rival_name.clj |
diffstat | 2 files changed, 346 insertions(+), 281 deletions(-) [+] |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/item_bridge.clj Sat Mar 17 21:32:29 2012 -0500 1.2 +++ b/clojure/com/aurellem/item_bridge.clj Sun Mar 18 00:33:00 2012 -0500 1.3 @@ -9,294 +9,64 @@ 1.4 (defn corrupt-item-state [] 1.5 (read-state "corrupt-items")) 1.6 1.7 -(defn talk-to-rival [] 1.8 - (read-state "talk-to-rival")) 1.9 1.10 -(def rival-name-start 0xD349) 1.11 +(defn view-memory-range [state start end] 1.12 + (dorun 1.13 + (map (fn [loc val] 1.14 + (println (format "%04X : %02X" loc val))) 1.15 + 1.16 + (range start end) (subvec (vec (memory state)) start end))) 1.17 + state) 1.18 1.19 - 1.20 -(defn set-rival-name [^SaveState state codes] 1.21 +(defn set-memory [state location value] 1.22 (set-state! state) 1.23 (let [mem (memory state)] 1.24 - (dorun (map (fn [index val] 1.25 - (aset mem index val)) 1.26 - (range rival-name-start 1.27 - (+ rival-name-start 1.28 - (count codes))) codes)) 1.29 + (aset mem location value) 1.30 (write-memory! mem) 1.31 (update-state))) 1.32 1.33 -(defn view-rival-name [name-codes] 1.34 - (-> 1.35 - (set-rival-name (talk-to-rival) name-codes) 1.36 - (step [:a]) 1.37 - (play 50))) 1.38 +(defn almost-broken 1.39 + "if one more memory location is turned into 0x03, the game crashes." 1.40 + [n] 1.41 + (view-memory-range 1.42 + (set-inv-mem (mid-game) 1.43 + (concat [0xFF] (repeat 64 0x03) 1.44 + (subvec (vec (memory (mid-game))) 1.45 + (+ item-list-start 65) 1.46 + (+ item-list-start 65 n)) 1.47 + (repeat (- 255 65 n) 0x03) 1.48 + )) 1.49 + 1.50 + item-list-start (+ item-list-start 255))) 1.51 1.52 -(defn rival-name-sequence [] 1.53 - (let [i (atom 1)] 1.54 - (fn [] 1.55 - (let [codes (range @i (+ 5 @i))] 1.56 - (println codes) 1.57 - (view-rival-name codes) 1.58 - (reset! i (+ 5 @i)))))) 1.59 - 1.60 +(defn actually-broken 1.61 + "if one more memory location is turned into 0x03, the game crashes." 1.62 + [] 1.63 + (set-memory (mid-game) 0xD35D 0x03)) 1.64 1.65 1.66 -;; 0x00 : end-of-name-sentinel 1.67 -;; 0x01 : 1.68 -;; 0x02 : 1.69 -;; 0x03 : 1.70 -;; 0x04 : 1.71 -;; 0x05 : 1.72 -;; 0x06 : 1.73 -;; 0x07 : 1.74 -;; 0x08 : 1.75 -;; 0x09 : 1.76 -;; 0x0A : 1.77 -;; 0x0B : 1.78 -;; 0x0C : 1.79 -;; 0x0D : 1.80 -;; 0x0E : 1.81 -;; 0x0F : 1.82 -;; 0x10 : 1.83 -;; 0x11 : 1.84 -;; 0x12 : 1.85 -;; 0x13 : 1.86 -;; 0x14 : 1.87 -;; 0x15 : 1.88 -;; 0x16 : 1.89 -;; 0x17 : 1.90 -;; 0x18 : 1.91 -;; 0x19 : 1.92 -;; 0x1A : 1.93 -;; 0x1B : 1.94 -;; 0x1C : 1.95 -;; 0x1D : 1.96 -;; 0x1E : 1.97 -;; 0x1F : 1.98 -;; 0x20 : 1.99 -;; 0x21 : 1.100 -;; 0x22 : 1.101 -;; 0x23 : 1.102 -;; 0x24 : 1.103 -;; 0x25 : 1.104 -;; 0x26 : 1.105 -;; 0x27 : 1.106 -;; 0x28 : 1.107 -;; 0x29 : 1.108 -;; 0x2A : 1.109 -;; 0x2B : 1.110 -;; 0x2C : 1.111 -;; 0x2D : 1.112 -;; 0x2E : 1.113 -;; 0x2F : 1.114 -;; 0x30 : 1.115 -;; 0x31 : 1.116 -;; 0x32 : 1.117 -;; 0x33 : 1.118 -;; 0x34 : 1.119 -;; 0x35 : 1.120 -;; 0x36 : 1.121 -;; 0x37 : 1.122 -;; 0x38 : 1.123 -;; 0x39 : 1.124 -;; 0x3A : 1.125 -;; 0x3B : 1.126 -;; 0x3C : 1.127 -;; 0x3D : 1.128 -;; 0x3E : 1.129 -;; 0x3F : 1.130 -;; 0x40 : 1.131 -;; 0x41 : 1.132 -;; 0x42 : 1.133 -;; 0x43 : 1.134 -;; 0x44 : 1.135 -;; 0x45 : 1.136 -;; 0x46 : 1.137 -;; 0x47 : 1.138 -;; 0x48 : 1.139 -;; 0x49 : 1.140 -;; 0x4A : 1.141 -;; 0x4B : 1.142 -;; 0x4C : 1.143 -;; 0x4D : 1.144 -;; 0x4E : 1.145 -;; 0x4F : 1.146 -;; 0x50 : 1.147 -;; 0x51 : 1.148 -;; 0x52 : 1.149 -;; 0x53 : 1.150 -;; 0x54 : 1.151 -;; 0x55 : 1.152 -;; 0x56 : 1.153 -;; 0x57 : 1.154 -;; 0x58 : 1.155 -;; 0x59 : 1.156 -;; 0x5A : 1.157 -;; 0x5B : 1.158 -;; 0x5C : 1.159 -;; 0x5D : 1.160 -;; 0x5E : 1.161 -;; 0x5F : 1.162 -;; 0x60 : A (small-bold) 1.163 -;; 0x61 : B (small-bold) 1.164 -;; 0x62 : C (small-bold) 1.165 -;; 0x63 : D (small-bold) 1.166 -;; 0x64 : E (small-bold) 1.167 -;; 0x65 : F (small-bold) 1.168 -;; 0x66 : G (small-bold) 1.169 -;; 0x67 : H (small-bold) 1.170 -;; 0x68 : I (small-bold) 1.171 -;; 0x69 : V (small-bold) 1.172 -;; 0x6A : S (small-bold) 1.173 -;; 0x6B : L (small-bold) 1.174 -;; 0x6C : M (small-bold) 1.175 -;; 0x6D : 1.176 -;; 0x6E : 1.177 -;; 0x6F : 1.178 -;; 0x70 : 1.179 -;; 0x71 : 1.180 -;; 0x72 : 1.181 -;; 0x73 : 1.182 -;; 0x74 : 1.183 -;; 0x75 : 1.184 -;; 0x76 : 1.185 -;; 0x77 : 1.186 -;; 0x78 : 1.187 -;; 0x79 : 1.188 -;; 0x7A : 1.189 -;; 0x7B : 1.190 -;; 0x7C : 1.191 -;; 0x7D : 1.192 -;; 0x7E : 1.193 -;; 0x7F : 1.194 -;; 0x80 : A 1.195 -;; 0x81 : B 1.196 -;; 0x82 : C 1.197 -;; 0x83 : D 1.198 -;; 0x84 : E 1.199 -;; 0x85 : F 1.200 -;; 0x86 : G 1.201 -;; 0x87 : H 1.202 -;; 0x88 : I 1.203 -;; 0x89 : J 1.204 -;; 0x8A : K 1.205 -;; 0x8B : L 1.206 -;; 0x8C : M 1.207 -;; 0x8D : N 1.208 -;; 0x8E : O 1.209 -;; 0x8F : P 1.210 -;; 0x90 : Q 1.211 -;; 0x91 : R 1.212 -;; 0x92 : S 1.213 -;; 0x93 : T 1.214 -;; 0x94 : U 1.215 -;; 0x95 : V 1.216 -;; 0x96 : W 1.217 -;; 0x97 : X 1.218 -;; 0x98 : Y 1.219 -;; 0x99 : Z 1.220 -;; 0x9A : ( 1.221 -;; 0x9B : ) 1.222 -;; 0x9C : : 1.223 -;; 0x9D : ; 1.224 -;; 0x9E : 1.225 -;; 0x9F : 1.226 -;; 0xA0 : a 1.227 -;; 0xA1 : b 1.228 -;; 0xA2 : c 1.229 -;; 0xA3 : d 1.230 -;; 0xA4 : e 1.231 -;; 0xA5 : f 1.232 -;; 0xA6 : g 1.233 -;; 0xA7 : h 1.234 -;; 0xA8 : i 1.235 -;; 0xA9 : j 1.236 -;; 0xAA : k 1.237 -;; 0xAB : l 1.238 -;; 0xAC : m 1.239 -;; 0xAD : n 1.240 -;; 0xAE : o 1.241 -;; 0xAF : p 1.242 -;; 0xB0 : q 1.243 -;; 0xB1 : r 1.244 -;; 0xB2 : s 1.245 -;; 0xB3 : t 1.246 -;; 0xB4 : u 1.247 -;; 0xB5 : v 1.248 -;; 0xB6 : w 1.249 -;; 0xB7 : x 1.250 -;; 0xB8 : y 1.251 -;; 0xB9 : z 1.252 -;; 0xBA : e-with-grave 1.253 -;; 0xBB : 1.254 -;; 0xBC : 1.255 -;; 0xBD : 1.256 -;; 0xBE : 1.257 -;; 0xBF : 1.258 -;; 0xC0 : 1.259 -;; 0xC1 : 1.260 -;; 0xC2 : 1.261 -;; 0xC3 : 1.262 -;; 0xC4 : 1.263 -;; 0xC5 : 1.264 -;; 0xC6 : 1.265 -;; 0xC7 : 1.266 -;; 0xC8 : 1.267 -;; 0xC9 : 1.268 -;; 0xCA : 1.269 -;; 0xCB : 1.270 -;; 0xCC : 1.271 -;; 0xCD : 1.272 -;; 0xCE : 1.273 -;; 0xCF : 1.274 -;; 0xD0 : 1.275 -;; 0xD1 : 1.276 -;; 0xD2 : 1.277 -;; 0xD3 : 1.278 -;; 0xD4 : 1.279 -;; 0xD5 : 1.280 -;; 0xD6 : 1.281 -;; 0xD7 : 1.282 -;; 0xD8 : 1.283 -;; 0xD9 : 1.284 -;; 0xDA : 1.285 -;; 0xDB : 1.286 -;; 0xDC : 1.287 -;; 0xDD : 1.288 -;; 0xDE : 1.289 -;; 0xDF : 1.290 -;; 0xE0 : ' 1.291 -;; 0xE1 : PK 1.292 -;; 0xE2 : MN 1.293 -;; 0xE3 : 1.294 -;; 0xE4 : 1.295 -;; 0xE5 : 1.296 -;; 0xE6 : ? 1.297 -;; 0xE7 : ! 1.298 -;; 0xE8 : . 1.299 -;; 0xE9 : 1.300 -;; 0xEA : 1.301 -;; 0xEB : 1.302 -;; 0xEC : 1.303 -;; 0xED : 1.304 -;; 0xEE : 1.305 -;; 0xEF : male-symbol 1.306 -;; 0xF0 : pokemon-money-symbol 1.307 -;; 0xF1 : . 1.308 -;; 0xF2 : / 1.309 -;; 0xF3 : , 1.310 -;; 0xF4 : female-symbol 1.311 -;; 0xF5 : 1.312 -;; 0xF6 : 0 1.313 -;; 0xF7 : 1 1.314 -;; 0xF8 : 2 1.315 -;; 0xF9 : 3 1.316 -;; 0xFA : 4 1.317 -;; 0xFB : 5 1.318 -;; 0xFC : 6 1.319 -;; 0xFD : 7 1.320 -;; 0xFE : 8 1.321 -;; 0xFF : 9 1.322 - 1.323 - 1.324 +;; (almost-broken 20) more or less works 1.325 + 1.326 +(defn capture-program-counter 1.327 + "records the program counter for each tick" 1.328 + [^SaveState state ticks] 1.329 + (let [i (atom 0)] 1.330 + (reduce (fn [[program-counters state] _] 1.331 + (println (swap! i inc)) 1.332 + [(conj program-counters (PC state)) 1.333 + (tick state)]) 1.334 + [[] state] 1.335 + (range ticks)))) 1.336 + 1.337 + 1.338 +(defn capture-program-counter 1.339 + [^SaveState state ticks] 1.340 + (set-state! state) 1.341 + (loop [i 0 1.342 + pcs []] 1.343 + (if (= i ticks) 1.344 + pcs 1.345 + (do 1.346 + (com.aurellem.gb.Gb/tick) 1.347 + (recur (inc i) 1.348 + (conj pcs (first (registers))))))))
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/clojure/com/aurellem/rival_name.clj Sun Mar 18 00:33:00 2012 -0500 2.3 @@ -0,0 +1,295 @@ 2.4 +(ns com.aurellem.rival-name 2.5 + (:use (com.aurellem gb-driver vbm title save-corruption items assembly)) 2.6 + (:import [com.aurellem.gb_driver SaveState])) 2.7 + 2.8 + 2.9 +(defn talk-to-rival [] 2.10 + (read-state "talk-to-rival")) 2.11 + 2.12 +(def rival-name-start 0xD349) 2.13 + 2.14 +(defn set-rival-name [^SaveState state codes] 2.15 + (set-state! state) 2.16 + (let [mem (memory state)] 2.17 + (dorun (map (fn [index val] 2.18 + (aset mem index val)) 2.19 + (range rival-name-start 2.20 + (+ rival-name-start 2.21 + (count codes))) codes)) 2.22 + (write-memory! mem) 2.23 + (update-state))) 2.24 + 2.25 +(defn view-rival-name [name-codes] 2.26 + (-> 2.27 + (set-rival-name (talk-to-rival) name-codes) 2.28 + (step [:a]) 2.29 + (play 50))) 2.30 + 2.31 +(defn rival-name-sequence [] 2.32 + (let [i (atom 1)] 2.33 + (fn [] 2.34 + (let [codes (range @i (+ 5 @i))] 2.35 + (println codes) 2.36 + (view-rival-name codes) 2.37 + (reset! i (+ 5 @i)))))) 2.38 + 2.39 + 2.40 + 2.41 +;; 0x00 : end-of-name-sentinel 2.42 +;; 0x01 : 2.43 +;; 0x02 : 2.44 +;; 0x03 : 2.45 +;; 0x04 : 2.46 +;; 0x05 : 2.47 +;; 0x06 : 2.48 +;; 0x07 : 2.49 +;; 0x08 : 2.50 +;; 0x09 : 2.51 +;; 0x0A : 2.52 +;; 0x0B : 2.53 +;; 0x0C : 2.54 +;; 0x0D : 2.55 +;; 0x0E : 2.56 +;; 0x0F : 2.57 +;; 0x10 : 2.58 +;; 0x11 : 2.59 +;; 0x12 : 2.60 +;; 0x13 : 2.61 +;; 0x14 : 2.62 +;; 0x15 : 2.63 +;; 0x16 : 2.64 +;; 0x17 : 2.65 +;; 0x18 : 2.66 +;; 0x19 : 2.67 +;; 0x1A : 2.68 +;; 0x1B : 2.69 +;; 0x1C : 2.70 +;; 0x1D : 2.71 +;; 0x1E : 2.72 +;; 0x1F : 2.73 +;; 0x20 : 2.74 +;; 0x21 : 2.75 +;; 0x22 : 2.76 +;; 0x23 : 2.77 +;; 0x24 : 2.78 +;; 0x25 : 2.79 +;; 0x26 : 2.80 +;; 0x27 : 2.81 +;; 0x28 : 2.82 +;; 0x29 : 2.83 +;; 0x2A : 2.84 +;; 0x2B : 2.85 +;; 0x2C : 2.86 +;; 0x2D : 2.87 +;; 0x2E : 2.88 +;; 0x2F : 2.89 +;; 0x30 : 2.90 +;; 0x31 : 2.91 +;; 0x32 : 2.92 +;; 0x33 : 2.93 +;; 0x34 : 2.94 +;; 0x35 : 2.95 +;; 0x36 : 2.96 +;; 0x37 : 2.97 +;; 0x38 : 2.98 +;; 0x39 : 2.99 +;; 0x3A : 2.100 +;; 0x3B : 2.101 +;; 0x3C : 2.102 +;; 0x3D : 2.103 +;; 0x3E : 2.104 +;; 0x3F : 2.105 +;; 0x40 : 2.106 +;; 0x41 : 2.107 +;; 0x42 : 2.108 +;; 0x43 : 2.109 +;; 0x44 : 2.110 +;; 0x45 : 2.111 +;; 0x46 : 2.112 +;; 0x47 : 2.113 +;; 0x48 : 2.114 +;; 0x49 : 2.115 +;; 0x4A : 2.116 +;; 0x4B : 2.117 +;; 0x4C : 2.118 +;; 0x4D : 2.119 +;; 0x4E : 2.120 +;; 0x4F : 2.121 +;; 0x50 : 2.122 +;; 0x51 : 2.123 +;; 0x52 : 2.124 +;; 0x53 : 2.125 +;; 0x54 : 2.126 +;; 0x55 : 2.127 +;; 0x56 : 2.128 +;; 0x57 : 2.129 +;; 0x58 : 2.130 +;; 0x59 : 2.131 +;; 0x5A : 2.132 +;; 0x5B : 2.133 +;; 0x5C : 2.134 +;; 0x5D : 2.135 +;; 0x5E : 2.136 +;; 0x5F : 2.137 +;; 0x60 : A (small-bold) 2.138 +;; 0x61 : B (small-bold) 2.139 +;; 0x62 : C (small-bold) 2.140 +;; 0x63 : D (small-bold) 2.141 +;; 0x64 : E (small-bold) 2.142 +;; 0x65 : F (small-bold) 2.143 +;; 0x66 : G (small-bold) 2.144 +;; 0x67 : H (small-bold) 2.145 +;; 0x68 : I (small-bold) 2.146 +;; 0x69 : V (small-bold) 2.147 +;; 0x6A : S (small-bold) 2.148 +;; 0x6B : L (small-bold) 2.149 +;; 0x6C : M (small-bold) 2.150 +;; 0x6D : 2.151 +;; 0x6E : 2.152 +;; 0x6F : 2.153 +;; 0x70 : 2.154 +;; 0x71 : 2.155 +;; 0x72 : 2.156 +;; 0x73 : 2.157 +;; 0x74 : 2.158 +;; 0x75 : 2.159 +;; 0x76 : 2.160 +;; 0x77 : 2.161 +;; 0x78 : 2.162 +;; 0x79 : 2.163 +;; 0x7A : 2.164 +;; 0x7B : 2.165 +;; 0x7C : 2.166 +;; 0x7D : 2.167 +;; 0x7E : 2.168 +;; 0x7F : 2.169 +;; 0x80 : A 2.170 +;; 0x81 : B 2.171 +;; 0x82 : C 2.172 +;; 0x83 : D 2.173 +;; 0x84 : E 2.174 +;; 0x85 : F 2.175 +;; 0x86 : G 2.176 +;; 0x87 : H 2.177 +;; 0x88 : I 2.178 +;; 0x89 : J 2.179 +;; 0x8A : K 2.180 +;; 0x8B : L 2.181 +;; 0x8C : M 2.182 +;; 0x8D : N 2.183 +;; 0x8E : O 2.184 +;; 0x8F : P 2.185 +;; 0x90 : Q 2.186 +;; 0x91 : R 2.187 +;; 0x92 : S 2.188 +;; 0x93 : T 2.189 +;; 0x94 : U 2.190 +;; 0x95 : V 2.191 +;; 0x96 : W 2.192 +;; 0x97 : X 2.193 +;; 0x98 : Y 2.194 +;; 0x99 : Z 2.195 +;; 0x9A : ( 2.196 +;; 0x9B : ) 2.197 +;; 0x9C : : 2.198 +;; 0x9D : ; 2.199 +;; 0x9E : 2.200 +;; 0x9F : 2.201 +;; 0xA0 : a 2.202 +;; 0xA1 : b 2.203 +;; 0xA2 : c 2.204 +;; 0xA3 : d 2.205 +;; 0xA4 : e 2.206 +;; 0xA5 : f 2.207 +;; 0xA6 : g 2.208 +;; 0xA7 : h 2.209 +;; 0xA8 : i 2.210 +;; 0xA9 : j 2.211 +;; 0xAA : k 2.212 +;; 0xAB : l 2.213 +;; 0xAC : m 2.214 +;; 0xAD : n 2.215 +;; 0xAE : o 2.216 +;; 0xAF : p 2.217 +;; 0xB0 : q 2.218 +;; 0xB1 : r 2.219 +;; 0xB2 : s 2.220 +;; 0xB3 : t 2.221 +;; 0xB4 : u 2.222 +;; 0xB5 : v 2.223 +;; 0xB6 : w 2.224 +;; 0xB7 : x 2.225 +;; 0xB8 : y 2.226 +;; 0xB9 : z 2.227 +;; 0xBA : e-with-grave 2.228 +;; 0xBB : 2.229 +;; 0xBC : 2.230 +;; 0xBD : 2.231 +;; 0xBE : 2.232 +;; 0xBF : 2.233 +;; 0xC0 : 2.234 +;; 0xC1 : 2.235 +;; 0xC2 : 2.236 +;; 0xC3 : 2.237 +;; 0xC4 : 2.238 +;; 0xC5 : 2.239 +;; 0xC6 : 2.240 +;; 0xC7 : 2.241 +;; 0xC8 : 2.242 +;; 0xC9 : 2.243 +;; 0xCA : 2.244 +;; 0xCB : 2.245 +;; 0xCC : 2.246 +;; 0xCD : 2.247 +;; 0xCE : 2.248 +;; 0xCF : 2.249 +;; 0xD0 : 2.250 +;; 0xD1 : 2.251 +;; 0xD2 : 2.252 +;; 0xD3 : 2.253 +;; 0xD4 : 2.254 +;; 0xD5 : 2.255 +;; 0xD6 : 2.256 +;; 0xD7 : 2.257 +;; 0xD8 : 2.258 +;; 0xD9 : 2.259 +;; 0xDA : 2.260 +;; 0xDB : 2.261 +;; 0xDC : 2.262 +;; 0xDD : 2.263 +;; 0xDE : 2.264 +;; 0xDF : 2.265 +;; 0xE0 : ' 2.266 +;; 0xE1 : PK 2.267 +;; 0xE2 : MN 2.268 +;; 0xE3 : 2.269 +;; 0xE4 : 2.270 +;; 0xE5 : 2.271 +;; 0xE6 : ? 2.272 +;; 0xE7 : ! 2.273 +;; 0xE8 : . 2.274 +;; 0xE9 : 2.275 +;; 0xEA : 2.276 +;; 0xEB : 2.277 +;; 0xEC : 2.278 +;; 0xED : 2.279 +;; 0xEE : 2.280 +;; 0xEF : male-symbol 2.281 +;; 0xF0 : pokemon-money-symbol 2.282 +;; 0xF1 : . 2.283 +;; 0xF2 : / 2.284 +;; 0xF3 : , 2.285 +;; 0xF4 : female-symbol 2.286 +;; 0xF5 : 2.287 +;; 0xF6 : 0 2.288 +;; 0xF7 : 1 2.289 +;; 0xF8 : 2 2.290 +;; 0xF9 : 3 2.291 +;; 0xFA : 4 2.292 +;; 0xFB : 5 2.293 +;; 0xFC : 6 2.294 +;; 0xFD : 7 2.295 +;; 0xFE : 8 2.296 +;; 0xFF : 9 2.297 + 2.298 +