diff clojure/com/aurellem/items.clj @ 102:4d9ce3188655

made first 'hello-world' item based assembly insertion.
author Robert McIntyre <rlm@mit.edu>
date Mon, 12 Mar 2012 20:03:05 -0500
parents 2090bcb78f44
children 3305490a8f62
line wrap: on
line diff
     1.1 --- a/clojure/com/aurellem/items.clj	Mon Mar 12 12:41:55 2012 -0500
     1.2 +++ b/clojure/com/aurellem/items.clj	Mon Mar 12 20:03:05 2012 -0500
     1.3 @@ -99,65 +99,65 @@
     1.4     81    :max-ether
     1.5     82    :elixer
     1.6     83    :max-elixer
     1.7 -   196   :HM01
     1.8 -   197   :HM02
     1.9 -   198   :HM03
    1.10 -   199   :HM04
    1.11 -   200   :HM05
    1.12 -   201   :TM01
    1.13 -   202   :TM02
    1.14 -   203   :TM03
    1.15 -   204   :TM04
    1.16 -   205   :TM05
    1.17 -   206   :TM06
    1.18 -   207   :TM07
    1.19 -   208   :TM08
    1.20 -   209   :TM09
    1.21 -   210   :TM10
    1.22 -   211   :TM11
    1.23 -   212   :TM12
    1.24 -   213   :TM13
    1.25 -   214   :TM13
    1.26 -   215   :TM15
    1.27 -   216   :TM16
    1.28 -   217   :TM17
    1.29 -   218   :TM18
    1.30 -   219   :TM19
    1.31 -   220   :TM20
    1.32 -   221   :TM21
    1.33 -   222   :TM22
    1.34 -   223   :TM23
    1.35 -   224   :TM24
    1.36 -   225   :TM25
    1.37 -   226   :TM26
    1.38 -   227   :TM27
    1.39 -   228   :TM28
    1.40 -   229   :TM29
    1.41 -   230   :TM30
    1.42 -   231   :TM31
    1.43 -   232   :TM32
    1.44 -   233   :TM33
    1.45 -   234   :TM34
    1.46 -   235   :TM35
    1.47 -   236   :TM36
    1.48 -   237   :TM37
    1.49 -   238   :TM38
    1.50 -   239   :TM39
    1.51 -   240   :TM40
    1.52 -   241   :TM41
    1.53 -   242   :TM42
    1.54 -   243   :TM43
    1.55 -   244   :TM44
    1.56 -   245   :TM45
    1.57 -   246   :TM46
    1.58 -   247   :TM47
    1.59 -   248   :TM48
    1.60 -   249   :TM49
    1.61 -   250   :TM50
    1.62 -   251   :TM51
    1.63 -   252   :TM52
    1.64 -   253   :TM53
    1.65 -   254   :TM54
    1.66 +   196   :HM01  ;; cut
    1.67 +   197   :HM02  ;; fly
    1.68 +   198   :HM03  ;; surf
    1.69 +   199   :HM04  ;; strength
    1.70 +   200   :HM05  ;; flash
    1.71 +   201   :TM01  ;; mega punch
    1.72 +   202   :TM02  ;; razor wind
    1.73 +   203   :TM03  ;; swords dance
    1.74 +   204   :TM04  ;; whirlwind
    1.75 +   205   :TM05  ;; mega kick
    1.76 +   206   :TM06  ;; toxic
    1.77 +   207   :TM07  ;; horn drill
    1.78 +   208   :TM08  ;; body slam
    1.79 +   209   :TM09  ;; take down
    1.80 +   210   :TM10  ;; double-edge
    1.81 +   211   :TM11  ;; bubblebeam
    1.82 +   212   :TM12  ;; water gun
    1.83 +   213   :TM13  ;; ice beam 
    1.84 +   214   :TM14  ;; blizzard
    1.85 +   215   :TM15  ;; hyper beam
    1.86 +   216   :TM16  ;; pay day
    1.87 +   217   :TM17  ;; submission
    1.88 +   218   :TM18  ;; counter
    1.89 +   219   :TM19  ;; seismic toss
    1.90 +   220   :TM20  ;; rage
    1.91 +   221   :TM21  ;; mega drain
    1.92 +   222   :TM22  ;; solarbeam
    1.93 +   223   :TM23  ;; dragon rage
    1.94 +   224   :TM24  ;; thunderbolt
    1.95 +   225   :TM25  ;; thunder
    1.96 +   226   :TM26  ;; earthquake
    1.97 +   227   :TM27  ;; fissure
    1.98 +   228   :TM28  ;; dig
    1.99 +   229   :TM29  ;; psychic 
   1.100 +   230   :TM30  ;; teleport
   1.101 +   231   :TM31  ;; mimic
   1.102 +   232   :TM32  ;; double team
   1.103 +   233   :TM33  ;; reflect
   1.104 +   234   :TM34  ;; bide
   1.105 +   235   :TM35  ;; metronome
   1.106 +   236   :TM36  ;; self destruct
   1.107 +   237   :TM37  ;; eggbomb
   1.108 +   238   :TM38  ;; fire blast
   1.109 +   239   :TM39  ;; swift
   1.110 +   240   :TM40  ;; skull bash
   1.111 +   241   :TM41  ;; softboiled
   1.112 +   242   :TM42  ;; dream eater
   1.113 +   243   :TM43  ;; sky attack
   1.114 +   244   :TM44  ;; rest
   1.115 +   245   :TM45  ;; thunder wave
   1.116 +   246   :TM46  ;; psywave
   1.117 +   247   :TM47  ;; explosion
   1.118 +   248   :TM48  ;; rock slide
   1.119 +   249   :TM49  ;; tri attack
   1.120 +   250   :TM50  ;; substitute
   1.121 +   251   :TM51  ;; "cut"
   1.122 +   252   :TM52  ;; "fly"
   1.123 +   253   :TM53  ;; "surf"
   1.124 +   254   :TM54  ;; "strength"
   1.125     255   :end-of-list-sentinel))
   1.126  
   1.127  (def item-name->item-code
   1.128 @@ -174,24 +174,26 @@
   1.129        2
   1.130        (next (take-while (partial not= 255) items))))))
   1.131  
   1.132 -(defn print-inventory [^SaveState state]
   1.133 -  (println
   1.134 -   (let [inv (inventory state)]
   1.135 -     (reduce
   1.136 -      str
   1.137 -      (concat
   1.138 -       ["+-------------------+----------+\n"
   1.139 -        "|##| Item           | Quantity |\n"
   1.140 -        "+--+----------------+----------+\n"]
   1.141 +(defn print-inventory
   1.142 +  ([] (print-inventory @current-state))
   1.143 +  ([^SaveState state]
   1.144 +     (println
   1.145 +      (let [inv (inventory state)]
   1.146 +        (reduce
   1.147 +         str
   1.148 +         (concat
   1.149 +          ["+-------------------+----------+\n"
   1.150 +           "|##| Item           | Quantity |\n"
   1.151 +           "+--+----------------+----------+\n"]
   1.152  
   1.153 -       (map
   1.154 -        (fn [index [item-name quantity]]
   1.155 -         (str 
   1.156 -          (format "|%-2d| %-14s | %3d      |\n" index
   1.157 -                  (apply str (rest (str item-name)))
   1.158 -                  quantity)))
   1.159 -        (range 0 (count inv)) inv)
   1.160 -       ["+--+----------------+----------+\n"])))))
   1.161 +          (map
   1.162 +           (fn [index [item-name quantity]]
   1.163 +             (str 
   1.164 +              (format "|%-2d| %-14s | %3d      |\n" index
   1.165 +                      (apply str (rest (str item-name)))
   1.166 +                      quantity)))
   1.167 +           (range 0 (count inv)) inv)
   1.168 +          ["+--+----------------+----------+\n"]))))))
   1.169  
   1.170  (defn inventory-codes [inventory]
   1.171    (flatten
   1.172 @@ -212,4 +214,60 @@
   1.173                         (+ item-list-start (count inv))) inv))
   1.174      (write-memory! mem)
   1.175      (update-state)))
   1.176 +
   1.177 +(def gliched-tms
   1.178 +  [[:TM51 1]
   1.179 +   [:TM52 1]
   1.180 +   [:TM53 1]
   1.181 +   [:TM54 1]])
   1.182 +
   1.183 +(def good-items
   1.184 +  [[:bicycle 1]
   1.185 +   [:ultra-ball 15]
   1.186 +   [:pp-up 1]
   1.187 +   [:master-ball 5]
   1.188 +   [:rare-candy 99]
   1.189 +   [:full-restore 25]
   1.190 +   [:max-revive 8]
   1.191 +   [:max-repel 40]
   1.192 +   [:TM25 1]
   1.193 +   [:TM11 1]
   1.194 +   [:TM15 1]
   1.195 +   ])
   1.196    
   1.197 +(def some-badges
   1.198 +  [[:cascadebadge 1]
   1.199 +   [:thunderbadge 1]
   1.200 +   [:rainbowbadge 1]
   1.201 +   [:soulbadge 1]    
   1.202 +   ])
   1.203 +  
   1.204 +(defn run-item-program
   1.205 +  "This is my first assembly/item program!
   1.206 +   it just increments BC by one.
   1.207 +
   1.208 +   The code places a single 'great ball' at the beginning of the
   1.209 +   inventory, then directly sets the program counter to start
   1.210 +   executing at the position of the 'great ball' in memory.
   1.211 +
   1.212 +   Since a 'great ball' is represented in memory as 0x03, which
   1.213 +   corresponts to the opcode which increments BC by one, that is
   1.214 +   what happens.
   1.215 +
   1.216 +   Obviously, the game crashes more or less immediately after the
   1.217 +   program counter advances past the 'great ball' into the next items
   1.218 +   in the inventory."
   1.219 +  []
   1.220 +  (set-inventory (read-state 578544) [[:great-ball 1]])
   1.221 +  (print-inventory)
   1.222 +  (println "3 ticks") (tick) (tick) (tick)
   1.223 +  (println "PC before:" (PC))
   1.224 +  (println "BC before:" (BC))
   1.225 +  (PC! (inc item-list-start))
   1.226 +  (println "PC after setting:" (PC))
   1.227 +  (println "data at PC:" (aget (memory) (PC)))
   1.228 +  (println "one tick")
   1.229 +  (tick)
   1.230 +  (println "PC after one tick:" (PC))
   1.231 +  (println "BC after one tick:" (BC)))
   1.232 +		
   1.233 \ No newline at end of file