Mercurial > vba-clojure
view clojure/com/aurellem/gb/characters.clj @ 274:210b465e4720
refactored walking code from buy-initial-objects to its own function.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 27 Mar 2012 11:30:58 -0500 |
parents | b2f9a0cb13e3 |
children |
line wrap: on
line source
1 (ns com.aurellem.gb.characters2 (:use (com.aurellem.gb gb-driver constants))3 (:import [com.aurellem.gb.gb_driver SaveState]))6 (def pronouns7 ;; Note: 0x0 seems to be the end-of-name sentinel8 {9 ;; what is 0x57? what is 0x0?10 :RED [0x52]11 :BLUE [0x53]12 :opponent [0x01 0x49 0xD0 0x0]13 :turn-pokemon [0x5A]14 :off-turn-pokemon [0x59]15 :your-pokemon [0x01 0x08 0xD0 0x0]16 :opponent-pokemon [0x50 0x01 0xD9 0xCF 0x0]17 :n-times [0x50 0x09 0x05 0xCD 0x11 0x0]18 })22 (def meta-characters23 {0x00 "non-meta text follows"24 0x01 "load text from RAM (nn)"25 0x02 "BCD number (nn)C" ;; C is 3 flags and 5 length bits."26 0x03 "store text in RAM (nn)"27 0x04 "draw box (nn)WH"28 0x05 "BEGIN text on textbox line 2"29 0x06 "wait for A or B"30 0x07 "scrolling text"31 0x08 "BEGIN routine"32 0x09 "load RAM (nn) hex-to-dec. (nn)BC. B is bytes to read, C is33 digits to display"34 0x0A "wait 30 vblanks iff you pressed A or B"36 0x0B "sound: got item"37 0x0E "sound: learned skill"38 0x0F "sound: got rarecandy" ;; incidentally, same as 'got item'39 0x10 "sound: caught pokemon!"40 0x11 "sound: gave OAK the parcel"41 0x12 "sound: same as 0x10???"42 0x13 "sound: new data added"43 0x14 "sound: cry-nidorina"44 0x15 "sound: cry-pidgeot"45 0x16 "sound: cry-dewgong"47 0x4E "new line"48 0x51 "new page"49 0x55 "scroll page"50 0x50 "END command" ;; the pair 0x50 0x50 ??51 0x57 "END command"52 0x58 "END after you press A or B"53 })58 (def end-of-name-sentinel 0x00)60 (def character-code->character61 {62 0x0 "" ;; separator character?63 0x58 "\n"64 ;;0x00 "<";;"end-of-name-sentinel" ;; begin messsage65 0x49 "\n //" ;; ocsenave: pagebreak pokedex66 0x4E "\n..." ; ocsenave: clearscroll pokedex page67 0x4F "\n" ; newline68 0x50 "#";;"end-of-pokemon-name-sentinel"69 0x51 "\n\n" ;; ocsenave: clear screen70 0x52 "[RED]" ;;ocsenave: placeholder for your name?71 0x54 "[POKE]"72 0x55 "_" ;; ocsenave: breaking space?73 0x57 ">" ;; ocsenave: end message74 0x5F ">" ;; ocsenave: end pokedex entry??75 0x60 "A-bold"76 0x61 "B-bold"77 0x62 "C-bold"78 0x63 "D-bold"79 0x64 "E-bold"80 0x65 "F-bold"81 0x66 "G-bold"82 0x67 "H-bold"83 0x68 "I-bold"84 0x69 "V-bold"85 0x6A "S-bold"86 0x6B "L-bold"87 0x6C "M-bold"88 0x7F " " ;space89 0x80 "A"90 0x81 "B"91 0x82 "C"92 0x83 "D"93 0x84 "E"94 0x85 "F"95 0x86 "G"96 0x87 "H"97 0x88 "I"98 0x89 "J"99 0x8A "K"100 0x8B "L"101 0x8C "M"102 0x8D "N"103 0x8E "O"104 0x8F "P"105 0x90 "Q"106 0x91 "R"107 0x92 "S"108 0x93 "T"109 0x94 "U"110 0x95 "V"111 0x96 "W"112 0x97 "X"113 0x98 "Y"114 0x99 "Z"115 0x9A "("116 0x9B ")"117 0x9C ":"118 0x9D ";"119 0xA0 "a"120 0xA1 "b"121 0xA2 "c"122 0xA3 "d"123 0xA4 "e"124 0xA5 "f"125 0xA6 "g"126 0xA7 "h"127 0xA8 "i"128 0xA9 "j"129 0xAA "k"130 0xAB "l"131 0xAC "m"132 0xAD "n"133 0xAE "o"134 0xAF "p"135 0xB0 "q"136 0xB1 "r"137 0xB2 "s"138 0xB3 "t"139 0xB4 "u"140 0xB5 "v"141 0xB6 "w"142 0xB7 "x"143 0xB8 "y"144 0xB9 "z"145 0xBA "é"146 0xBB "'d" ;ocsenave147 0xBC "'l" ;ocsenave148 0xBD "'s" ;ocsenave149 0xBE "'t" ;ocsenave150 0xBF "'v" ; ocsenave152 0xE0 "'"153 0xE1 "PK"154 0xE2 "MN"155 0xE3 "-"156 0xE4 "'r" ;ocsenave157 0xE5 "'m" ;ocsenave158 0xE6 "?"159 0xE7 "!"160 0xE8 "."161 0xEF "♂"162 0xF0 "$" ;;"pokemon-money-symbol"163 0xF1 "."164 0xF2 "/"165 0xF3 ","166 0xF4 ", "167 0xF5 "♀"168 0xF6 "0 "169 0xF7 "1"170 0xF8 "2"171 0xF9 "3"172 0xFA "4"173 0xFB "5"174 0xFC "6"175 0xFD "7"176 0xFE "8"177 0xFF "9"178 })180 (def character->character-code181 (zipmap (vals character-code->character)182 (keys character-code->character)))184 (defn str->character-codes [s]185 (map character->character-code (map str s)))187 (defn character-codes->str [codes]188 (apply str189 (map #(character-code->character190 %191 (format "[0x%02X]" %))192 codes)))194 (defn print-text195 ([^SaveState state begin end]196 (dorun197 (map (fn [character-code line]198 (println199 (format "0x%04X: " line)200 (str (character-code->character character-code))))201 (subvec (vec (memory state)) begin end)202 (range begin end)))203 state)204 ([begin end]205 (print-text @current-state begin end)))207 (defn read-name [codes]208 (character-codes->str209 (take-while210 (partial not= end-of-name-marker) codes)))