annotate clojure/com/aurellem/gb/types.clj @ 203:85a2c2e2d318

have to add default types for all pokemon.
author Robert McIntyre <rlm@mit.edu>
date Fri, 23 Mar 2012 04:00:42 -0500
parents 9a7a46c4aa1b
children 43bb461a7419
rev   line source
rlm@180 1 (ns com.aurellem.gb.types
rlm@180 2 (:use (com.aurellem.gb gb-driver util constants))
rlm@180 3 (:import [com.aurellem.gb.gb_driver SaveState]))
rlm@180 4
rlm@180 5 (def type-code->type-name
rlm@180 6 {0x00 :normal
rlm@180 7 0x01 :fighting
rlm@180 8 0x02 :flying
rlm@180 9 0x03 :poision
rlm@180 10 0x04 :ground
rlm@180 11 0x05 :rock
rlm@180 12 0x07 :bug
rlm@180 13 0x08 :ghost
rlm@180 14 0x14 :fire
rlm@180 15 0x15 :water
rlm@180 16 0x16 :grass
rlm@180 17 0x17 :electric
rlm@180 18 0x18 :psychic
rlm@180 19 0x19 :ice
rlm@180 20 0x1A :dragon})
rlm@180 21
rlm@180 22 (def type-name->type-code
rlm@180 23 (zipmap (vals type-code->type-name)
rlm@180 24 (keys type-code->type-name)))
rlm@180 25
rlm@190 26 (def pokemon-1-type-start-address 0xD16F)
rlm@180 27
rlm@180 28 (defn pokemon-type-start-address [poke-num]
rlm@190 29 (+ pokemon-1-type-start-address
rlm@180 30 (* pokemon-record-width poke-num)))
rlm@180 31
rlm@180 32 (defn give-type
rlm@180 33 ([^SaveState state poke-num types]
rlm@180 34 (assert (<= 0 poke-num 5))
rlm@180 35 (let [types*
rlm@180 36 (if (= (count types) 1)
rlm@180 37 [(first types) (first types)]
rlm@180 38 types)]
rlm@180 39 (set-memory-range
rlm@180 40 state
rlm@180 41 (pokemon-type-start-address poke-num)
rlm@180 42 (map type-name->type-code types))))
rlm@180 43 ([poke-num types]
rlm@180 44 (give-type @current-state poke-num types)))
rlm@180 45
rlm@190 46 (defn read-type
rlm@180 47 ([^SaveState state poke-num]
rlm@180 48 (assert (<= 0 poke-num 5))
rlm@180 49 (let [types-start (pokemon-type-start-address poke-num)
rlm@180 50 [type-1 type-2]
rlm@180 51 (subvec (vec (memory state))
rlm@180 52 types-start (+ 2 types-start))]
rlm@180 53 (if (= type-1 type-2)
rlm@180 54 [(type-code->type-name type-1)]
rlm@180 55 (mapv type-code->type-name [type-1 type-2]))))
rlm@180 56 ([poke-num]
rlm@190 57 (read-type @current-state poke-num)))
rlm@203 58
rlm@203 59
rlm@203 60 (def pokemon->type
rlm@203 61 {:rhydon
rlm@203 62 :kangaskhan
rlm@203 63 :nidoran-male
rlm@203 64 :clefairy
rlm@203 65 :spearow
rlm@203 66 :voltorb
rlm@203 67 :nidoking
rlm@203 68 :slowbro
rlm@203 69 :ivysaur
rlm@203 70 :exeggutor
rlm@203 71 :lickitung
rlm@203 72 :exeggcute
rlm@203 73 :grimer
rlm@203 74 :gengar
rlm@203 75 :nidoran-female
rlm@203 76 :nidoqueen
rlm@203 77 :cubone
rlm@203 78 :rhyhorn
rlm@203 79 :lapras
rlm@203 80 :arcanine
rlm@203 81 :mew
rlm@203 82 :gyarados
rlm@203 83 :shellder
rlm@203 84 :tentacool
rlm@203 85 :gastly
rlm@203 86 :scyther
rlm@203 87 :staryu
rlm@203 88 :blastoise
rlm@203 89 :pinsir
rlm@203 90 :tangela
rlm@203 91 :growlithe
rlm@203 92 :onix
rlm@203 93 :fearow
rlm@203 94 :pidgey
rlm@203 95 :slowpoke
rlm@203 96 :kadabra
rlm@203 97 :graveler
rlm@203 98 :chansey
rlm@203 99 :machoke
rlm@203 100 :mr-mime
rlm@203 101 :hitmonlee
rlm@203 102 :hitmonchan
rlm@203 103 :arbok
rlm@203 104 :parasect
rlm@203 105 :psyduck
rlm@203 106 :drowzee
rlm@203 107 :golem
rlm@203 108 :magmar
rlm@203 109 :electabuzz
rlm@203 110 :magneton
rlm@203 111 :koffing
rlm@203 112 :mankey
rlm@203 113 :seel
rlm@203 114 :diglett
rlm@203 115 :tauros
rlm@203 116 :farfetch'd
rlm@203 117 :venonat
rlm@203 118 :dragonite
rlm@203 119 :doduo
rlm@203 120 :poliwag
rlm@203 121 :jynx
rlm@203 122 :moltres
rlm@203 123 :articuno
rlm@203 124 :zapdos
rlm@203 125 :ditto
rlm@203 126 :meowth
rlm@203 127 :krabby
rlm@203 128 :vulpix
rlm@203 129 :ninetails
rlm@203 130 :pikachu
rlm@203 131 :riachu
rlm@203 132 :dratini
rlm@203 133 :dragonair
rlm@203 134 :kabuto
rlm@203 135 :kabutops
rlm@203 136 :horsea
rlm@203 137 :sedra
rlm@203 138 :sandshrew
rlm@203 139 :sandslash
rlm@203 140 :omanyte
rlm@203 141 :omastar
rlm@203 142 :jigglypuff
rlm@203 143 :wigglytuff
rlm@203 144 :eevee
rlm@203 145 :flareon
rlm@203 146 :jolteon
rlm@203 147 :vaporeon
rlm@203 148 :machop
rlm@203 149 :zubat
rlm@203 150 :ekans
rlm@203 151 :paras
rlm@203 152 :poliwhirl
rlm@203 153 :poliwrath
rlm@203 154 :weedle
rlm@203 155 :kakuna
rlm@203 156 :beedrill
rlm@203 157 :dodrio
rlm@203 158 :primeape
rlm@203 159 :dugtrio
rlm@203 160 :venomoth
rlm@203 161 :dewgong
rlm@203 162 :caterpie
rlm@203 163 :metapod
rlm@203 164 :butterfree
rlm@203 165 :machamp
rlm@203 166 :golduck
rlm@203 167 :hypno
rlm@203 168 :golbat
rlm@203 169 :mewtwo
rlm@203 170 :snorlax
rlm@203 171 :magikarp
rlm@203 172 :muk
rlm@203 173 :kingler
rlm@203 174 :cloyster
rlm@203 175 :electrode
rlm@203 176 :clefable
rlm@203 177 :wheezing
rlm@203 178 :persian
rlm@203 179 :marowak
rlm@203 180 :haunter
rlm@203 181 :abra
rlm@203 182 :alakazam
rlm@203 183 :pidgeotto
rlm@203 184 :pidgeot
rlm@203 185 :starmie
rlm@203 186 :bulbasaur
rlm@203 187 :venusaur
rlm@203 188 :tentacruel
rlm@203 189 :goldeen
rlm@203 190 :seaking
rlm@203 191 :ponyta
rlm@203 192 :rapidash
rlm@203 193 :rattata
rlm@203 194 :raticate
rlm@203 195 :nidorino
rlm@203 196 :nidorina
rlm@203 197 :geodude
rlm@203 198 :porygon
rlm@203 199 :aerodactyl
rlm@203 200 :magnemite
rlm@203 201 :charmander
rlm@203 202 :squirtle
rlm@203 203 :charmeleon
rlm@203 204 :wartortle
rlm@203 205 :charizard
rlm@203 206 :oddish
rlm@203 207 :gloom
rlm@203 208 :vileplume
rlm@203 209 :bellsprout
rlm@203 210 :weepenbell
rlm@203 211 :victreebel