rlm@180: (ns com.aurellem.gb.types rlm@180: (:use (com.aurellem.gb gb-driver util constants)) rlm@180: (:import [com.aurellem.gb.gb_driver SaveState])) rlm@180: rlm@180: (def type-code->type-name rlm@180: {0x00 :normal rlm@180: 0x01 :fighting rlm@180: 0x02 :flying rlm@180: 0x03 :poision rlm@180: 0x04 :ground rlm@180: 0x05 :rock rlm@180: 0x07 :bug rlm@180: 0x08 :ghost rlm@180: 0x14 :fire rlm@180: 0x15 :water rlm@180: 0x16 :grass rlm@180: 0x17 :electric rlm@180: 0x18 :psychic rlm@180: 0x19 :ice rlm@180: 0x1A :dragon}) rlm@180: rlm@180: (def type-name->type-code rlm@180: (zipmap (vals type-code->type-name) rlm@180: (keys type-code->type-name))) rlm@180: rlm@190: (def pokemon-1-type-start-address 0xD16F) rlm@180: rlm@180: (defn pokemon-type-start-address [poke-num] rlm@190: (+ pokemon-1-type-start-address rlm@180: (* pokemon-record-width poke-num))) rlm@180: rlm@180: (defn give-type rlm@180: ([^SaveState state poke-num types] rlm@180: (assert (<= 0 poke-num 5)) rlm@180: (let [types* rlm@180: (if (= (count types) 1) rlm@180: [(first types) (first types)] rlm@180: types)] rlm@180: (set-memory-range rlm@180: state rlm@180: (pokemon-type-start-address poke-num) rlm@180: (map type-name->type-code types)))) rlm@180: ([poke-num types] rlm@180: (give-type @current-state poke-num types))) rlm@180: rlm@190: (defn read-type rlm@180: ([^SaveState state poke-num] rlm@180: (assert (<= 0 poke-num 5)) rlm@180: (let [types-start (pokemon-type-start-address poke-num) rlm@180: [type-1 type-2] rlm@180: (subvec (vec (memory state)) rlm@180: types-start (+ 2 types-start))] rlm@180: (if (= type-1 type-2) rlm@180: [(type-code->type-name type-1)] rlm@180: (mapv type-code->type-name [type-1 type-2])))) rlm@180: ([poke-num] rlm@190: (read-type @current-state poke-num))) rlm@203: rlm@203: rlm@203: (def pokemon->type rlm@203: {:rhydon rlm@203: :kangaskhan rlm@203: :nidoran-male rlm@203: :clefairy rlm@203: :spearow rlm@203: :voltorb rlm@203: :nidoking rlm@203: :slowbro rlm@203: :ivysaur rlm@203: :exeggutor rlm@203: :lickitung rlm@203: :exeggcute rlm@203: :grimer rlm@203: :gengar rlm@203: :nidoran-female rlm@203: :nidoqueen rlm@203: :cubone rlm@203: :rhyhorn rlm@203: :lapras rlm@203: :arcanine rlm@203: :mew rlm@203: :gyarados rlm@203: :shellder rlm@203: :tentacool rlm@203: :gastly rlm@203: :scyther rlm@203: :staryu rlm@203: :blastoise rlm@203: :pinsir rlm@203: :tangela rlm@203: :growlithe rlm@203: :onix rlm@203: :fearow rlm@203: :pidgey rlm@203: :slowpoke rlm@203: :kadabra rlm@203: :graveler rlm@203: :chansey rlm@203: :machoke rlm@203: :mr-mime rlm@203: :hitmonlee rlm@203: :hitmonchan rlm@203: :arbok rlm@203: :parasect rlm@203: :psyduck rlm@203: :drowzee rlm@203: :golem rlm@203: :magmar rlm@203: :electabuzz rlm@203: :magneton rlm@203: :koffing rlm@203: :mankey rlm@203: :seel rlm@203: :diglett rlm@203: :tauros rlm@203: :farfetch'd rlm@203: :venonat rlm@203: :dragonite rlm@203: :doduo rlm@203: :poliwag rlm@203: :jynx rlm@203: :moltres rlm@203: :articuno rlm@203: :zapdos rlm@203: :ditto rlm@203: :meowth rlm@203: :krabby rlm@203: :vulpix rlm@203: :ninetails rlm@203: :pikachu rlm@203: :riachu rlm@203: :dratini rlm@203: :dragonair rlm@203: :kabuto rlm@203: :kabutops rlm@203: :horsea rlm@203: :sedra rlm@203: :sandshrew rlm@203: :sandslash rlm@203: :omanyte rlm@203: :omastar rlm@203: :jigglypuff rlm@203: :wigglytuff rlm@203: :eevee rlm@203: :flareon rlm@203: :jolteon rlm@203: :vaporeon rlm@203: :machop rlm@203: :zubat rlm@203: :ekans rlm@203: :paras rlm@203: :poliwhirl rlm@203: :poliwrath rlm@203: :weedle rlm@203: :kakuna rlm@203: :beedrill rlm@203: :dodrio rlm@203: :primeape rlm@203: :dugtrio rlm@203: :venomoth rlm@203: :dewgong rlm@203: :caterpie rlm@203: :metapod rlm@203: :butterfree rlm@203: :machamp rlm@203: :golduck rlm@203: :hypno rlm@203: :golbat rlm@203: :mewtwo rlm@203: :snorlax rlm@203: :magikarp rlm@203: :muk rlm@203: :kingler rlm@203: :cloyster rlm@203: :electrode rlm@203: :clefable rlm@203: :wheezing rlm@203: :persian rlm@203: :marowak rlm@203: :haunter rlm@203: :abra rlm@203: :alakazam rlm@203: :pidgeotto rlm@203: :pidgeot rlm@203: :starmie rlm@203: :bulbasaur rlm@203: :venusaur rlm@203: :tentacruel rlm@203: :goldeen rlm@203: :seaking rlm@203: :ponyta rlm@203: :rapidash rlm@203: :rattata rlm@203: :raticate rlm@203: :nidorino rlm@203: :nidorina rlm@203: :geodude rlm@203: :porygon rlm@203: :aerodactyl rlm@203: :magnemite rlm@203: :charmander rlm@203: :squirtle rlm@203: :charmeleon rlm@203: :wartortle rlm@203: :charizard rlm@203: :oddish rlm@203: :gloom rlm@203: :vileplume rlm@203: :bellsprout rlm@203: :weepenbell rlm@203: :victreebel