# HG changeset patch # User Robert McIntyre # Date 1333985722 18000 # Node ID 79252378fd2286e87f72c6ea036b5d613652ec62 # Parent 8d8023057b3c07509d67d867931fe2fd646a4980 saving progress...] diff -r 8d8023057b3c -r 79252378fd22 clojure/com/aurellem/gb/items.clj --- a/clojure/com/aurellem/gb/items.clj Mon Apr 09 09:25:33 2012 -0500 +++ b/clojure/com/aurellem/gb/items.clj Mon Apr 09 10:35:22 2012 -0500 @@ -179,7 +179,7 @@ 0xFC :TM52 ;; "fly" 0xFD :TM53 ;; "surf" 0xFE :TM54 ;; "strength" - 0xFF :end-of-list-sentinel ;; also "flash" + 0xFF :TM55 ;; "flash" (also end-of-list-sentinel) )) (def item-name->item-code @@ -198,10 +198,15 @@ 2 raw-inventory))) -(defn inventory [^SaveState state] - (let [items (item-list state)] - (raw-inventory->inventory - (next (take-while (partial not= 255) items))))) +(defn total-held-items [state] + (aget (memory state) item-list-start)) + +(defn inventory + ([^SaveState state] + (let [items (item-list state)] + (raw-inventory->inventory + (take (* 2 (total-held-items state)) (next items))))) + ([] (inventory @current-state))) (defn print-inventory ([] (print-inventory @current-state)) @@ -231,7 +236,7 @@ (map (fn [[item-name quantity]] [(item-name->item-code item-name item-name) quantity]) inventory) - [(item-name->item-code :end-of-list-sentinel)]))) + [(item-name->item-code :TM55)]))) (defn set-inv-mem [^SaveState state inv-codes] (set-memory-range state item-list-start diff -r 8d8023057b3c -r 79252378fd22 clojure/com/aurellem/run/bootstrap_1.clj --- a/clojure/com/aurellem/run/bootstrap_1.clj Mon Apr 09 09:25:33 2012 -0500 +++ b/clojure/com/aurellem/run/bootstrap_1.clj Mon Apr 09 10:35:22 2012 -0500 @@ -550,7 +550,7 @@ (scroll-text 6) close-menu))) -(defn to-celadon-poke-center +(defn-memo to-celadon-poke-center ([] (to-celadon-poke-center (get-TM13))) ([script] (->> script @@ -568,3 +568,80 @@ (walk [↑ ↑ ↑ ↑]) ; enter poke center (walk [↑ ↑ ↑ → → → → → → → → → →]) ; to computer (turn ↑)))) + +(defn activate-rlm-pc [script] + (->> script + talk + scroll-text + wait-for-cursor + (set-cursor 1) + select-menu-entry + (scroll-text 2))) + +(defn begin-deposit [script] + (->> script + (set-cursor 1) + select-menu-entry)) + +(defn begin-withdraw [script] + (->> script + (set-cursor 0) + (select-menu-entry))) + +(defn deposit-held-item-named + [item-name quantity [moves state :as script]] + (let [index (count + (take-while + (fn [[name quant]] + (or (not= name item-name) + (< quant quantity))) + (inventory state)))] + (println "index" index) + (deposit-held-item index quantity script))) + + +(defn-memo begin-hacking + ([] (begin-hacking(to-celadon-poke-center))) + ([script] + (->> script + activate-rlm-pc + begin-deposit + (deposit-held-item-named 0x00 30) + (deposit-held-item-named :TM01 63) + (deposit-held-item-named :awakening 4) + (deposit-held-item-named :thunderstone 98) + (deposit-held-item-named :TM09 55) + (deposit-held-item-named 0x00 55)))) + +(defn open-held-items + [script] + (->> script + select-menu-entry)) + +(defn-memo hacking-2 + ([] (hacking-2 (begin-hacking))) + ([script] + (->> script + close-menu + close-menu + end-text;;; grr + + activate-start-menu + open-held-items + (toss-held-item 0 166) ;; discard cruft + close-menu + close-menu))) + +(defn-memo hacking-3 + ([] (hacking-3 (hacking-2))) + ([script] + (->> script + activate-rlm-pc + begin-withdraw + (widthdraw-pc-item 0 99) + (widthdraw-pc-item 0 1) + (widthdraw-pc-item 2 0xFE) + (widthdraw-pc-item 3 0xFE)))) + + + \ No newline at end of file