annotate clojure/com/aurellem/world/practice.clj @ 297:528dc923d4c5

mapping out characters-as-items to avoid corrupt items.
author Robert McIntyre <rlm@mit.edu>
date Fri, 30 Mar 2012 22:35:08 -0500
parents df9cad9909d2
children de172acc5a03
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.exp pokemon))
ocsenave@227 4 (:use (com.aurellem.exp item-bridge))
ocsenave@227 5 (:import [com.aurellem.gb.gb_driver SaveState]))
ocsenave@227 6
ocsenave@227 7
ocsenave@227 8 ;;(def original-rom (rom(root)))
ocsenave@227 9
ocsenave@185 10
ocsenave@185 11 (def hex-pc (comp hex PC))
ocsenave@185 12
ocsenave@194 13 (defn nstep [state n]
ocsenave@194 14 (if (zero? n) state
ocsenave@194 15 (recur (step state) (dec n))))
ocsenave@185 16
ocsenave@185 17
ocsenave@259 18 (defn view-memory*
ocsenave@259 19 "View a region of indexable memory in the given state."
ocsenave@259 20 [state start length]
ocsenave@185 21 ((comp vec map)
ocsenave@194 22 #((comp aget) (memory state) %)
ocsenave@185 23 (range start (+ start length))))
ocsenave@185 24
ocsenave@185 25
ocsenave@185 26 (defn state-surprise
ocsenave@185 27 "This is one tick before the trainer goes [!]"
ocsenave@185 28 []
ocsenave@185 29 (->
ocsenave@185 30 (pre-trainer-battle)
ocsenave@185 31 (step [:r])
ocsenave@185 32 (step)
ocsenave@185 33 (ntick 88147)
ocsenave@185 34 ;(step [:r])
ocsenave@185 35
ocsenave@185 36 ;(step [:r])
ocsenave@185 37 ;(step [:r])
ocsenave@185 38 ;(step [:r])
ocsenave@185 39 ;(step [:r])
ocsenave@185 40 ))
ocsenave@289 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@289 83 ))
ocsenave@194 84
ocsenave@194 85
ocsenave@194 86
ocsenave@194 87 (defn state-speak
ocsenave@194 88 "This is when the trainer speaks."
ocsenave@194 89 []
ocsenave@194 90 (->
ocsenave@194 91 (pre-trainer-battle)
ocsenave@194 92 (set-memory 0xD354 0x0)
ocsenave@194 93 (step [:r])
ocsenave@194 94 (step)
ocsenave@194 95 (ntick 88147)
ocsenave@194 96 (tick)
ocsenave@194 97 (nstep 102)
ocsenave@194 98
ocsenave@194 99 ;(step [:r])
ocsenave@194 100
ocsenave@194 101 ;(step [:r])
ocsenave@194 102 ;(step [:r])
ocsenave@194 103 ;(step [:r])
ocsenave@194 104 ;(step [:r])
ocsenave@194 105 ))
ocsenave@194 106
ocsenave@194 107
ocsenave@194 108
ocsenave@194 109 (defn get-memory [state n]
ocsenave@194 110 (aget (memory state) n))
ocsenave@194 111
ocsenave@194 112 (defn first-change
ocsenave@194 113 "Watch the current memory location as it ticks,
ocsenave@194 114 return the first state that differs at location mem."
ocsenave@194 115 [state n]
ocsenave@194 116 (tick state)
ocsenave@194 117 (set-state! state)
ocsenave@194 118 (let [init (aget (memory state) n)]
ocsenave@194 119 (loop []
ocsenave@194 120 (if (= (aget (memory) n) init)
ocsenave@194 121 (do
ocsenave@194 122 (com.aurellem.gb.Gb/tick)
ocsenave@194 123 (recur))))
ocsenave@194 124 (update-state)))
ocsenave@194 125
ocsenave@194 126
ocsenave@194 127
ocsenave@227 128
ocsenave@227 129 (defn spell-array
ocsenave@227 130 [array mem n]
ocsenave@227 131 (character-codes->str
ocsenave@194 132 (take n (drop mem
ocsenave@227 133 (vec array)))))
ocsenave@194 134
ocsenave@227 135 (defn spell
ocsenave@227 136 ([state mem n]
ocsenave@227 137 (spell (memory state) mem n))
ocsenave@227 138 ([mem n] (spell @current-state mem n)))
ocsenave@194 139
ocsenave@227 140
ocsenave@227 141
ocsenave@227 142 (comment
ocsenave@194 143 (println)
ocsenave@194 144 (print (character-codes->str (take 6000 (drop 0xA75F4
ocsenave@227 145 (vec(com.aurellem.gb.gb-driver/rom)))))))
ocsenave@194 146
ocsenave@194 147 ;(dorun (map println (view-memory* (state-surprise) 0x1AEF 1600)))
ocsenave@194 148
ocsenave@194 149
ocsenave@194 150
ocsenave@194 151 (def surprise-words
ocsenave@194 152 [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 153
ocsenave@194 154 (defn sublist
ocsenave@194 155 "Unshifts the list until the sublist is at the start."
ocsenave@194 156 [list sub]
ocsenave@194 157 (cond
ocsenave@194 158 (empty? sub) list
ocsenave@194 159 (empty? list) nil
ocsenave@194 160 (= (take (count sub) list) sub) list
ocsenave@194 161 :else (recur (rest list) sub)))
ocsenave@194 162
ocsenave@227 163 (defn find-sublist
ocsenave@194 164 "Returns the position of the first occurence of sublist."
ocsenave@194 165 [list sub]
ocsenave@194 166 (loop [n 0 a list]
ocsenave@194 167 (cond
ocsenave@194 168 (empty? a) nil
ocsenave@194 169 (= (take (count sub) a) sub) n
ocsenave@194 170 :else (recur (inc n) (rest a)))))
ocsenave@194 171
ocsenave@227 172 (defn find-sublists
ocsenave@227 173 "Returns a vector of the occurences of sublists."
ocsenave@227 174 [list sub]
ocsenave@227 175 (let [m (find-sublist list sub)]
ocsenave@227 176 (if (nil? m) '()
ocsenave@227 177 (cons m
ocsenave@227 178 (map (partial + (inc m))
ocsenave@227 179 (find-sublists
ocsenave@227 180 (drop (inc m) list)
ocsenave@227 181 sub))))))
ocsenave@227 182
ocsenave@259 183
ocsenave@259 184
ocsenave@259 185 (defn search-rom
ocsenave@259 186 "Search for the given codes in ROM, returning short snippets of
ocsenave@259 187 text around the results."
ocsenave@259 188 ([codes k]
ocsenave@259 189 (search-rom com.aurellem.gb.gb-driver/original-rom codes k))
ocsenave@259 190 ([rom codes k]
ocsenave@259 191 (map
ocsenave@259 192 (fn [n]
ocsenave@259 193 [(hex n)
ocsenave@259 194 (take k (drop n rom))])
ocsenave@259 195
ocsenave@259 196 (find-sublists
ocsenave@259 197 rom
ocsenave@259 198 codes))))
ocsenave@259 199
ocsenave@227 200 (defn spelling-bee
ocsenave@227 201 "Search for the given string in ROM, returning short snippets of
ocsenave@259 202 text around the results."
ocsenave@259 203 ([str k]
ocsenave@259 204 (spelling-bee com.aurellem.gb.gb-driver/original-rom str k))
ocsenave@259 205 ([rom str k]
ocsenave@259 206 (map
ocsenave@259 207 (fn [[address snip]]
ocsenave@272 208 [address (character-codes->str snip)])
ocsenave@272 209 (search-rom rom (str->character-codes str) k))))
ocsenave@227 210
ocsenave@227 211
ocsenave@194 212
ocsenave@194 213
ocsenave@194 214
ocsenave@194 215 (defn change-speech
ocsenave@194 216 ([state str k]
ocsenave@194 217 (loop [ops str
ocsenave@194 218 s state
ocsenave@194 219 n k]
ocsenave@194 220 (if (empty? ops) s
ocsenave@194 221 (recur
ocsenave@194 222 (rest ops)
ocsenave@194 223 (set-memory (first-change s (+ 0xC4B9 n)) (+ 0xC4B9 n)
ocsenave@194 224 (first ops))
ocsenave@194 225 (if (not= n 19) (inc n)
ocsenave@194 226 (+ n 21))))))
ocsenave@194 227 ([str k]
ocsenave@194 228 (change-speech (state-speak) str k))
ocsenave@194 229 ([str]
ocsenave@227 230 (change-speech str 0)))
ocsenave@227 231
ocsenave@227 232
ocsenave@227 233
ocsenave@227 234 (defn rewrite-memory
ocsenave@227 235 "Alters the vector of memory. Treats strings as lists of character
ocsenave@227 236 ops."
ocsenave@227 237 ([mem start strs-or-ops]
ocsenave@227 238 (let [x (first strs-or-ops)]
ocsenave@227 239 (cond (empty? strs-or-ops) mem
ocsenave@227 240 (string? x)
ocsenave@227 241
ocsenave@227 242 (recur mem start
ocsenave@227 243 (concat
ocsenave@227 244 (str->character-codes x)
ocsenave@227 245 (rest strs-or-ops)))
ocsenave@227 246 :else
ocsenave@227 247 (recur
ocsenave@227 248 (assoc mem start x)
ocsenave@227 249 (inc start)
ocsenave@227 250 (rest strs-or-ops))))))
ocsenave@227 251
ocsenave@227 252 (def rewrite-rom
ocsenave@263 253 "Alters the ROM array using write-memory. Takes a list of
ocsenave@263 254 various strings/bytes as data."
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