rlm@530: (ns com.aurellem.run.final-cut rlm@530: (:use (com.aurellem.gb saves gb-driver util constants rlm@530: items vbm characters money rlm@530: rlm-assembly)) rlm@530: (:use (com.aurellem.run util sound music title save-corruption rlm@530: bootstrap-0 bootstrap-1 rlm@530: ram-display rlm@530: )) rlm@530: (:require clojure.string) rlm@530: (:import [com.aurellem.gb.gb_driver SaveState]) rlm@530: (:import java.awt.image.BufferedImage) rlm@530: (:import java.io.File) rlm@530: (:import com.aurellem.gb.WaveWriter)) rlm@530: rlm@530: rlm@530: (def render-dir (File. user-home "proj/vba-clojure/render")) rlm@530: rlm@530: (defn render-files! rlm@530: ([^File target-dir initial-state moves] rlm@530: (let [ram-map-dir (File. target-dir "ram-map") rlm@530: frames-dir (File. target-dir "frames") rlm@530: audio-file (File. target-dir "audio.wav") rlm@530: _ (.mkdirs ram-map-dir) rlm@530: _ (.mkdirs frames-dir) rlm@530: wave-writer (WaveWriter. audio-file) rlm@530: moves (vec moves)] rlm@530: (set-state! initial-state) rlm@530: (dorun rlm@530: (map rlm@530: (fn [index] rlm@530: (run-moves @current-state (vector (moves index))) rlm@530: rlm@530: ;; record audio rlm@530: (.process wave-writer (sound-bytes) rlm@530: gb-sound-format) rlm@530: rlm@530: ;; write screenshot rlm@530: (write-png! rlm@530: @current-state rlm@530: (File. frames-dir (format "%07d.png" index))) rlm@530: rlm@530: ;; write ram-image rlm@530: (write-ram-image! rlm@530: @current-state rlm@530: (File. ram-map-dir (format "%07d.png" index)))) rlm@530: (range (count moves)))) rlm@530: (.cleanup wave-writer))) rlm@530: ([initial-state moves] rlm@530: (render-files! render-dir initial-state moves)) rlm@530: ([moves] rlm@530: (render-files! (root) moves))) rlm@530: rlm@530: