annotate clojure/com/aurellem/exp/moves.clj @ 162:34b518fc7404

moved important move code out of exp and into gb.
author Robert McIntyre <rlm@mit.edu>
date Tue, 20 Mar 2012 17:18:22 -0500
parents cd7979aa544e
children 9c3769060201
rev   line source
rlm@154 1 (ns com.aurellem.exp.moves
rlm@161 2 (:use (com.aurellem.gb gb-driver items util pokemon))
rlm@154 3 (:import [com.aurellem.gb.gb_driver SaveState]))
rlm@154 4
rlm@154 5 (defn move-state []
rlm@154 6 (read-state "view-pika-attacks"))
rlm@154 7
rlm@154 8 (defn view-move [n]
rlm@154 9 (run-moves
rlm@154 10 (set-memory (move-state) 0xD19E n)
rlm@154 11 (concat [[:a]]
rlm@154 12 (repeat 200 [])
rlm@154 13 [[:a]]
rlm@154 14 (repeat 200 []))))
rlm@154 15
rlm@154 16 (defn iterate-moves []
rlm@154 17 (dorun
rlm@154 18 (map (fn [n] (println n)
rlm@154 19 (view-move n)
rlm@154 20 (Thread/sleep 5000))
rlm@154 21 (range (inc 0xFF)))))
rlm@154 22
rlm@161 23 (def moves-codes-pokemon-1 0xD172)
rlm@161 24
rlm@161 25 (defn moves-codes-start [pokemon-num]
rlm@161 26 (assert (<= 0 pokemon-num 5))
rlm@161 27 (+ moves-codes-pokemon-1
rlm@161 28 (* pokemon-num pokemon-record-width)))
rlm@161 29
rlm@154 30
rlm@154 31 ;; 000 00 : null
rlm@154 32 ;; 001 01 : pound
rlm@154 33 ;; 002 02 : karate-chop
rlm@154 34 ;; 003 03 : doubleslap
rlm@154 35 ;; 004 04 : comet-punch
rlm@154 36 ;; 005 05 : mega-punch
rlm@154 37 ;; 006 06 : pay-day
rlm@154 38 ;; 007 07 : fire-punch
rlm@154 39 ;; 008 08 : ice-punch
rlm@154 40 ;; 009 09 : thunderpunch
rlm@154 41 ;; 010 0A : scratch
rlm@154 42 ;; 011 0B : vicegrip
rlm@154 43 ;; 012 0C : guillotine
rlm@154 44 ;; 013 0D : razor-wind
rlm@154 45 ;; 014 0E : swords-dance
rlm@154 46 ;; 015 0F : cut
rlm@154 47 ;; 016 10 : gust
rlm@154 48 ;; 017 11 : wing-attack
rlm@154 49 ;; 018 12 : whirlwind
rlm@154 50 ;; 019 13 : fly
rlm@154 51 ;; 020 14 : bind
rlm@154 52 ;; 021 15 : slam
rlm@154 53 ;; 022 16 : vine-whip
rlm@154 54 ;; 023 17 : stomp
rlm@154 55 ;; 024 18 : double-kick
rlm@154 56 ;; 025 19 : mega-kick
rlm@154 57 ;; 026 1A : jump-kick
rlm@154 58 ;; 027 1B : rolling-kick
rlm@154 59 ;; 028 1C : sand-attack
rlm@154 60 ;; 029 1D : headbutt
rlm@154 61 ;; 030 1E : horn-attack
rlm@154 62 ;; 031 1F : fury-attack
rlm@154 63 ;; 032 20 : horn-drill
rlm@154 64 ;; 033 21 : tackle
rlm@154 65 ;; 034 22 : body-slam
rlm@154 66 ;; 035 23 : wrap
rlm@154 67 ;; 036 24 : take-down
rlm@154 68 ;; 037 25 : thrash
rlm@154 69 ;; 038 26 : double-edge
rlm@154 70 ;; 039 27 : tail-whip
rlm@154 71 ;; 040 28 : poison-sting
rlm@154 72 ;; 041 29 : twinneedle
rlm@154 73 ;; 042 2A : pin-missle
rlm@154 74 ;; 043 2B : leer
rlm@154 75 ;; 044 2C : bite
rlm@154 76 ;; 045 2D : growl
rlm@154 77 ;; 046 2E : roar
rlm@154 78 ;; 047 2F : sing
rlm@154 79 ;; 048 30 : supersonic
rlm@154 80 ;; 049 31 : sonicboom
rlm@154 81 ;; 050 32 : disable
rlm@154 82 ;; 051 33 : acid
rlm@154 83 ;; 052 34 : ember
rlm@154 84 ;; 053 35 : flamethrower
rlm@154 85 ;; 054 36 : mist
rlm@154 86 ;; 055 37 : water-gun
rlm@154 87 ;; 056 38 : hydro-pump
rlm@154 88 ;; 057 39 : surf
rlm@154 89 ;; 058 3A : ice-beam
rlm@154 90 ;; 059 3B : blizzard
rlm@154 91 ;; 060 3C : psybeam
rlm@154 92 ;; 061 3D : bubblebeam
rlm@154 93 ;; 062 3E : aurora-beam
rlm@154 94 ;; 063 3F : hyper-beam
rlm@154 95 ;; 064 40 : peck
rlm@154 96 ;; 065 41 : drill-peck
rlm@154 97 ;; 066 42 : submission
rlm@154 98 ;; 067 43 : low-kick
rlm@154 99 ;; 068 44 : counter
rlm@154 100 ;; 069 45 : seismic-toss
rlm@154 101 ;; 070 46 : strength
rlm@154 102 ;; 071 47 : absorb
rlm@154 103 ;; 072 48 : mega-drain
rlm@154 104 ;; 073 49 : leech-seed
rlm@154 105 ;; 074 4A : growth
rlm@154 106 ;; 075 4B : razor-leaf
rlm@154 107 ;; 076 4C : solarbeam
rlm@154 108 ;; 077 4D : poisonpowder
rlm@154 109 ;; 078 4E : stun-spore
rlm@154 110 ;; 079 4F : sleep-powder
rlm@154 111 ;; 080 50 : petal-dance
rlm@154 112 ;; 081 51 : string-shot
rlm@154 113 ;; 082 52 : dragon-rage
rlm@154 114 ;; 083 53 : fire-spin
rlm@154 115 ;; 084 54 : thundershock
rlm@154 116 ;; 085 55 : thunderbolt
rlm@154 117 ;; 086 56 : thunder-wave
rlm@154 118 ;; 087 57 : thunder
rlm@154 119 ;; 088 58 : rock-throw
rlm@154 120 ;; 089 59 : earthquake
rlm@154 121 ;; 090 5A : fissure
rlm@154 122 ;; 091 5B : dig
rlm@154 123 ;; 092 5C : toxic
rlm@154 124 ;; 093 5D : confusion
rlm@154 125 ;; 094 5E : psychic
rlm@154 126 ;; 095 5F : hypnosis
rlm@154 127 ;; 096 60 : meditate
rlm@154 128 ;; 097 61 : agility
rlm@154 129 ;; 098 62 : quick-attack
rlm@154 130 ;; 099 63 : rage
rlm@154 131 ;; 100 64 : teleport
rlm@154 132 ;; 101 65 : night-shade
rlm@154 133 ;; 102 66 : mimic
rlm@154 134 ;; 103 67 : screech
rlm@154 135 ;; 104 68 : double-team
rlm@154 136 ;; 105 69 : recover
rlm@154 137 ;; 106 6A : harden
rlm@154 138 ;; 107 6B : minimize
rlm@154 139 ;; 108 6C : smokescreen
rlm@154 140 ;; 109 6D : confuse-ray
rlm@154 141 ;; 110 6E : withdraw
rlm@154 142 ;; 111 6F : defense-curl
rlm@154 143 ;; 112 70 : barrier
rlm@154 144 ;; 113 71 : light-screen
rlm@154 145 ;; 114 72 : haze
rlm@154 146 ;; 115 73 : reflect
rlm@154 147 ;; 116 74 : focus-energy
rlm@154 148 ;; 117 75 : bide
rlm@154 149 ;; 118 76 : metronome
rlm@154 150 ;; 119 77 : mirror-move
rlm@154 151 ;; 120 78 : selfdestruct
rlm@154 152 ;; 121 79 : egg-bomb
rlm@154 153 ;; 122 7A : lick
rlm@154 154 ;; 123 7B : smog
rlm@154 155 ;; 124 7C : sludge
rlm@154 156 ;; 125 7D : bone-club
rlm@154 157 ;; 126 7E : fire-blast
rlm@154 158 ;; 127 7F : waterfall
rlm@154 159 ;; 128 80 : clamp
rlm@154 160 ;; 129 81 : swift
rlm@154 161 ;; 130 82 : skull-bash
rlm@154 162 ;; 131 83 : spike-cannon
rlm@154 163 ;; 132 84 : constrict
rlm@154 164 ;; 133 85 : amnesia
rlm@154 165 ;; 134 86 : kinesis
rlm@154 166 ;; 135 87 : softboiled
rlm@154 167 ;; 136 88 : hi-jump-kick
rlm@154 168 ;; 137 89 : glare
rlm@154 169 ;; 138 8A : dream-eater
rlm@154 170 ;; 139 8B : poison-gas
rlm@154 171 ;; 140 8C : barrage
rlm@154 172 ;; 141 8D : leech-life
rlm@154 173 ;; 142 8E : lovely-kiss
rlm@154 174 ;; 143 8F : sky-attack
rlm@154 175 ;; 144 90 : transform
rlm@154 176 ;; 145 91 : bubble
rlm@154 177 ;; 146 92 : dizzy-punch
rlm@154 178 ;; 147 93 : spore
rlm@154 179 ;; 148 94 : flash
rlm@154 180 ;; 149 95 : psywave
rlm@154 181 ;; 150 96 : splash
rlm@154 182 ;; 151 97 : acid-armor
rlm@154 183 ;; 152 98 : crabhammer
rlm@154 184 ;; 153 99 : explosion
rlm@154 185 ;; 154 9A : fury-swipes
rlm@154 186 ;; 155 9B : bonemerang
rlm@154 187 ;; 156 9C : rest
rlm@154 188 ;; 157 9D : rock-slide
rlm@154 189 ;; 158 9E : hyper-fang
rlm@154 190 ;; 159 9F : sharpen
rlm@154 191 ;; 160 A0 : conversion
rlm@154 192 ;; 161 A1 : tri-attack
rlm@154 193 ;; 162 A2 : super-fang
rlm@154 194 ;; 163 A3 : slash
rlm@154 195 ;; 164 A4 : substitute
rlm@154 196 ;; 165 A5 : struggle
rlm@154 197 ;; 166 A6 : null
rlm@154 198 ;; 167 A7 : null
rlm@154 199 ;; 168 A8 : null
rlm@154 200 ;; 169 A9 : trash
rlm@154 201 ;; 170 AA : trash
rlm@154 202 ;; 171 AB : trash
rlm@154 203 ;; 172 AC : trash
rlm@154 204 ;; 173 AD : trash
rlm@154 205 ;; 174 AE : trash
rlm@154 206 ;; 175 AF : null
rlm@154 207 ;; 176 B0 : trash
rlm@154 208 ;; 177 B1 : trash
rlm@154 209 ;; 178 B2 : trash
rlm@154 210 ;; 179 B3 : trash
rlm@154 211 ;; 180 B4 : AA
rlm@154 212 ;; 181 B5 : trash
rlm@154 213 ;; 182 B6 : QQ
rlm@154 214 ;; 183 B7 : null
rlm@154 215 ;; 184 B8 : null
rlm@154 216 ;; 185 B9 : null
rlm@154 217 ;; 186 BA : null
rlm@154 218 ;; 187 BB : null
rlm@154 219 ;; 188 BC : null
rlm@154 220 ;; 189 BD : null
rlm@154 221 ;; 190 BE : trash
rlm@154 222 ;; 191 BF : null
rlm@154 223 ;; 192 C0 : null
rlm@154 224 ;; 193 C1 : null
rlm@154 225 ;; 194 C2 : null
rlm@154 226 ;; 195 C3 : null
rlm@154 227 ;; 196 C4 : HM01
rlm@154 228 ;; 197 C5 : HM02
rlm@154 229 ;; 198 C6 : HM03
rlm@154 230 ;; 199 C7 : HM04
rlm@154 231 ;; 200 C8 : HM05
rlm@154 232 ;; 201 C9 : TM01
rlm@154 233 ;; 202 CA : TM02
rlm@154 234 ;; 203 CB : TM03
rlm@154 235 ;; 204 CC : TM04
rlm@154 236 ;; 205 CD : TM05
rlm@154 237 ;; 206 CE : TM06
rlm@154 238 ;; 207 CF : TM07
rlm@154 239 ;; 208 D0 : TM08
rlm@154 240 ;; 209 D1 : TM09
rlm@154 241 ;; 210 D2 : TM10
rlm@154 242 ;; 211 D3 : TM11
rlm@154 243 ;; 212 D4 : TM12
rlm@154 244 ;; 213 D5 : TM13
rlm@154 245 ;; 214 D6 : TM14
rlm@154 246 ;; 215 D7 : TM15
rlm@154 247 ;; 216 D8 : TM16
rlm@154 248 ;; 217 D9 : TM17
rlm@154 249 ;; 218 DA : TM18
rlm@154 250 ;; 219 DB : TM19
rlm@154 251 ;; 220 DC : TM20
rlm@154 252 ;; 221 DD : TM21
rlm@154 253 ;; 222 DE : TM22
rlm@154 254 ;; 223 DF : TM23
rlm@154 255 ;; 224 E0 : TM24
rlm@154 256 ;; 225 E1 : TM25
rlm@154 257 ;; 226 E2 : TM26
rlm@154 258 ;; 227 E3 : TM27
rlm@154 259 ;; 228 E4 : TM28
rlm@154 260 ;; 229 E5 : TM29
rlm@154 261 ;; 230 E6 : TM30
rlm@154 262 ;; 231 E7 : TM31
rlm@154 263 ;; 232 E8 : TM32
rlm@154 264 ;; 233 E9 : TM33
rlm@154 265 ;; 234 EA : TM34
rlm@154 266 ;; 235 EB : TM35
rlm@154 267 ;; 236 EC : TM36
rlm@154 268 ;; 237 ED : TM37
rlm@154 269 ;; 238 EE : TM38
rlm@154 270 ;; 239 EF : TM39
rlm@154 271 ;; 240 F0 : TM40
rlm@154 272 ;; 241 F1 : TM41
rlm@154 273 ;; 242 F2 : TM42
rlm@154 274 ;; 243 F3 : TM43
rlm@154 275 ;; 244 F4 : TM44
rlm@154 276 ;; 245 F5 : TM45
rlm@154 277 ;; 246 F6 : TM46
rlm@154 278 ;; 247 F7 : TM47
rlm@154 279 ;; 248 F8 : TM48
rlm@154 280 ;; 249 F9 : TM49
rlm@154 281 ;; 250 FA : TM50
rlm@154 282 ;; 251 FB : TM51
rlm@154 283 ;; 252 FC : TM52
rlm@154 284 ;; 253 FD : TM53
rlm@154 285 ;; 254 FE : TM54
rlm@159 286 ;; 255 FF : TM55
rlm@159 287
rlm@159 288
rlm@161 289 (def move-code->move-name
rlm@161 290 {
rlm@161 291 0x01 :pound
rlm@161 292 0x02 :karate-chop
rlm@161 293 0x03 :doubleslap
rlm@161 294 0x04 :comet-punch
rlm@161 295 0x05 :mega-punch
rlm@161 296 0x06 :pay-day
rlm@161 297 0x07 :fire-punch
rlm@161 298 0x08 :ice-punch
rlm@161 299 0x09 :thunderpunch
rlm@161 300 0x0A :scratch
rlm@161 301 0x0B :vicegrip
rlm@161 302 0x0C :guillotine
rlm@161 303 0x0D :razor-wind
rlm@161 304 0x0E :swords-dance
rlm@161 305 0x0F :cut
rlm@161 306 0x10 :gust
rlm@161 307 0x11 :wing-attack
rlm@161 308 0x12 :whirlwind
rlm@161 309 0x13 :fly
rlm@161 310 0x14 :bind
rlm@161 311 0x15 :slam
rlm@161 312 0x16 :vine-whip
rlm@161 313 0x17 :stomp
rlm@161 314 0x18 :double-kick
rlm@161 315 0x19 :mega-kick
rlm@161 316 0x1A :jump-kick
rlm@161 317 0x1B :rolling-kick
rlm@161 318 0x1C :sand-attack
rlm@161 319 0x1D :headbutt
rlm@161 320 0x1E :horn-attack
rlm@161 321 0x1F :fury-attack
rlm@161 322 0x20 :horn-drill
rlm@161 323 0x21 :tackle
rlm@161 324 0x22 :body-slam
rlm@161 325 0x23 :wrap
rlm@161 326 0x24 :take-down
rlm@161 327 0x25 :thrash
rlm@161 328 0x26 :double-edge
rlm@161 329 0x27 :tail-whip
rlm@161 330 0x28 :poison-sting
rlm@161 331 0x29 :twinneedle
rlm@161 332 0x2A :pin-missle
rlm@161 333 0x2B :leer
rlm@161 334 0x2C :bite
rlm@161 335 0x2D :growl
rlm@161 336 0x2E :roar
rlm@161 337 0x2F :sing
rlm@161 338 0x30 :supersonic
rlm@161 339 0x31 :sonicboom
rlm@161 340 0x32 :disable
rlm@161 341 0x33 :acid
rlm@161 342 0x34 :ember
rlm@161 343 0x35 :flamethrower
rlm@161 344 0x36 :mist
rlm@161 345 0x37 :water-gun
rlm@161 346 0x38 :hydro-pump
rlm@161 347 0x39 :surf
rlm@161 348 0x3A :ice-beam
rlm@161 349 0x3B :blizzard
rlm@161 350 0x3C :psybeam
rlm@161 351 0x3D :bubblebeam
rlm@161 352 0x3E :aurora-beam
rlm@161 353 0x3F :hyper-beam
rlm@161 354 0x40 :peck
rlm@161 355 0x41 :drill-peck
rlm@161 356 0x42 :submission
rlm@161 357 0x43 :low-kick
rlm@161 358 0x44 :counter
rlm@161 359 0x45 :seismic-toss
rlm@161 360 0x46 :strength
rlm@161 361 0x47 :absorb
rlm@161 362 0x48 :mega-drain
rlm@161 363 0x49 :leech-seed
rlm@161 364 0x4A :growth
rlm@161 365 0x4B :razor-leaf
rlm@161 366 0x4C :solarbeam
rlm@161 367 0x4D :poisonpowder
rlm@161 368 0x4E :stun-spore
rlm@161 369 0x4F :sleep-powder
rlm@161 370 0x50 :petal-dance
rlm@161 371 0x51 :string-shot
rlm@161 372 0x52 :dragon-rage
rlm@161 373 0x53 :fire-spin
rlm@161 374 0x54 :thundershock
rlm@161 375 0x55 :thunderbolt
rlm@161 376 0x56 :thunder-wave
rlm@161 377 0x57 :thunder
rlm@161 378 0x58 :rock-throw
rlm@161 379 0x59 :earthquake
rlm@161 380 0x5A :fissure
rlm@161 381 0x5B :dig
rlm@161 382 0x5C :toxic
rlm@161 383 0x5D :confusion
rlm@161 384 0x5E :psychic
rlm@161 385 0x5F :hypnosis
rlm@161 386 0x60 :meditate
rlm@161 387 0x61 :agility
rlm@161 388 0x62 :quick-attack
rlm@161 389 0x63 :rage
rlm@161 390 0x64 :teleport
rlm@161 391 0x65 :night-shade
rlm@161 392 0x66 :mimic
rlm@161 393 0x67 :screech
rlm@161 394 0x68 :double-team
rlm@161 395 0x69 :recover
rlm@161 396 0x6A :harden
rlm@161 397 0x6B :minimize
rlm@161 398 0x6C :smokescreen
rlm@161 399 0x6D :confuse-ray
rlm@161 400 0x6E :withdraw
rlm@161 401 0x6F :defense-curl
rlm@161 402 0x70 :barrier
rlm@161 403 0x71 :light-screen
rlm@161 404 0x72 :haze
rlm@161 405 0x73 :reflect
rlm@161 406 0x74 :focus-energy
rlm@161 407 0x75 :bide
rlm@161 408 0x76 :metronome
rlm@161 409 0x77 :mirror-move
rlm@161 410 0x78 :selfdestruct
rlm@161 411 0x79 :egg-bomb
rlm@161 412 0x7A :lick
rlm@161 413 0x7B :smog
rlm@161 414 0x7C :sludge
rlm@161 415 0x7D :bone-club
rlm@161 416 0x7E :fire-blast
rlm@161 417 0x7F :waterfall
rlm@161 418 0x80 :clamp
rlm@161 419 0x81 :swift
rlm@161 420 0x82 :skull-bash
rlm@161 421 0x83 :spike-cannon
rlm@161 422 0x84 :constrict
rlm@161 423 0x85 :amnesia
rlm@161 424 0x86 :kinesis
rlm@161 425 0x87 :softboiled
rlm@161 426 0x88 :hi-jump-kick
rlm@161 427 0x89 :glare
rlm@161 428 0x8A :dream-eater
rlm@161 429 0x8B :poison-gas
rlm@161 430 0x8C :barrage
rlm@161 431 0x8D :leech-life
rlm@161 432 0x8E :lovely-kiss
rlm@161 433 0x8F :sky-attack
rlm@161 434 0x90 :transform
rlm@161 435 0x91 :bubble
rlm@161 436 0x92 :dizzy-punch
rlm@161 437 0x93 :spore
rlm@161 438 0x94 :flash
rlm@161 439 0x95 :psywave
rlm@161 440 0x96 :splash
rlm@161 441 0x97 :acid-armor
rlm@161 442 0x98 :crabhammer
rlm@161 443 0x99 :explosion
rlm@161 444 0x9A :fury-swipes
rlm@161 445 0x9B :bonemerang
rlm@161 446 0x9C :rest
rlm@161 447 0x9D :rock-slide
rlm@161 448 0x9E :hyper-fang
rlm@161 449 0x9F :sharpen
rlm@161 450 0xA0 :conversion
rlm@161 451 0xA1 :tri-attack
rlm@161 452 0xA2 :super-fang
rlm@161 453 0xA3 :slash
rlm@161 454 0xA4 :substitute
rlm@161 455 0xA5 :struggle})
rlm@159 456
rlm@161 457 (def move-name->move-code
rlm@161 458 (zipmap (vals move-code->move-name)
rlm@161 459 (keys move-code->move-name)))
rlm@161 460
rlm@161 461 (defn give-moves
rlm@161 462 ([^SaveState state pokemon-num moves]
rlm@161 463 (set-memory-range
rlm@161 464 state
rlm@161 465 (moves-codes-start pokemon-num)
rlm@161 466 (map #(move-name->move-code % %) moves)))
rlm@161 467 ([pokemon-num moves]
rlm@161 468 (give-moves @current-state pokemon-num moves))
rlm@161 469 ([moves]
rlm@161 470 (give-moves 0 moves)))
rlm@159 471
rlm@159 472 ;; Note regarding PP of moves -- both the current PP and the
rlm@161 473 ;; total PP are stored in the same value.
rlm@161 474 ;; they are bit-packed, with the first 2 bits containing the
rlm@161 475 ;; number of pp-ups that have been applied, and the next
rlm@161 476 ;; six bits containing the current pp of the move.
rlm@161 477 ;; thus, a move can have up to 63 current pp and up to
rlm@161 478 ;; three pp-ups applied.
rlm@161 479
rlm@161 480
rlm@161 481 (def pokemon-1-pp-start 0xD187)
rlm@161 482
rlm@161 483 (defn moves-pp-start [pokemon-num]
rlm@161 484 (assert (<= 0 pokemon-num 5))
rlm@161 485 (+ pokemon-1-pp-start (* pokemon-num pokemon-record-width)))
rlm@161 486
rlm@161 487 (defn read-pp
rlm@161 488 ([^SaveState state pokemon-num move-num]
rlm@161 489 (assert (<= 0 move-num 3))
rlm@161 490 (assert (<= 0 pokemon-num 5))
rlm@161 491 (let [pp-raw
rlm@161 492 (aget (memory state)
rlm@161 493 (+ (moves-pp-start pokemon-num)
rlm@161 494 move-num))
rlm@161 495 pp-up
rlm@161 496 (bit-shift-right
rlm@161 497 (bit-and
rlm@161 498 pp-raw
rlm@161 499 (Integer/parseInt "11000000" 2)) 6)
rlm@161 500 current-pp
rlm@161 501 (bit-and
rlm@161 502 pp-raw
rlm@161 503 (Integer/parseInt "00111111" 2))]
rlm@161 504 [pp-up current-pp]))
rlm@161 505 ([pokemon-num move-num]
rlm@161 506 (read-pp @current-state pokemon-num move-num)))
rlm@161 507
rlm@161 508 (defn give-pp
rlm@161 509 ([^SaveState state pokemon-num move-num pp-ups current-pp]
rlm@161 510 (assert (<= 0 move-num 3))
rlm@161 511 (assert (<= 0 pokemon-num 5))
rlm@161 512 (assert (<= 0 pp-ups 3))
rlm@161 513 (assert (<= 0 current-pp 63))
rlm@161 514
rlm@161 515 (set-memory
rlm@161 516 state
rlm@161 517 (+ (moves-pp-start pokemon-num)
rlm@161 518 move-num)
rlm@161 519 (+
rlm@161 520 (bit-shift-left pp-ups 6)
rlm@161 521 (bit-and (Integer/parseInt
rlm@161 522 "00111111" 2)
rlm@161 523 current-pp))))
rlm@161 524 ([pokemon-num move-num pp-ups current-pp]
rlm@161 525 (set-pp @current-state
rlm@161 526 pokemon-num move-num pp-ups current-pp)))