rlm@176: (ns com.aurellem.gb.status rlm@192: (:use (com.aurellem.gb gb-driver util constants)) rlm@176: (:import [com.aurellem.gb.gb_driver SaveState])) rlm@176: rlm@176: (def status-name->status-code rlm@176: {:normal (Integer/parseInt "00000000" 2) rlm@176: :sleep-1 (Integer/parseInt "00000001" 2) rlm@176: :sleep-2 (Integer/parseInt "00000010" 2) rlm@176: :sleep-3 (Integer/parseInt "00000011" 2) rlm@176: :sleep-4 (Integer/parseInt "00000100" 2) rlm@176: :sleep-5 (Integer/parseInt "00000101" 2) rlm@176: :sleep-6 (Integer/parseInt "00000111" 2) rlm@176: :poisoned (Integer/parseInt "00001000" 2) rlm@176: :burned (Integer/parseInt "00010000" 2) rlm@176: :frozen (Integer/parseInt "00100000" 2) rlm@176: :paralyzed (Integer/parseInt "01000000" 2)}) rlm@176: rlm@176: (def status-code->status-name rlm@176: (zipmap (vals status-name->status-code) rlm@176: (keys status-name->status-code))) rlm@176: rlm@176: (def pokemon-1-status-address 0xD16E) rlm@176: rlm@176: (defn pokemon-status-address [poke-num] rlm@176: (+ pokemon-1-status-address rlm@176: (* poke-num pokemon-record-width))) rlm@176: rlm@191: (defn read-status rlm@191: ([^SaveState state poke-num] rlm@191: (assert (<= 0 poke-num 5)) rlm@191: (status-code->status-name rlm@191: (aget (memory state) rlm@191: (pokemon-status-address poke-num)))) rlm@191: ([poke-num] rlm@191: (read-status @current-state poke-num))) rlm@191: rlm@191: (defn give-status rlm@176: ([^SaveState state poke-num status] rlm@176: (assert (<= 0 poke-num 5)) rlm@176: (let [status-code rlm@176: (status-name->status-code status)] rlm@176: (assert status-code) rlm@176: (set-memory state rlm@176: (pokemon-status-address poke-num) rlm@176: status-code))) rlm@176: ([poke-num status] rlm@192: (give-status @current-state poke-num status)) rlm@176: ([status] rlm@192: (give-status @current-state 0 status))) rlm@176: