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)))
|
rlm@161
|
527
|
rlm@161
|
528
|
rlm@161
|
529
|
rlm@161
|
530 |