ocsenave@289: (ns com.aurellem.world.new-types ocsenave@292: (:use (com.aurellem.gb gb-driver util hxc characters util assembly)) ocsenave@292: (:use (com.aurellem.world practice)) ocsenave@292: (:import [com.aurellem.gb.gb_driver SaveState])) ocsenave@289: ocsenave@292: ocsenave@292: ;; GEN II type differences ocsenave@292: ;; bug against poison: 2x -> 1/2 ocsenave@292: ;; poison against bug: 2x -> 1x ocsenave@292: ;; !! our article is wrong. bug against ghost 1x -X-> 2x ocsenave@292: ;; ghost against psychic: 0x -> 2x ocsenave@292: ;; ice against fire: 1x -> 1/2 ocsenave@292: ocsenave@292: ;; steel against rock: 2x ocsenave@292: ;; steel against steel: 1/2 ocsenave@292: ;; steel against fire : 1/2 ocsenave@292: ;; steel against water: 1/2 ocsenave@292: ;; steel against electric: 1/2 ocsenave@292: ;; steel against ice: 2x ocsenave@292: ocsenave@292: ;; normal against steel: 1/2 ocsenave@292: ;; fighting against steel: 2x ocsenave@292: ;; flying against steel: 1/2 ocsenave@292: ;; poison against steel: 0 ocsenave@292: ;; ground against steel: 2 ocsenave@292: ;; rock against steel: 1/2 ocsenave@292: ;; bug against steel: 1/2 ocsenave@292: ;; ghost against steel: 1/2 ocsenave@292: ;; fire against steel: 2 ocsenave@292: ;; grass against steel: 1/2 ocsenave@292: ;; psychic against steel: 1/2 ocsenave@292: ;; ice against steel: 1/2 ocsenave@292: ;; dragon against steel: 1/2 ocsenave@292: ;; dark against steel: 1/2 ocsenave@292: ocsenave@292: ;; dark against fighting 1/2 ocsenave@292: ;; dark against ghost 2x ocsenave@292: ;; dark against steel 1/2 ocsenave@292: ;; dark against psychic 2x ocsenave@292: ;; dark against dark 1/2 ocsenave@292: ocsenave@292: ;; fighting against dark 1/2 ocsenave@292: ;; bug against dark 2x ocsenave@292: ;; ghost against dark 1/2 ocsenave@292: ;; psychic against dark 0 ocsenave@292: ocsenave@292: ocsenave@292: ;; #BIRD -> #DARK at 27DE8 ocsenave@292: ocsenave@292: (defn hack-encounter ocsenave@292: "(BROKEN) Change the wild encounter pokemon of the given area in the current state. Volatile --- ocsenave@292: only changes the current area, and then only as long as you remain in ocsenave@292: the area." ocsenave@292: ([pokemon] ocsenave@292: (hack-encounter pokemon 11)) ocsenave@292: ([pokemon level] ocsenave@292: (let [id ((zipmap (hxc-pokenames) (range)) pokemon)] ocsenave@292: (rewrite-memory (vec(memory)) ocsenave@292: 0xD888 ocsenave@292: (cons level ocsenave@292: (interleave ocsenave@292: (repeat 5 level) ocsenave@292: (repeat (inc id))) ocsenave@292: ))))) ocsenave@292: ocsenave@292: ocsenave@292: (defn hack-encounter* ocsenave@292: "Certainly Encounter a certain pokemon in the grass outside celadon. You must ocsenave@292: walk out of the wild and back to load the data into RAM." ocsenave@292: ([mem pkmn] (encounter mem pkmn 11)) ocsenave@292: ([mem pkmn lvl] ocsenave@292: (let [pkmn-id ((zipmap (hxc-pokenames) (range)) pkmn) ocsenave@292: pkmn-id (if (nil? pkmn-id) 76 (inc pkmn-id)) ocsenave@292: ] ocsenave@292: (rewrite-memory ocsenave@292: mem ocsenave@292: 0xCF6C ocsenave@292: (interleave (repeat lvl 10) (repeat pkmn-id)))))) ocsenave@292: ocsenave@292: ocsenave@292: (defn hack-gen-2-types ocsenave@292: [] ocsenave@292: (-> ocsenave@292: (vec (rom)) ocsenave@292: (rewrite-memory 0x3E6DD [20]) ;; ghost is 2x effective against psychic ocsenave@292: (rewrite-memory 0x3E6C5 [5]) ;; bug is half-effective against poison ocsenave@292: ocsenave@292: ;; ice is half-effective against fire. ocsenave@292: ;; since this overwrites "poison is 2x against bug", ocsenave@292: ;; poison is now, by default, 1x effective against bug. ocsenave@292: (rewrite-memory 0x3E681 [25 20 5]) ocsenave@292: ocsenave@292: ocsenave@292: (rewrite-memory 0x27DE9 ["DARK"]) ;; replace BIRD with DARK ocsenave@292: (rewrite-memory 0x38105 [6]) ;; BITE is a dark-type attack ocsenave@292: ocsenave@292: ;; the following commands write into risky unknown memory. ocsenave@292: ocsenave@292: (rewrite-memory 0x27DFF ocsenave@292: ["STEEL" 0x50]) ocsenave@292: ocsenave@292: (rewrite-memory 0x3E6f0 ocsenave@292: [6 1 5 ;; dark fighting 1/2 ocsenave@292: 6 24 20 ;; dark psychic 2 ocsenave@292: 6 8 20 ;; dark ghost 2 ocsenave@292: 6 6 5 ;; dark dark 1/2 ocsenave@292: ocsenave@292: 1 6 20 ;; fighting dark 2 ocsenave@292: 24 6 0 ;; psychic dark 0 ocsenave@292: 7 6 20 ;; bug dark 2 ocsenave@292: 8 6 5 ;; ghost dark 1/2 ocsenave@292: ocsenave@292: 0xff ocsenave@292: ]) ocsenave@292: ;;(rewrite-rom _ ocsenave@292: ;;(write-rom!) ocsenave@292: ocsenave@292: )) ocsenave@292: ocsenave@292: ocsenave@292: