rlm@165: (ns com.aurellem.gb.species ocsenave@213: (:use (com.aurellem.gb assembly characters gb-driver util ocsenave@213: constants)) rlm@165: (:import [com.aurellem.gb.gb_driver SaveState])) rlm@165: rlm@222: rlm@222: rlm@165: (def species-code->species-name rlm@165: {0x01 :rhydon rlm@165: 0x02 :kangaskhan rlm@222: 0x03 :nidoran♂ rlm@165: 0x04 :clefairy rlm@165: 0x05 :spearow rlm@165: 0x06 :voltorb rlm@165: 0x07 :nidoking rlm@165: 0x08 :slowbro rlm@165: 0x09 :ivysaur rlm@165: 0x0A :exeggutor rlm@165: 0x0B :lickitung rlm@165: 0x0C :exeggcute rlm@165: 0x0D :grimer rlm@165: 0x0E :gengar rlm@222: 0x0F :nidoran♀ rlm@165: 0x10 :nidoqueen rlm@165: 0x11 :cubone rlm@165: 0x12 :rhyhorn rlm@165: 0x13 :lapras rlm@165: 0x14 :arcanine rlm@165: 0x15 :mew rlm@165: 0x16 :gyarados rlm@165: 0x17 :shellder rlm@165: 0x18 :tentacool rlm@165: 0x19 :gastly rlm@165: 0x1A :scyther rlm@165: 0x1B :staryu rlm@165: 0x1C :blastoise rlm@165: 0x1D :pinsir rlm@165: 0x1E :tangela rlm@165: 0x21 :growlithe rlm@165: 0x22 :onix rlm@165: 0x23 :fearow rlm@165: 0x24 :pidgey rlm@165: 0x25 :slowpoke rlm@165: 0x26 :kadabra rlm@165: 0x27 :graveler rlm@165: 0x28 :chansey rlm@165: 0x29 :machoke rlm@165: 0x2A :mr-mime rlm@165: 0x2B :hitmonlee rlm@165: 0x2C :hitmonchan rlm@165: 0x2D :arbok rlm@165: 0x2E :parasect rlm@165: 0x2F :psyduck rlm@165: 0x30 :drowzee rlm@165: 0x31 :golem rlm@165: 0x33 :magmar rlm@165: 0x35 :electabuzz rlm@165: 0x36 :magneton rlm@165: 0x37 :koffing rlm@165: 0x39 :mankey rlm@165: 0x3A :seel rlm@165: 0x3B :diglett rlm@165: 0x3C :tauros rlm@214: 0x40 :farfetch rlm@165: 0x41 :venonat rlm@165: 0x42 :dragonite rlm@165: 0x46 :doduo rlm@165: 0x47 :poliwag rlm@165: 0x48 :jynx rlm@165: 0x49 :moltres rlm@165: 0x4A :articuno rlm@165: 0x4B :zapdos rlm@165: 0x4C :ditto rlm@165: 0x4D :meowth rlm@165: 0x4E :krabby rlm@165: 0x52 :vulpix rlm@222: 0x53 :ninetales rlm@165: 0x54 :pikachu rlm@222: 0x55 :raichu rlm@165: 0x58 :dratini rlm@165: 0x59 :dragonair rlm@165: 0x5A :kabuto rlm@165: 0x5B :kabutops rlm@165: 0x5C :horsea rlm@222: 0x5D :seadra rlm@165: 0x60 :sandshrew rlm@165: 0x61 :sandslash rlm@165: 0x62 :omanyte rlm@165: 0x63 :omastar rlm@165: 0x64 :jigglypuff rlm@165: 0x65 :wigglytuff rlm@165: 0x66 :eevee rlm@165: 0x67 :flareon rlm@165: 0x68 :jolteon rlm@165: 0x69 :vaporeon rlm@165: 0x6A :machop rlm@165: 0x6B :zubat rlm@165: 0x6C :ekans rlm@165: 0x6D :paras rlm@165: 0x6E :poliwhirl rlm@165: 0x6F :poliwrath rlm@165: 0x70 :weedle rlm@165: 0x71 :kakuna rlm@165: 0x72 :beedrill rlm@165: 0x74 :dodrio rlm@165: 0x75 :primeape rlm@165: 0x76 :dugtrio rlm@165: 0x77 :venomoth rlm@165: 0x78 :dewgong rlm@165: 0x7B :caterpie rlm@165: 0x7C :metapod rlm@165: 0x7D :butterfree rlm@165: 0x7E :machamp rlm@165: 0x80 :golduck rlm@165: 0x81 :hypno rlm@165: 0x82 :golbat rlm@165: 0x83 :mewtwo rlm@165: 0x84 :snorlax rlm@165: 0x85 :magikarp rlm@165: 0x88 :muk rlm@165: 0x8A :kingler rlm@165: 0x8B :cloyster rlm@165: 0x8D :electrode rlm@165: 0x8E :clefable rlm@222: 0x8F :weezing rlm@165: 0x90 :persian rlm@165: 0x91 :marowak rlm@165: 0x93 :haunter rlm@165: 0x94 :abra rlm@165: 0x95 :alakazam rlm@165: 0x96 :pidgeotto rlm@165: 0x97 :pidgeot rlm@165: 0x98 :starmie rlm@165: 0x99 :bulbasaur rlm@165: 0x9A :venusaur rlm@165: 0x9B :tentacruel rlm@165: 0x9D :goldeen rlm@165: 0x9E :seaking rlm@165: 0xA3 :ponyta rlm@165: 0xA4 :rapidash rlm@165: 0xA5 :rattata rlm@165: 0xA6 :raticate rlm@165: 0xA7 :nidorino rlm@165: 0xA8 :nidorina rlm@165: 0xA9 :geodude rlm@165: 0xAA :porygon rlm@165: 0xAB :aerodactyl rlm@165: 0xAD :magnemite rlm@165: 0xB0 :charmander rlm@165: 0xB1 :squirtle rlm@165: 0xB2 :charmeleon rlm@165: 0xB3 :wartortle rlm@165: 0xB4 :charizard rlm@165: 0xB9 :oddish rlm@165: 0xBA :gloom rlm@165: 0xBB :vileplume rlm@165: 0xBC :bellsprout rlm@222: 0xBD :weepinbell rlm@165: 0xBE :victreebel}) rlm@165: rlm@165: (def species-ID-1 0xD163) rlm@165: rlm@165: (def species-name->species-code rlm@165: (zipmap (vals species-code->species-name) rlm@165: (keys species-code->species-name))) rlm@165: rlm@190: (defn pokemon-species-data-address [poke-num] rlm@190: (+ species-ID-1 poke-num)) rlm@190: rlm@190: (defn read-species rlm@190: ([^SaveState state poke-num] rlm@190: (assert (<= 0 poke-num 5)) rlm@190: (species-code->species-name rlm@190: (aget (memory state) rlm@190: (pokemon-species-data-address poke-num)))) rlm@190: ([poke-num] rlm@190: (read-species @current-state poke-num))) rlm@190: rlm@165: (defn set-species rlm@190: ([^SaveState state poke-num species-name] rlm@190: (assert (<= 0 poke-num 5)) rlm@165: (let [species-code (species-name->species-code rlm@165: species-name rlm@165: species-name)] rlm@165: rlm@190: (set-memory state (pokemon-species-data-address poke-num) rlm@165: species-code))) rlm@190: ([poke-num species-name] rlm@190: (set-species @current-state poke-num species-name))) rlm@166: rlm@166: rlm@191: (def pokemon-1-species2-address 0xD16A) rlm@191: rlm@191: (defn pokemon-species2-address [poke-num] rlm@191: (+ pokemon-1-species2-address rlm@191: (* pokemon-record-width poke-num))) rlm@191: rlm@191: (defn read-species2 rlm@191: ([^SaveState state poke-num] rlm@191: (species-code->species-name rlm@191: (aget (memory state) rlm@191: (pokemon-species2-address poke-num)))) rlm@191: ([poke-num] rlm@191: (read-species2 @current-state poke-num))) rlm@191: rlm@191: (defn set-species2 rlm@191: ([^SaveState state poke-num new-species] rlm@191: (let [species-code (species-name->species-code rlm@191: new-species rlm@191: new-species)] rlm@191: rlm@191: (set-memory state (pokemon-species2-address poke-num) rlm@191: species-code))) rlm@191: ([poke-num new-species] rlm@191: (set-species2 @current-state poke-num new-species))) rlm@191: rlm@222: rlm@222: (def pokedex-num->species-name rlm@222: {1 :bulbasaur rlm@222: 2 :ivysaur rlm@222: 3 :venusaur rlm@222: 4 :charmander rlm@222: 5 :charmeleon rlm@222: 6 :charizard rlm@222: 7 :squirtle rlm@222: 8 :wartortle rlm@222: 9 :blastoise rlm@222: 10 :caterpie rlm@222: 11 :metapod rlm@222: 12 :butterfree rlm@222: 13 :weedle rlm@222: 14 :kakuna rlm@222: 15 :beedrill rlm@222: 16 :pidgey rlm@222: 17 :pidgeotto rlm@222: 18 :pidgeot rlm@222: 19 :rattata rlm@222: 20 :raticate rlm@222: 21 :spearow rlm@222: 22 :fearow rlm@222: 23 :ekans rlm@222: 24 :arbok rlm@222: 25 :pikachu rlm@222: 26 :raichu rlm@222: 27 :sandshrew rlm@222: 28 :sandslash rlm@222: 29 :nidoran♀ rlm@222: 30 :nidorina rlm@222: 31 :nidoqueen rlm@222: 32 :nidoran♂ rlm@222: 33 :nidorino rlm@222: 34 :nidoking rlm@222: 35 :clefairy rlm@222: 36 :clefable rlm@222: 37 :vulpix rlm@222: 38 :ninetales rlm@222: 39 :jigglypuff rlm@222: 40 :wigglytuff rlm@222: 41 :zubat rlm@222: 42 :golbat rlm@222: 43 :oddish rlm@222: 44 :gloom rlm@222: 45 :vileplume rlm@222: 46 :paras rlm@222: 47 :parasect rlm@222: 48 :venonat rlm@222: 49 :venomoth rlm@222: 50 :diglett rlm@222: 51 :dugtrio rlm@222: 52 :meowth rlm@222: 53 :persian rlm@222: 54 :psyduck rlm@222: 55 :golduck rlm@222: 56 :mankey rlm@222: 57 :primeape rlm@222: 58 :growlithe rlm@222: 59 :arcanine rlm@222: 60 :poliwag rlm@222: 61 :poliwhirl rlm@222: 62 :poliwrath rlm@222: 63 :abra rlm@222: 64 :kadabra rlm@222: 65 :alakazam rlm@222: 66 :machop rlm@222: 67 :machoke rlm@222: 68 :machamp rlm@222: 69 :bellsprout rlm@222: 70 :weepinbell rlm@222: 71 :victreebel rlm@222: 72 :tentacool rlm@222: 73 :tentacruel rlm@222: 74 :geodude rlm@222: 75 :graveler rlm@222: 76 :golem rlm@222: 77 :ponyta rlm@222: 78 :rapidash rlm@222: 79 :slowpoke rlm@222: 80 :slowbro rlm@222: 81 :magnemite rlm@222: 82 :magneton rlm@222: 83 :farfetch rlm@222: 84 :doduo rlm@222: 85 :dodrio rlm@222: 86 :seel rlm@222: 87 :dewgong rlm@222: 88 :grimer rlm@222: 89 :muk rlm@222: 90 :shellder rlm@222: 91 :cloyster rlm@222: 92 :gastly rlm@222: 93 :haunter rlm@222: 94 :gengar rlm@222: 95 :onix rlm@222: 96 :drowzee rlm@222: 97 :hypno rlm@222: 98 :krabby rlm@222: 99 :kingler rlm@222: 100 :voltorb rlm@222: 101 :electrode rlm@222: 102 :exeggcute rlm@222: 103 :exeggutor rlm@222: 104 :cubone rlm@222: 105 :marowak rlm@222: 106 :hitmonlee rlm@222: 107 :hitmonchan rlm@222: 108 :lickitung rlm@222: 109 :koffing rlm@222: 110 :weezing rlm@222: 111 :rhyhorn rlm@222: 112 :rhydon rlm@222: 113 :chansey rlm@222: 114 :tangela rlm@222: 115 :kangaskhan rlm@222: 116 :horsea rlm@222: 117 :seadra rlm@222: 118 :goldeen rlm@222: 119 :seaking rlm@222: 120 :staryu rlm@222: 121 :starmie rlm@222: 122 :mr-mime rlm@222: 123 :scyther rlm@222: 124 :jynx rlm@222: 125 :electabuzz rlm@222: 126 :magmar rlm@222: 127 :pinsir rlm@222: 128 :tauros rlm@222: 129 :magikarp rlm@222: 130 :gyarados rlm@222: 131 :lapras rlm@222: 132 :ditto rlm@222: 133 :eevee rlm@222: 134 :vaporeon rlm@222: 135 :jolteon rlm@222: 136 :flareon rlm@222: 137 :porygon rlm@222: 138 :omanyte rlm@222: 139 :omastar rlm@222: 140 :kabuto rlm@222: 141 :kabutops rlm@222: 142 :aerodactyl rlm@222: 143 :snorlax rlm@222: 144 :articuno rlm@222: 145 :zapdos rlm@222: 146 :moltres rlm@222: 147 :dratini rlm@222: 148 :dragonair rlm@222: 149 :dragonite rlm@222: 150 :mewtwo rlm@222: 151 :mew}) rlm@222: rlm@223: (def species-name->pokedex-num rlm@223: (zipmap (vals pokedex-num->species-name) rlm@223: (keys pokedex-num->species-name)))