annotate clojure/com/aurellem/world/practice.clj @ 262:868783405ac2

script: left oak's lab.
author Robert McIntyre <rlm@mit.edu>
date Mon, 26 Mar 2012 21:00:23 -0500
parents b2f9a0cb13e3
children a44a2c459aeb
rev   line source
ocsenave@185 1 (ns com.aurellem.world.practice
ocsenave@227 2 (:use (com.aurellem.gb saves util constants gb-driver vbm items assembly characters))
ocsenave@227 3 (:use (com.aurellem.run title))
ocsenave@227 4 (:use (com.aurellem.exp pokemon))
ocsenave@227 5 (:use (com.aurellem.exp item-bridge))
ocsenave@227 6 (:import [com.aurellem.gb.gb_driver SaveState]))
ocsenave@227 7
ocsenave@227 8
ocsenave@227 9 ;;(def original-rom (rom(root)))
ocsenave@227 10
ocsenave@185 11
ocsenave@185 12 (def hex-pc (comp hex PC))
ocsenave@185 13
ocsenave@194 14 (defn nstep [state n]
ocsenave@194 15 (if (zero? n) state
ocsenave@194 16 (recur (step state) (dec n))))
ocsenave@185 17
ocsenave@185 18
ocsenave@259 19 (defn view-memory*
ocsenave@259 20 "View a region of indexable memory in the given state."
ocsenave@259 21 [state start length]
ocsenave@185 22 ((comp vec map)
ocsenave@194 23 #((comp aget) (memory state) %)
ocsenave@185 24 (range start (+ start length))))
ocsenave@185 25
ocsenave@185 26
ocsenave@185 27 (defn state-surprise
ocsenave@185 28 "This is one tick before the trainer goes [!]"
ocsenave@185 29 []
ocsenave@185 30 (->
ocsenave@185 31 (pre-trainer-battle)
ocsenave@185 32 (step [:r])
ocsenave@185 33 (step)
ocsenave@185 34 (ntick 88147)
ocsenave@185 35 ;(step [:r])
ocsenave@185 36
ocsenave@185 37 ;(step [:r])
ocsenave@185 38 ;(step [:r])
ocsenave@185 39 ;(step [:r])
ocsenave@185 40 ;(step [:r])
ocsenave@185 41 ))
ocsenave@194 42 (defn state-inject
ocsenave@194 43 "I have replaced the letter e with e-acute @ 0xC4E8."
ocsenave@194 44 []
ocsenave@194 45 (read-state "inject-surprise"))
ocsenave@185 46
ocsenave@185 47
ocsenave@185 48
ocsenave@185 49
ocsenave@194 50 (defn pc-trail
ocsenave@194 51 "Track the PC for a number of ticks."
ocsenave@194 52 [state ticks]
ocsenave@194 53 (tick state)
ocsenave@194 54 (set-state! state)
ocsenave@194 55 (loop [pcs [(PC)] ]
ocsenave@194 56 (if (> (count pcs) ticks) pcs
ocsenave@194 57 (do
ocsenave@194 58 (com.aurellem.gb.Gb/tick)
ocsenave@194 59 (recur (conj pcs (PC)))))))
ocsenave@185 60
ocsenave@185 61
ocsenave@185 62
ocsenave@194 63 (defn differences [list-1 list-2]
ocsenave@194 64 (remove
ocsenave@194 65 (fn [[a b c]] (= b c))
ocsenave@194 66 (map vector
ocsenave@194 67 (range)
ocsenave@194 68 list-1
ocsenave@194 69 list-2)))
ocsenave@194 70
ocsenave@194 71 (defn pc-diff [state-1 state-2]
ocsenave@194 72 (differences (map hex (pc-trail state-1 10000))
ocsenave@194 73 (map hex (pc-trail state-2 10000))))
ocsenave@194 74
ocsenave@194 75
ocsenave@194 76 (defn memory-diff [state-1 state-2]
ocsenave@194 77 (remove
ocsenave@194 78 (fn[[a b c]] (= b c))
ocsenave@194 79 (map (comp vec (partial map hex) list)
ocsenave@194 80 (range)
ocsenave@194 81 (vec (memory state-1))
ocsenave@194 82 (vec (memory state-2)))
ocsenave@194 83 )
ocsenave@194 84 )
ocsenave@194 85
ocsenave@194 86
ocsenave@194 87
ocsenave@194 88 (defn state-speak
ocsenave@194 89 "This is when the trainer speaks."
ocsenave@194 90 []
ocsenave@194 91 (->
ocsenave@194 92 (pre-trainer-battle)
ocsenave@194 93 (set-memory 0xD354 0x0)
ocsenave@194 94 (step [:r])
ocsenave@194 95 (step)
ocsenave@194 96 (ntick 88147)
ocsenave@194 97 (tick)
ocsenave@194 98 (nstep 102)
ocsenave@194 99
ocsenave@194 100 ;(step [:r])
ocsenave@194 101
ocsenave@194 102 ;(step [:r])
ocsenave@194 103 ;(step [:r])
ocsenave@194 104 ;(step [:r])
ocsenave@194 105 ;(step [:r])
ocsenave@194 106 ))
ocsenave@194 107
ocsenave@194 108
ocsenave@194 109
ocsenave@194 110 (defn get-memory [state n]
ocsenave@194 111 (aget (memory state) n))
ocsenave@194 112
ocsenave@194 113 (defn first-change
ocsenave@194 114 "Watch the current memory location as it ticks,
ocsenave@194 115 return the first state that differs at location mem."
ocsenave@194 116 [state n]
ocsenave@194 117 (tick state)
ocsenave@194 118 (set-state! state)
ocsenave@194 119 (let [init (aget (memory state) n)]
ocsenave@194 120 (loop []
ocsenave@194 121 (if (= (aget (memory) n) init)
ocsenave@194 122 (do
ocsenave@194 123 (com.aurellem.gb.Gb/tick)
ocsenave@194 124 (recur))))
ocsenave@194 125 (update-state)))
ocsenave@194 126
ocsenave@194 127
ocsenave@194 128
ocsenave@227 129
ocsenave@227 130 (defn spell-array
ocsenave@227 131 [array mem n]
ocsenave@227 132 (character-codes->str
ocsenave@194 133 (take n (drop mem
ocsenave@227 134 (vec array)))))
ocsenave@194 135
ocsenave@227 136 (defn spell
ocsenave@227 137 ([state mem n]
ocsenave@227 138 (spell (memory state) mem n))
ocsenave@227 139 ([mem n] (spell @current-state mem n)))
ocsenave@194 140
ocsenave@227 141
ocsenave@227 142
ocsenave@227 143 (comment
ocsenave@194 144 (println)
ocsenave@194 145 (print (character-codes->str (take 6000 (drop 0xA75F4
ocsenave@227 146 (vec(com.aurellem.gb.gb-driver/rom)))))))
ocsenave@194 147
ocsenave@194 148 ;(dorun (map println (view-memory* (state-surprise) 0x1AEF 1600)))
ocsenave@194 149
ocsenave@194 150
ocsenave@194 151
ocsenave@194 152 (def surprise-words
ocsenave@194 153 [0x80 0xAB 0xAB 0x7F 0xB1 0xA8 0xA6 0xA7 0xB3 0xE7 0x7F 0x8B 0xA4 0xB3 0xE0 0xB2 0x7F 0xB1 0xAE 0xAB 0xAB 0x7F 0xB3 0xA7 0xA4 0x7F 0xA3 0xA8 0xA2 0xA4 0xE7])
ocsenave@194 154
ocsenave@194 155 (defn sublist
ocsenave@194 156 "Unshifts the list until the sublist is at the start."
ocsenave@194 157 [list sub]
ocsenave@194 158 (cond
ocsenave@194 159 (empty? sub) list
ocsenave@194 160 (empty? list) nil
ocsenave@194 161 (= (take (count sub) list) sub) list
ocsenave@194 162 :else (recur (rest list) sub)))
ocsenave@194 163
ocsenave@227 164 (defn find-sublist
ocsenave@194 165 "Returns the position of the first occurence of sublist."
ocsenave@194 166 [list sub]
ocsenave@194 167 (loop [n 0 a list]
ocsenave@194 168 (cond
ocsenave@194 169 (empty? a) nil
ocsenave@194 170 (= (take (count sub) a) sub) n
ocsenave@194 171 :else (recur (inc n) (rest a)))))
ocsenave@194 172
ocsenave@227 173 (defn find-sublists
ocsenave@227 174 "Returns a vector of the occurences of sublists."
ocsenave@227 175 [list sub]
ocsenave@227 176 (let [m (find-sublist list sub)]
ocsenave@227 177 (if (nil? m) '()
ocsenave@227 178 (cons m
ocsenave@227 179 (map (partial + (inc m))
ocsenave@227 180 (find-sublists
ocsenave@227 181 (drop (inc m) list)
ocsenave@227 182 sub))))))
ocsenave@227 183
ocsenave@259 184
ocsenave@259 185
ocsenave@259 186 (defn search-rom
ocsenave@259 187 "Search for the given codes in ROM, returning short snippets of
ocsenave@259 188 text around the results."
ocsenave@259 189 ([codes k]
ocsenave@259 190 (search-rom com.aurellem.gb.gb-driver/original-rom codes k))
ocsenave@259 191 ([rom codes k]
ocsenave@259 192 (map
ocsenave@259 193 (fn [n]
ocsenave@259 194 [(hex n)
ocsenave@259 195 (take k (drop n rom))])
ocsenave@259 196
ocsenave@259 197 (find-sublists
ocsenave@259 198 rom
ocsenave@259 199 codes))))
ocsenave@259 200
ocsenave@227 201 (defn spelling-bee
ocsenave@227 202 "Search for the given string in ROM, returning short snippets of
ocsenave@259 203 text around the results."
ocsenave@259 204 ([str k]
ocsenave@259 205 (spelling-bee com.aurellem.gb.gb-driver/original-rom str k))
ocsenave@259 206 ([rom str k]
ocsenave@259 207 (map
ocsenave@259 208 (fn [[address snip]]
ocsenave@259 209 [address (character-codes->str snip)]
ocsenave@259 210 (search-rom rom (str->character-codes str) k)))))
ocsenave@227 211
ocsenave@227 212
ocsenave@194 213
ocsenave@194 214
ocsenave@194 215
ocsenave@194 216 (defn change-speech
ocsenave@194 217 ([state str k]
ocsenave@194 218 (loop [ops str
ocsenave@194 219 s state
ocsenave@194 220 n k]
ocsenave@194 221 (if (empty? ops) s
ocsenave@194 222 (recur
ocsenave@194 223 (rest ops)
ocsenave@194 224 (set-memory (first-change s (+ 0xC4B9 n)) (+ 0xC4B9 n)
ocsenave@194 225 (first ops))
ocsenave@194 226 (if (not= n 19) (inc n)
ocsenave@194 227 (+ n 21))))))
ocsenave@194 228 ([str k]
ocsenave@194 229 (change-speech (state-speak) str k))
ocsenave@194 230 ([str]
ocsenave@227 231 (change-speech str 0)))
ocsenave@227 232
ocsenave@227 233
ocsenave@227 234
ocsenave@227 235 (defn rewrite-memory
ocsenave@227 236 "Alters the vector of memory. Treats strings as lists of character
ocsenave@227 237 ops."
ocsenave@227 238 ([mem start strs-or-ops]
ocsenave@227 239 (let [x (first strs-or-ops)]
ocsenave@227 240 (cond (empty? strs-or-ops) mem
ocsenave@227 241 (string? x)
ocsenave@227 242
ocsenave@227 243 (recur mem start
ocsenave@227 244 (concat
ocsenave@227 245 (str->character-codes x)
ocsenave@227 246 (rest strs-or-ops)))
ocsenave@227 247 :else
ocsenave@227 248 (recur
ocsenave@227 249 (assoc mem start x)
ocsenave@227 250 (inc start)
ocsenave@227 251 (rest strs-or-ops))))))
ocsenave@227 252
ocsenave@227 253 (def rewrite-rom
ocsenave@227 254 "Alters the ROM array using write-memory."
ocsenave@227 255 (partial rewrite-memory (vec (rom(root)))))
ocsenave@227 256
ocsenave@227 257 (defn restore-rom! [] (write-rom! original-rom))
ocsenave@227 258
ocsenave@227 259
ocsenave@227 260
ocsenave@227 261 (def oak-intro
ocsenave@227 262
ocsenave@227 263 (list "Hello there!"
ocsenave@227 264 0x4F
ocsenave@227 265 "Welcome to the"
ocsenave@227 266 0x55
ocsenave@227 267 "world of "
ocsenave@227 268 0x54
ocsenave@227 269 "MON!"
ocsenave@227 270 0x51
ocsenave@227 271 "My name is OAK!"
ocsenave@227 272 0x4F
ocsenave@227 273 "People call me"
ocsenave@227 274 0x55
ocsenave@227 275 "the "
ocsenave@227 276 0x54
ocsenave@227 277 "MON PROF!"
ocsenave@227 278 0x58
ocsenave@227 279 "This world is"
ocsenave@227 280 0x4F
ocsenave@227 281 "inhabited by"
ocsenave@227 282 0x55
ocsenave@227 283 "creatures called"
ocsenave@227 284 0x55
ocsenave@227 285 0x54
ocsenave@227 286 "MON!"
ocsenave@227 287 0x50
ocsenave@227 288 0x50
ocsenave@227 289 0x51
ocsenave@227 290 "For some people, "
ocsenave@227 291 0x4F
ocsenave@227 292 0x54
ocsenave@227 293 "MON are"
ocsenave@227 294 0x55
ocsenave@227 295 "pets. Others use"
ocsenave@227 296 0x55
ocsenave@227 297 "them for fights."
ocsenave@227 298 0x51
ocsenave@227 299 "Myself..."
ocsenave@227 300 0x51
ocsenave@227 301 "I study "
ocsenave@227 302 0x54
ocsenave@227 303 "MON"
ocsenave@227 304 0x4F
ocsenave@227 305 "as a profession."
ocsenave@227 306 0x58
ocsenave@227 307 "First, what is"
ocsenave@227 308 0x4F
ocsenave@227 309 "your name?"
ocsenave@227 310 0x58
ocsenave@227 311 "This is my grand-"
ocsenave@227 312 0x4F
ocsenave@227 313 "son. He's been"
ocsenave@227 314 0x55
ocsenave@227 315 "your rival since"
ocsenave@227 316 0x55
ocsenave@227 317 "you were a baby."
ocsenave@227 318 0x51
ocsenave@227 319 "...Erm, what is"
ocsenave@227 320 0x4F
ocsenave@227 321 "his name again?"
ocsenave@227 322 0x58
ocsenave@227 323 0x52
ocsenave@227 324 "!"
ocsenave@227 325 0x51
ocsenave@227 326 "Your very own"
ocsenave@227 327 0x4F
ocsenave@227 328 0x54
ocsenave@227 329 "MON legend is"
ocsenave@227 330 0x55
ocsenave@227 331 "about to unfold!"
ocsenave@227 332 0x51
ocsenave@227 333 "A world of dreams"
ocsenave@227 334 0x4F
ocsenave@227 335 "and adventures"
ocsenave@227 336 0x55
ocsenave@227 337 "with "
ocsenave@227 338 0x54
ocsenave@227 339 "MON"
ocsenave@227 340 0x55
ocsenave@227 341 "awaits! Let's go!"
ocsenave@227 342 0x57) )
ocsenave@227 343
ocsenave@227 344 (defn state-intro
ocsenave@227 345 "Professor Oak speaks!"
ocsenave@227 346 []
ocsenave@227 347 (do
ocsenave@227 348 (->
ocsenave@227 349 (rewrite-rom 0xA07BB
ocsenave@227 350 (list 0x87 0xA4 0xAB 0xAB 0xAE 0x7F 0xB3 0xA7 0xA4 0xB1 0xA4 0xE7 0x4F 0x96 0xA4 0xAB 0xA2 0xAE 0xAC 0xA4 0x7F 0xB3 0xAE 0x7F 0xB3 0xA7 0xA4 0x55 0xB6 0xAE 0xB1 0xAB 0xA3 0x7F 0xAE 0xA5 0x7F 0x54 0x8C 0x8E 0x8D 0xE7 0x51 0x8C 0xB8 0x7F 0xAD 0xA0 0xAC 0xA4 0x7F 0xA8 0xB2 0x7F 0x8E 0x80 0x8A 0xE7 0x4F 0x8F 0xA4 0xAE 0xAF 0xAB 0xA4 0x7F 0xA2 0xA0 0xAB 0xAB 0x7F 0xAC 0xA4 0x55 0xB3 0xA7 0xA4 0x7F 0x8F 0x8C 0x8E 0x8D 0x7F 0x8F 0x91 0x8E 0x85 0xE7 0x58 0x93 0xA7 0xA8 0xB2 0x7F 0xB6 0xAE 0xB1 0xAB 0xA3 0x7F 0xA8 0xB2 0x4F 0xA8 0xAD 0xA7 0xA0 0xA1 0xA8 0xB3 0xA4 0xA3 0x7F 0xA1 0xB8 0x55 0xA2 0xB1 0xA4 0xA0 0xB3 0xB4 0xB1 0xA4 0xB2 0x7F 0xA2 0xA0 0xAB 0xAB 0xA4 0xA3 0x55 0x54 0x8C 0x8E 0x8D 0xE7 0x50 0x50 0x51 0x85 0xAE 0xB1 0x7F 0xB2 0xAE 0xAC 0xA4 0x7F 0xAF 0xA4 0xAE 0xAF 0xAB 0xA4 0xF3 0x7F 0x4F 0x54 0x8C 0x8E 0x8D 0x7F 0xA0 0xB1 0xA4 0x55 0xAF 0xA4 0xB3 0xB2 0xF1 0x7F 0x8E 0xB3 0xA7 0xA4 0xB1 0xB2 0x7F 0xB4 0xB2 0xA4 0x55 0xB3 0xA7 0xA4 0xAC 0x7F 0xA5 0xAE 0xB1 0x7F 0xA5 0xA8 0xA6 0xA7 0xB3 0xB2 0xF1 0x51 0x8C 0xB8 0xB2 0xA4 0xAB 0xA5 0xF1 0xF1 0xF1 0x51 0x88 0x7F 0xB2 0xB3 0xB4 0xA3 0xB8 0x7F 0x54 0x8C 0x8E 0x8D 0x4F 0xA0 0xB2 0x7F 0xA0 0x7F 0xAF 0xB1 0xAE 0xA5 0xA4 0xB2 0xB2 0xA8 0xAE 0xAD 0xF1 0x58 0x85 0xA8 0xB1 0xB2 0xB3 0xF3 0x7F 0x7F 0xB6 0xA7 0xA0 0xB3 0x7F 0xA8 0xB2 0x4F 0xB8 0xAE 0xB4 0xB1 0x7F 0xAD 0xA0 0xAC 0xA4 0xE6 0x58 0x93 0xA7 0xA8 0xB2 0x7F 0xA8 0xB2 0x7F 0xAC 0xB8 0x7F 0xA6 0xB1 0xA0 0xAD 0xA3 0xE3 0x4F 0xB2 0xAE 0xAD 0xF1 0x7F 0x87 0xA4 0xE0 0xB2 0x7F 0xA1 0xA4 0xA4 0xAD 0x55 0xB8 0xAE 0xB4 0xB1 0x7F 0xB1 0xA8 0xB5 0xA0 0xAB 0x7F 0xB2 0xA8 0xAD 0xA2 0xA4 0x55 0xB8 0xAE 0xB4 0x7F 0xB6 0xA4 0xB1 0xA4 0x7F 0xA0 0x7F 0xA1 0xA0 0xA1 0xB8 0xF1 0x51 0xF1 0xF1 0xF1 0x84 0xB1 0xAC 0xF3 0x7F 0x7F 0xB6 0xA7 0xA0 0xB3 0x7F 0xA8 0xB2 0x4F 0xA7 0xA8 0xB2 0x7F 0xAD 0xA0 0xAC 0xA4 0x7F 0xA0 0xA6 0xA0 0xA8 0xAD 0xE6 0x58 0x52 0xE7 0x51 0x98 0xAE 0xB4 0xB1 0x7F 0xB5 0xA4 0xB1 0xB8 0x7F 0xAE 0xB6 0xAD 0x4F 0x54 0x8C 0x8E 0x8D 0x7F 0xAB 0xA4 0xA6 0xA4 0xAD 0xA3 0x7F 0xA8 0xB2 0x55 0xA0 0xA1 0xAE 0xB4 0xB3 0x7F 0xB3 0xAE 0x7F 0xB4 0xAD 0xA5 0xAE 0xAB 0xA3 0xE7 0x51 0x80 0x7F 0xB6 0xAE 0xB1 0xAB 0xA3 0x7F 0xAE 0xA5 0x7F 0xA3 0xB1 0xA4 0xA0 0xAC 0xB2 0x4F 0xA0 0xAD 0xA3 0x7F 0xA0 0xA3 0xB5 0xA4 0xAD 0xB3 0xB4 0xB1 0xA4 0xB2 0x55 0xB6 0xA8 0xB3 0xA7 0x7F 0x54 0x8C 0x8E 0x8D 0x55 0xA0 0xB6 0xA0 0xA8 0xB3 0xB2 0xE7 0x7F 0x8B 0xA4 0xB3 0xE0 0xB2 0x7F 0xA6 0xAE 0xE7 0x57 0x0 0x83 0xAE 0x7F 0xB8 0xAE 0xB4 0x7F 0xB6 0xA0 0xAD 0xB3 0x7F 0xB3 0xAE 0x4F 0xA6 0xA8 0xB5 0xA4 0x7F 0xA0 0x7F 0xAD 0xA8 0xA2 0xAA 0xAD 0xA0 0xAC 0xA4 0x55 0xB3 0xAE 0x7F 0x50 0x1 0x6D 0xCD 0x0 0xE6 0x57 0x0 0x91 0xA8 0xA6 0xA7 0xB3 0xE7 0x7F 0x92 0xAE 0x7F 0xB8 0xAE 0xB4 0xB1 0x4F 0xAD 0xA0 0xAC 0xA4 0x7F 0xA8 0xB2 0x7F 0x52 0xE7 0x58 0x0 0x93 0xA7 0xA0 0xB3 0xBD 0x7F 0xB1 0xA8 0xA6 0xA7 0xB3 0xE7 0x7F 0x88 0x4F 0xB1 0xA4 0xAC 0xA4 0xAC 0xA1 0xA4 0xB1 0x7F 0xAD 0xAE 0xB6 0xE7 0x7F 0x87 0xA8 0xB2 0x55 0xAD 0xA0 0xAC 0xA4 0x7F 0xA8 0xB2 0x7F 0x53 0xE7 0x58 0x1 0x3F 0xCD 0x0 0x7F 0xA0 0xAD 0xA3 0x4F 0x50 0x1 0x6D 0xCD 0x0 0x7F 0xB6 0xA8 0xAB 0xAB 0x55 0xA1 0xA4 0x7F 0xB3 0xB1 0xA0 0xA3 0xA4 0xA3 0xE8 0x57 0x0 0x98 0xAE 0xB4 0x7F 0xAD 0xA4 0xA4 0xA3 0x7F 0xF9 0x7F 0x54 0x8C 0x8E 0x8D 0x4F 0xB3 0xAE 0x7F 0xA5 0xA8 0xA6 0xA7 0xB3 0xE7 0x58 0x0 0x92 0xAE 0xB1 0xB1 0xB8 0xF4 0x7F 0x8C 0x84 0x96 0x7F 0xA2 0xA0 0xAD 0xBE 0x4F 0xA0 0xB3 0xB3 0xA4 0xAD 0xA3 0xE7 0x58 0x0 0x98 0xAE 0xB4 0xB1 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xAC 0xB4 0xB2 0xB3 0x4F 0xA0 0xAB 0xAB 0x7F 0xA1 0xA4 0x7F 0xA3 0xA8 0xA5 0xA5 0xA4 0xB1 0xA4 0xAD 0xB3 0xE7 0x58 0x0 0x8D 0xAE 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xA2 0xA0 0xAD 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0x8B 0xFB 0xFB 0xE7 0x58 0x0 0x80 0xAB 0xAB 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xAC 0xB4 0xB2 0xB3 0x4F 0xA1 0xA4 0x7F 0xA0 0xB3 0x7F 0xAB 0xA4 0xA0 0xB2 0xB3 0x7F 0x8B 0xFB 0xF6 0xE7 0x58 0x0 0x98 0xAE 0xB4 0xB1 0x7F 0xB3 0xAE 0xB3 0xA0 0xAB 0x7F 0xAB 0xA4 0xB5 0xA4 0xAB 0xB2 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0xF7 0xFB 0xFB 0xE7 0x58 0x0 0x8D 0xAE 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xA2 0xA0 0xAD 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0x8B 0xF9 0xF6 0xE7 0x58 0x0 0x80 0xAB 0xAB 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xAC 0xB4 0xB2 0xB3 0x4F 0xA1 0xA4 0x7F 0xA0 0xB3 0x7F 0xAB 0xA4 0xA0 0xB2 0xB3 0x7F 0x8B 0xF8 0xFB 0xE7 0x58 0x0 0x98 0xAE 0xB4 0xB1 0x7F 0xB3 0xAE 0xB3 0xA0 0xAB 0x7F 0xAB 0xA4 0xB5 0xA4 0xAB 0xB2 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0xFE 0xF6 0xE7 0x58 0x0 0x8D 0xAE 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xA2 0xA0 0xAD 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0x8B 0xF8 0xF6 0xE7 0x58 0x0 0x80 0xAB 0xAB 0x7F 0x54 0x8C 0x8E 0x8D 0x7F 0xAC 0xB4 0xB2 0xB3 0x4F 0xA1 0xA4 0x7F 0xA0 0xB3 0x7F 0xAB 0xA4 0xA0 0xB2 0xB3 0x7F 0x8B 0xF7 0xFB 0xE7 0x58 0x0 0x98 0xAE 0xB4 0xB1 0x7F 0xB3 0xAE 0xB3 0xA0 0xAB 0x7F 0xAB 0xA4 0xB5 0xA4 0xAB 0xB2 0x4F 0xA4 0xB7 0xA2 0xA4 0xA4 0xA3 0x7F 0xFB 0xF6 0xE7 0x58 0x1 0x6D 0xCD 0x0 0x7F 0xA8 0xB2 0x7F 0xAE 0xB5 0xA4 0xB1 0x4F 0xFC 0x71 0xFE 0x73 0x7F 0xB3 0xA0 0xAB 0xAB 0xE7 0x58 0x1 0x6D 0xCD 0x0)
ocsenave@227 351 ;; (list
ocsenave@227 352 ;; "Sleeping on the"
ocsenave@227 353 ;; 0x4F
ocsenave@227 354 ;; "job again are we?"
ocsenave@227 355 ;; 0x51
ocsenave@227 356 ;; 0x00
ocsenave@227 357 ;; "test"
ocsenave@227 358 ;; 0x59
ocsenave@227 359 ;; "EOM")
ocsenave@227 360
ocsenave@227 361
ocsenave@227 362 )
ocsenave@227 363 (int-array)
ocsenave@227 364 (write-rom!))
ocsenave@227 365 (root)
ocsenave@227 366
ocsenave@227 367 )
ocsenave@227 368
ocsenave@194 369 )
ocsenave@194 370
ocsenave@227 371 (comment
ocsenave@227 372 "Hello there![0x4F]Welcome to the[0x55]world of [POKE]MON![0x51]My
ocsenave@227 373 name is OAK![0x4F]People call me[0x55]the [POKE]MON PROF![0x58]This
ocsenave@227 374 world is[0x4F]inhabited by[0x55]creatures
ocsenave@227 375 called[0x55][POKE]MON![0x50][0x50][0x51]For some people,
ocsenave@227 376 [0x4F][POKE]MON are[0x55]pets. Others use[0x55]them for
ocsenave@227 377 fights.[0x51]Myself...[0x51]I study [POKE]MON[0x4F]as a
ocsenave@227 378 profession.[0x58]First, what is[0x4F]your name?[0x58]This is my
ocsenave@227 379 grand-[0x4F]son. He's been[0x55]your rival since[0x55]you were a
ocsenave@227 380 baby.[0x51]...Erm, what is[0x4F]his name again?[0x58][RED]![0x51]Your
ocsenave@227 381 very own[0x4F][POKE]MON legend is[0x55]about to unfold![0x51]A world
ocsenave@227 382 of dreams[0x4F]and adventures[0x55]with [POKE]MON[0x55]awaits! Let's
ocsenave@227 383 go![0x57]")
ocsenave@227 384
ocsenave@227 385
ocsenave@227 386
ocsenave@227 387
ocsenave@227 388
ocsenave@227 389
ocsenave@227 390
ocsenave@227 391
ocsenave@227 392
ocsenave@227 393
ocsenave@227 394
ocsenave@227 395
ocsenave@227 396