# HG changeset patch # User Dylan Holmes # Date 1332417782 18000 # Node ID 531e1342ff56e1fc748dbbb9f70fca7039ec8bf4 # Parent c8ec477beeacc0ae3b66c15f3a4a0f098ba8553d# Parent f0c1e5574e810216997fd34ece7b7ad9aef4f401 merged changes. diff -r c8ec477beeac -r 531e1342ff56 clojure/com/aurellem/gb/types.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clojure/com/aurellem/gb/types.clj Thu Mar 22 07:03:02 2012 -0500 @@ -0,0 +1,58 @@ +(ns com.aurellem.gb.types + (:use (com.aurellem.gb gb-driver util constants)) + (:import [com.aurellem.gb.gb_driver SaveState])) + +(def type-code->type-name + {0x00 :normal + 0x01 :fighting + 0x02 :flying + 0x03 :poision + 0x04 :ground + 0x05 :rock + 0x07 :bug + 0x08 :ghost + 0x14 :fire + 0x15 :water + 0x16 :grass + 0x17 :electric + 0x18 :psychic + 0x19 :ice + 0x1A :dragon}) + +(def type-name->type-code + (zipmap (vals type-code->type-name) + (keys type-code->type-name))) + +(def pokemon-1-types-start-address 0xD16F) + +(defn pokemon-type-start-address [poke-num] + (+ pokemon-1-types-start-address + (* pokemon-record-width poke-num))) + +(defn give-type + ([^SaveState state poke-num types] + (assert (<= 0 poke-num 5)) + (let [types* + (if (= (count types) 1) + [(first types) (first types)] + types)] + (set-memory-range + state + (pokemon-type-start-address poke-num) + (map type-name->type-code types)))) + ([poke-num types] + (give-type @current-state poke-num types))) + +(defn read-types + ([^SaveState state poke-num] + (assert (<= 0 poke-num 5)) + (let [types-start (pokemon-type-start-address poke-num) + [type-1 type-2] + (subvec (vec (memory state)) + types-start (+ 2 types-start))] + (if (= type-1 type-2) + [(type-code->type-name type-1)] + (mapv type-code->type-name [type-1 type-2])))) + ([poke-num] + (read-types @current-state poke-num))) + \ No newline at end of file