rlm@247: (ns com.aurellem.run.bootstrap-0 rlm@247: (:use (com.aurellem.gb gb-driver vbm)) rlm@250: (:use (com.aurellem.run title save-corruption)) rlm@250: (:use (com.aurellem.exp item-bridge))) rlm@247: rlm@247: rlm@250: (defn-memo boot-root [] rlm@255: [ [] (root)]) rlm@247: rlm@255: (defn-memo to-rival-name rlm@255: ([] (to-rival-name (boot-root))) rlm@255: ([script] rlm@255: (-> script rlm@255: title rlm@255: oak rlm@255: name-entry-rlm rlm@255: scroll-text rlm@255: scroll-text rlm@255: scroll-text rlm@255: scroll-text rlm@255: scroll-text rlm@255: ))) rlm@247: rlm@255: (defn-memo name-rival-bootstrap rlm@255: ([] (name-rival-bootstrap (to-rival-name))) rlm@255: ([script] rlm@255: (->> script rlm@255: (advance [] [:a]) rlm@255: (advance [] [:r] DE) rlm@255: (play-moves rlm@255: [[] rlm@255: [:r] [] [:r] [] [:r] [] [:r] [] rlm@255: [:r] [] [:r] [] [:r] [] [:d] [] rlm@255: [:d] [:a] ;; space rlm@255: [:l] [] [:d] [:a] ;; [PK] rlm@255: [:u] [] [:u] [] [:u] [] [:l] [:a] ;; G rlm@255: [:d] [] [:d] [] [:d] [] [:r] [:a] ;; [PK] rlm@255: [:u] [] [:u] [] [:u] [] [:l] [:a] ;; G rlm@255: [:d] [] [:d] [] [:d] [] [:r] [:a] ;; [PK] rlm@247: rlm@255: [:d] [] [:r] [:a] ;; finish rlm@255: ])))) rlm@255: rlm@255: (defn walk rlm@255: "Move the character along the given directions." rlm@255: [directions script] rlm@255: (reduce (fn [script direction] rlm@255: (move direction script)) rlm@255: script directions)) rlm@255: rlm@255: (def ↑ [:u]) rlm@255: (def ↓ [:d]) rlm@255: (def ← [:l]) rlm@255: (def → [:r]) rlm@255: rlm@255: (defn-memo leave-house rlm@255: ([] (leave-house (name-rival-bootstrap))) rlm@255: ([script] rlm@255: (->> script rlm@255: finish-title rlm@255: start-walking rlm@255: walk-to-stairs rlm@255: walk-to-door rlm@255: (walk [↓ ↓])))) rlm@255: rlm@255: (defn-memo to-pallet-town-edge rlm@255: ([] (to-pallet-town-edge (leave-house))) rlm@255: ([script] rlm@255: (->> script rlm@255: start-walking rlm@255: (walk [→ → → → → rlm@255: ↑ ↑ ↑ ↑ ↑ ↑])))) rlm@255: rlm@257: (defn end-text [script] rlm@257: (->> script rlm@257: (scroll-text) rlm@257: (play-moves [[] [:a]]))) rlm@257: rlm@257: (defn-memo start-pikachu-battle rlm@257: ([] (start-pikachu-battle rlm@257: (to-pallet-town-edge))) rlm@257: ([script] rlm@257: (->> script rlm@257: (advance [:b] [:b :a] DE) rlm@257: (scroll-text) rlm@257: (play-moves [[:b]]) rlm@257: (scroll-text) rlm@257: (end-text) ;; battle begins rlm@257: (scroll-text)))) rlm@257: rlm@257: (defn-memo capture-pikachu rlm@257: ([] (capture-pikachu (start-pikachu-battle))) rlm@257: ([script] rlm@257: (->> script rlm@257: (scroll-text 2) rlm@257: (end-text)))) rlm@257: rlm@257: (defn-memo go-to-lab rlm@257: ([] (go-to-lab (capture-pikachu))) rlm@257: ([script] rlm@257: (->> script rlm@257: (scroll-text 5) rlm@257: (end-text) rlm@257: (scroll-text) rlm@257: (end-text) rlm@257: (scroll-text 8) rlm@257: (end-text) rlm@257: (scroll-text) rlm@257: (end-text)))) rlm@257: rlm@257: (defn-memo obtain-pikachu rlm@257: ([] (obtain-pikachu (go-to-lab))) rlm@257: ([script] rlm@257: (->> script rlm@257: (scroll-text) rlm@257: (play-moves rlm@257: (concat rlm@257: (repeat 51 []) rlm@257: [[:a] []])) rlm@257: (walk [↓ ↓ → → ↑]) rlm@257: (play-moves [[:a]])))) rlm@257: rlm@257: rlm@257: rlm@257: