# HG changeset patch # User Dylan Holmes # Date 1333194425 18000 # Node ID e6a5dfd31230e1a5fbfa0bd0f59e3fac0e5f3bf6 # Parent de172acc5a03fc558802d5929b77a7e058c78308 made progress on music; fixed several music pointers I grabbed from the internet. diff -r de172acc5a03 -r e6a5dfd31230 clojure/com/aurellem/music/midi_util.clj --- a/clojure/com/aurellem/music/midi_util.clj Sat Mar 31 04:25:49 2012 -0500 +++ b/clojure/com/aurellem/music/midi_util.clj Sat Mar 31 06:47:05 2012 -0500 @@ -10,10 +10,10 @@ (com.sun.media.sound FastShortMessage) (java.io File)) - (:use (com.aurellem.gb saves util constants gb-driver vbm items assembly characters)) + (:use (com.aurellem.gb saves util mem-util constants gb-driver vbm items assembly characters)) (:use (com.aurellem.run title)) (:use (com.aurellem.exp pokemon item-bridge)) - (:use (com.aurellem.world practice)) +;; (:use (com.aurellem.world practice)) (:import [com.aurellem.gb.gb_driver SaveState])) @@ -187,14 +187,26 @@ :meet-prof 0x8291 :meet-blue 0x829A :follow 0x82A3 - :safari 0x82AF - :sfx-heal 0x82BA + :evolution 0x82AF + :sfx-heal 0x82B8 :route-1 0x82C1 ;; route 1,2 :route-2 0x82CD ;; route 24, 25 :route-3 0x82D9 ;; route 3-10,16-22 :route-4 0x82E5 ;; route 11-15 :route-5 0x82F1 ;; indigo plateau + ;;:1 0xc977 ;; fourteen "tracks" X + :1 0x801cb ;; slot machine music + :2 0x801d4 + :3 0x801dd + + :4 0x202be ;; uber slow battle songs? + :5 0x202c7 ;; can't play with pallet or bike (wrong base) + :6 0x202d9 + :7 0x202e2 + :8 0x202eb + :9 0x202f4 + :title 0x7C249 :credits 0x7C255 :hall-of-fame 0x7C25E @@ -203,16 +215,16 @@ :bike 0x7C276 :surfing 0x7C282 :casino 0x7C28B - :intro-battle 0x7C294 - :power-plant 0x7C2A0 ;; power plant, unknown dungeon - :viridian-forest 0x7C2AC ;;viridian forest, seafoam islands - :victory-rd 0x7C2B8 ;;mt moon, rock tunnel, victory rd - :mansion 0x7C2C4 - :pkmn-tower 0x7C2D0 - :silph 0x7C2D9 - :trainer-bad 0x7C2E2 - :trainer-girl 0x7C2EB - :trainer-angry 0x7C2F4 + :intro 0x7C294 + :power-plant 0x7C29D ;; power plant, unknown dungeon + :viridian-forest 0x7C2A9 ;;viridian forest, seafoam islands + :victory-rd 0x7C2B5 ;;mt moon, rock tunnel, victory rd + :mansion 0x7C2C1 + :pkmn-tower 0x7C2CD + :silph 0x7C2D6 + :trainer-bad 0x7C2DF + :trainer-girl 0x7C2E8 + :trainer-angry 0x7C2F1 }) @@ -252,7 +264,74 @@ +(defn find-music [] + (let [extract-song + (fn [mem] + (if (and + (> (count mem) 6) + (zero? (rem (first mem) 16)) + (not(zero? (first mem))) + (= (nth mem 3) 1) + (= (nth mem 6) 2)) + (take 12 mem)))] + (loop [mem (rom) + results [] + ptr 0] + (cond (empty? mem) + results + (nil? (extract-song mem)) + (recur (rest mem) + results + (inc ptr)) + :else + (recur (rest mem) + (conj results + [(hex ptr) (extract-song mem)]) + (inc ptr)))))) + +(defn music-header + "Given a valid address to a music header, returns the music header." + [address] + (let [ + rom (rom) + data (drop address rom) + ] + (-> + (loop [n 1 k 3] + (if (= n (nth data k)) + (recur (inc n) (+ k 3)) + k)) + (take data)))) + +(defn pallet-song [song-name] + (write-rom! + (rewrite-memory + (vec(rom)) + 0x822e + (music-header (songs song-name))))) + +(defn bike-song [song-name] + (write-rom! + (rewrite-memory + (vec(rom)) + 0x7c276 + (music-header (songs song-name))))) + +(defn bike-song* [address] + (write-rom! + (rewrite-memory + (vec(rom)) + 0x7c276 + (music-header address)))) + + +(defn pallet-song* [address] + (write-rom! + (rewrite-memory + (vec(rom)) + 0x822e + (music-header address)))) ;; (defn note? ;; "Does the given byte correspond to a note?" ;; [n])